# The Cryptid Field Office: an AI triages sightings, a person signs off

> Source: <https://dev.to/mamubeenkhan/the-cryptid-field-office-an-ai-triages-sightings-a-person-signs-off-57go>
> Published: 2026-09-25 11:07:12+00:00

*This is a submission for the [Sanity Challenge, Path Two: Vibe-Code Something Strange](https://dev.to/challenges/sanity-2026-09-16)*

**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** (Sanity**App 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](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).
