Skip to content

Page

Generated from front/ui/catalogue/examples/Page.json

structure · static (no JavaScript) · renders children. All components: component playground.

Root of a page document. Sets the theme and metadata. Children: SiteHeader, Main, SiteFooter in that order.

Rendered from the example props below with the real component. Theme: coffee · oncall · nightsky · gravity · poland · ulam · platform · open on its own

{
"component": "Page",
"props": {
"theme": "platform",
"title": "Brewing basics",
"description": "A short course on extraction.",
"lang": "en"
},
"children": [
{
"component": "Main",
"props": {},
"children": [
{
"component": "Prose",
"props": {
"markdown": "Brewing is **extraction**: water dissolves flavour from the grounds.\n\n- Grind sets the surface area\n- Time and temperature set the speed"
}
}
]
}
]
}
Prop Type Required Notes
theme "coffee" | "oncall" | "nightsky" | "gravity" | "poland" | "ulam" | "platform" yes Tenant theme preset
title string yes Document title for the browser tab and search results. max length 70
description string Meta description, under 160 characters. max length 160
lang string BCP 47 language of the page. max length 10, default "en"

What a text-only client, an unknown renderer or a plain-text channel shows for the example above.

Brewing basics
A short course on extraction.

A node whose props fail the schema never breaks the page: the renderer shows the plain-text fallback instead (and logs the issues in development).

{
"theme": "purple"
}

Issues:

  • /title is required
  • /theme must be one of “coffee”, “oncall”, “nightsky”, “gravity”, “poland”, “ulam”, “platform”

Rendered as:

Nothing: this component has no text of its own.

axe-core: 7 rules passed, 0 violations, 0 need manual review. Run at build time on the server-rendered HTML in jsdom. Colour contrast and layout rules need a browser and are covered by the Playwright axe scans of the reference frontend.