How to Build a Blog as a Solo Developer
Complete guide to building a blog as a solo developer - tech stack, architecture, timeline, and tips.
What You're Building
A blog is the simplest thing you can build as a developer, and honestly, it's also one of the most underrated. Not the "set up WordPress in 5 minutes" kind. I'm talking about a developer-built blog that loads instantly, costs nothing to host, and gives you complete control over every pixel.
I've built four blogs over the years. The first was WordPress, and it was a mistake I don't want to relive. Slow, bloated, plugin updates every other day. The blog you're reading now runs on Astro. It loads in under a second, hosting costs me zero dollars, and I haven't touched the infrastructure in months.
Difficulty & Timeline
| Aspect | Detail |
|---|---|
| Difficulty | Easy |
| Time to MVP | 1-2 days |
| Ongoing Maintenance | Very Low |
| Monetization | Ads, affiliate links, sponsored posts, or lead generation |
Recommended Tech Stack
Astro with MDX files, hosted on Cloudflare Pages. That's it. No database. No backend. No authentication. Just Markdown files that get compiled to static HTML and served from a CDN globally.
If you want something more dynamic (comments, user accounts, newsletters), you can add those as lightweight services later. But start static. Every blog I've seen fail started with too much complexity on day one.
Step-by-Step Plan
Phase 1: Foundation (Day 1)
Run npm create astro@latest and pick the blog template. That is the exact command in the official Astro docs, and you'll have a working blog in under two minutes. Seriously. One requirement to check first: Astro 6 needs Node.js v22.12.0 or higher, and odd-numbered Node versions like v23 are not supported, so run node -v before you start. Customize the layout, add your branding, set up your content collections with proper frontmatter validation. Astro makes this almost painfully easy.
Astro is now at version 6.4.2 on npm, with roughly 3.0 million weekly downloads and around 59,700 GitHub stars, so this is a stack you can rely on for years rather than a weekend toy.
Don't obsess over the design. I spent three weekends tweaking CSS on my first blog before I had a single post. That's backwards. The design should take a few hours at most. Nobody is visiting your blog to admire the sidebar.
Phase 2: Write Content First (Day 1-2)
Before you touch anything else, write three real posts. Not placeholder lorem ipsum. Actual content that someone would want to read. This does two things. First, it forces you to test your content workflow end to end. Second, it gives you something to launch with.
Writing in Markdown inside VS Code is faster than any CMS I've ever used. You get version control for free, your content lives in your Git repo, and there's nothing to maintain.
Phase 3: Deploy and Add Analytics (Day 2)
Connect your GitHub repo to Cloudflare Pages. Every push auto-deploys. Add Plausible or Umami for privacy-friendly analytics. Set up your RSS feed (Astro has a plugin for this, @astrojs/rss, currently at version 4.0.18 with about 435,000 weekly npm downloads). Done.
On analytics, you have a free path either way. Umami is MIT-licensed and completely free to self-host with unlimited sites and events, and Umami Cloud has a perpetual free tier rather than a trial. Plausible is open source too but its managed cloud is paid, starting around $9 per month for the lowest pageview tier (check current pricing, tiers shift). For a brand-new blog, self-hosted Umami or the free Umami Cloud tier is the zero-cost choice.
Cloudflare Pages gives you unlimited bandwidth on the free tier. Not a generous limit. Unlimited. The official limits page confirms there is no bandwidth cap on Pages, and the free plan still includes 500 builds per month (roughly 16 per day), a 20 minute build timeout, and up to 20,000 files per site, which is far more headroom than a solo blog will ever touch. I've served hundreds of thousands of pageviews without paying a cent.
Key Features to Build First
Build these and nothing else for launch.
Content collections with frontmatter. Tags, categories, publish dates, SEO metadata. Astro validates all of this at build time so you catch errors before they go live.
RSS feed. People still use RSS, especially in the developer community. It takes five minutes to set up with @astrojs/rss.
SEO basics. Meta tags, Open Graph images, canonical URLs, a sitemap. This is table stakes and Astro handles most of it out of the box.
Search. A simple client-side search using something like Pagefind. It indexes your static content at build time and adds search with zero runtime cost. Pagefind is maintained by CloudCannon, sits at version 1.5.2 on npm with around 797,000 weekly downloads and roughly 5,200 GitHub stars, so the project is healthy and actively used.
Architecture Overview
There's barely any architecture to discuss, and that's the beauty of it. Markdown files in a folder. A build step that converts them to HTML. A CDN that serves the HTML globally.
/src/content/blog/ -> Your posts (MDX files)
/src/pages/ -> Your routes (index, about, blog listing)
/src/layouts/ -> Page templates
/public/ -> Static assets (images, fonts)
No servers. No databases. No containers. No Kubernetes. If your blog needs Kubernetes, something has gone terribly wrong.
Common Pitfalls
Starting with WordPress. If you're a developer, WordPress is a trap. You're managing PHP you don't want to touch, updating plugins that slow your site down, and paying for a server you don't need. A static site generator gives you better performance at zero cost.
Over-engineering from day one. You don't need a headless CMS, a database, user accounts, or a comment system to launch a blog. You need content. Everything else can come later.
Not writing consistently. I've seen developers build beautiful blogs and then post twice before abandoning them. The tech stack doesn't matter if you don't write. Set a schedule, even if it's just one post per month, and stick to it.
Ignoring SEO entirely. You don't need to be an SEO expert, but basic stuff matters. Good titles, meta descriptions, proper heading hierarchy, fast load times. Astro gives you most of this for free, but you still need to write titles people actually want to click.
Building a custom CMS. I've done this. It took weeks and the Markdown-in-VS-Code workflow was better. If you really want a browser-based editor, use Decap CMS or Tina CMS. They add a visual editor that commits to your Git repo. Best of both worlds without building anything custom. Both are mature open source projects: Decap CMS is at version 3.12.2 with about 19,100 GitHub stars, and Tina CMS is at version 3.8.3 with roughly 13,400 stars and around 47,000 weekly npm downloads. Pick either and you are not betting on something abandoned.
Timeline Estimate
| Phase | Time | What You're Doing |
|---|---|---|
| Setup & design | 4-6 hours | Astro template, branding, layout |
| First 3 posts | 4-8 hours | Writing real content |
| Deploy & polish | 1-2 hours | Cloudflare Pages, analytics, SEO |
| Total | 1-2 days | Ready to share with the world |
Common Errors and Fixes
A few things trip people up on this exact stack. Here is how to get past them.
npm create astro@latest fails or the dev server won't boot. The most common cause is an unsupported Node version. Astro 6 requires Node.js v22.12.0 or higher, and it explicitly does not support odd-numbered releases like v23. Run node -v, and if you are below v22.12.0 or on an odd major, install an even-numbered LTS (nvm makes this a one-liner) and try again.
Cloudflare Pages build succeeds locally but fails in the cloud. Two usual suspects. First, the build timed out: Pages caps builds at 20 minutes on every plan, so a runaway install or a huge image pipeline can blow past it. Second, you exceeded the file count: a Pages site can hold up to 20,000 files on the free plan, and dumping an unoptimized image folder into /public is the fastest way to hit that. Trim assets or move large media to R2 or an image CDN.
Hit the monthly build ceiling. The free plan includes 500 builds per month. If you wired up a noisy automation that pushes on every tiny change, you can burn through that. Batch your commits, or move preview churn off the production project. Note that bandwidth is not the limit here, Cloudflare does not cap Pages bandwidth on the free tier.
RSS feed builds but readers reject it. With @astrojs/rss (4.0.18), the usual fix is making sure every item has a real pubDate as a Date object and that you pass an absolute site URL from your Astro config. A missing or relative site produces relative links that feed readers choke on.
Pagefind search returns nothing. Pagefind (1.5.2) indexes the built output, not your source files, so it has to run after astro build against the dist directory. If you run it against src or before the build, the index is empty. Make the indexing step part of your build command, not a separate manual run.
Is This Worth Building?
Absolutely. A blog is the single best long-term investment a solo developer can make. It builds your personal brand, drives organic traffic to your other projects, establishes you as an authority in your niche, and compounds over time. Posts I wrote two years ago still bring in traffic every single day.
The key insight is that a developer blog should be boring infrastructure. Simple, fast, reliable, free. Save your complexity budget for the projects you actually want to build. Your blog is the megaphone, not the main event.
Sources
All versions, download counts, star counts, and pricing checked on 2026-05-30.
- Astro install command and Node.js v22.12.0 requirement: docs.astro.build/en/install-and-setup
- Astro version 6.4.2: registry.npmjs.org/astro/latest
- Astro weekly downloads (~3.0M): api.npmjs.org/downloads/point/last-week/astro
- Astro GitHub stars (~59,700): github.com/withastro/astro
- @astrojs/rss version 4.0.18 and downloads (~435K): registry.npmjs.org/@astrojs/rss/latest, api.npmjs.org/downloads/point/last-week/@astrojs/rss
- Pagefind version 1.5.2, downloads (
797K), stars (5,200): registry.npmjs.org/pagefind/latest, api.npmjs.org/downloads/point/last-week/pagefind, github.com/CloudCannon/pagefind - Decap CMS version 3.12.2 and stars (~19,100): registry.npmjs.org/decap-cms/latest, github.com/decaporg/decap-cms
- Tina CMS version 3.8.3, downloads (
47K), stars (13,400): registry.npmjs.org/tinacms/latest, api.npmjs.org/downloads/point/last-week/tinacms, github.com/tinacms/tinacms - Cloudflare Pages free tier limits (500 builds/month, 20 minute build timeout, 20,000 files, no bandwidth cap): developers.cloudflare.com/pages/platform/limits
- Umami free self-hosting and Umami Cloud free tier: umami.is/pricing
- Plausible managed cloud pricing (from ~$9/month): plausible.io/#pricing
Like this? You'll like what I'm building too.
Two ways to support and get more of this work.
HEARTH
A privacy-first Life OS for your desktop. Journal, tasks, and notes that stay on your machine. Coming soon, direct download from this site.
Read moreMY TOOLKITS
Receipts-first toolkits for shipping after hours, building Claude agents, publishing on Amazon, and more. The exact methods I used, not theory.
Browse on WhopRelated Articles
Treating Video As Code With Remotion And fal
How I turned a script into a finished video with code instead of a timeline app, and why determinism is the real win for a solo dev.
Build Versus Buy For A Custom AI Feature
How to decide between an off-the-shelf AI tool and a custom AI feature, weighing control, cost, differentiation, and data with a clear framework.
Can One Developer Build Your Whole MVP
An honest look at whether a single full-stack developer can ship your whole MVP, when it works beautifully, and when you should bring in more people.