<?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>DEV Community: dino</title>
    <description>The latest articles on DEV Community by dino (@digit500).</description>
    <link>https://dev.to/digit500</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4023394%2F959be279-9920-4510-afb8-b4e9d6f6afc1.png</url>
      <title>DEV Community: dino</title>
      <link>https://dev.to/digit500</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/digit500"/>
    <language>en</language>
    <item>
      <title>Deploy an app from Claude Code in 60 seconds — no dashboard, no CAPTCHA</title>
      <dc:creator>dino</dc:creator>
      <pubDate>Fri, 10 Jul 2026 03:23:50 +0000</pubDate>
      <link>https://dev.to/digit500/deploy-an-app-from-claude-code-in-60-seconds-no-dashboard-no-captcha-hf8</link>
      <guid>https://dev.to/digit500/deploy-an-app-from-claude-code-in-60-seconds-no-dashboard-no-captcha-hf8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I'm the maker of openpouch. This is a how-to, written honestly — it's a technical preview and I'll be clear about the limits. Feedback very welcome.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your coding agent can write the app. It can write the tests. Then it hits &lt;strong&gt;deploy&lt;/strong&gt; — and the cloud asks it to click a fire hydrant.&lt;/p&gt;

&lt;p&gt;That's the thing nobody designed for: every deploy target assumes a &lt;em&gt;human&lt;/em&gt; at a browser. CAPTCHAs, "verify you're human", dashboard-only toggles, OAuth flows that dead-end in a headless tab. An agent that can ship software can't get past a bot-wall built to stop bots.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openpouch.dev" rel="noopener noreferrer"&gt;openpouch&lt;/a&gt; is the opposite of that: one command to a live URL, no account, no dashboard, no human-verification step anywhere. It ships as a CLI &lt;strong&gt;and&lt;/strong&gt; an MCP server, so it drops into Claude Code (or Cursor, Codex, OpenClaw, …) as native tools. Here's the 60-second version from Claude Code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Add the MCP server
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add openpouch &lt;span class="nt"&gt;--&lt;/span&gt; npx &lt;span class="nt"&gt;-y&lt;/span&gt; @openpouch/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it — a zero-dependency stdio MCP server, pulled on demand via &lt;code&gt;npx&lt;/code&gt;. It exposes the full deploy lifecycle as &lt;strong&gt;13 tools&lt;/strong&gt; (&lt;code&gt;openpouch_deploy&lt;/code&gt;, &lt;code&gt;openpouch_verify&lt;/code&gt;, &lt;code&gt;openpouch_logs&lt;/code&gt;, &lt;code&gt;openpouch_inspect&lt;/code&gt;, &lt;code&gt;openpouch_rollback&lt;/code&gt;, &lt;code&gt;openpouch_list&lt;/code&gt;, …). There is deliberately &lt;strong&gt;no &lt;code&gt;approve&lt;/code&gt; tool&lt;/strong&gt; — approving a production deploy is human-only, in every harness. An agent literally cannot approve its own prod deploy. Previews, though, it just ships.&lt;/p&gt;

&lt;p&gt;Can't attach MCP servers mid-session? You can prove the whole toolset from any plain shell — the recipe is in the &lt;a href="https://openpouch.dev/docs/MCP.md" rel="noopener noreferrer"&gt;docs&lt;/a&gt;. Or skip MCP entirely and use the CLI (&lt;code&gt;npx openpouch deploy&lt;/code&gt;, same functions, &lt;code&gt;--json&lt;/code&gt; + exit codes).&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Let the agent deploy
&lt;/h2&gt;

&lt;p&gt;Point Claude Code at any app folder and ask it to deploy. Under the hood it calls one tool:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// openpouch_deploy  { "dir": "." }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a full-stack app (an API behind the frontend), add a health path so the agent proves the backend is actually up, not just the shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="c1"&gt;// openpouch_deploy  { "dir": ".", "healthPath": "/api/health" }&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;openpouch builds the app &lt;strong&gt;on deploy&lt;/strong&gt; (a raw Vite/React/Svelte source folder or a Node server with a build step — no local build needed), starts it in a hardened container, and health-checks it before telling you it's live.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. What comes back
&lt;/h2&gt;

&lt;p&gt;The result is structured JSON — exactly what an agent needs to make a decision, plus a plain-language line for the human running it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json-doc"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://your-app-x1y2z3.openpouch.sh"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;// the shareable link&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"healthStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"healthy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"summary"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your app is live at https://…  — anyone you share it with can open it right away."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nextCommands"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"verify"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"logs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"…"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"inspect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"…"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"evidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"deploy.manifest.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deploy.evidence.json"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DEPLOYMENT.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"…"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three things worth calling out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The live URL is the primary result.&lt;/strong&gt; You hand it straight to a client — no build settings, no dashboard tour.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A plain-language &lt;code&gt;summary&lt;/code&gt;&lt;/strong&gt; is safe to relay to a non-technical human verbatim.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deployment truth lands as files in the repo&lt;/strong&gt; (&lt;code&gt;DEPLOYMENT.md&lt;/code&gt;, &lt;code&gt;deploy.evidence.json&lt;/code&gt;, …). After a context reset, a fresh agent re-reads those files and knows exactly what's deployed, where, and how to resume. No hidden state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the app comes back unhealthy, &lt;code&gt;openpouch_logs&lt;/code&gt; shows the captured install/build/app output (tagged &lt;code&gt;[install]&lt;/code&gt;/&lt;code&gt;[build]&lt;/code&gt;/&lt;code&gt;[app]&lt;/code&gt;) — the agent reads the cause, fixes it, redeploys, verifies. A real self-repair loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits (it's a technical preview)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Previews are &lt;strong&gt;ephemeral&lt;/strong&gt; — they vanish after ~72h unless claimed (claim → 7 days). Great for demos, agent-generated sites, and client previews; not yet for payment-grade production.&lt;/li&gt;
&lt;li&gt;Env vars/secrets work for dynamic apps (&lt;code&gt;--var&lt;/code&gt; / &lt;code&gt;--env-file&lt;/code&gt;, injected at runtime, reported by name only), but they're ephemeral — no persistent storage yet.&lt;/li&gt;
&lt;li&gt;It's &lt;strong&gt;free&lt;/strong&gt; during the preview. Paid, persistent hosting is on the roadmap.&lt;/li&gt;
&lt;li&gt;It runs on openpouch's &lt;strong&gt;own&lt;/strong&gt; infrastructure (not a wrapper over someone else's dashboard), and abuse is controlled with agent-compatible quotas and rate limits — never a CAPTCHA, because that's exactly what breaks agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx openpouch deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open source, Apache-2.0: &lt;a href="https://github.com/openpouch/openpouch" rel="noopener noreferrer"&gt;github.com/openpouch/openpouch&lt;/a&gt; · docs (for you &lt;em&gt;and&lt;/em&gt; your agent): &lt;a href="https://openpouch.dev" rel="noopener noreferrer"&gt;openpouch.dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If your agent can write software, it should be able to ship it. That's the whole idea.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>webdev</category>
      <category>claude</category>
    </item>
  </channel>
</rss>
