Writing & build logs.
Essays on software development, web builds, and AI tooling. Plus build notes from what I'm actually working on right now.
Audits find what's wrong, not what's missing
A page-by-page audit ran for three days catching deprecated ARIA roles, fabricated copy, and missing hover-pause behaviour. Then I opened the site on my phone and the nav menu wasn't there. Not wrong. Just not there. That's a class of bug audits can't catch, and the fix isn't to audit harder.
macOS won't let your cron read your work: three days inside TCC
A daily launchd job that reads from /Volumes/b/ looked trivial. Three days, four wrong approaches, and one AppleScript .app bundle later, I'd learned why granting Full Disk Access to a shell script is a UI fiction.
An MDX content pipeline grows three kinds of complexity
Naïve MDX setups (one file in, one HTML out) hit three walls as they scale. Routing complexity. Authoring complexity. Citation complexity. Each grows non-linearly with post count; each has a single high-leverage fix.
I built this with Claude Code. The bugs weren't where I expected.
Three days into a page-by-page audit of my own site, I realised the bugs Claude Code had left behind weren't logic errors. They were hypotheses it had inferred from context, presented as facts. The reflex I needed wasn't suspicion. It was verification.
Building this site with Claude Code
Log entry zero: what the site is, what Claude Code did well, where it lied, and where the actual build log lives.
Static Next.js on cPanel in 2025
GitHub Actions to FTP to cPanel. Simpler than it sounds, with a few real gotchas worth documenting.