For years I ran this site on a Linode VPS. Initial server configuration and hardening was fun! Ongoing maintenance was too, at first — but now it feels more like a burden.
What I was paying for
$15/month for a 2Gb Linode instance with backups. That’s not a lot, but for a personal site that gets updated occasionally, it’s $180/year for something that should cost nothing.
Why Now?
I wanted to migrate to a more convenient and simple setup for content publishing:
- Git-native — push markdown, site deploys. No SSH, no build scripts on a remote box.
- AI-assisted — I used Claude Code as a first-class development partner to scaffold the entire site, build a custom Hugo theme from scratch, set up CI/CD, and handle security hardening. The whole thing came together in a single session.
- Minimalist tooling — Hugo for static generation, GitHub for version control, Cloudflare Pages for hosting. No containers, no orchestration, no package managers. The same terminal I write code in every day.
The tools are mature, the migration path is simple — no better time to make the switch.
New Platform
GitHub Pages is the obvious choice — I’m already on GitHub, it’s free, and it deploys static sites out of the box. But it has a few gaps that matter to me. You can’t set custom HTTP headers on GitHub Pages, which means no Content-Security-Policy, no X-Frame-Options, no security hardening at the edge. For a site I built with a strict CSP and locked-down permissions, that’s a dealbreaker. GitHub Pages also has no built-in analytics — you’d need a third-party script, which adds weight, breaks your CSP, and usually means cookies or tracking. Cloudflare Pages includes privacy-first analytics — a lightweight script with no cookies and no cross-site tracking. It also supports _redirects natively and has a faster global edge network. Both are free. I went with the one that let me keep the security posture I wanted without workarounds.
What I got
$0/month infrastructure. Cloudflare Pages is free — unlimited bandwidth, global CDN, automatic SSL, custom domain support.
Simpler workflow. Write a post in markdown, push to GitHub, site is live in under 30 seconds. CI runs Hugo build validation, HTML checks, and prose linting automatically. No deployment scripts to maintain.
Full ownership. The entire site — theme, templates, styles, content — lives in a single Git repo. No third-party theme to keep up with, no CMS to update, no database to back up. If Cloudflare Pages disappears tomorrow, I can deploy the same Hugo output anywhere.
Scalability I’ll never need but don’t have to think about. A static site on a global CDN handles traffic spikes without intervention. No load balancer, no caching layer, no capacity planning.
The best infrastructure is the kind you don’t think about.
