Blog post

Content Modeling Decisions

How we picked which content lives in code versus the local CMS, and what each decision optimizes for.

Content modeling is mostly about deciding what should repeat. The shapes that recur become schemas; everything else stays hand-written.

The repeating shapes

Four collections earned their own schema:

  • blog/ — short editorial pieces with a fixed publish cadence.
  • case-studies/ — structured customer write-ups with client, sector, and services fields.
  • announcements/ — timely posts gated by audience.
  • docs/ — ordered reference material with optional order for sidebar placement.

Each one is a Zod schema in src/lib/content-source.ts. Adding a new field is a one-line change and an edit to the Markdown frontmatter.

What stayed in code

Landing pages, the home, and any page where the layout is the content. Forcing those into a CMS would mean inventing a block system, and a block system always grows teeth.

The trade

Authors lose the ability to redesign marketing pages from Keystatic. In exchange, the editorial surface stays predictable and the marketing pages stay fast to iterate on in code.