What this is
The composition that shows up over and over in YC W25/S25 batches and in the “what’s your stack?” threads on Hacker News. Almost identical to ShipFast’s Next.js boilerplate but with Cursor + Claude swapped in as the build environment and Supabase swapped in for MongoDB.
When to pick this stack
- You’re a small team (1, 8 engineers) shipping a B2B or B2C SaaS with revenue ambitions
- You want a relational database, your data has organisations, users, projects, billing, and you’d rather model that with foreign keys than nested documents
- You expect to grow past the free tiers within a year and don’t want to re-platform when you do
What we’d swap
- Cursor → Windsurf or Claude Code: all three are credible. Windsurf has the agent built more tightly into the IDE; Claude Code is terminal-first. Pick whichever matches your team’s muscle memory.
- Supabase + Clerk → Supabase only: drop Clerk if Supabase Auth is good enough. It is, for most B2C SaaS. B2B teams with org/MFA needs usually keep Clerk.
- Resend → Postmark: if you’ve been burned by deliverability before, Postmark’s reputation in the deliverability community is a known quantity.
- PostHog → Mixpanel + Plausible: PostHog is a swiss army knife. If you outgrow it on any one axis, splitting product analytics (Mixpanel) and traffic analytics (Plausible) is cheaper at scale.
What’s deliberately not here
- A Redux/MobX state library, modern Next.js apps lean on server components + React Query for most state. Adding a global store too early is one of the most reliable ways to slow yourself down.
- A microservices architecture, at this size, monolith on Vercel + Supabase is faster to iterate on. Split when growth forces it, not before.
- A separate file-storage service, Supabase Storage covers most needs at this stage. Bring in Cloudflare R2 or S3 only when bandwidth or egress fees become a line item that matters.
The whole point of this stack is that it’s boring in the best way, every piece has a YC-batch peer who can debug it with you on Slack.