In fifteen years of kitchens I was trusted with knives, with fire, with a Friday night's worth of protein that cost more than my rent. I was never trusted with the safe code. Locks were not an insult in that world. They were the architecture.
I have been in tech for thirteen years now, long enough that the kitchen is a story I tell rather than a thing I do. But I thought about those locks a lot this year, because I found a building that didn't have any.
I do QA at a media company that builds websites for small businesses. When I started, the backlog was a few hundred sites deep, and every one of them would eventually cross a desk like mine, row by row, on a spreadsheet a hundred and thirty rows long. I did the math on my own hours and did not like the answer.
So I brought the problem home. And here is the part that matters: we already had the machine. Michael and I build agent systems together, and long before this backlog existed we had a working pipeline in the WordPress ecosystem. Client intake in, finished site out, with quality gates at every step and least privilege from the first sketch, because that is not advanced security thinking. That is the floor. My backlog problem did not need a new build. It needed a port.
So I pointed the pipeline at the platform's API and said go. It worked like a charm.
Once an agent can read a client's intake and hold the API, review is the last mile. It designed, injected content, and wrote page copy straight from the intake that read like a person wrote it. No tells. It held to the written content standards more faithfully than the hands the standards were written for, which should not surprise anyone: a checklist means something different to a worker who cannot get bored on site two hundred. Intake form to finished site, end to end, in the time it takes to refill a coffee. The API is fast when nobody is clicking through an editor.
Our pipeline was born in the WordPress ecosystem, where WordPress, free software you can run on nine dollar shared hosting, hands every user their own application password. Scoped, revocable, logged. So when we pointed it at this platform's API, I made the assumption anyone in this industry would make: that a professional multi-tenant publishing platform clears a bar that free software cleared years ago.
It does not.
On this platform, an API credential is issued agency-wide. One key. Every client site the company manages, hundreds of them, reachable through the same token. It is not scoped to a user. It is not scoped to a role. It is not scoped to a site. I went back through the documentation looking for the per-user version I had obviously missed. There isn't one. Nobody designs for that, because nobody would consider it possible. A platform whose entire business is holding other companies' client work, and the API model is a master key on a nail by the door.
Watching a site assemble itself does something to a room. A live demo forces the operational questions a slide deck never asks, and this one forced two.
The first was security. The company's delivery work runs on contractors, a rotating roster spread across time zones, most of whom nobody in the building has ever met in person. Scale the tool the obvious way and the master key ends up everywhere the work ends up. Security landed exactly where we had. Not with contractors. Not with that key. An agency-wide credential in a contractor workflow is not a risk you mitigate. It is a breach with a start date.
The second question is the one nobody writes on a whiteboard. Full autonomous site creation was the part we already had working, which is exactly why it is never the first part anyone adopts. A demo like that does not only raise security questions. It raises questions about what everyone watching it does all day, and companies answer those questions slowly, on their own schedule, as is their right. QA was the size of ambition everyone in the room could live with. So the QA station is what I carried forward, and the rest is content to stay a demo. For now.
The pivot was ours to make, and it was the platform's limitation that forced it, not the pipeline's. If the tool was going to be safe to hand to the people who actually do the work, it had to inherit its security from somewhere other than that key, and the only credential on the platform actually scoped to a human being is the login. So I adapted the QA station to a real browser. Playwright drives a session that signs in as the reviewer, sees exactly what that person's role allows, and touches exactly what their permissions permit. Every action lands in the platform's own audit trail under the operator's own name. If a contractor runs it, it can do precisely what that contractor could do by hand, and nothing more. The tool inherits the human. We did not work around the platform. We built the access model it should have shipped.
The discipline underneath did not change in the pivot, because it was in the pipeline's bones from the start. A backup before anything is touched, and a hard stop if the backup fails. A 204-point checklist across eighteen categories, written down, because a standard that lives in someone's head is not a standard. Deterministic fixes, the placeholder phone number, the missing alt text, the empty page title, applied and then read back off the live site to confirm they actually landed. Judgment calls routed to a human with a typed reason and evidence attached, because a punt without a reason is just a dropped ticket. And sign-off blocked until every item carries an answer. The gate fails closed. A full pass takes about an hour, and I can say that plainly because the run record timestamps it.
Here is the part I keep turning over. Contractor friendly and security friendly turned out to be the same requirement wearing two uniforms. The version that ran on the master key could never have been handed to the people who actually do the work, no matter how good it was. The version that runs on a login can be handed to anyone, because it cannot exceed the person holding it.
In fifteen years of kitchens, no chef ever handed me one key that opened the walk-in, the safe, the office, and every other restaurant in the group. It would never have occurred to anyone. The dumbest kitchen I ever worked in understood something about access that a professional software platform apparently does not: the person and the permission travel together, or the whole system is a wish.
So I run the version where they travel together. Every operator gets their own key. Every key opens exactly what it should.
The walk-in stays locked. Even from the tool.