I wanted a blog that’s fast, cheap to host, and easy to maintain. After evaluating a few options, I landed on Hugo with the PaperMod theme, deployed to Cloudflare Pages. Here’s the full breakdown.
The stack
- Static site generator: Hugo — fast builds, great templating, large ecosystem
- Theme: PaperMod — clean, minimalist, fast, well-maintained
- Hosting: Cloudflare Pages — free tier, global CDN, automatic deploys from GitHub
- Comments: Giscus — powered by GitHub Discussions
- Domain: Cloudflare Registrar (at-cost pricing, ~$10/year)
Why Hugo?
I considered Next.js, Astro, and Jekyll before settling on Hugo:
- Build speed: Hugo builds this entire site in under 100ms. No bundler, no node_modules.
- Single binary: No runtime dependencies. Download Hugo, run
hugo server, done. - Maturity: Been around since 2013. The templating is quirky but well-documented.
The tradeoff is that Hugo’s Go templating language has a learning curve, and the ecosystem is smaller than React-based alternatives. But for a content-focused blog, it’s hard to beat.
Design decisions
I started with PaperMod’s defaults and made targeted CSS tweaks:
- Narrower content width (700px) for better readability
- Warm color palette - off-white backgrounds instead of pure white
- Inter font for body text, JetBrains Mono (Dracula theme) for code
- Minimal navigation - just the sections I actually use
Most styling lives in a single custom.css file that PaperMod auto-loads, with a few layout overrides for the ToC sidebar and comments.
Deployment
The deploy pipeline is dead simple:
- Push to
masteron GitHub - Cloudflare Pages detects the push
- Runs
hugo --minify - Deploys the
public/directory to their global CDN
Total time from push to live: about 30 seconds.
Cost
| Item | Cost |
|---|---|
| Hugo | Free |
| PaperMod theme | Free |
| Cloudflare Pages hosting | Free |
Domain (.com) | ~$10/year |
| Giscus comments | Free |
| Total | ~$10/year |