I Let Claude Casually Fix My Blog After 8 Years of Neglect
Turns out my last update was back in 2018. Eight years. I’d left it sitting there for eight years. When I finally opened my own blog again, it wasn’t even rendering properly anymore. The build was permanently broken, every photo in every post was gone, and the code blocks were a mess. I thought this was my castle. Turned out it was a ruin.
I couldn’t just leave it like that, so I threw a lazy request at Claude Code: “CircleCI’s failing, can you fix it with GitHub Actions?” It ended up doing about three times more than I expected, so I’m writing it down.
The build wasn’t even passing
Claude looked into it and found that CircleCI had already been migrated to GitHub Actions long ago — except that Actions setup was broken too. I don’t even remember doing the migration. The Hugo version was pinned to 0.74. Zero point seventy-four. From 2020. There was no way the current theme would work with that. On top of that, the submodule URL was pointing at git@github.com over SSH, so CI couldn’t fetch it without a key.
Claude tracked down all of this on its own, bumped Hugo, switched the submodule to HTTPS, and got everything building and deploying again like it was nothing. And all I’d said was “CircleCI’s failing.”
Every photo had vanished
Once the build was passing, the next problem showed up: not a single photo appeared in any post. There were two causes. First, Hugo’s Markdown engine had been updated, and it now strips raw HTML written directly in the body by default for safety — and past-me had hardcoded <img> tags everywhere. Second, the images were referenced over http://, which gets blocked as mixed content on an HTTPS site.
I hadn’t asked it to fix posts one by one, either. It went and found every affected post on its own (apparently around 60 of them), switched both the Flickr and Amazon product images over to HTTPS, and brought them all back in one pass. For the Amazon ad widgets that had long since been discontinued, it swapped them out for links to product pages that were actually still alive. A small thing, but I appreciated it.
The WordPress-era debt kept surfacing
The deeper it dug, the more of my own past sins turned up. Code blocks that opened with [sourcecode] and closed with ``` , breaking the rendering entirely (leftover WordPress shortcodes). Headings written as raw <h2> instead of Markdown. The best one: roughly 350 old daily-roundup posts from delicious — the social bookmarking service (younger readers may not know it, and it’s long gone now) — all still sitting there full of dead links. I really had let that pile up. Claude cleaned all of it up too, without a word of complaint.
And then it modernized things while it was at it
What started as just a fix turned into a bunch of extras along the way: prev/next navigation between posts, switching the homepage from full-text posts to summaries with a “read more” link, site search (just redirects to Google’s site: search — no index or server needed), a monthly archive sidebar, an RSS icon. It even fixed the sitemap to use absolute URLs so Search Console would stop complaining. It’s clearly a lot faster at this than I was eight years ago.
The part that impressed me most
Once everything was done, I asked it to “check with me before pushing straight to master,” and it went and wrote a hook to enforce that. From now on it actually stops and asks before pushing. It’s a little unsettling how it doesn’t just do what you ask — it goes and reshapes the whole environment to match how you work.
Eight years of neglect and the scars of a WordPress migration, cleared up almost entirely through casual chat. I’ll admit it: I didn’t fix a single line of code myself in this whole process. All I did was sit there typing “fix this” and “now this” in chat. If I’d done it all myself, I think I’d have lost three weekends to it.
…and if you’ve read this far, you might have already guessed — yeah, this post’s draft was written by Claude too (lol).