<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>The DeployMill blog</title>
    <link>https://deploymill.com/blog</link>
    <atom:link href="https://deploymill.com/blog/rss.xml" rel="self" type="application/rss+xml" />
    <description>Ideas, examples, and the thinking behind an agent-safe control plane for shipping web apps.</description>
    <language>en-us</language>
    <lastBuildDate>Sun, 16 Aug 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Multi-tenant when the tenant is an agent</title>
      <link>https://deploymill.com/blog/multi-tenant-when-the-tenant-is-an-agent</link>
      <guid isPermaLink="true">https://deploymill.com/blog/multi-tenant-when-the-tenant-is-an-agent</guid>
      <pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>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.</description>
    </item>
    <item>
      <title>Code an agent can change without breaking it</title>
      <link>https://deploymill.com/blog/code-an-agent-can-change</link>
      <guid isPermaLink="true">https://deploymill.com/blog/code-an-agent-can-change</guid>
      <pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>The primary reader of this codebase isn&apos;t a human — it&apos;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.</description>
    </item>
    <item>
      <title>Apps that sleep</title>
      <link>https://deploymill.com/blog/apps-that-sleep</link>
      <guid isPermaLink="true">https://deploymill.com/blog/apps-that-sleep</guid>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>Most apps an agent deploys aren&apos;t busy — they should sleep and wake on demand. The hard part isn&apos;t the sleeping, it&apos;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.</description>
    </item>
    <item>
      <title>Making free safe to give away</title>
      <link>https://deploymill.com/blog/making-free-safe-to-give-away</link>
      <guid isPermaLink="true">https://deploymill.com/blog/making-free-safe-to-give-away</guid>
      <pubDate>Sun, 26 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>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.</description>
    </item>
    <item>
      <title>The guardrail that wasn&apos;t</title>
      <link>https://deploymill.com/blog/the-guardrail-that-wasnt</link>
      <guid isPermaLink="true">https://deploymill.com/blog/the-guardrail-that-wasnt</guid>
      <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>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&apos;t wrong; it was checking the wrong direction. Why a guardrail that isn&apos;t a hard automated check isn&apos;t a guardrail.</description>
    </item>
    <item>
      <title>The migration that rewrote history</title>
      <link>https://deploymill.com/blog/the-migration-that-rewrote-history</link>
      <guid isPermaLink="true">https://deploymill.com/blog/the-migration-that-rewrote-history</guid>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>A user reported a job stuck for days. It wasn&apos;t — I&apos;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.</description>
    </item>
    <item>
      <title>Deploying the thing that does the deploying</title>
      <link>https://deploymill.com/blog/deploying-the-deployer</link>
      <guid isPermaLink="true">https://deploymill.com/blog/deploying-the-deployer</guid>
      <pubDate>Sun, 05 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>DeployMill deploys DeployMill — the best test harness I&apos;ve ever had, with one terrifying failure mode. Why a bug in the self-deploy path is a deadlock you can&apos;t deploy your way out of, why the maintenance clock can&apos;t be an app, and why I keep the sharp edge anyway.</description>
    </item>
    <item>
      <title>The one-file fix that took down all of production</title>
      <link>https://deploymill.com/blog/one-file-fix-that-took-down-prod</link>
      <guid isPermaLink="true">https://deploymill.com/blog/one-file-fix-that-took-down-prod</guid>
      <pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>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.</description>
    </item>
    <item>
      <title>From prompt to production in one call</title>
      <link>https://deploymill.com/blog/prompt-to-production</link>
      <guid isPermaLink="true">https://deploymill.com/blog/prompt-to-production</guid>
      <pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Engineering</category>
      <description>Tell your agent to ship an app and a minute later there&apos;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.</description>
    </item>
    <item>
      <title>Handing an agent the keys to production</title>
      <link>https://deploymill.com/blog/keys-to-production</link>
      <guid isPermaLink="true">https://deploymill.com/blog/keys-to-production</guid>
      <pubDate>Sat, 06 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Ryan Detzel</dc:creator>
      <category>Vision</category>
      <description>You don&apos;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.</description>
    </item>
  </channel>
</rss>
