Every month I see indie developers posting their $500/month server bills for side projects with 12 users. It physically hurts me. You don't need Vercel Pro. You don't need AWS. You don't need a managed database that costs more than your rent.
Here's the stack I use for my side projects. Total monthly cost: $0.00. Not "basically free." Not "free for the first month." Literally, perpetually, zero dollars.
Frontend Hosting: Cloudflare Pages
Free tier: Unlimited sites, unlimited bandwidth, 500 builds/month
Deploy by connecting your GitHub repo. Push to main = automatic deploy. Global CDN with 300+ edge locations. Instant rollbacks. Custom domains with free SSL.
I've served millions of page views from Cloudflare Pages without paying a cent. It's absurd.
Backend: Cloudflare Workers or Deno Deploy
Workers free tier: 100K requests/day, 10ms CPU per request
Deno Deploy free tier: 100K requests/day, 50ms CPU
For APIs, form handlers, and server-side logic. Workers run at the edge (fast everywhere), Deno Deploy gives you a more traditional Node-like environment.
Database: Turso (SQLite at the Edge)
Free tier: 9GB storage, 500M row reads/month, 3 databases
Turso is hosted SQLite with edge replication. It feels like a local database but runs globally. The free tier is generous enough for most indie projects.
Alternative: just use a SQLite file with Litestream backups on Fly.io's free tier.
Authentication: Lucia or DIY with JWTs
Cost: $0 (it's a library, not a service)
Stop paying for Auth0 or Clerk. Lucia is an open-source auth library that works with any database. Session-based auth in ~100 lines of setup code.
Email: Resend
Free tier: 100 emails/day, 3,000 emails/month
Send transactional emails (welcome emails, password resets, notifications) via a simple REST API. The DX is excellent.
File Storage: Cloudflare R2
Free tier: 10GB storage, 1M reads/month, 100K writes/month
S3-compatible object storage with zero egress fees. Upload user avatars, documents, or media files. No surprise bandwidth bills ever.
CI/CD: GitHub Actions
Free tier: 2,000 minutes/month for public repos, 500 minutes for private
Run tests, build assets, and deploy automatically on every push. You don't need CircleCI or Jenkins.
Monitoring: Better Stack (formerly Logtail)
Free tier: 1GB logs/month, uptime monitoring, status pages
Get pinged when your site goes down. Search through logs. Create a public status page. All free.
Analytics: Plausible (Self-Hosted) or Umami
Cost: $0 if self-hosted
Privacy-friendly analytics that don't require cookie banners. Self-host Umami on a free Fly.io instance and get all the data you need without selling your users' souls to Google.
The Complete Stack Summary
| Layer | Tool | Free Tier |
|---|---|---|
| Frontend | Cloudflare Pages | Unlimited |
| Backend | Cloudflare Workers | 100K req/day |
| Database | Turso | 9GB, 500M reads |
| Auth | Lucia (library) | Free forever |
| Resend | 3K emails/month | |
| Storage | Cloudflare R2 | 10GB |
| CI/CD | GitHub Actions | 500-2000 min/mo |
| Monitoring | Better Stack | 1GB logs |
| Analytics | Umami | Self-hosted free |
When Free Stops Being Enough
The honest truth: this stack scales to several thousand users before you hit any limits. By that point, your project should be generating revenue, and upgrading becomes a business expense — not a gamble.
Stop paying to build things nobody uses yet. Build for free, validate with real users, then upgrade when the money justifies it.