The page you are reading right now is the crime scene. Bear that in mind as
we go.
The plan was almost offensively simple. I wanted a blog — this blog — as
flat files in an object storage bucket. No server to patch, no database to
corrupt, no WordPress to wake up worrying about. Markdown goes in one end,
HTML comes out the other, a CDN puts it near your eyeballs, and the whole
arrangement costs about as much per month as a single packet of crisps.
And because this is the year it is, I didn’t build it alone. I described
what I wanted to an AI assistant in my terminal — Claude Code, since we’re
being honest on this blog — and it did the typing while I made decisions
and tea, in roughly that order of importance. Static site generator,
templates, the paywall machinery, deployment scripts: drafted, tested, and
run in front of me at a speed I can only describe as mildly insulting.
Twenty years of clicking through settings screens and it turns out the
future is watching someone else’s cursor.
An hour in, we were ready for the first deployment. Site built. Bucket
created. Sync command armed. I felt the particular warmth of a man whose
plan is working.
The deployment failed. Not partially — comprehensively. Every single file:
403 AccessDenied.
Here’s the good bit. Nobody had attacked us. Nothing was down. The AI and I
had, between us, written one small, perfectly sensible-looking JSON document
— and in doing so revoked my right to write to my own bucket, on my own
account, that I had created ninety seconds earlier.