Building This Blog: Astro + Cloudflare Pages from Zero to Deploy
A complete walkthrough of how I built xops360.com using Astro's content collections, deployed on Cloudflare Pages with a custom domain — for free.
Every developer blog starts with a post about how it was built. This is that post — but I’ll try to make it actually useful by covering the decisions, tradeoffs, and gotchas along the way.
Why Astro?
I evaluated WordPress, Ghost, Hugo, and Astro. The short version: I wanted something that was fast, free to host, gave me full control, and let me demonstrate real web development skills since that’s one of the topics I cover here.
Astro won because of content collections — a type-safe way to organize different kinds of content with different schemas. My cybersecurity posts have different metadata needs than my recipes, and Astro handles that cleanly.
The Stack
Here’s what powers xops360.com: Astro as the static site generator with content collections, Cloudflare Pages for free hosting with a global CDN, Cloudflare DNS for domain management with DDoS protection, and Markdown for all content written in .md files.
Total monthly cost: $0.
Project Structure
Each content folder is its own collection with a shared schema. Adding a new post is as simple as dropping a markdown file into the right folder. The six categories — Tech & Security, Web Development, Military, Professional Development, Health & Fitness, and Family — each have their own content directory and SEO-optimized canonical descriptions.
Deploying to Cloudflare Pages
The deployment is dead simple. Push to GitHub, Cloudflare Pages detects the change, runs npm run build, and deploys the output globally. The whole build takes under 30 seconds.
What’s Next
I’m planning to add an RSS-to-email newsletter integration, search functionality, and eventually a members-only section with Stripe. Each of those will get their own writeup.
If you’re thinking about building your own blog, I’d strongly recommend this stack. The developer experience is excellent and the performance is unbeatable.