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.

Shipped springfieldcommonwealthacademy.org

Platform overview

Stakeholder-readable summary of what the platform contains and where to find the moving parts.

Shipped springfieldcommonwealthacademy.org

Block library

All eleven page-builder blocks rendered with live sample data. Each block lists its schema and renderer file paths.

Shipped springfieldcommonwealthacademy.org

Reskinning guide

Three-layer styling architecture — chrome, design tokens, per-block CSS — with worked examples and a live theme toggle.

Shipped github.com

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.