This is a submission for the Sanity Challenge, Path Two: Vibe-Code Something Strange The Cryptid Field Office: a deadpan government bureau that takes every unexplained sighting seriously. Cryptids, lights over the desert, a figure on the stairs, a jinn in the storeroom, a lodge that is on no property register. You file a report. An AI Field Investigator reads it, scores it and decides where it goes. A person signs off on anything unclear. Every case ends in a stamp: CLASSIFIED, DEBUNKED or INCONCLUSIVE.
It is silly on the surface and serious underneath. Take away the Bigfoot and it is a report-triage pipeline: public intake, AI screening, linking related reports, a human decision, and an audit trail. Swap the creatures for potholes and you have a city 311 system. The same pattern runs bug trackers, insurance claims and fraud review. That was the point: something strange, built on something real.
It has three surfaces on one Sanity content lake:
| What it is | Who uses it | |
|---|---|---|
| Public site (Next.js) | Case map and files, a four-step report form, a live "your report is being triaged" page, and a public Director's Desk | Anyone. No login. |
| Case Board (SanityApp SDK ) | A live corkboard: drag case photos around, pull a red pin from one card onto another to draw a string, approve or reject the AI's suggested links, fire workflow actions | Bureau staff |
| Studio | Custom desk, status badges, a map location picker, and the official Workflows plugin | Editors |
The part I am proudest of: the agent and a person move a case through exactly the same workflow actions. The AI triages a report, a visitor on the Director's Desk opens an investigation, and a staff member closes it from the Case Board, and all three are the same fireAction on the same instance, recorded in one audit trail.
**Live site (no login needed): [https://cryptid-field-office-mubeen9.vercel.app](https://cryptid-field-office-mubeen9.vercel.app)**
Try it in about a minute:
The Studio and Case Board need a Sanity login, so the video and screenshots below show them. The Director's Desk gives you the same workflow power without one.
The video shows the whole loop, from a public report to a stamp, and it is the only place to see the Case Board and Studio without a Sanity login.
https://github.com/MAMubeenKhan/cfo
The repo includes PLAN.md (the full runbook I had Claude write before any code) and BUILDLOG.md (an honest day-by-day log, including everything that broke).
Tools: Claude Code (Opus 5.5 for planning, Sonnet 5 for most building), the official sanity-best-practices agent skill, Playwright, axe-core and Lighthouse for testing. I am non-technical; I directed, Claude built.
My first prompt was the challenge page pasted in, plus: "give me options on what we should make and tell me what is best and why." Claude scored four ideas against the four judging criteria and both bonuses and recommended the cryptid bureau, because a case moving from triage to a verdict is exactly the "agent moves it forward, a person approves it" pattern, and a red-string board is a natural App SDK app.
My honest worry was: "won't it be weird and silly and make me a joke?" Claude's answer became the design rule for the whole project: play it deadpan. The humour lives in the bureaucracy (case numbers, stamps, memos), never in the subject. A silly idea with a real workflow reads as clever; a silly idea with three screens reads as a joke.
Then I kept pushing the scope: "include UFOs, aliens, Area 51", then "ghosts, jinn, spirits and occult", then "secret cults and societies." That created a real design question I want to be upfront about, because it shaped the code:
Before writing code I asked for "an end to end plan so a new session doesn't have to do any planning, including edge cases, no tests until completion, only one comprehensive test at the end." Claude read the Workflows and App SDK docs, checked real package versions, and wrote a ~500-line runbook. Three mid-flight prompts shaped it: "it should be attractive with good UX and highly polished", "as per current standards" (this became a WCAG 2.2 AA, Core Web Vitals, dark-mode, reduced-motion spec), and my memory file (a memory.md Claude reads at every session start and appends lessons to).
connection document with provenance and confidence: the red strings. Witnesses are anonymous codenames with a credibility score computed across their cases.case-lifecycle definition: five stages, five automated effects, human actions for the Director and Investigator. It passed sanity-workflows deploy --check on the first attempt. I then ran all 30 seeded cases through the client.agent.action.prompt. useQuery streams, useWorkflowEngine, useWorkflowSession, @sanity/workflow-diagram).
I would rather show the dead ends than pretend there were none.
npm install left a half-extracted zod, which made every Sanity CLI command fail with MODULE_NOT_FOUND, then made a second install fail with Invalid Version:. Fix: delete node_modules and the lockfile, install fresh, in the background. On this network installs took 10 to 25 minutes.sanity-best-practices skill and it caught that @sanity/icons v5 has framework: nextjs and a redeploy fixed it. Deployment Protection was also putting a login in front of the site.scripts/deploy-web.sh). static folder. And demo cases I had hidden were still appearing as "related files" on public pages, so the query now drops a connection if either end is hidden.noindex header to its free addresses.prod.wf-instance.<caseId>) made starting a case idempotent. Bureau settings. cyh4xyo1 · production (public)https://cyh4xyo1.api.sanity.io/v2026-09-01/data/query/production?query=*[_type=="case"][0...5]{caseNumber,title,category,status}
case (workflow subject with a status mirror), witness (anonymous, credibility computed across cases), subject (six categories), region (a restricted flag drives the Area 51 banner and redactions).