Back to News & Insights
Artificial Intelligence September 18, 2026 · 9 min read

It's Got What Content Craves: Sanity, Built for the People of Idiocracy

An agent proposes watering the crops, a human Cabinet approves in a picture-button Studio, and Sanity Workflows waters and harvests. Plus a stopwatch on three ways to edit the same data.

It's Got What Content Craves: Sanity, Built for the People of Idiocracy

This is a submission for the Sanity Challenge, Path Two: Vibe-Code Something Strange

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.

| | | |---|---| | 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) on brawndo.gov's server, calling the Workflows engine | | Runtime | Sanity Functions (Blueprint), plus Cloud Scheduler for the harvest clock | | 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 + Sanity Functions | 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 Vote on a field: keep ⚡ Brawndo or switch to 💧 water. Your vote is marked; voting again replaces it. Press 🏛️ Summon the Secretary. The agent reads the tallies and sends the Cabinet a plan for the fields that voted for water. The Cabinet approves in the Kiosk. Approved fields turn 💧 and sprout 🌱 within seconds, and are harvested 🌽 five minutes later.

Nothing runs on anyone's laptop. The Kiosk is hosted at brawndo-agriculture.sanity.studio and signs in through the Sanity Dashboard, so step 3 needs a seat in the project: the Cabinet.

The project was built with Claude Code, 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: Knowledge Bases surface conflicting sources side by side and keep your ruling across rebuilds. Workflows make the process a document. People, agents and apps move the same instance through the same transitions. The App SDK gives live, multi-user documents in your own interface.

At This Point You Should Have… Node.js 22.12 or newer (Sanity Studio 6 requires it; this build used Node 24 LTS through nvm) A Sanity project. npx sanity new creates one with no account and a 72-hour claim link The repository cloned, with its environment script sourced (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.

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['']. To write a workflow field, return ops with an explicit target.scope:

Sanity's Workflows docs say every check the engine makes is advisory. Role checks, guards and action filters shape the interface; the Content Lake enforces only dataset access control. So the Cabinet's power depends on a role the agent's token lacks.

The definition therefore reads its role names from the environment and deploys with administrator for the Cabinet and editor for the Secretary. A robot token cannot hold administrator:

Want to discuss this further?

Book a free strategy call with our team to see how these insights apply to your specific business goals.

Book a consultation