Free hosting for side projects ends where Stripe begins

The last mile of a side project is a URL

Every side project has a graveyard stage, and it’s almost always the same one: fully working, completely invisible, running on localhost:3000. The project doesn’t become real until a stranger can load it over HTTPS. The good news is that getting there is now a ten-minute job — push to Git, connect a host, collect a URL. The better news, which nobody advertises on the pricing page, is that “free” on these platforms is a terms-and-quotas decision, not just a price. A detailed comparison of the five big free Git hosts got me thinking about how to frame that decision, because most people frame it wrong.

The map, sorted by what actually binds you

People compare free hosting tiers on bandwidth, and bandwidth is almost never the constraint. What binds you is builds, credits, cold starts, or the terms of service — in roughly that order of surprise. Here’s the honest map:

  • Cloudflare Pages is the generous static default. Requests to static assets are unmetered, you get 500 builds a month, and custom domains just work. The trap in the word “unlimited”: Pages Functions share the Workers free cap of 100,000 requests a day. A brochure site stays free forever; an API-on-the-edge does not.
  • Vercel Hobby is the best developer experience for Next.js and React — detected frameworks, instant preview deploys, roughly 100 GB of fast transfer a month. The trap is the licence, not the quota: Hobby is non-commercial, personal use only.
  • Netlify Free now runs on credits: 300 a month, hard limit, no auto-recharge. A production deploy costs 15 credits and bandwidth costs 20 per GB, so the maths is unforgiving — about twenty deploys a month and not much traffic before visitors see “site not available”. Deploy previews are free, which is the one mercy.
  • GitHub Pages is simplest: 1 GB site, a soft 100 GB monthly bandwidth cap, and a policy that flatly rules out stores and commercial SaaS. Perfect for docs and portfolios, wrong for anything with a checkout.
  • Render static sites are free on a Git-connected CDN with 5 GB of bandwidth — but do not confuse them with Render’s free web services, which sleep after fifteen minutes and take a groggy minute to wake. Free web services are for toy APIs, not for anything with a deadline.

(All numbers move. Screenshot the usage page the week you launch anything real; the two that ambush people are Netlify credits and Vercel fair-use.)

The Stripe tripwire

Here is the part worth internalising, because it’s the same story on every platform wearing a different hat. The moment money touches the URL, the free tier is over — whether or not anyone bills you.

Vercel’s fair-use rules are the clearest example: payments, ads, donation buttons, affiliate-driven sites, and getting paid to build or host the site all count as commercial. There is no “under $10 MRR is still Hobby” clause. One paying customer, or even a tip jar, is the policy line — and crossing it quietly, then migrating during your first traffic spike, is far more expensive than the $20 a month the paid tier would have cost all along. GitHub Pages makes the same call as policy rather than pricing, and Cloudflare’s version is a quota: static business sites are fine, edge functions hit the cap.

So the mental model I use: a free tier is a staging environment with suspiciously good production qualities. Use it for demos, portfolios, experiments, and the version of the product that exists while you’re still deciding. The moment there’s an invoice in either direction, pay for the floor under it. Budget the paid tier as a line item of the first dollar of revenue, not as a response to it.

The homelab objection, taken seriously

Regular readers know my first instinct is to serve it myself: I have servers, a reverse proxy, and a suspicious relationship with uptime monitors. And yes, a static site behind your own proxy is a solved problem. But I’ve come around to a division of labour: the git-push CDN hosts the public-facing, must-be-up-when-my-power-isn’t things — the portfolio, the status page, the write-ups — and the homelab fronts the dynamic stuff, the dashboards, and everything that genuinely needs to run on my hardware.

“Free” is doing quiet work in that sentence. A free tier you treat as a staging environment gives you uptime you don’t personally own, TLS you don’t renew, and a CDN you don’t debug at midnight. That’s a fair trade for a side project. It stops being a fair trade the moment the project has customers, and the whole trick is noticing which side of that line you’re on this week.

Five rules that keep free hosting boring

  • Env vars live in the dashboard, never in the repo. If a .env ever touched Git, rotate every key in it. This is the single most common way a free-tier side project becomes a paid incident.
  • One canonical URL. Don’t dual-deploy to two hosts “for backup” — you’ll end up with two half-updated versions and no idea which one Google indexed.
  • Share preview deploys, not localhost screenshots. The preview URL is the demo. It’s also a free smoke test on infrastructure that isn’t your laptop.
  • Pick the host by your binding constraint. Deploying often? Netlify credits will bite. Edge functions? Cloudflare’s daily cap. Trying to impress a client? Don’t put it on a plan that cold-starts.
  • Decide the money line up front. If Stripe is in the plan, a paid tier is in the plan. Write both names on the same line of the napkin.

Free hosting is genuinely one of the best deals in computing — for the thing you’re building before it’s a product. Treat it as that, upgrade the day it becomes one, and you get all of the free with none of the fine print.

Leave a Reply

Your email address will not be published. Required fields are marked *

WordPress Appliance - Powered by TurnKey Linux