Screens
Screens is the layer where each page gets composed. Architecture says which screens exist and what template + variant gives each its structure. Screens fills in the chrome (shells), the per-zone content (chips), and the overlay rules — once per surface the page appears on.
What Screens captures
Three things, all in one file:
- Shells — the persistent chrome that wraps a group of pages (sidebar nav, top nav, tab bar, and so on).
- Compositions — one per page per surface. The zones defined by that surface's variant, each filled with content chips.
- Global overlays — rules that map a signal (e.g. "destructive action") to an overlay pattern (e.g. a modal dialog), applied across the project.
Shells
Each shell has:
- Name + purpose — named by role (Main, Public), never by platform.
- Pattern from the shell library:
sidebar_nav,top_nav,two_tier_nav,collapsible_sidebar,minimal, and the mobile patternstab_barandmobile_stack. - Why this pattern — the written rationale for the choice.
- Surfaces — which surfaces this shell serves. A product usually pairs a web shell with a mobile shell that shares its role.
- Assigned pages — the pages this shell wraps.
Compositions
One per page per surface. Each composition has:
- The page and surface it belongs to, and the shell that wraps it (or none — login pages and Mini Apps run chromeless).
- Zones — the named slots defined by that surface's variant (
list,detail,hero,aside, ...). Every zone carries a one-sentence purpose and an ordered list of content chips. - Chips — each names a content type from the 18-type catalog (data table, list, detail, form, filters, actions, navigation, media, metrics, ...) and carries its own what (the concrete content: "recipe rows: thumbnail, title, cook time") and why (the upstream signal that put it there). Chips render with a Lucide icon and label.
- Actions — an item page's primary actions live in an
actionschip with plain-word labels ("Scale servings", "Share", "Print"). Read-only pages still get theirs. - On mobile — a composition can carry a floating action button for the one action that deserves it.
- Per-page overlays — overrides of the global rules for this page.
This is chip fidelity — labeled tags that name what content goes where, in what order, and why. Not rendered mockups. Spatial intent is the decision Screens commits; visual rendering is the implementer's job.
Mini App compositions
A Mini App composes like a page, plus its flow controls: whether stepping forward, going back, and skipping are available. It never gets a shell — the takeover is its chrome.
Global overlays
Each rule has a signal (what triggers it), a pattern from the overlay library (modal_dialog, right_panel, slide_over, bottom_drawer, full_screen_overlay, popover, inline_expansion, and the mobile action_sheet), and optional surfaces — a phone-only action-sheet rule is normal.
The canvas
[Screenshot TODO: Screens home view with four stacked sections — Shells, Pages, Mini Apps, Overlays — and the surface switcher in the page header.]
Screens renders as a home grid + drill flow:
- Home view — stacked sections: Shells (pattern thumbnails), Pages (silhouette cards), Mini Apps (takeover-framed cards, shown only when the project has them), Overlays (rule rows).
- Page drill — click a page card → the page view: the compose canvas up top, then purpose, page template, why this template, and where it appears. Click a zone to edit its chips in the right panel; click a chip to edit its what and why.
- Shell drill — click a shell card → the shell view: name, a live render of the chrome, purpose, the pattern picker, why this pattern, and the assigned pages.
- Overlay rules — click a rule → its detail panel opens on the right; the grid stays put.
On multi-surface projects the surface switcher in the header flips every view to that surface's shells and compositions.
The file written
design/screens.json — one file, top-level shells[] + compositions[] + globalOverlays[].
The skill
/screens populates the layer.
- Reads: everything in
design/sources/,design/project.json,design/architecture.json(the per-surface layouts),design/ontology.json, anddesign/screens.jsonif it exists. - Writes:
design/screens.json.
Behavior:
- Creates shells per surface from the project shape — a web shell and, on mobile surfaces, its tab-bar counterpart sharing the same role.
- Composes each page on each surface that already has a layout, with variant-aware zone fills and a written purpose for every zone and chip. Surfaces without a layout are skipped and reported; give them one in Architecture first.
- Puts primary actions on item pages, even read-only ones, and elevates at most one to a floating action button on the phone.
- Sets global overlay defaults from task shapes, tagging platform-specific rules to their surfaces.
- Refines one surface without touching the others.
You confirm, adjust, or recompose directly on the canvas.
The recipe example
The recipe-scaling tool's Architecture produces:
Shells
Main—top_navon desktop web (app name left, preferences right). Wraps Recipes, Recipe, Preferences.
Compositions (desktop web)
- Recipes (
card_grid : with_filters):filterszone → filters chip;gridzone → cards chip ("recipe cards: photo, name, servings"). - Recipe (
detail_page : with_aside):header→ page title + media chips;body→ list chip (scaled ingredients) + form chip (target servings);aside→ list chip (saved ratios); actions chip with "Scale servings", "Save ratio", "Share". - Preferences (
settings : sectioned):body→ one form chip per settings group.
Global overlays
- "Confirm destructive action" →
modal_dialog. Applies across the project so deleting a saved ratio always confirms the same way.
What Screens is not for
- Template choice. That's Architecture — the
template + variantper surface lives on the screen. - Visual treatment. Colors, typography, spacing, density. Denote captures none of it. The implementer adapts the chip arrangement to the target project's design system.
- Pixel-perfect drawing. Fidelity is deliberately low. Labeled chips, not mockups.
The discipline: Screens commits content in zones at chip fidelity. Everything visual is deferred to the implementer.
Where to next
- Spec — rolls Screens and the upstream layers into a single SPEC.md the implementer reads.
- Surfaces and platforms — why compositions exist per surface.
- Architecture — the input Screens reads from.
- The four layers overview — where Screens sits in the pipeline.