Every block, once

每一种区块,各出现一次

A sampler page built for AIBlog that shows every block kind the renderer knows, once each, so a designer can see the whole vocabulary in one place.

AIBlog

2026.09

A wide abstract composition: a dusk gradient from deep slate to warm sand, with a single pale disc low on the horizon line.

Structure is what survives a redesign.

AIBlog design notes

This page is a sampler. Each kind of block the AIBlog renderer knows appears here once, so a designer can see the whole vocabulary in one place and switch the Theme menu to watch each block change its face without changing its content. The photographs are abstract placeholders generated by a script; their descriptions were written by hand. Nothing on this page is a real project figure except the counts of the vocabulary itself.

The renderer emits structure,

a theme decides the rest;

a block keeps its id

through every regeneration.

What a block is

A block is a typed unit of content with a stable id. The composer chooses the kind, the validator checks it against the family's allow-list, the renderer emits the contract markup, and the theme styles it. The list of kinds is short on purpose.

  • lead: the opening statement, once per page
  • p: an ordinary paragraph
  • h: a sub-heading; the renderer chooses the level
  • verse: a stanza kept line by line
  • note: a short aside with a tone the composer chooses
  1. Composed.

    The model emits the block with its kind and fields, photos by manifest number.

  2. Validated.

    Deterministic code checks every field against the schema and the family's allow-list; anything else is refused.

  3. Stored.

    Photo numbers become placements; the block gets its id, or keeps the one it had.

  4. Rendered.

    The contract markup is emitted with class hooks for the theme and data attributes for the editor.

We stopped worrying about the layout. We paste, we look, we publish.

Programme director, Asia-Pacific Youth Growth Center USA
Family
showcase
Type
case study
Kinds shown
twenty-one
Photographs
eight placeholders
Themes
four
21
block kinds
4
theme packs
2
locales
1
DOM contract
GroupKindsEditable in place
Textlead, p, h, verse, note, codeyes
Listsul, ol, faq, timeline, people, statsyes
Emphasisquote, facts, table, signoffyes
Photographsfig, sheetphotos and captions
Linkslink, ctayes
Structurebreakno
A single figure: the renderer computes its orientation, the theme decides its width.
A single figure: the renderer computes its orientation, the theme decides its width.
  • Ada Placeholder

    Ada Placeholder

    Mentor

    Wrote the descriptions of the photographs by hand.

  • Lin Placeholder

    Lin Placeholder

    Editor

    Composed this page through the composer and changed one caption in place.

  • Sam Placeholder

    Sam Placeholder

    Designer

    Checked every block under all four themes.

  1. 2026.09.09

    Eleven core kinds

    lead, p, h, verse, ul, ol, quote, facts, table, fig, sheet, carried over from the first client site.

  2. 2026.09.10, morning

    video, link and cta

    Registered but opt-in per family.

  3. 2026.09.10, evening

    faq, timeline, note and code

    Plus page references for links.

  4. 2026.09.11

    people, stats, signoff and break

    And the quote role variant.

How do I style a kind?
Override tokens on the document root first; reach for the kind's class hooks only when a token cannot express the design.
Can a client add a kind?
No. Kinds are registered in code and allowed per family in the configuration. The client's editor only changes words and pictures.
What happens to an unknown kind?
The validator refuses it and one repair turn asks the composer to try again within the vocabulary.
allowedBlocks: ["lead", "p", "h", "quote", "facts", "fig", "sheet", "faq", "timeline"]

Start a site of your own — read the getting started guide.

Getting started

Composed late one evening, edited once in place, published from the same screen.

The AIBlog composer

On behalf of Cyphia Solutions

2026-09-11