What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
What is your developer-dependent CMS actually costing you? Calculate your costs and get a full report
Content Architecture
Turn a design system into an Agility model: where tokens, atoms, sections and templates belong, when a variant is a field or a separate Component, naming, nesting and a working method.
If your team has a design system (in Figma, Storybook or code), most of your Agility model is already designed. The work is deciding which parts of the design system become Component Models, which become fields, which become Content Models, and which stay in code. This page gives you a mapping and the rules for the decisions that cause the most rework: variants, naming and nesting.
A design system is usually described in layers, from tokens up to pages. Here is where each layer lives in Agility.
| Design system layer | Example | In Agility | Notes |
|---|---|---|---|
| Tokens | Colours, spacing, type scale | Code (CSS custom properties, theme config) | Editors choose from a few named options, never raw values |
| Atoms | Button, heading, image, icon | Fields on a Component or Content Model | A button is a URL field plus, if needed, a style choice |
| Molecules | Card, quote, stat | Fields on a Component, or items in a nested list | A card grid's cards are usually nested items |
| Organisms (sections) | Hero, card grid, FAQ, pricing table | Component Models | The blocks editors add to pages |
| Templates | Landing page, article page | Page Models with zones | Zones say where Components can go |
| Pages | The pricing page | Pages in the sitemap | Built by editors from Components |
| Reusable content | Authors, testimonials, offices | Content Models and lists | Linked from Components, not typed into them |
The organism layer is the one that matters most. A good Component Model is a section an editor would describe in one phrase: "a hero", "a row of logos", "an FAQ". Atoms are too small to be Components, because a page built from loose headings and buttons is hard to edit and impossible to keep on brand.
Each Component Model needs a matching front-end component, registered in your code under the Component Model's reference name, or nothing renders. See Component Models and Component Architecture Strategy.
Design systems are full of variants: a hero with the image left or right, a card in light or dark, a compact or full pricing table. Use this rule:
Layout with values image-left and image-right. The API returns the selected value, so your code switches on it, and editors see readable labels.Keep the number of variant fields small. Each one doubles the combinations your front end has to render and your designers have to approve.
Never let editors type hex codes, pixel values or class names. Offer a short list of named choices that map to your tokens:
Background: default, muted, brand) whose values your code maps to CSS custom properties.If a token changes in the design system, you change one mapping in code, and no content needs editing.
Names are the contract between design, code and content:
CtaLink becomes ctaLink). Renaming later means changing code and queries. See Content Modeling Anti-Patterns.Heading and Summary, not Text1 and TopLeftText.See Nest, Link or Share? for the full decision.
Map each page template in the design system to a Page Model. Give it one zone per area where editors place Components, for example a main zone and a sidebar zone. Keep templates few: most marketing sites need a small number of Page Models and a larger library of Components.
Page Model zones can also carry default components, so a new page starts with the Components a template normally has.
If editors will use Web Studio, your front-end components need data-agility-* attributes so editors can click a field on the page and edit it. Plan them as part of each component, not as a later pass. Agility Decorate can add them to Next.js components for you, and Writing an AGENTS.md for Agility Projects lists the rules.