Case Study · Springfield Commonwealth Academy
Data All the Way Down
01Premise
Why structured content
"Treat content like data all the way down" is easy to say. The work is enforcing it
where the temptation is a string field. Block schemas instead of WYSIWYG. Document
references instead of hand-typed names. A provenance object instead of a
hidden assumption about who wrote a thing.
The trade-off is ramp time. Editors learn the schema; engineers learn what editors actually do. The pay-off is that the same content can render to a page, an OG card, a JSON-LD payload, or a search index — without being rewritten for any of them.
02Overview
What's here
A school site running on Astro and Sanity, deployed to Vercel. Eleven editor-composable blocks. A four-stage state machine for student-project provisioning.
A content extraction pipeline from the previous Webflow build — images rehosted as Sanity assets, navigation rebuilt as document references rather than hand-coded links.
Internal reference pages so editors and successors can navigate the platform without me in the room.
For depth: the build covers the schema, the migration, and a working GROQ snippet. The process covers AI workflow, verification, and where the friction was.
03Proof
The proof, clickable
Live URLs. Each one is reachable; each one is internal documentation, public production,
a portfolio sample, or an issue filed upstream. The three
/admin/* pages on the school site are unindexed but fully reachable —
URL is not access control, but the noindex header is the right level of restriction
for working internal documentation.
Platform overview
Stakeholder-readable summary of what the platform contains and where to find the moving parts.
Block library
All eleven page-builder blocks rendered with live sample data. Each block lists its schema and renderer file paths.
Reskinning guide
Three-layer styling architecture — chrome, design tokens, per-block CSS — with worked examples and a live theme toggle.
Solution Architecture brief
Written sample on this site about structured content for AI-discoverable systems.
agent-toolkit issue #20
Behavior gap I documented in the markdown-to-Portable-Text path. Filed upstream against sanity-io/agent-toolkit.
04Refining
What I am still refining
- The student-project workflow has no formal review or consent stage between provisioning complete and public visibility — the visibility toggle is the only gate. For real student work, this is a real gap, not a polish item.
- Provisioning is polling-driven, not webhook-driven. Deliberate; the migration path is on the list.
- Tool selection between Claude, GPT, and Gemini for a given role is empirical. The decision rules work; documenting them is the next layer.