{
  "markdown": "# Nextbound\n\nStop searching. Nextbound is an MCP for ChatGPT and Codex. It turns one piece of content into a version made for you.\n\nA creator publishes one artifact, once. Each recipient opens it inside ChatGPT or Codex and gets a version compiled for them, from context that stays on their side.\n\n**Category:** Apps for your life\n\n**Live demo (no setup):** https://nextbound-adaptive-media.netlify.app/nextbound.html?scenario=procedural-loop\n\n**Public MCP endpoint (no authentication):** `https://nextbound-adaptive-media.netlify.app/mcp`\n\n**Demo video:** https://youtu.be/eCJZ_co_HIA\n\n## Team\n\n| Name | Role |\n|---|---|\n| Zlata | Initiator, product vision |\n| Chrys | Technical architecture |\n| Take | Development |\n| Edith | Product |\n\n## What it does\n\nThe demo uses a fictional sneaker drop from a fictional creator, Luna Vale, and three audience personas:\n\n- **Alex**, CEO of a tech company. An executive series page about travel, comfort and focus.\n- **Camille**, artistic director. An editorial atelier spread about texture, softness and emotion.\n- **Maya**, developer. A dark technical page built around a code block and durability tests.\n\n`show_original_artifact` renders the artifact exactly as published, with no personalization. Putting the original next to the three versions is the product in one screen.\n\nEach persona has its own tool, so asking for Alex returns Alex's artifact and never a combined gallery.\n\n## For judges: three ways to test\n\n### 1. Browser, 30 seconds, nothing to install\n\nOpen the [live demo](https://nextbound-adaptive-media.netlify.app/nextbound.html?scenario=procedural-loop) and switch between Alex, Camille and Maya.\n\n### 2. ChatGPT\n\nSupported on ChatGPT with Developer mode. Best viewed on desktop.\n\n1. **Settings**, **Developer mode**, **Create an app**\n2. MCP URL: `https://nextbound-adaptive-media.netlify.app/mcp`\n3. Authentication: **No authentication**\n4. Connect, open a new chat, add Nextbound, then ask:\n\n```text\nShow Luna's original artifact.\nShow Luna's artifact for Alex.\nShow Luna's artifact for Camille.\nShow Luna's artifact for Maya.\n```\n\n### 3. Codex\n\n```bash\ncodex mcp add nextbound --url https://nextbound-adaptive-media.netlify.app/mcp\n```\n\nThen start a task and ask: `Open Nextbound and show Luna's artifact for Maya.`\n\n## Run locally\n\nRequires Node.js 20 or later. Tested on Node 22.\n\n```bash\nnpm install\nnpm run typecheck\nnpm test\nnpm start\n```\n\nThe local MCP endpoint is `http://127.0.0.1:3000/mcp`.\n\nBrowser preview with all personas and demo states:\n\n```bash\nnpm run dev:all\n```\n\nThen open `http://127.0.0.1:4173/`.\n\nInspect the MCP surface directly:\n\n```bash\nnpm run inspect\n```\n\n## MCP surface\n\nEight tools over Streamable HTTP.\n\n| Tool | Purpose |\n|---|---|\n| `show_alex_artifact` | Render the artifact for Alex, with widget |\n| `show_camille_artifact` | Render the artifact for Camille, with widget |\n| `show_maya_artifact` | Render the artifact for Maya, with widget |\n| `show_original_artifact` | Render the artifact as published, no personalization |\n| `search_public_intents` | Find a published creator artifact |\n| `get_creator_profile` | Open a creator and their published work |\n| `get_intent` | Inspect an original artifact before rendering |\n| `generate_experience` | Compatibility alias for cached client manifests |\n\nWidgets are served as MCP Apps resources (`text/html;profile=mcp-app`) and are also embedded in the tool result, so a client never needs a second round trip to render.\n\n## Architecture\n\n![Nextbound architecture](https://raw.githubusercontent.com/42thefrog/adaptivemedia/main/assets/architecture.png)\n\nA creator publishes one artifact into the Nextbound API. The experience engine compiles it deterministically. Two surfaces consume the result: the web showcase, and the MCP server that Codex and the ChatGPT app call. The persona knowledge base never leaves the client: only the request crosses the boundary, never the person.\n\n## Design decision: determinism\n\nThe experience engine runs on deterministic TypeScript domain services rather than a live model call at render time. This is deliberate. Someone opening the same artifact twice has to get the same experience, today and tomorrow. Personalisation that changes on every load is noise, and it makes attribution for the creator impossible.\n\nThe nine persona experiences are defined in `server/data/seed.ts` (three creators by three personas), and `server/service.test.ts` holds the invariants.\n\n## Context stays on the client\n\nPersona knowledge bases live in `knowledge/` as skill files: `profile.md`, `style.md`, `commands.json`. They describe a person's history, taste and constraints, and they are not a server-side user profile.\n\n## How Codex and GPT-5.6 were used\n\nThe project was created between **July 17 and July 21, 2026**, entirely inside the Submission Period. Nothing in this repository predates the hackathon.\n\n**Codex /feedback session ID:** `019f7e81-75a0-7f80-9035-64bd9c3e66ec`\n\nWe designed the architecture together with Codex, wrote an implementation plan, and executed it step by step. `IMPLEMENTATION_PLAN.md` and `PROPOSED_STRUCTURE.md` are the artifacts of that process. The MCP integration was done the same way.\n\nRunning on GPT-5.6, Codex wrote:\n\n- the Streamable HTTP MCP server and its tool surface (`server/index.ts`)\n- the deterministic persona services and seed data (`server/service.ts`, `server/data/seed.ts`)\n- the MCP Apps widget resource (`web/mcp-widget.html`)\n- the browser preview and the artifact feed (`web/src/`)\n- the Netlify function entry and deployment config (`server/netlify-mcp-entry.ts`, `netlify.toml`)\n- the test suite (39 tests, `npm test`)\n\nWhat mattered most was not speed but legibility. Codex wrote down what it was doing and why at every step, so at any moment we knew where we were in a project that only existed for four days, and four people could work against one shared plan.\n\n## Challenges\n\nThe hardest bug: the MCP tool returned correct text in ChatGPT while the widget refused to render, first as an empty block, then as `Failed to fetch template`.\n\nWe broke the deadlock by treating the deployed server as a black box and probing it with raw JSON-RPC calls instead of trusting the client. `resources/list` was correct, `resources/read` returned the full HTML, the assets returned 200. The server was fine, so the fault was in what the client was being told to do.\n\nThree things were wrong, each sufficient on its own:\n\n1. The tool result carried no `_meta`, so the template was declared on the descriptor but never echoed on the result.\n2. The resource declared a custom widget domain whose root returned 404, so the client tried to fetch the template from an origin that served nothing.\n3. The widget was only reachable through a separate `resources/read` call, which some clients never made.\n\nThe fixes were to echo `_meta` on the result, drop the custom domain, and embed the widget resource directly in the tool result.\n\n## How this project maps to the judging criteria\n\n**Technological implementation.** A working Streamable HTTP MCP server with eight tools, MCP Apps widget resources embedded directly in tool results, deterministic domain services, 39 passing tests, and a public deployment anyone can connect to without credentials. Every component listed under [How Codex and GPT-5.6 were used](#how-codex-and-gpt-56-were-used) was built with Codex running on GPT-5.6, from the MCP server and the persona services to the widget resource, the Netlify deployment and the tests. That section names the files, the dates and the `/feedback` session ID, so the claim is checkable against the commit history rather than taken on trust.\n\n**Design.** Not a proof of concept: a complete path from a published artifact to a rendered personal experience, reachable three ways (browser, ChatGPT, Codex), with four distinct rendered outputs including the unpersonalized original for comparison. Loading, empty and error states are covered in the preview.\n\n**Potential impact.** The problem is measurable and shared: an hour of scrolling to find one thing that fits. The audience is specific: people already working inside ChatGPT or Codex. The demonstration addresses the problem directly, and the economics follow from it, since a brand pays for one experience made for one person rather than for reach nobody asked for.\n\n**Quality of the idea.** Not a recommender and not prompt-level personalisation. One attributable source artifact, one deterministic render per person, and a knowledge base that stays on the reader's device. The same person gets the same experience every time, which is what makes attribution possible for the creator.\n\n## Known limits of the MVP\n\nState for like, follow, save and share is in memory and resets when the server restarts. Share returns a stable demo reference, not a public URL. No authentication, no database, no production payment path.\n\n## License\n\n[Apache-2.0](LICENSE)\n",
  "bytes": 8928,
  "sha": "f4caf7f4be4f03a59948e32c7f976637432378ad46cb4842d1cbc7940cf5e9fe",
  "repo_slug": "42thefrog/adaptivemedia",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/okf_42thefrog_adaptivemedia_knowledge_index__fa66da15/readme"
}