It's Got What Content Craves: Sanity, Built for the People of Idiocracy A developer built a Sanity-based Department of Agriculture simulation inspired by Idiocracy, in which a Claude agent drafts a proposal to water crops, a human Cabinet approves it through a picture-button Studio, and Sanity Workflows executes the watering and harvest. The project, built in a single Claude Code session, passed 27 of 27 timed edits across three interfaces and uses two Studio workspaces sharing one schema over a single dataset. This is a submission for the Sanity Challenge, Path Two: Vibe-Code Something Strange https://dev.to/challenges/sanity-2026-09-16 This article provides a step by step build of a Sanity project for the Department of Agriculture from Idiocracy, where every field is irrigated with Brawndo. An agent proposes watering the crops, a human Cabinet approves in a picture-button Studio, and Sanity Workflows waters and harvests the fields. A stopwatch then times the same edits in three interfaces. github.com/xbill9/devto-sanity https://github.com/xbill9/devto-sanity | Project | Sanity ukyhb6bu , dataset production public read , Growth trial | | Studio | Sanity Studio 6, two workspaces over one schema: Kiosk and Stock | | Workflow | joes-plan v1, @sanity/workflow- 0.33.0 early access | | Front end | Next.js 16 + next-sanity live content, on Cloud Run | | Dashboard app | App SDK Cabinet Room | | Agent | Claude claude-opus-5 + @sanity/workflow-mcp | | Result | agent → Cabinet → watering → harvest on the live project; 27 of 27 timed edits correct | In Idiocracy the crops are dying because every field is watered with Brawndo. It's got electrolytes. Joe's plan is to water them. With water. Like from the toilet. This is that Department of Agriculture, run on Sanity. The Secretary of the Interior is an agent . It drafts a proposal to water the fields and submits it. The Cabinet , a person, approves or rejects it. Citizens vote on a public scoreboard. An approved plan waters the fields, they sprout, and a few minutes later they are harvested. A rejected plan leaves a dust bowl. The one pitch for a CMS that holds up is that people who can't use git can use a data store. So the editing Studio is a kiosk of giant picture buttons, like the hospital in the film. | Surface | Built with | Who uses it | |---|---|---| | The Kiosk | Studio with custom picture-button inputs + the Workflows plugin | the Cabinet | | Joe's Plan | Sanity Workflows | the agent, the Cabinet, the runtime | | brawndo.gov | Next.js + next-sanity | citizens | | The Cabinet Room | App SDK dashboard app | the Cabinet | brawndo.gov: brawndo-gov-289270257791.us-central1.run.app https://brawndo-gov-289270257791.us-central1.run.app — vote on a field; voting again replaces your vote. The Kiosk is hosted at brawndo-agriculture.sanity.studio and signs in through the Sanity Dashboard. https://github.com/xbill9/devto-sanity https://github.com/xbill9/devto-sanity make check runs the offline suite. The README has the go-live runbook. The whole project was built in one Claude Code session, from an empty directory to a harvested field. With what Sanity sells. A schema'd JSON store with a query language is common. Three things in Sanity's docs are harder to find elsewhere: A Path Two app built around the second one is the right Brawndo. npx sanity new creates one with no account and a 72-hour claim link source ./env.sh in the repository root The schema is defined once and built twice. buildSchema {kiosk: true} swaps a picture-button input into every enumerated field. buildSchema {kiosk: false} keeps Sanity's defaults. Two Studio workspaces share one dataset, so the stock Studio is the same data without the Brawndo. A proposal has no status field . Its stage lives in its workflow instance, which is itself a Sanity document, so there is one source of truth for where a plan stands. petition ──submit──▶ cabinet ──approve──▶ watering ──▶ growing ── harvestAt ──▶ harvest └──reject──▶ dust-bowl The definition runs in Sanity's in-memory test bench before it is deployed: ✓ definitions/joes-plan.test.ts 8 tests Tests 8 passed 8 The tests prove the Secretary cannot approve, a rejection ends in the dust bowl, failed watering ends in the dust bowl, and harvest waits for harvestAt . 🔎 Tip: an effect handler's outputs land in $effects '