I had been postponing this conversion for years. The old site worked, I didn’t have time, and I was expecting to need like a full day to set up Hugo, download the data, get it to convert, check if things worked. Classic “if it ain’t broke” reasoning while knowing full well it was going to bite me eventually.

I had been working with Claude for a week, seeing it handle more and more complex tasks. Then it struck me — could it just do this chore for me?

And lo and behold, it did.

What actually happened

I pointed Claude at my live WordPress site and it figured out the rest. It hit the WordPress REST API directly — no plugins, no WXR export, no manual steps. It pulled all 100 posts going back to 2008, the pages, and the full media library in one go.

Then it wrote a conversion script that took the HTML content from the API, ran it through a proper HTML-to-Markdown converter, rewrote all the internal image URLs to local paths, and generated Hugo front matter with titles, dates, categories and cover images. It downloaded all the images from the live site and put them in the right place.

It picked PaperMod as the theme — clean, fast, auto dark/light mode, no JavaScript dependencies. I didn’t ask for a specific theme, it just recommended one that made sense for a personal blog and set it up.

When the build threw deprecation warnings about some Hugo 0.158 template changes, it tracked them down to three templates inside the theme, overrode them locally so the submodule stayed untouched, and fixed them.

Start to finish, maybe an hour. Most of that was waiting for images to download.

The bit that still surprises me

I expected to spend a day on this. The part I was most dreading — figuring out the WordPress export format, dealing with Jetpack’s image CDN URLs, mapping category IDs to names, getting the Hugo front matter structure right — Claude just handled all of it without being asked. It looked at the API response, understood the structure, and did the right thing.

The images from old subdomains that no longer exist threw 400 errors. It logged them as warnings and kept going. That’s exactly what I would have done manually, except I would have gotten frustrated first.

It’s not magic. It’s just that the task was well-defined enough that a capable tool could execute it. The chore was always doable, I just never had the patience to start.