My current stack for shipping fast
Next.js, Supabase, Vercel, and a few sharp tools. That's really all I need.
The stack I run everything on now is pretty boring, and that's the point.
Next.js for web - App Router, server components where it makes sense, client components only when interactivity demands it. Vercel for deploy. Supabase for database and auth when I need a backend with less ceremony. That's 90% of what I ship.
Why boring is right
I've built on interesting stacks. At scale, interesting stacks have interesting failure modes. They need interesting engineers to maintain them, who cost interesting amounts to hire. For solo work, the cost of interesting is too high.
The value of a boring stack is that I'm never fighting the stack. Every hour I spend debugging Webpack or untangling an ORM quirk is an hour I'm not solving the product problem. Boring tools have solved their obvious problems already.
The actual sharp tools
A few things I'm particular about:
TypeScript strict mode. Not optional. The cost of fixing type errors is always less than the cost of debugging the runtime behavior they prevent.
Tailwind with a real design system. Not utility soup - CSS custom properties for all tokens, then Tailwind for layout and responsive behavior. Clean, fast, no stylesheet bloat.
Cursor / Claude Code for the AI layer. Not to generate code I don't understand, but to accelerate the parts I already know how to do.
What I'd add
When the product needs real-time or background jobs, Vercel Queues fits naturally into this setup. Haven't needed it yet, but it's the obvious next piece.