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

LayerToolFree Tier
FrontendCloudflare PagesUnlimited
BackendCloudflare Workers100K req/day
DatabaseTurso9GB, 500M reads
AuthLucia (library)Free forever
EmailResend3K emails/month
StorageCloudflare R210GB
CI/CDGitHub Actions500-2000 min/mo
MonitoringBetter Stack1GB logs
AnalyticsUmamiSelf-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.