{"slug": "how-to-host-an-app-your-ai-built-with-its-own-url-and-saved-data", "title": "How to host an app your AI built with its own URL and saved data", "summary": "Charming, a hosting platform, enables developers to turn apps built inside AI chats like Claude into permanently hosted applications with their own URLs and persistent data storage. The platform uses an MCP connector to let Claude write and deploy ES modules with key-value storage, allowing apps to survive beyond the chat session and be accessed by multiple agents.", "body_md": "Claude can write a working app right inside a chat. Close the chat and it's gone: no URL, no saved data, nothing to open tomorrow. This is how you turn that throwaway app into a hosted one with its own URL and a database behind it. The example is a reading list, live at [charm.ing/avi/reading-list](https://charm.ing/avi/reading-list).\n\nThe thing doing the hosting is [Charming](https://usecharming.com). Claude writes the code, Charming runs it. You keep using Claude, or whatever agent you already pay for. Charming is just where the app lives once the conversation ends.\n\nThe [canonical guide](https://usecharming.com/blog/how-to-host-an-app-built-with-claude) has the full walkthrough and screenshots. This version is for developers: how the connector hooks up, what the published module looks like, and how other agents reach it afterward.\n\nCharming plugs into Claude as a custom MCP connector. One-time setup:\n\n`https://charm.ing/mcp`\n\n.Screenshots and troubleshooting: [usecharming.com/setup/claude](https://usecharming.com/setup/claude/).\n\nIn a normal Claude chat:\n\nBuild me a reading list app. I want to add books with a title and author, move each one between to-read, reading, and read, and give finished books a star rating.\n\nClaude writes it and previews it inline. So far it's just like any other in-chat app. Then:\n\nCreate this on Charming so it has its own URL and saves my data.\n\nClaude calls the connector and hands back a live URL. That's your hosted app, with storage behind it and an API other agents can call later.\n\nUnder the connector, Claude authors and ships one ES module with two named exports:\n\n``` js\nexport const manifest = {\n  id: 'reading-list',\n  version: '0.0.1',\n  displayName: 'Reading list',\n  capabilities: {\n    imports: ['buildy:storage/kv@1.0'], // gives the handlers env.storage\n    exports: [],\n  },\n};\n\nexport const routes = [\n  {\n    op: 'list',\n    method: 'GET',\n    handler: async (_input, { env }) => (await env.storage.get('books')) ?? [],\n  },\n  {\n    op: 'add',\n    method: 'POST',\n    handler: async (input, { env }) => {\n      const books = (await env.storage.get('books')) ?? [];\n      books.push({ ...input, status: 'to-read' });\n      await env.storage.put('books', books);\n      return books;\n    },\n  },\n];\n```\n\nNo server to stand up, no database to provision. `env.storage`\n\nis per-app key/value storage that survives every later update, and each declared route becomes a discoverable operation at `/app/<id>/api/*`\n\n.\n\nOnce it's published you're not locked into the chat that built it. Two ways in:\n\n`https://charm.ing/mcp`\n\nand it can read or write the same app's data.`POST https://charm.ing/api/pair/start`\n\npairs an agent to your account. From there `POST /app`\n\ncreates an app and `PUT /app/<id>`\n\nupdates one, and every declared route is callable at `/app/<id>/api/<op>`\n\n.One data store, more than one agent. From a fresh chat I asked Claude to add the Harry Potter series to the same list. It read the existing app over the connector and queued all seven as to-read. I never touched the storage layer.\n\nClose the Claude conversation. Open the app's URL again days later, in a new tab. Everything's still there: the books, the statuses, the ratings. They live in Charming's storage, not in the chat transcript.", "url": "https://wpnews.pro/news/how-to-host-an-app-your-ai-built-with-its-own-url-and-saved-data", "canonical_source": "https://dev.to/usecharming/how-to-host-an-app-your-ai-built-with-its-own-url-and-saved-data-18ma", "published_at": "2026-07-24 20:17:03+00:00", "updated_at": "2026-07-24 20:33:21.768824+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-infrastructure"], "entities": ["Claude", "Charming", "Charm.ing"], "alternates": {"html": "https://wpnews.pro/news/how-to-host-an-app-your-ai-built-with-its-own-url-and-saved-data", "markdown": "https://wpnews.pro/news/how-to-host-an-app-your-ai-built-with-its-own-url-and-saved-data.md", "text": "https://wpnews.pro/news/how-to-host-an-app-your-ai-built-with-its-own-url-and-saved-data.txt", "jsonld": "https://wpnews.pro/news/how-to-host-an-app-your-ai-built-with-its-own-url-and-saved-data.jsonld"}}