22 Years Later: How I Finally Migrated My WordPress Blog to Astro with AI as My Coding Intern
Last Thursday, my WordPress blog went down again. Nothing unusual—it always comes back by itself—but there I was, staring at another reminder of the aging VPS, the security concerns, and the maintenance overhead I’d been avoiding for years. After 22 years of blogging (starting on BlogSpace back in 2003 before migrating to WordPress), I’d been wanting to switch to a static site for the past decade. The benefits were obvious: easier hosting, fewer security issues, better performance. But every time I started, I’d get stuck in configuration hell or lose momentum implementing my own solution.
This time felt different. Not because I had more time or motivation, but because AI had finally matured enough to do the heavy lifting.
The Vibe Coding Experiment
As a senior developer and long-time tech specialist, I’d been curious about this new trend of “vibe coding”—letting AI handle the grunt work while you provide high-level guidance. What better project to test this approach than finally converting my old blog?
I started with a conversation with Claude Sonnet 4 about the best migration approach. The latest model is impressively chatty and proactive—it was offering code solutions before I even asked, showing real initiative that felt refreshingly collaborative.
My setup was intentionally clean: a new computer that I wanted to keep pristine, so no polluting it with Node installations. Dev containers were the obvious solution. For the IDE experience, I installed VSCode with GitHub Copilot, ready to see what this AI-assisted development really felt like.
The Reality of AI as a Coding Intern
Here’s the thing about working with AI on code: it’s exactly like having a brilliant intern. Very knowledgeable, incredibly fast, but with zero real-world experience. Once I embraced that mental model, everything clicked.
Initially, I tried using Sonnet 3.5 directly, but the results weren’t great. I quickly realized I needed Claude for strategic guidance in a separate chat while letting Copilot handle the tactical code generation. The division of labor worked beautifully.
My 80-post WordPress blog needed content extraction, and we initially planned to work directly with a database dump. But during setup, we pivoted to WordPress’s XML export feature—sometimes the simpler path reveals itself mid-project.
The migration scripts were quick and dirty, exactly what you’d expect from an intern’s first pass. But they worked. We extracted all the content, downloaded embedded media, and had clean data to work with surprisingly quickly.
Technology Choices and Deployment
For the static site generator, we landed on Astro—something I’d been wanting to try anyway. For hosting, GitHub Pages made perfect sense, especially with GitHub Actions handling automated deployment. I have some small AWS sites, but there’s something elegant about keeping everything in the GitHub ecosystem.
The most interesting turning point came when two things happened simultaneously: I hit my free GitHub Copilot limit (hello, Pro subscription) and gained access to Claude Sonnet 4. The improvement was dramatic. Sonnet 4 felt like upgrading from a junior intern to a senior intern—still needed guidance, but the execution quality jumped significantly.
The Quirks of AI Pair Programming
Working with AI code generation has its peculiarities. Sometimes you have to stop it from going down the wrong path. Sometimes it ignores your instructions entirely—like continuously trying to launch the dev server that’s already running in the background. “No, Claude, it’s already running. Please stop.”
But these quirks aside, the productivity boost was remarkable. After about a day of vibe coding, Claude and Copilot had successfully migrated my entire 22-year blog archive to GitHub Pages running on Astro.
Reflections on Vibe Coding
As a senior developer, vibe coding is fascinating for non-critical tasks. The generated code isn’t optimal—there are definitely cleaner, more efficient approaches we could have taken. But who cares? The result works, the blog is finally migrated, and I’m no longer maintaining that aging WordPress VPS.
The key insight is treating AI as a very capable intern rather than expecting it to be a senior developer. Provide clear direction, review the output, and don’t hesitate to course-correct when needed. The speed of iteration makes up for the occasional detour.
The Sweet Irony
And here’s the meta moment: I’m now asking Claude to help me write this blog post about using Claude to migrate my blog. The circle is complete.
After a decade of procrastination, it took one frustrated Thursday and a day of AI-assisted vibe coding to finally modernize my 22-year-old blog. Sometimes the tools just need to catch up to your ambitions.
My advice for anyone considering a similar migration: embrace the AI intern model, keep your expectations realistic about code quality, and focus on shipping rather than perfection. Your blog doesn’t need pristine code—it needs to exist and be maintainable.
Now, time to actually start writing new posts for this shiny new Astro-powered blog.
This post was written with assistance from Claude, because why break a good workflow?