Working session (note: Meeting) on how a project overrides (8 passages, no note) the look of its site without forking (4 passages, no note) the theme (note: Theme), presented from a deck (note: Deck) of six slides. Four participants: the maintainer (3 passages, no note), an author of the specifications (3 passages, no note), the integrator (note: Integrator) of the wiki and the quality owner (note: Quality owner). The deck, its PDF preview (3 passages, no note) and the transcript (note: Transcript) sit next to these minutes and the build (note: Build) groups (23 passages, no note) the four files into one page.
What was said
- The need: an integrator wants the organisation's name, logo (3 passages, no note), colours and a label (3 passages, no note) here and there, and never wants to touch the components (46 passages, no note).
theme.yamlalready carries the name, the logo (13 passages, no note), the favicon, the font (17 passages, no note) families (note: Check family), the corner radius, the light (18 passages, no note) and dark (26 passages, no note) palettes (24 passages, no note), the footer (19 passages, no note) and an extra stylesheet (26 passages, no note). - The model (note: Model): every page is a set of named slots (note: Slot), each rendered by a component (4 passages, no note) with a typed view model (10 passages, no note), the contract (note: Contract) between the generator and a theme. A theme (3 passages, no note) that replaces a component keeps the view (3 passages, no note) model; the accessibility checks (note: Accessibility audit) run on the rendered (33 passages, no note) pages whatever the theme, and the page budget (20 passages, no note) is measured on every build.
- Islands (note: Island): only the interactive (15 passages, no note) parts are hydrated (3 passages, no note), the search (note: Search), the mentions panel (note: Mentions panel), the mode switch (note: Colour scheme), one small bundle (12 passages, no note) per island, loaded only by the pages that use it.
- Layers (15 passages, no note): the stylesheet of the project (note: Project) is loaded last, in the fourth cascade layer (7 passages, no note), so that nothing in the default theme can outrank it.
- Labels (44 passages, no note): a project overrides any message (3 passages, no note) of the catalogue (12 passages, no note) through
theme.yaml, in the same syntax (3 passages, no note) and with the same variables (5 passages, no note) as the message (22 passages, no note) it replaces; a missing variable is a configuration (note: Configuration) error (29 passages, no note) that names the key (46 passages, no note). - A type module (note: Type module) may ship a page of its own for its type (note: Type); it goes through the same slot, so the model covers the plugins (note: Plugin) too.
Decision
Slots, islands and layers (note: Slots, islands and layers): named slots with typed view models, islands (4 passages, no note) for the interactive parts only, cascade layers so that the project stylesheet wins by construction, and content (43 passages, no note) that stays reachable without JavaScript (3 passages, no note). The budget stays at 150 kB per page, previews (note: Preview) excluded.