Commit 027e86c
docs(design): add PRODUCT.md + DESIGN.md, drop the unused Geist Sans
Establishes the two design-context files every /impeccable command reads
before doing any work, and fixes the one live defect the scan turned up.
PRODUCT.md (strategy): register is `product`, with `(public)/*` and the
Puck landing blocks flagged as `brand` exceptions. Four first-class user
groups, anti-references, and five principles, the load-bearing ones being
"momentum without candy" (Duolingo's pedagogy, not its visual register)
and "density is a property of the surface, not the system".
DESIGN.md (visual): Stitch six-section format with OKLCH frontmatter,
since the token layer is OKLCH-native and hex would split the source of
truth. Documents what globals.css and base-mira actually do today. Three
things were undocumented anywhere:
- base-mira ships dense (h-7 buttons, text-xs bodies). That is the STAFF
register and it is correct there; learner surfaces must now explicitly
opt into a LARGER register. Otherwise a student reads 12px prose for an
hour on a mid-range Android because nobody chose otherwise.
- Tenants override --radius and --font-sans, not just colours
(components/tenant/tenant-css-vars.tsx). Shape and typeface are
tenant-variable, so no layout may depend on Noto Sans metrics.
- Neutrals sit at hue ~285 while the brand sits at 223, i.e. they are NOT
tinted toward the brand. That inverts the usual advice and is correct
here: the brand hue is tenant-variable, so a brand-tinted neutral would
change the product's temperature per school. Written up as The Constant
Neutral Rule so it does not get "fixed" later.
CLAUDE.md: Design Context now points at PRODUCT.md as canonical, and the
default primary is corrected from "~293 hue" to the shipped teal-cyan
oklch(0.52 0.105 223.128). Anything trusting that line was designing
against a hue the app has never used.
layout.tsx: Geist Sans was loaded on every page as --font-geist-sans with
zero consumers, so it shipped font weight without doing work. Dropped
rather than bound to a display role: DESIGN.md commits to one sans
differentiated by weight, and because tenants override --font-sans, a
hardcoded second face would pair a school's chosen font against one they
never picked. Geist Mono stays; it is genuinely used.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Kmgym3WWdUV5CAP4hjWwH11 parent d110d11 commit 027e86c
5 files changed
Lines changed: 921 additions & 8 deletions
0 commit comments