Two free, two excellent, two completely different jobs. With real numbers pulled from Cloudflare's docs today.
The question "should I use Cloudflare Pages or my Coolify VPS?" feels like a single decision, but it's really asking "what kind of thing am I deploying?" Each tool is fantastic at its own job and bad at the other's.
Cloudflare's global edge serves static files + tiny edge functions, with zero server to manage.
Your Hetzner box running Docker. Auto-pulls from GitHub. You get a real Linux server.
Fetched live from Cloudflare's docs. These are not estimates.
For your scale — solo dev, a handful of games + tools, even if they get a few thousand visitors — you will never hit any of these limits. The free tier is essentially "free forever" for personal projects.
When you deploy to Cloudflare Pages, your built files (HTML, CSS, JS, images) get copied to Cloudflare's 330+ data centers worldwide. When a visitor in Tokyo loads your site, they get it from the Tokyo edge node, not from a single server somewhere. Latency is tiny by default.
With Coolify on your Hetzner box, every visitor talks to one machine in Germany. Fine for you and Josh. Worse for someone loading your site from Australia.
Forget the marketing. Forget the hype. The real decision is one question:
I read ~/lab/projects/playground/package.json earlier. Playground is currently a Node app with three meaningful dependencies:
All three are native Node modules — they compile against system libraries (libpq, libvips). They won't run on Cloudflare Pages' edge runtime (V8 isolates). That part of playground has to live on Coolify, period.
But the ~40 static HTML prototypes inside playground? Those are pure files. They could go on Pages individually.
Blue = pure static, could go on Pages.
Amber = needs Node + Postgres = stays on Coolify.
Phase 1: Coolify-everything. Get all of playground deploying to Coolify first via Coolify's GitHub auto-pull. That's one deployment, one URL, one mental model. The Postgres/sqlite/sharp stuff just works.
Phase 2 (later): split the static stuff out. If you build a standalone game like duck-hunt that's pure HTML/JS, deploy that to Pages so it gets edge-replicated speed + its own URL. Best of both, only when the win is worth the extra moving part.
You're already running CF Access in front of Coolify, Portainer, NocoDB, etc. The same access policies work in front of a Cloudflare Pages deployment too. Private playground, just for you and Josh? Totally doable. No extra cost.