Small products usually fail from friction, not ambition. So I like a stack that keeps the moving parts obvious.
The stack
| Layer | Choice | Why |
|---|---|---|
| UI | Next.js | Good routing and server rendering defaults |
| Hosting | Vercel | Clean deploys and previews |
| Data | Supabase | Enough structure without overbuilding |
| Styling | Tailwind CSS | Fast iteration, low ceremony |
The practical bit
The key is not the stack itself. It is keeping the release path boring:
- One source of truth for environment variables
- One deploy target
- One place for schema changes
- One visible check before launch
What I like to keep small
pnpm lint pnpm build pnpm dev
That is enough for most small products. Anything more should earn its place.