Back to the blog
4 min read

Free Hosting Was Fine, Until I Needed a Cron Job

Free static hosting gets you further than you'd expect — far enough to forget it has a ceiling. Here's what pushed me off it, and what the server actually costs.

LaunchServersCost
On this page

My first project ran on Cloudflare Pages for seven months. The bill was $0.

Not because I was frugal. The free tier gives you unlimited bandwidth and 500 builds a month. For one docs site and a handful of tool pages, that is effectively unlimited.

So I filed "rent a server" under Things Other People Do.

Where the requirement came from

I wanted a weekly digest: every Monday at 8am, collect whatever I'd published that week and email it to myself.

The code was easy. The hard part was the five words "every Monday at 8am."

Static hosting works like this: code runs when someone visits. With no visitor, nothing runs. There is no always-on process sitting there waiting for you.

My feature was entirely about running when nobody was visiting.

Two detours I tried first

GitHub Actions on a schedule. Cheapest option — nothing to buy.

I ran it for two months. It wasn't that it didn't work. It was that it wasn't reliable. Scheduled workflows on the free tier are best-effort; the docs say so themselves, and high-load periods get delayed. I asked for 8:00 and got somewhere between 8:10 and 8:50.

For a database backup, who cares. For a digest I wanted to read over coffee, 9am is useless.

Cloudflare Workers with Cron Triggers. This one genuinely works, and it fits in the free tier. I ran that for another month.

What stopped me was a different detail: part of the digest processed audio — turning a new podcast clip into a waveform — which meant calling ffmpeg. Workers cap CPU time: 10ms on free, 30 seconds on paid. Note that's CPU time, not wall-clock, and ffmpeg is pure CPU work. I could split it into a second service, or I could move.

That was the moment it clicked: I hadn't picked the wrong host. My requirements had changed.

Six months earlier it really was a static site. Now it needed somewhere that could run an arbitrary command for as long as it took.

What I bought

The smallest Hetzner Cloud box: 1 vCPU, 2GB RAM, 20GB disk.

Why not the cheapest thing available? I went down the cheap VPS comparison table row by row:

ProviderFromSpecsMy read
Oracle Cloud$04 ARM cores / 24GBGenerous, but the reclaim stories are common enough that I didn't want my weekly job on it
RackNerd~$1.5/mo1 core / 1GBBilled yearly, cheap, fine for tinkering — a bit tight for me
Vultr$2.5/mo1 core / 0.5GBRunning ffmpeg in 512MB is not fun
Hetzner Cloud$4.5/mo1 core / 2GBPicked it: most RAM at that price, hourly billing so I could try a month

My whole tradeoff in one line: this box does one job a week, so I don't need it fast — I need it to not die halfway. RAM mattered more than CPU.

What it actually costs

Real numbers, USD:

ItemCost
Domain (.com)$12 / year
Server (smallest Hetzner)$4.5 / month, about $54 / year
Object storage (audio on R2's free tier)$0
Totalabout $66 / year, or $5.50 / month

Roughly $0.18 a day.

The way I justified it to myself: that Monday email costs me under a nickel. But the more honest half of the sentence is this — if I hadn't needed the scheduled job, none of that $66 should have been spent.

When you don't need a server

Which cuts the other way too. These projects should stay on free static hosting, and "I feel like I should have a server by now" is not a reason to buy one:

  • Marketing sites, portfolios, landing pages
  • Front-end SPAs, or blogs and docs built with SSG
  • Apps whose backend already lives on serverless plus a managed database
  • Anything whose only goal is "other people can reach it"

The test I use fits in one line:

Is any part of this required to run when nobody is visiting?

No → static hosting, done. Yes → you need a machine. Start with Buying a server for how to size it.

One case worth checking before you spend anything: if what you want is a stable outbound IP, or a batch job that runs for a few hours, read through Publish to the internet first. It lays out what each of the three hosting models can and can't do. Some of those needs are already covered by serverless platforms, and you don't need to keep a whole machine alive for them.

The part I'd tell you to copy

Get the order right.

I had a requirement, discovered the free option couldn't meet it, and only then went shopping. Do it backwards — buy a VPS first, then figure out what to run on it — and you end up paying $5 a month for a control panel you haven't logged into since spring.

Before you buy, put the domain, the server, and the extras into the cost estimator and look at the yearly total. Decisions get easier once the number is on the screen.

Related posts