Every year I see those “ultimate tech stack” posts and they always feel like someone listing every shiny tool they read about on Twitter. So instead of doing that, I want to share what I actually use when I start a new project. Not what I think is cool. What I reach for every time because it works and I trust it.

This isn’t going to be the right stack for everyone. But it’s what works for me as someone who mostly builds web apps and occasionally mobile apps on the side.


Frontend: React with Next.js

I’ve tried a lot of frontend frameworks. Vue, Svelte, even went back to plain HTML for a while. But I always come back to React. Not because it’s the best, but because I know it inside out and I can build things fast with it.

Next.js specifically because it handles routing, SSR, and API routes out of the box. I don’t want to set up a separate backend for most projects. Next.js lets me keep everything in one place.

For styling I use Tailwind CSS. I resisted it for a long time because I thought writing classes in HTML was ugly. But once I actually tried it on a real project, I couldn’t go back. It’s fast, consistent, and I don’t have to think about naming CSS classes anymore.


Backend: Node.js with Express or Next.js API routes

For small to medium projects, Next.js API routes are enough. I don’t need a separate server for most things.

When the backend gets more complex or I need WebSockets, background jobs, or more control, I set up a separate Node.js server with Express. Nothing fancy. Express is boring and that’s exactly why I like it. It does what I need, there’s a package for everything, and I never have to fight the framework.


Language: TypeScript everywhere

I write TypeScript for everything now. Frontend, backend, scripts, doesn’t matter. The type safety catches so many bugs before they happen. And the autocomplete in VS Code makes me significantly faster.

I know some people think TypeScript adds unnecessary complexity. For small scripts, maybe. But for anything I plan to maintain for more than a week, TypeScript saves me time in the long run. Debugging type errors at compile time is way better than debugging weird runtime bugs at 2am.


Database: PostgreSQL

I used MongoDB for years and it’s fine for certain things. But for most projects I’ve switched to PostgreSQL. Relations, constraints, and proper schemas just make more sense for the stuff I build.

I use Prisma as an ORM. It gives me type-safe queries, easy migrations, and I don’t have to write raw SQL for basic operations. When I need raw SQL for something complex, Prisma still lets me do that.


Mobile: Flutter

When I need to build a mobile app, Flutter is my go-to. I built GymDose with it and the experience was solid. One codebase for iOS and Android, fast hot reload, and Dart is honestly a nice language to work with once you get used to it.

I looked at React Native too but Flutter felt more consistent to me. The widget system makes sense and I don’t have to deal with native bridge issues as much.


Hosting: Vercel and Railway

Vercel for frontend and Next.js apps. It just works. Push to GitHub and it deploys. I don’t want to think about infrastructure for side projects.

For backend services or databases I use Railway. It’s simple, cheap for small projects, and I can get a PostgreSQL database running in a couple of minutes.

For anything bigger or more custom I’d go with a VPS, but for most of my projects Vercel and Railway are more than enough.


Other tools I use daily

  • VS Code for everything. I tried other editors but I always come back.
  • Git and GitHub. Nothing else to say here.
  • Figma when I need to design something before building it. I’m not a designer but having a rough layout helps.
  • Postman for testing APIs. I know there are alternatives but I’m used to it.
  • ChatGPT / Claude for when I’m stuck on something or need to quickly understand a library I haven’t used before.

What I stopped using

Just as important as what I use is what I dropped:

  • Webpack - switched to Vite. Faster, simpler config.
  • Redux - React’s built-in state and Zustand cover everything I need.
  • Styled Components - Tailwind replaced this completely for me.
  • MongoDB - still use it occasionally but PostgreSQL is my default now.
  • Heroku - pricing got weird. Railway does the same thing for less.

The boring stack is the best stack

I know this list isn’t exciting. There’s no cutting edge framework or experimental database. But that’s the point. I want to spend my time building features, not fighting my tools.

Every time I tried to use something new and trendy for a real project, I ended up wasting time on docs, workarounds, and bugs that nobody else had hit yet because the tool was too new.

Pick tools you know well, ship your projects, and try new stuff in your free time. That’s what works for me.