Whipping Up a Blog with Claude Code (Part 1: Design)
These days 90% of my work runs through Claude Code. Figured a blog would fall out of it just as fast, so I built one.
Whipping Up a Blog with Claude Code series
(10 parts)- 1Whipping Up a Blog with Claude Code (Part 1: Design)
- 2Whipping Up a Blog with Claude Code (Part 2: Customizing)
- 3Whipping Up a Blog with Claude Code (Part 3: The AI Writing System)
- 4Whipping Up a Blog with Claude Code (Part 4: Search, RSS, TOC, Draft)
- 5Whipping Up a Blog with Claude Code (Part 5: OG Images, SEO, Analytics)
- 6Whipping Up a Blog with Claude Code (Part 6: Comments, Tags, UX)
- 7Whipping Up a Blog with Claude Code (Part 7: Popular Post Rankings and Analytics)
- 8Whipping Up a Blog with Claude Code (Part 8: A Mascot Character)
- 9Whipping Up a Blog with Claude Code (Part 9: Dropping Categories for Tags)
- 10Whipping Up a Blog with Claude Code (Part 10: Pinning the Persona Update as a Skill)
I set out to build one blog
More than 90% of my work goes through Claude Code these days. Writing code, reviewing it, cleaning up docs.
Which led to a thought: "Couldn't I pull a decent-quality blog out of this pretty quickly?"
So I built one. Writing it down because there are a few things worth keeping.
Picking the stack
Next.js + MDX + Vercel
me β Claude Code β Next.js blog β deploy to VercelWhy this combination:
- Next.js: SSG support, SEO is fine
- MDX: writing in markdown is easy
- Vercel: you just deploy
But honestly the biggest reason was "a structure that me, the AI, and any frontend dev can all follow." Go complicated and the AI gets confused, and so do I.
The real reason I went markdown-based
content/
βββ ai/
β βββ intro-to-llm.md
βββ tech/
βββ getting-started-nextjs.mdNo database, no admin panel. Posts are managed as markdown files.
Because that's already how I write:
- Talk it through with ChatGPT or Gemini β export to markdown once it's settled
- Ask Claude Code to just write the post β it comes out as markdown to begin with
Either way the artifact is a .md file. So why not just drop that file into the content folder and be done?
Bolting on a CMS actually makes it worse. You end up copy-pasting the AI's markdown into an editor... an extra step. Annoying.
AI output β blog post β markdown was the structure with the shortest pipeline.
What using Claude Code was actually like
The more specific the prompt, the better
I started with this:
"Build me a blog with Next.js"
That alone gets you a basic structure. But this pattern worked better:
[current state] + [what I want] + [constraints]Examples:
"Let's change this blog's theme color. Hot pink. Make the dark mode background match too."
"Shall we do SEO? sitemap, robots.txt, OG tags, all of it."
Continuing like a conversation was easier
me: "let's change the theme color"
Claude: (changes it)
me: "make the dark mode background match too"
Claude: (fixes dark mode as well)
me: "good, commit it"
Claude: (commits)It holds the context, so I didn't have to re-explain everything.
I let it ask when it didn't know
me: "add a bio too"
Claude: "What information should I put in?"
me: "look it up with the github cli"
Claude: (runs gh api user β pulls the info β writes the bio)Folder structure
Where it landed:
medium-blogging/
βββ content/ # blog posts (markdown)
β βββ ai/
β βββ tech/
βββ public/
β βββ images/ # post images
β βββ ai/ # AI writing guide
βββ src/
β βββ app/ # Next.js App Router
β βββ components/ # React components
β βββ lib/ # utilities (MDX parsing)
βββ CLAUDE.md # AI assistant guide
βββ README.mdThe key piece is the content/ folder. Drop a markdown file in there and it automatically becomes a post.
The CLAUDE.md trick
Put a CLAUDE.md file at the project root and Claude Code reads it automatically.
# CLAUDE.md
## Commands
npm run dev # dev server
npm run build # build
## Adding a new post
Create a file at content/[category]/[slug].mdDo this once and you stop re-explaining every time.
Deploying
Vercel deployment really was simple:
- Connect the GitHub repo
- Done
It detects Next.js, builds, and deploys on its own.
https://blog.sangwon0001.xyzThat's it for now
This was "putting up the skeleton."
- Basic structure done in a handful of exchanges
- Almost no hand-written code
- Designed around the shortest AI output β blog post pipeline
Next part will probably be about customization:
- Hot pink theme
- SEO optimization
- Automatic image optimization
- Getting the AI to write posts
I'll add more if anything else comes to mind.
The first draft of this post also came from telling Claude Code "summarize what we've done so far and turn it into a blog post."