As the year comes to an end, I decided to list the tech stack I’ve been using to build my projects. This list covers everything from frontend to backend, databases, and cloud infrastructure.
While AI tools are great for boosting productivity, this post focuses on the foundational tech stack every developer can use to build and deploy a production-ready app from scratch. This tech stack is minimal yet extremely powerful, helping you and your team go from idea to MVP in just a few days while keeping costs low.
1. Node.js + Express.js - (Vratix)
A solid backend API is the foundation of a good project. Build a robust backend service early on, and you and your users will be happy for a long time.
However, setting up a new Node.js API can be daunting, especially when wrong decisions early on lead to massive technical debt. Setting up authentication and remembering how to handle JWTs and refresh tokens properly from your last project two years ago can also slow you down and introduce security vulnerabilities.
I use Vratix and their open-source modules to avoid all of that. The tool comes with a CLI that sets up a TypeScript Node.js project, follows the latest best practices, and lets you install their API modules super easily. I don't have to read Node.js setup guides anymore!
The tool is open-source and free to use.
Project link: Vratix
2. Next.js - (shadcn/ui)
React has been my favorite for years when it comes to building beautiful web apps. I have recently started using Next.js, an open-source web development framework for building React-based web applications. It comes with many optimizations, such as Server Side Rendering (SSR), dynamic and static props, image optimization using next/image, and much more (especially when deployed on Vercel—more on this below).
Creating buttons, inputs, containers, and other basic UI components is time-consuming, and they are often the same across various projects. That’s why I use a component library called shadcn/ui, which offers a wide range of beautiful UI components you can integrate into most modern frontend frameworks.
Next.js and shadcn/ui are open-source and free to use. I highly recommend using them together to get a working web app in a few days and avoid setting up boring UI components.
Project links: shadcn/ui, Next.js
3. Database + Storage - (Supabase)
Next, we need to take care of storing user data and any files our app might use. To do this, I use Supabase, an open-source Firebase alternative based on PostgreSQL. You can have a fully working PostgreSQL database in minutes with just a few clicks. Supabase allows you to query using their Data API or connect directly to the database using a connection pool package like pg
(if you use Vratix, this is already set up - you just need to add the correct connection string).
The coolest thing about Supabase is the ecosystem it provides for seamless integration with all of its other services. Because all of their tools are connected to your PostgreSQL database, you can get S3 bucket storage with Row Level Access with minimal setup. If you’ve ever tried to secure an S3 bucket and get AWS permissions right on the first try, you know the pain.
Supabase is open-source, but it also offers a managed solution with a great free tier.
Project link: Supabase
4. Deployments - (Vercel & AWS)
For deployments, I use Vercel for the frontend and AWS for the backend.
- Vercel: Perfect for Next.js apps, with automatic deployments, global edge network, and free HTTPS. It offers loads of optimisations for your Next.js apps, caching, performance analytics. You can deploy a working web app in minutes without setting up SSL, static files, hosting etc.
- AWS: For the backend, AWS offers great flexibility. I usually deploy my services as Docker containers on EC2, for more complex backend services I use Kubernetes (AWS EKS).
This combination gives you a fast frontend and a scalable backend without costing a lot.
5. Serverless Functions - (AWS Lambda)
This one is a bonus, as I know some of you might want to set up serverless functions to handle specific logic, e.g., webhook handlers or processing files and data.
I’ve looked at all the available options, including Vercel’s and Supabase’s Edge Functions. However, unless you need your functions to execute super close to your users, AWS Lambda will work just fine. AWS has significantly improved the developer experience for setting up new Lambda functions over the past few months.
Compared to the rest, AWS Lambda offers a very generous lifetime free tier.
Project link: AWS Lambda
Let me know if you’re planning to use any of these for your projects in the new year. I’ll keep looking for the best web dev tools out there and update this list as I find more. What challenges have you faced when using any of these?
Follow me on X for more of my daily thoughts on tech 😄
Top comments (16)
My experience with NextJS has been terrible. I had only worked with React through React Router in the past. I recently started a project at work which uses NextJS and I have to say some stuff has been painful.
But some things are great.
The problem is, these benefits exist in all other similar frameworks e.g SvelteKit. But the problem is the downsides are listed are very specific to Next. I'm sure there are more.
Super detailed, thanks for sharing your experience. I haven't experienced the same issues as you yet, but have you tried reaching out to someone at Next.js/Vercel? They are usually quite responsive, especially on Twitter and the Vercel community.
Might be worth a shot. But yeah I agree that other frameworks offer similar benefits, I haven't tried them out yet. Maybe I will use the Christmas period to check them out!
Here’s an interesting issue I ran into with route protection in Next.js,
If you use middleware to guard a route, users can still sneak back to the protected page using browser navigation.
On the other hand, relying solely on client-side protection can lead to some weird hydration issues.
I combined both middleware and client-side protection.
Not sure if it’s the perfect approach, but hey—it worked for me!
Nice, interesting approach tbh, I think it makes a lot of sense to protect from certain edge cases. Interested to see how others are dealing with route protection
How you deal with it?
What’re the best coding practices to implement it?
I've been using middleware mainly. And also I always protect any backend endpoints by checking if the user has a valid JWT access token.
What do you mean by
Thank you
Thank you
To be fair a lot of these "issues" are because rendering React to static pages introduces some new things that the developer should consider. I've definitely had issues with hydration when using vite and SSR.
I really wish that Nextjs would switch to vite though... Like you said, the dev server is really slow... Next build is pretty slow too actually.
Hi @ivanivanovv , how's your day? I've just try vratix now but I've encountered some error when installing it can you please help me out. Thanks
Hey @yugeroh, we just released v1.0.8 of the CLI that fixes the Windows bugs. Let me know if it works for you and what you think of Vratix after you try it out :)
Nice! It works fine now. Thanks @ivanivanovv for letting me know. Awesome project BTW
Thats great to hear! Looking forward to the projects you start with Vratix. btw we have a Discord community, you can join it to discuss anything backend related!
Hey Oliver! Thanks for reporting it, I resolved this issue yesterday. Will publish a fix today! Sorry for that, will let you know once live :)
Thoughts on Firebase? It’s used where I work currently.
I've used it before, but if I go for a NoSQL database it will be MongoDB. I find all Google services a bit weird to setup and configure. Haven't used Firebase in ages so that might have changed.
PostgreSQL is just a solid choice for anything production-level.