Skip to main content

Tidying twenty years of WordPress with Claude

·323 words·2 mins
loothi
Author
loothi

In 2022 I moved off WordPress to static HTML via the Simply Static plugin. Hugo came later. Today Claude Code and I cleared out twenty years of cruft.

There were a lot of distinct problems. WordPress [caption] shortcodes that Hugo doesn’t understand. Bare YouTube and Vimeo URLs from the era when WordPress auto-embedded those. Clickable images linking to a long-defunct /wp-content/uploads/... full-size copy. Curly quotes mojibaked into “ and then, in one heroic case, mojibaked again into í. Posts from 2001 with no titles, just the numeric Blogger.com post ID as the directory name (the site lived on Blogger before it moved to WordPress in 2010).

After agreeing on the transformation rules and watching Claude pilot a handful by hand, I let it spawn five parallel sub-agents, each handling a slice of the years. The sweep touched 165 files. The site is tidier now. The images load. The captions are captions.

This was sandwiched between two smaller experiments. One is a nightly Hermes cron job that asks gh search commits for the day’s commits and writes a single time-blocked event to a dedicated “Dev Log” Google Calendar (I remember nothing). The LLM themes the commit messages into one or two lines first, so the calendar reads like a log instead of a stack trace. The GitHub Events API used to be the obvious source, but it now strips the commit array from PushEvent payloads, so you have to come in via the search API to get the messages back.

The other is a Fitbit skill I’d previously built for OpenClaw, which is now a Hermes skill with the code freshly updated. Morning briefing with steps, resting heart rate, HRV, sleep efficiency. Fitbit dates sleep and HRV records by the day they ended, not the day they started, so a morning briefing fetches today’s date for last night’s sleep but yesterday’s date for yesterday’s steps.


How come Claude is always telling me it’s bedtime?

Screenshot of Claude Code saying ‘Tonight at 19:00 the first real cron run fires. Sleep well.’ followed by my reply: ‘it’s 2.14pm’