The Indie PM Stack 2026: Next.js + Supabase + Vercel + Sanity
I've built four products in six months. I used the same stack every time. That's not lazy — that's leverage.
The short version
For an indie PM building with AI agents, 'best stack per project' is a trap. Every new stack costs a week of ramp-up and a permanent tax on your agent's context. I ship on Next.js + Supabase + Vercel + shadcn — adding Dexie, Sanity, or similar only when a specific product needs them. Re-evaluate annually, not per-project. Velocity from a stable stack outweighs marginal fit every time.
I’ve built four products in six months. I used the same stack every time. That’s not lazy — that’s leverage.
For an indie PM building with AI agents, “best stack per project” is a trap. Every new stack costs a week of ramp-up and a permanent tax on your agent’s context. Stack reuse isn’t comfort — it’s a moat. Muscle memory compounds. Agent familiarity compounds. Zero switching cost between projects means week-one productivity on project four.
The stack
Next.js 16 (App Router) — framework. SSR, client interactivity, API routes, middleware, all in one codebase. AI agents have strong priors for App Router patterns; code they generate tends to compile and run without the “where does this file go” round-trips.
Supabase — Postgres + auth + RLS + realtime + storage. Free tier covers V1 launch comfortably. Row-level security means multi-tenant data isolation without custom middleware layers. Postgres means I get SQL, foreign keys, and migrations that behave like migrations should.
Vercel — deploy, preview envs, Fluid Compute, built-in analytics. git push = deploy. Preview URLs per PR. Env vars managed via vercel env pull so local matches prod. Zero DevOps overhead.
shadcn/ui + Tailwind — component system. Components are owned (copied into the repo, not a dependency), Tailwind tokens handle theming. If a design system call needs to change, I change it in one place and it propagates. No version pin hell.
Project-specific extensions:
- Stoka: + Dexie.js for IndexedDB offline support (fridge app users in GCC, spotty connectivity)
- Amal Najib: + Sanity Studio for non-technical content authors (the B2B product needs partners authoring halal cert guidance content without touching the repo)
- House of Riddle: nothing added — base stack was enough
Why this works
Zero switching cost. A new project starts at hour zero, not week one. The scaffold is already ready: create-next-app, paste Supabase env vars, pull shadcn components I’ve used before, vercel link. Within a day I have auth, a database, and deploy. Planning time goes into product, not infrastructure.
AI agent leverage. Every skill file, every snippet, every debugging session I had on Stoka informs how my agents behave on Amal Najib. Context carries from project 1 to 4. When I ask “add email auth to this,” the agent has seen three prior projects do the same thing with the same stack and writes the RLS policy correctly on the first try. With a novel stack, I’d spend an hour correcting the agent’s half-remembered patterns.
Integration is solved. Supabase auth → Next.js middleware is a known pattern. Next.js → Vercel deploy is automatic. Vercel → Supabase env vars works via the Vercel Supabase integration. Time spent on “how does X talk to Y” is zero.
Ecosystem maturity. Supabase has RLS, Edge Functions, storage, vector, realtime. Vercel has ISR, Fluid Compute, image optimization, edge middleware. I grow into features as I need them instead of migrating. Stoka started with basic CRUD — when it needed offline, I added Dexie, not a new backend. Amal Najib needed a CMS — I added Sanity alongside Supabase, not instead of.
The trade-offs (honest section)
Lock-in. Vercel + Supabase ecosystem lock-in is real. If Vercel pricing changes drastically or Supabase deprecates something core, migration is non-trivial. I accept this. For indie PM velocity, the productivity delta pays for the lock-in risk, and both companies have migration paths (Vercel → any Node host, Supabase → self-hosted Postgres) if things go sideways.
Not optimal for every case. ML-heavy workloads want a Python runtime, which is possible on Vercel but not native-feeling — you’re fighting the framework. Edge-persistence patterns like SQLite + Litestream beat Postgres for certain small-scale workloads. Heavy transactional workloads (think marketplace with 10K writes/sec) hit Postgres connection pool pain before you’re ready to deal with it.
“Best tool for the job” counter-argument. The argument assumes you are a constant. You’re not. For an indie PM, the variable is you + your tools + your AI agents. Minimizing context switches across all three beats the marginal fit of any one tool. A 10% better database that costs me three days of ramp-up is a net loss when I ship four products in six months.
When to break the stack
Rules get ignored; criteria get applied. Here are the criteria I use:
ML inference-heavy. If the product needs a real GPU (image diffusion, large embedding models running locally, fine-tuned LLMs), Next.js API routes won’t cut it. Move inference to Modal or RunPod. Keep Next.js as frontend + orchestration. Hybrid stack, not full replacement.
Real-time collaborative editing. Supabase Realtime handles presence and pub/sub well. It does not handle CRDT merge for multi-user document editing. If the product is Figma-shaped, reach for y-sweet or Liveblocks. Keep the rest of the stack; swap only the realtime collab layer.
Cost optimization at scale. Past Supabase’s $599/month tier, the math starts favoring self-hosted Postgres (Neon, Crunchy, or self-managed) for the core data layer and keeping Supabase for auth only. Below that tier, the time you’d spend migrating costs more than the hosted price.
Regulated data residency. HIPAA or strict GDPR residency may rule out Vercel/Supabase managed plans. Different question than “best stack” — it’s “what’s allowed.”
Not on the list: “the team prefers another framework” or “I read a blog post about Remix.” Preference is not a reason. Neither is novelty.
My evolution
In 2024 I chased the hype cycle. Remix because the routing was elegant. Planetscale because sharding. Fly.io because edge-deployment mystique. Every project started at zero on infrastructure knowledge. Shipping velocity was terrible. I’d finish one product in four months and feel like I’d learned a lot about tooling — a bad feeling when the product itself didn’t land.
Mid-2025 I switched to a repeat stack: the four pieces above. Velocity roughly tripled. Four products in six months, including one with an external regulatory deadline (Amal Najib, October 2026), one PWA with offline (Stoka), and one live community app with UGC + leaderboard + achievements (House of Riddle). None of them would have shipped at that pace on a novel stack per project.
The products differ. Stoka is a PWA fridge tracker for GCC users. Amal Najib is B2B halal cert readiness. House of Riddle is a community riddle game. Three completely different products. Same four tools underneath. The agents got sharper. My mental model got deeper. Each product benefited from what came before.
Lesson
Indie stack 2026 = moat if you live inside it, not “best stack.” Muscle memory compounds; novelty taxes you.
Pick four tools. Commit twelve months. Ship four products. Re-evaluate annually, not per-project. Velocity from a stable stack outweighs marginal fit of a perfect-match alternative, every time.
Key Takeaways
- Your stack is a moat when you commit, a tax when you shop. Every new tool charges a ramp-up fee to you and a context tax to your agents. The 10% better option that costs 3 days of ramp-up is a net loss over a year of shipping.
- Add, don’t replace, when a product has special needs. Stoka bolted on Dexie for offline; Amal Najib bolted on Sanity for non-technical editors; House of Riddle needed nothing extra. The base stack stayed stable across all three.
- Re-evaluate annually, not per-project. The criteria for breaking the stack are specific (GPU inference, CRDT collab, regulated residency, scale tier crossover). “I read a blog post about Remix” is not on the list.
Satellite: Pythagoras (architecture) · Morgans (this post) · Pipeline: REFLECT — Morgans