The DeployMill blog
Ideas, examples, and the thinking behind a neutral, agent-safe way to ship web apps.
Multi-tenant when the tenant is an agent
Classic multi-tenancy never planned for a tenant that deploys and runs code on purpose, possibly driven by an untrusted prompt. How the threat model shifts when the tenant is an executing agent: VM-grade isolation, default-deny networking, fail-closed authorization, SSRF guards, and an audit trail that makes it all observable.
Read post →Code an agent can change without breaking it
The primary reader of this codebase isn't a human — it's the agent that edits it. Why a dishonest type is a latent bug rather than a style nit, why small and boring beats clever, and how the rules are CI gates instead of vibes so a machine can touch the code without breaking it.
Read post →Apps that sleep
Most apps an agent deploys aren't busy — they should sleep and wake on demand. The hard part isn't the sleeping, it's knowing when an app is truly idle: where the activity signal comes from, the one invariant that keeps a busy app awake, and why the seam made it cheap to build.
Read post →Making free safe to give away
A free tier is a security problem wearing a marketing costume. How the Explore → Builder → Enterprise lineup keeps free contained by design — locked egress at the network layer, no margin-burners — while keeping the one thing that matters open, and lifts the whole envelope from one place the moment a card lands.
Read post →The guardrail that wasn't
I shipped a network security control with a verifier that checked five things, watched all five pass, applied it to prod — and took every app offline in seconds. The script wasn't wrong; it was checking the wrong direction. Why a guardrail that isn't a hard automated check isn't a guardrail.
Read post →The migration that rewrote history
A user reported a job stuck for days. It wasn't — I'd silently rewritten a live production table with one ordinary line of SQL. How a boot migration that succeeded produced bad data, why ADD COLUMN … DEFAULT is a history rewrite, and the rule that came out of it.
Read post →Deploying the thing that does the deploying
DeployMill deploys DeployMill — the best test harness I've ever had, with one terrifying failure mode. Why a bug in the self-deploy path is a deadlock you can't deploy your way out of, why the maintenance clock can't be an app, and why I keep the sharp edge anyway.
Read post →The one-file fix that took down all of production
A clean one-line fix that passed every test took every host on the platform offline minutes after it shipped. The post-mortem: a self-deploy is only half a deploy, a delete-then-recreate primitive turns a write bug into data loss, and a green mock proves nothing about the real external system.
Read post →From prompt to production in one call
Tell your agent to ship an app and a minute later there's a real URL backed by a real repo, database, and domain — no dashboard, no wizard. A look at what start_project does underneath, why the build wait is honest, and why a failure is a resumption point, not a dead end.
Read post →The Switzerland of deploy: why neutrality is the moat
Any cloud can wrap its own API in an agent interface — that's table stakes. The position none of them can take is being the neutral aggregator of their own competitors. Why provider-neutrality is the defensible moat, already proven in code on the database primitive.
Read post →Handing an agent the keys to production
You don't trust an agent with production by trusting it to be careful — you make careless impossible. A tour of the five guardrails baked into the interface: isolated previews, auto-rollback, diff/plan/apply, an audit trail, and a secret the agent never sees.
Read post →The seed idea: why DeployMill exists
Agents could write a whole app and then stall at the one step that mattered — shipping it. DeployMill started as a single stubborn idea: make deploying a first-class thing an agent can do end to end, safely and neutrally.
Read post →