ADR-0095 The site is a product, and its centrepiece is built from the system
#Context
After ADR-0094 the docs site said only true things. It still read like a generated report: every route in one rail, a header of stacked labels, theme controls that forgot the reader's choice on every page, a home page that was the thesis followed by the full pass history of STATUS.md, a component index that was a table, and — the part that mattered most — a ninety-second demo built outside the system it demonstrates, with hard-coded hex colours, font weights, unstyled browser buttons and a JSON dump where §11 promises a screen.
#Decision
The shell. A sticky top bar carries the sections, the two other places the system is published — the workbench and the source — and the theme and density controls. The rail carries the section the reader is in and nothing else. The header is a breadcrumb, the title, the summary, and one status strip on the raised plane whose maturity is drawn as a shape before the words. Below 66.625rem the page comes before the rail; that is the stylesheet's one length not read from a token, because a media query cannot read one, and it is their computed sum.
The reader's choice persists. A saved theme and density are applied before first paint by an inline script that accepts only core's own values.
The landing page leads with calls to action and four derived figures — components, measured scenes, themes and decision records — then the demo, then one card per section with a sentence, then the thesis.
The component index opens with a gallery: one card per component with a live specimen at its first legal cell, its contract summary, layer and levels. A specimen can hold controls, so it sits beside the card's link rather than inside it, inert, and the link covers the card. Overlay specimens are held in their card by a transform, and a specimen wider than a phone-width card scrolls rather than clips.
The demo is built from the system. The steps are Buttons; the verdict is a StatusIndicator when the screen passes and an Alert when it fails, whose title, message and action name both Demanded elements, the Scope and the rule — §11's sentence, spoken in §6's shape. The screen is the fixture itself, served by the same allowlisted route and drawn in a sandboxed frame at half the engine's measurement viewport; its scene stylesheet and its metric fonts are inlined by the route, since a sandboxed frame has no origin to fetch them from, and the deployment traces those files explicitly. The raw engine output is kept, behind a disclosure.
#Consequences
docs:check-site holds all of it: 18 checks, 0 failing, including the focus check tabbing through the demo's Buttons. Nothing a scene measures moved.
Two pages remain honest absences, and they are now the system's clearest open build work rather than template gaps: a grid and an icon set. The shape vocabulary — six polygons, four shared — is the nearest thing to the second, and it has no page of its own.
#Rejected
- Keep the full route list in the rail. A hundred links beside one
component is the opposite of showing a reader where they are.
- Hide the demo's screen and keep the JSON. §11 is a screen changing and a
sentence naming why it fails; a dump is neither.
- Serve fixtures as static files from the docs app. It would publish every
fixture; the route serves three and refuses the rest.
- Drop Grid, Icons and Pictograms from the navigation. The foundation
bodies record why they are pages; a redesign is not the place to reverse it.