Dev1 min read
Building This Blog
-
Why Astro
Astro generates static HTML by default. No JavaScript ships to the client unless you explicitly opt in. For a content-focused site like a blog, this means near-instant page loads.
The Stack
- Framework: Astro with MDX support
- Styling: Tailwind CSS
- Hosting: Cloudflare Pages
- Backend: Cloudflare Workers + KV for comments, likes, visitor counts
- Content: MDX files committed to Git
Deployment Flow
Local MDX -> git push -> GitHub -> Cloudflare Pages (auto build)
No CMS, no database for content. Just files in a repository.
Why Not Next.js?
Next.js is great for dynamic apps. But for a blog where content changes only on deploy, shipping a React runtime to every visitor is unnecessary overhead.
Why Cloudflare?
Edge-first architecture. Static assets served from 300+ data centers. Workers for the small amount of dynamic functionality needed (comments, likes).
Performance Results
With this setup, we achieve:
- First Contentful Paint under 1 second
- Zero layout shift (all images have defined dimensions)
- Lighthouse scores above 95 across all categories
Trade-offs
- No real-time content updates (rebuild required)
- Comment moderation requires API calls
- Limited to what can be expressed in MDX
These are acceptable for a personal blog where publishing frequency is low and control over content is high.