#🎯practice The [[tech stack]] we usually pick for new projects, unless specific requirements or other nuances suggest different choices. ## Web Front-end [React](https://react.dev/) has historically been our default choice, with "obvious" companion tools, such as [Redux Toolkit](https://redux-toolkit.js.org/) and [Tailwind](https://tailwindcss.com/). More recently, [Next.js](https://nextjs.org/) has become the default for most B2C applications. We also used [Preact](https://preactjs.com/) as an [[Preact vs React|alternative to React]] for complex systems, where a more permissive license and better performance were of relevance. ## Web Back-end We usually choose between [Node.js](https://nodejs.org/en) and [Python](https://www.python.org/)-based back-end stacks. Node.js (along with [Express](https://expressjs.com/), [TypeORM](https://typeorm.io/), [Joi](https://joi.dev/), and [Jest](https://jestjs.io/)) has become our default choice for web applications in the recent years. Python frameworks like [Django](https://www.djangoproject.com/) and [FastAPI](https://fastapi.tiangolo.com/) have historically served us well over countless projects the years. Having some [[Node.js vs Python|rationale behind picking one or the other]], we consider either to be a good choice for most of the regular web-related tasks. ## Typescript With React and Node.js, [TypeScript](https://www.typescriptlang.org/) is our default choice over pure JavaScript. [[TypeScript vs JavaScript|We've avoided multitude of problems]] by simply switching to this statically-checked transpiled language. ## Databases [Postgres](https://www.postgresql.org/) is our choice in most common cases, assuming no specific requirements. Nevertheless, different tasks might require different tools. In the scenarios where specialized tools are required, we pick the solution in response to the product requirements. ## Infrastructure Rather than a particular set of technologies, we prefer a [[sequential DevOps|sequential approach to DevOps]]. In most cases this translates in choosing between [Heroku](https://www.heroku.com/) or [Vercel](https://vercel.com/) for simpler projects, and various [AWS](https://aws.amazon.com/) solutions for the projects that require more complex infrastructure. We always adopt a [Docker](https://www.docker.com/)-first approach for the following benefits: - support the ability to switch between different infrastructure solutions - simplified [[continuous integration]] - a consistent [[developer experience]] - enhanced [[onboarding]] speed. --- <font style="color: #F86759">Contributors:</font> *[[Anton]], [[Mykhailo]], [[Eugene]]* <font style="color: #F86759">Last edited:</font> *2024-04-16*