Back room · colophon
How this museum was built
Every building keeps a back room where the plans are stored. This is ours. From here on, the labels only say what happened.
What this is
The Museum of Unfinished Futures is a small website of made-up inventions from futures that never happened. Six exhibits hang in three wings, two per wing. Each exhibit is a blueprint drawing with a plaque and a choice. Each choice leads to an ending, and each ending opens a door to a different exhibit. The endings you reach become a ticket you can take away.
How it is made
The site is built with Next.js 16 and Sanity. Exhibits, wings and endings are separate documents that point to one another. An exhibit holds two to four choices; each leads to its own ending, which can carry consequence tags and a link to the next exhibit.
The blueprint plates are original SVG drawings, stored as Sanity image assets, checked for unsafe markup and drawn into the page in each wing's accent colour.
New exhibits go through a curator review flow built into Sanity Studio. A draft is submitted, then approved against that exact revision. It is published only through a guarded action that also waits for Sanity's own validation to pass.
Your ticket lives entirely in the page address (/your-future?trace=…). There are no accounts and nothing is stored. The same address always composes the same ticket, so it can be shared.
Who built it
One founder, directing AI workers. From the evening of September 21, 2026, Claude Code (Claude Opus 5.5) orchestrated: it wrote a task packet for each job, handed it to a worker and reran the checks itself. Code and scripts came from OpenAI Codex (gpt-5.5). Interface work, the blueprint plates and browser tests came from Claude Sonnet 5 agents. The newer fiction came from a Claude Opus writer. Most work was reviewed by a different model family than the one that built it: Codex gpt-5.6-sol or a Claude reviewer. Before that, a different setup built the first version, including the Sanity connection and the review flow. Deploys waited for the founder's approval.
What went wrong
- The default Turbopack build failed in the worker's sandbox, which blocked a helper process from opening a port. The build now uses Webpack.
- A reviewer found that the custom publish button checked curator approval but skipped Sanity's schema validation. Publishing now waits for validation to pass.
- On the same day, two workers from two different model families wrote a test that could not fail. Proving that each assertion can fail is now a written step.
- The ticket page once read "Your trace carries carrying…" while every automated check passed. Only reading the page caught it.
- Publishing the three newest exhibits stopped halfway: each review record held a strong reference to its exhibit, and a brand-new exhibit had nothing published to point to. The reference is now weak, and a second run finished the job.
What is not here
- Only six exhibits.
- The review flow covers exhibits only. Endings were published by a separate, guarded script.
- Every ticket shares one link-preview picture; only the title and description change, because of a limit in this version of Next.js.
- The floor plan on a wing page does not yet light up the room you are in.
- The Sanity command-line and Studio tooling carries 15 known dependency advisories (12 moderate, 3 high). The only automatic fix is an incompatible Sanity downgrade, so it was not applied.
Source code: https://github.com/syedjawad11/museum-of-unfinished-futures · Sanity project ID wa27n68e