There's a prevailing assumption that anything built in three days must be a prototype. A toy. A "we'll rebuild it properly later" piece of work. It doesn't have to be.
The stack
We standardise on a boring, proven combination:
Next.js 14— server components, streaming, edge where it matters.Postgreson Neon or Supabase — serverless, branchable, cheap.Drizzle ORMfor type-safe queries.Clerkfor auth — faster than rolling our own, stable at scale.Stripefor payments — checkout or subscriptions.Tailwind+ our own design tokens — consistent across projects.VercelorCloudflare Pagesfor hosting with preview deploys per branch.
Why each choice survives audit
Every item above is boring on purpose. Boring compounds. Boring is debuggable at 11pm on day two. Boring lets us ship, hand off, and have the client run the product after we leave.
What a 72-hour web app actually includes
- Working auth: email, Google, GitHub, magic links.
- A real database with migrations in Git.
- Stripe checkout + webhooks for at least one product.
- An AI endpoint — streaming, with retry + error handling.
- Observability: Sentry + basic request logging.
- Two theme modes. Accessible in both.
What we don't do in a sprint
We don't ship custom databases, bespoke auth, or anything that requires us to be on-call after delivery. If your product needs that, it doesn't fit a sprint — and we'll tell you on the first call.
The best stack is the one you've shipped fifty times. Novelty costs days you don't have.
What happens in 72 hours
- Day 1 — UX flows, core screens, database schema.
- Day 2 — Engineering sprint. Auth, DB, payments, AI.
- Day 3 — QA, copy pass, deploy, domain, hand-off.
You walk away with a repository that another engineer can read on Monday without a tour.