Claude Code built the app. I refused to let it publish itself. A developer built Drobek, a hosted platform that lets coding agents like Claude Code create, edit, and preview small browser apps through three MCP tools — create_app, write_files, and publish — while keeping the final publish step an explicit human decision. Failed builds are retained as versions with compiler error details (file, line, column, message) so the agent can self-repair, and preview URLs always serve the latest successfully compiled version while production stays put. The public core is released under AGPL-3.0 on GitHub, with OAuth scopes separating read, write, and publish access. Claude Code can write an app, fix a broken import, and hand me a working preview. That still does not mean it should decide when the app becomes public. This is the line I kept coming back to while building drobek https://www.drobek.app/ . The coding agent should be fast inside the build loop. Publishing should remain an explicit human decision. Drobek launched on Product Hunt today https://www.producthunt.com/products/drobek?launch=drobek . The short version fits into 33 seconds: The useful part is the contract behind the animation. For the normal path, the agent works through three MCP tools: php create app - starter, app ID, briefing, preview URL write files - immutable version, compile result, preview URL publish - the selected compiled version becomes public create app gives the agent a compiling starter and the rules of the environment. write files applies the changed text files and runs esbuild on the server. The response includes compile.ok . If the build fails, it also includes the file, line, column, and compiler message. The agent can use that result for its next edit without opening another terminal or asking me to paste an error back into the conversation. A failed build is still kept as a version. The preview continues to serve the latest version that compiled successfully. This is a small detail, but I like what it does to the workflow. A broken edit becomes something the agent can inspect and repair. It does not replace the working preview, and it does not erase the attempt. I still open the preview. A green esbuild result tells me the imports and syntax survived. It does not tell me that the button makes sense, the mobile layout works, or a destructive action is safe. The preview URL follows the newest successful build: https://