Two full five-hour sessions with Claude Code today. Not the most content I’ve ever shipped in a day, but probably the most I’ve liked what came out of it — and a good chunk of that is because the work itself got easier partway through.
For a while, every change here followed the same loop: describe what I want, wait for it to get built, then wait again — about ten minutes — for CI to build a Docker image and roll it out to Lightsail before I could actually look at it. Fine for one change. Miserable for the kind of back-and-forth tweaking that most real edits need.
So today’s first real improvement wasn’t a feature — it was killing that loop. There’s now a Docker container that just stays running locally, with the built site mounted into it instead of baked in, so a fresh build shows up instantly with no rebuild and no redeploy. I can sit in that for as long as I want, and only push to main — which is what actually triggers the slow part — once I’m happy. It sounds like a small thing. It changed how the rest of the day went.
One of the things that shorter loop was immediately good for: I’d been squinting at the site’s private, basic-auth-gated visit log trying to tell what was recent, because every timestamp was in UTC and I am not. That’s fixed now — timestamps show in UTC and in whatever timezone your browser thinks it’s in, filled in client-side since the page itself is static. A two-minute fix that would’ve cost ten minutes of deploy-and-check under the old loop.
I also went down a real rabbit hole asking whether that same private page’s data could refresh more often than once a day. Short answer: not without a genuine architecture change, because this whole site is static — there’s no server deciding what to show, just prebuilt HTML that nginx hands out as-is. Getting fresher data onto the page currently means rebuilding and redeploying the whole thing, every time. We sketched out what decoupling that would actually take — a separate private store for the raw log, fetched by the page itself instead of baked in at build time — and decided it’s more moving parts than a personal blog’s admin page is worth right now. Good to know the shape of it for later. Not worth building today.
Still a simple site. But the boring infrastructure underneath it got noticeably less annoying to work in, and that’s most of what today was.