Three months ago I killed my last paid cloud invoice. Not downgraded — deleted. My side project (a SaaS dashboard with ~1,200 monthly users) now runs entirely on free tiers, and I kept a spreadsheet to prove it wasn't going to fall over.
Here's the stack, the real numbers, and the two places the free tiers did almost break.
The $0 Stack (and what it replaced)
| Layer | Before (paid) | Cost/mo | Now (free) | Free limit I actually hit |
|---|---|---|---|---|
| Hosting | DigitalOcean droplet | $12 | Vercel | 100GB bandwidth — using 34GB |
| Database | Managed Postgres | $15 | Neon | 0.5GB storage — using 0.31GB |
| Serverless API | DO App Platform | $5 | Cloudflare Workers | 100k req/day — peak 41k |
| Auth | Auth0 | $23 | Supabase Auth | 50k MAU — I have 1.2k |
| CDN/Cache | CloudFront | $8 | Cloudflare | unlimited on free |
| Background jobs | Redis + worker | $7 | Cloudflare Cron Triggers | free |
Total: $70/month → $0. Over 90 days that's $210 saved, on a project that makes $0 in revenue. The math isn't heroic — it's just not lighting money on fire.
The two near-misses (this is the part nobody blogs about)
1. Neon's cold starts. The free tier scales to zero. First request after idle takes 800ms–1.2s. My dashboard's login page P95 went from 210ms to 940ms until I added a keep-alive ping every 4 minutes via a Cloudflare Cron Trigger:
# wrangler.toml — keep Neon awake
[triggers]
crons = ["*/4 * * * *"]
export default {
async scheduled() {
await fetch("https://myapp.vercel.app/api/health");
},
};
2. Vercel's function execution limit. 100GB-hours/month sounds infinite until you have a page doing 6 server-side fetches per load. I was burning 2.1GB-h/day. Fix: moved data fetching client-side with SWR, dropped to 0.3GB-h/day. Lesson: on free tiers, render less on the server.
The honest trade-off
Cold starts make my app feel ~300ms slower on first hit. Nobody has complained. My error rate is lower than on DigitalOcean (0.02% vs 0.11%) because I'm no longer my own on-call for a droplet.
The real cost of free tiers isn't money — it's the ~6 hours I spent learning each platform's limits. Worth it at $35/hour saved? Barely. Worth it for a side project? Absolutely.
The other thing I stopped paying for: my AI coding assistant. I swapped a $20/mo subscription for MonkeyCode — free, open-source, runs against local models too: https://ly.cyberserval.tech/iIETXiF
What's the longest you've run production traffic on pure free tiers? Did a limit ever actually bite you in prod?
Top comments (0)