The $0 Stack: Shipping SaaS on Free Tiers
The exact tools I use to build and ship multiple SaaS products without spending a cent on infrastructure. Neon, Vercel, Cloudflare, and more.
I have 8 SaaS products in various stages of development. My monthly infrastructure bill is $0.
8
Products
$0
Monthly cost
TBD
Paying customers
That’s not a flex. It’s a strategy. When you’re bootstrapping multiple products, every dollar spent on infrastructure before you have revenue is a dollar that makes you feel pressure to rush, cut corners, or worse, quit.
Here’s the exact stack I use and why.
The stack
| Layer | Tool | Free tier |
|---|---|---|
| Database | Neon | 0.5 GB storage, autoscaling to zero |
| Frontend + API | Vercel | 100 GB bandwidth, serverless functions |
| Static sites | Cloudflare Workers | 100k requests/day |
| Auth | Better Auth | Open source, self-hosted |
| Payments | Stripe | No monthly fee, pay per transaction |
| Email/Newsletter | Buttondown | 100 subscribers free |
| DNS | Cloudflare | Free plan with full DNS |
| Repo + CI | GitHub | Free for public and private repos |
| Monitoring | Vercel Analytics | Free tier included |
No AWS. No Docker in production. No Kubernetes. No $50/month database you forget to turn off.
Why Neon over Supabase, PlanetScale, or a $5 VPS
Neon’s killer feature for bootstrappers is autoscaling to zero. When nobody’s using your product at 3am, you’re not paying for a database sitting idle. When you get a traffic spike, it scales up.
async function withRetry<T>(fn: () => Promise<T>, retries = 3): Promise<T> {
for (let i = 0; i < retries; i++) {
try {
return await fn();
} catch (e) {
if (i === retries - 1) throw e;
await new Promise((r) => setTimeout(r, 1000 * (i + 1)));
}
}
throw new Error("Unreachable");
}
Why Better Auth over Clerk or Auth0
Managed auth (Clerk, Auth0)
- ✗ Fast to integrate
- ✗ Pricing surprise at scale
- ✗ Vendor lock-in
- ✗ External dependency
Better Auth (self-hosted)
- ✓ Slightly more setup
- ✓ Free forever
- ✓ No lock-in
- ✓ Runs in your app
Clerk is great but it’s $25/month once you pass the free tier. Auth0 is enterprise pricing dressed in startup clothing.
Better Auth is open source and runs in your own app. No external dependency, no pricing surprise, no vendor lock-in. It handles email/password, OAuth, sessions, and MFA. I’ve shipped it across multiple products and never hit a limitation that mattered.
The tradeoff is setup time. Clerk is faster to integrate. But I’m building 8 products. Investing a few hours in a self-hosted auth solution pays for itself by product three.
Cloudflare Workers for marketing sites
Every product needs a marketing site. Vercel is overkill for a static site that just needs to look good and load fast.
Cloudflare Workers serve static assets from the edge, 100k requests per day free, and custom domains are included. I deploy with wrangler and forget about it. My marketing sites load in under a second globally.
The pattern that makes it work
🔑
The key isn’t any individual tool. It’s the pattern: same stack everywhere, shared components, static where possible, pay per use not per month.
- Same stack everywhere. Next.js, React, Tailwind, Drizzle ORM, Neon. Every product uses the same foundation. Context switching costs drop to near zero.
- Shared components. Auth flows, billing integration, admin dashboards. Build once, copy across products.
- Static where possible. Marketing sites are static. Docs are static. Only the app itself needs server-side rendering.
- Pay per use, not per month. Every tool in the stack charges for usage, not a flat monthly fee. Zero users = zero cost.
When to upgrade
Until then, $0.
The full list
If you’re starting a SaaS today and want to spend nothing until you have customers:
- Neon for Postgres (free, scales to zero)
- Vercel for Next.js apps (free, generous limits)
- Cloudflare Workers for static/marketing sites (free, edge-deployed)
- Better Auth for authentication (free, open source)
- Stripe for payments (free until you process payments)
- Buttondown for email (free under 100 subs)
- GitHub for code and CI (free)
- Cloudflare for DNS (free)
Total: $0/month. Total capability: enough to ship, launch, and get your first paying customers.
Stop paying for infrastructure you don’t need yet.