A 5-Month Side Project on Free Tiers: $0 Cloud Bill Beyond a Domain
A complete, production-viable MVP can run on Vercel and Cloudflare free tiers for nothing but the cost of a domain, so the real barrier to a side project is configuration and debugging knowledge, not cloud spend. The documented pitfalls — like better-sqlite3 breaking on Workers and misleading error metrics — are exactly what trips up developers new to edge serverless.
The post breaks down a zero-server-cost side-project architecture. Frontend runs on Vercel (for Next.js) or Cloudflare Pages (for static Vue/H5), backend uses Cloudflare Workers running Express, D1 provides a SQLite-based business database, and R2 handles images and uploads with no egress fees. The only fixed cost is a domain, purchased and hosted on Cloudflare.
The author walks through real deployment pitfalls: building and configuring Cloudflare Pages requires correct build commands and output folders; better-sqlite3 fails in the Worker runtime because it depends on OS-native binaries; and the Worker overview's Errors metric only counts runtime crashes, not business-level 500s — so a global error handler has to print error stacks manually. A debugging workflow is given: check Vercel Observability for frontend issues, filter the Events log for backend errors, verify the actual code version, and use D1's Console to inspect tables.
Domain setup also has traps: CNAME is an alias, not a redirect; the proxy cloud must be orange for Cloudflare protection; root domains can't use CNAME directly; and the custom domain must also be validated inside Vercel, not just at Cloudflare. The recommended MVP stack keeps everything on free quotas, which the author says is enough for low-traffic personal tools and SaaS validation.
The steepest cost of a free-tier stack is debugging time, not money; most of the article's length is about misconfigured builds, runtime incompatibilities, and misleading metrics.
Platform-specific constraints reshape development habits: what works in local Node (like better-sqlite3) can silently break on edge runtimes, forcing environment-conditional code from day one.
Observability on Workers is intentionally coarse — a zero-Errors dashboard can hide 500s — so developers must build their own error plumbing instead of trusting platform metrics.
The hard part isn't deployment; without a good idea, nothing works.
[嘿哈] Yes, with a good idea, I'd have time to chat on Juejin instead of going out to make money [偷笑]