· 4 min read

How I Built This Blog with AI in One Session

AI Building in Public Stack

How I Built This Blog with AI in One Session

This blog — the one you're reading right now — was built in a single working session using Claude Code. Not a weekend. Not a sprint. One continuous session from "empty directory" to "deployed blog with CMS."

Here's exactly how it happened.

Starting with Intent, Not Code

I didn't start by writing code. I started by telling Claude Code what I wanted:

"Build me a solo operator blog — this is where I post about AI, my stack, building in public. It should be easy to post and publish."

That's it. From that sentence, we went through a structured brainstorming process:

  1. What matters most? Speed to publish and SEO growth.
  2. How do I want to write? Web-based CMS — I want to write in a browser and hit publish.
  3. What's the vibe? Warm and personal. Not corporate, not hacker-dark-mode.

These answers shaped every technical decision that followed.

The Stack Decision

Claude Code proposed three approaches and recommended Astro + Keystatic:

  • Astro for static-first output — zero JavaScript shipped by default, which means fast pages and great Lighthouse scores
  • Keystatic for the CMS — a web-based admin UI that saves content as markdown files in the git repo
  • Tailwind CSS 4 for styling — utility-first, fast iteration
  • Vercel for hosting — free, auto-deploys on git push

The key insight was matching the stack to my priorities. I wanted speed to publish (Keystatic gives me a real CMS UI) and SEO (Astro's static output is hard to beat on performance).

The Build Process

Once we agreed on the design, Claude Code created an 11-task implementation plan and executed it using parallel subagents. Here's the rough breakdown:

Tasks 1-3: Project scaffolding, Keystatic configuration, design tokens and global styles

Tasks 4-5: Layout components (header, footer, SEO head) and shared components (post cards, newsletter signup)

Tasks 6-10: All the pages — homepage with hero section, paginated blog listing, individual post pages with reading time and related posts, about page, RSS feed

Task 11: Production configuration and build verification

The parallel execution was interesting to watch. Independent tasks ran simultaneously — while the homepage was being built, the about page and RSS feed were being created in parallel by separate agents.

What the CMS Looks Like

Keystatic gives me an admin panel at /keystatic. When I want to write a post, I:

  1. Go to the admin UI
  2. Click "New Post"
  3. Fill in the title, excerpt, tags, and cover image
  4. Write the post body in a rich text editor
  5. Hit save

Behind the scenes, Keystatic saves everything as a markdown file in the git repo. Vercel detects the commit, rebuilds, and the post is live in about 30 seconds.

No database. No separate CMS service. No monthly bill. The content lives in the same git repo as the code.

What I'd Do Differently

A few things I'd adjust for next time:

  • Start with more seed content. Having 3-4 posts ready before building the homepage would have made it easier to evaluate the design with real content.
  • Design tokens first. The brand colors and typography should be the very first decision, before any component work. They cascade through everything.
  • Don't over-specify the plan. Some of the implementation details in the plan were more prescriptive than necessary. Claude Code is good at making reasonable choices — it doesn't need every CSS class spelled out.

The Takeaway

The point isn't that AI built my blog for me. The point is that AI handled the parts I don't want to spend time on — the boilerplate, the config files, the component wiring — so I could focus on the parts that matter: what to write, how it should feel, and what the reader experience should be.

Building with AI isn't about removing the human from the process. It's about letting the human focus on the decisions that require taste, judgment, and personal intent. Everything else is implementation detail.

This blog is the proof of concept.

Stay in the Loop

Get new posts delivered to your inbox. No spam, unsubscribe anytime.

Newsletter coming soon. Set PUBLIC_CONVERTKIT_FORM_ID in .env to activate.

Related Posts

Every Tool I Use as a Solo Operator

The complete stack — from code editor to deployment, design to analytics. Every tool that earns a place in my workflow, and why.

Tools Stack