# The block model

Why a page is a list of typed blocks with fixed fields, and what that gives editors and developers.

## Editors compose, they do not lay out

An editor picks blocks from the catalog and fills in their fields. They cannot write markup, set a margin or pick a font size, so every page stays inside the design and nothing renders broken. The trade is freedom inside a block: what a block can do is what its fields offer, and a new layout is a new block or a new field.

## Content outlives the code

A page is a Markdown file in the repository, and its blocks are plain data. Rebuild the site, swap the theme or upgrade the engine, and the words stay where they are. Git keeps every version, and the CMS commits through it like any developer.

## Fields are grouped by what they change

Content fields sit at the top of a block. `media` holds what is shown beside or behind it, `layout` its size and placement, and `style` its surface and accent. The groups keep the CMS form short, and let the renderer handle `layout.beside` and `style.surface` for every block in one place, a custom block's included.

## A new field means off when it is absent

Content written before a field existed has no value for it. So a new field is opt-in: absent means the block renders as it always did. The CMS writes a field's default into every block that lacks the field as soon as the page is opened, and the next save keeps it, so a default is always what the block renders with the field absent: every switch defaults to off, and suggested wording goes in a field's hint, never its default. The same rule keeps feature flags off until a site turns them on.

## Renames keep rendering

When a field is renamed, such as the flat `ctaLabel` and `ctaHref` becoming the `cta` group, the old shape still renders, and `block-migrations.json` in the package records the rename so tools can move content to the new shape. A site takes an engine update first and moves its content after.
