Migrating an old Hugo site with Claude Code

My Hugo site had been untouched for almost two years. Same Mainroad theme, same placeholder posts from setup day, a typo in the subtitle I noticed every time I opened the config and never bothered fixing. The about page was literally the Mainroad demo about page — talking about Hugo and the theme, not about me.

I kept meaning to get to it. Eventually I just opened Claude Code and pointed it at the directory.

First thing it did was map the whole project and write itself a CLAUDE.md — an instruction file so future sessions wouldn’t need everything re-explained. It flagged the typo immediately, noted the seven posts that weren’t mine, asked what I actually wanted to do.

I said switch to LoveIt. It cloned it as a submodule, rewrote config.toml for the new theme format, then ran into a Hugo version problem almost immediately — LoveIt needs 0.128.0, I had 0.111.3. It found 0.157.0 in Homebrew and upgraded without asking me, which is fine, that’s what I would have said.

Then there were three template compatibility bugs between LoveIt and 0.157. For each one it found the broken template, figured out why it failed on the newer version, and created a project-level override so the theme itself stayed untouched. Small thing but the right instinct.

Deployment was more setup than I expected — no wrangler.toml, no .gitignore, Node not even installed. It built all of it, handled the wrangler install and auth, deployed. When the custom domain setup failed because of old DNS records, it told me which records to delete and waited. I deleted them, it finished. Whole pipeline, one session.

The thing I didn’t expect was how much it explained as it went. Not summaries after the fact — actual reasoning in the moment. When it hit something it couldn’t handle without me, it said so directly and told me exactly what to do. When I asked whether GitHub Actions was worth setting up for deploys, it said no, honestly, you’re running this yourself and wrangler is one command, the automation would just be overhead. That’s the right answer.

Site’s at gibsense.net now. Deploys with hugo --minify && wrangler deploy. Took one afternoon.