How This Website Runs for $0 a Month
Every page you’re reading right now is served without a single running server, database, or monthly bill. As a cloud engineer I spend my days architecting infrastructure — so for my own site, the most interesting architecture was the one with almost none.
The stack
- Astro builds the site. Every blog post is a Markdown file in a Git repository; at build time Astro pre-renders each one into static HTML.
- GitHub stores the source. Pushing to
mainis the entire publishing workflow. - Cloudflare Pages builds and hosts. A webhook fires on every push,
astro buildruns on Cloudflare’s infrastructure, and the output lands on their global CDN.
write .md → git push → Cloudflare builds → live on the edge in ~60s
Why not WordPress?
I actually started my career building a blog site with WordPress as an intern, so this comparison is personal. WordPress means a 24/7 PHP + MySQL server: something to pay for, patch, and defend. As the most-attacked CMS on the internet, it’s a strange choice for a security engineer’s personal site.
A static site inverts the model: there is nothing running, so there is nothing to exploit at runtime and nothing to pay for when nobody’s visiting. The threat surface is roughly “Cloudflare’s edge” — which is defended better than anything I could afford to operate.
What “free” actually covers
| Component | Free tier reality |
|---|---|
| Bandwidth | Unlimited on Cloudflare Pages |
| Builds | 500/month — a push every ~90 minutes, forever |
| TLS, CDN, DDoS protection | Included |
| Blog storage | Markdown is tiny — a decade of posts is a few MB |
The only recurring cost is the domain registration, which I already owned.
The publishing workflow
# write the post
vim src/content/blog/my-new-poc.md
# publish it
git add . && git commit -m "post: my new PoC" && git push
Sixty seconds later it’s live on every continent. No admin panel, no plugin updates, no database backups — just text files, version control, and someone else’s very good CDN.