design: nothing ships looking or sounding like a default
Groundwork does not make interfaces itself. Making one runs on impeccable, the design method
begin installs per project (node checks/design-method.mjs --install; the enforcement line at
the top of node checks/check.mjs says whether this project has it, and which release). This skill
is the Groundwork side of that seam. It carries what is genuinely ours, hands it over as binding
input, and holds open the three points where the owner decides.
docs/DESIGN.md sections 1 and 2 and docs/design/VOICE.md carry the durable principles and the
owner's standing defaults. DESIGN.md section 3 is not written here: it is recorded from the
world that was actually built, after the finish review (step 4). A rulebook written before the
build gets defended against reality instead of describing it.
Where the two documents live. The method reads docs/DESIGN.md and writes its product record
to docs/PRODUCT.md, because docs/ is one of the directories it searches by itself. Neither
path is configured anywhere, and neither moves. The product record holds what
docs/product/BRIEF.md does not own (platform, stack, brand commitments, evidence on hand,
accessibility needs) and points at the brief for scope, users and purpose: a fact that stands in
both files is a fact that will disagree with itself later.
No design method installed (a project that started without an interface, a failed install recorded
in STATE.md)? Install it first. Everything below assumes it is there. When the install genuinely
cannot happen, section 5 is the route that still builds, visibly degraded rather than silently
worse.
1. Ask the owner: only what is theirs
Two questions, and only these: the method asks the rest at the point where the answer changes the
work, and asking twice is how an owner learns their answers do not travel.
- Brand reality: existing logo, colors, fonts, brand guide? If yes, that is binding: collect
the files into
docs/design/reference/ and carry them over as a brand commitment in step 3. If
no, nothing is blocked; the direction round derives a brand with the owner.
- Voice: product language (NL/EN/...), register (je/u/you), and whether this audience changes
the standing voice default in VOICE.md.
Feel, accent, temperature and visual references are not asked here. They are the substance of
the direction round in step 3, where the owner sees them rendered instead of described, and asking
for them twice would seed the answer before that round can do its work.
2. Choose the UI foundation: one source of truth for all UI
Before anything is made, exactly one foundation is fixed for this project's UI. It stays a
Groundwork decision, made here, that the method then builds within.
You recommend one; the owner confirms or overrules. Comparing ten libraries is a designer's
job, and the owner Groundwork is written for is not one: handing over a ten-page showcase moves the
research onto the person with the least basis to do it. So do the research and arrive with a
recommendation:
- Read the stack, the brief and the brand reality from step 1. Verify the candidate's current
maintenance, licence and accessibility from its official docs (live, never model memory; that
is
stack skill territory).
- Recommend one foundation in a short paragraph: what it is, why it fits this product, and
what it costs. Name the one real alternative beside it, per
critical-thinking, and say what
would have to be true to prefer it. Bespoke is the named alternative to every library, and
vice versa.
- Say in one line that the showcase exists and that you will open it on request:
docs/design/reference/ui-library-showcase.html holds one page per library (shadcn/ui,
Material UI, Chakra UI, Magic UI, Aceternity UI, Nyxhora UI, React-Bootstrap, React Bits,
Mantine, HeroUI) plus the bespoke option, each with the same live components. An owner who
wants to compare style registers themselves gets it; nobody is required to.
The two shapes the recommendation picks between: a component library themed with the
owner's brand, or a bespoke system of the project's own tokens and components. Bespoke is
right when the look is part of the product's value, the brand requirements are strong, or the
owner wants zero UI dependencies; the owner can also hand over their own ideas, references or
existing UI code, which is binding input rather than a candidate.
Rules for this step:
- The foundation is an expensive-to-reverse choice: run the
critical-thinking moves before
recommending one, not after the owner has agreed.
- The stack constrains the menu. The showcase's ten are React-centric; for another stack,
research equivalents live. The showcase shows style registers, not current facts, which is the
other reason the research cannot be delegated to it.
- The owner's brand always sits on top: the library provides structure and behavior, the brand
tokens flow in through the library's theming layer (or the token file, if bespoke).
- Record the choice as a decision record (see
docs/decisions/0009-ui-foundation-choice.md). It
travels into step 3 as a constraint the build must hold, and lands in DESIGN.md section 3 when
that section is written. One foundation per project: mixing libraries or building raw UI beside
the chosen one requires a new decision record first.
3. Hand over, then hold the three decision points
Fill VOICE.md section 3 first (wording table, error-message pattern, banned list, in this
product's register and language). Copy is written during the build, so the voice exists before it.
Then hand the method its input, once, and let it run:
- Product truth it must not ask twice for.
docs/product/BRIEF.md and
docs/product/CONTEXT.md already hold the users, the purpose, the positioning, the constraints
and the domain terms, captured by begin in the owner's own words. The method's init step
writes docs/PRODUCT.md from that: give it those two files as the source, play the extracted
answers back for a one-line confirmation each, and let it interview only for what it genuinely
adds and Groundwork never captured: platform (web, iOS, Android, adaptive), brand commitments,
the evidence actually on hand, and accessibility needs beyond the floor. What the brief already
owns is pointed at from the record, never copied into it. An owner who has just sat through
begin's interview answers nothing here twice.
- The binding design input. DESIGN.md section 1 (the ten principles) is a floor: a direction
may build any world it likes on top of it, and may not break it. Section 2 (the owner's standing
taste) is the pinned seed, and the method honors a pinned brief. The owner may replace section 2
for this project, at the direction round below, in their own words; nobody else may drop it. Also
hand over VOICE.md section 3 and the foundation decision from step 2.
- The accessibility floor in principle 8 and
docs/compliance/COMPLIANCE.md is not negotiable
by any direction.
- The live-surface contract, on a redesign. A surface that already has visitors carries
commitments the method does not know about and will not preserve on its own: URL structure and
slugs, page titles and structured data, primary navigation labels, form field names and their
order, analytics event and field names, the logo or wordmark, and legal or consent copy. Write
that list down from the live site before the direction round, hand it over as a constraint, and
check the built result against it. Anything on it that does change, changes on the owner's say-so
and ships with redirects. Losing the search ranking is the most expensive way a redesign can
succeed visually and fail commercially.
The owner decides at three points, in this order. This is the order of work:
The visual direction. The method derives candidate worlds from the audience's own culture,
an external roll assigns which one is built so runs cannot converge on the category default, and
the owner chooses on a decision page with palettes, first viewports and honest risks, with
re-roll and steer available. No production code for a new visual world is written before this
choice lands. A direction that breaks the floor in section 1, or quietly drops section 2
without the owner saying so, is sent back for another round; it is not accepted and fixed later.
The rendered compositions. The chosen direction is rendered as compositions and approved
before code exists. The build then reproduces the approved composition rather than
reinterpreting it.
No image generation on this machine? Then draw them yourself, as flat SVG, and say in one
line that you did. Every card in a round goes through one shared frame: same size, same matte
unfinish, only the product name and one real headline legible, everything else greeked. This is
not decoration. A direction round where the catalogue's challengers carry hosted reference
plates and the assigned direction carries an empty slot is a rigged comparison, and the owner
will feel the pull without being able to name it. Measured on this repo, 2026-08-06: without
generation the assigned card and the standing exit render empty while every challenger shows a
picture.
The finish verdict. A reviewer that never saw the build thread scores the result and returns
a table. Report it as it stands, open items intact, under the reviewer's own word for it. A
table with open findings is never handed back as a pass, and never summarized into one. Whether
to fund another round or ship as it stands is the owner's call.
Where the reviewer comes from. What this point is for is a reviewer with none of the build
thread in its context; which agent the method can spawn is the method's own business and changes
between its releases, so this skill does not restate it. Use the reviewer the installed method
names if it can be spawned here. If it cannot, spawn a fresh subagent, hand it the method's own
finish-reviewer brief (look it up in the payload rather than from a path written here) plus the
input packet that brief asks for, and disclose in one line at finish which of the two ran.
Measured 2026-09-07: the install now writes four impeccable-* agents into .claude/agents/,
impeccable-finish-reviewer among them, so the first route is the live one here. It was the
second route a month earlier, on a payload that wrote none, which is the reason this paragraph
states the requirement and checks what is installed instead of naming one of them.
An addition inside a surface that already exists inherits that surface: it is not a new identity
exercise, and it does not run this round again.
4. Record
After the finish review, DESIGN.md section 3 is written from the built world: the foundation from
step 2, the tokens as they exist in code (code is the SSOT, DESIGN.md mirrors it), the component
inventory with its states, and the code SSOT location. That mirror is what design-guard and the
mechanical checks validate against.
Done means: VOICE.md filled and DESIGN.md section 3 written from the build (TEMPLATE markers
removed), tokens in code, decision records for the UI foundation and for any direction that
replaced the owner's standing taste, the finish verdict reported with its open items, and STATE.md
updated. Owner answers captured verbatim where wording matters.
5. When the method is unavailable: the degraded route
The method is one package from one maintainer, so it can genuinely be missing: npm unreachable,
the release gone, a Node floor this machine cannot meet, an install that refuses. The
brief's rule is that a capability which cannot degrade visibly does not get built, so this is
that degradation, written down before it is needed. Say in one line that you are on this route
and why, record it in STATE.md, and build on:
- The rulebook:
docs/DESIGN.md section 1 (the ten principles, as a floor) and section 2
(the owner's standing taste, as the seed), plus both floors in design-guard section 1,
accessibility and reduced motion. The method builds on top of these anyway. Without it you have
the floor without the craft: plainer, and still not allowed to be inaccessible or ugly by
default.
- The three owner stops stay, in the same order, at lower fidelity. Direction: two or three
written directions, each with a palette and one flat SVG viewport, and the owner picks; there is
no external roll, so name the category default explicitly and make sure one candidate is not it.
Compositions: flat SVG, approved before code is written. Finish: a fresh subagent that never saw
the build thread scores the result against the rulebook above and the story's acceptance
criteria, and its table is reported as it stands, open items intact. Dropping a stop is what
turns a degraded build into an unrecoverable one, because the owner never saw the choice.
- Not attempted, and said so: the derived visual worlds, the detector, the method's own review
passes. Record in DESIGN.md section 3 that this surface was built on the degraded route, so a
later session can offer a re-run through the full method instead of assuming one happened.
A surface built this way is finished work, not a draft. It is re-run only if the owner asks. ⚓
1---2name: design3description: design: nothing ships looking or sounding like a default4---56# design: nothing ships looking or sounding like a default78Groundwork does not make interfaces itself. Making one runs on **impeccable**, the design method9`begin` installs per project (`node checks/design-method.mjs --install`; the enforcement line at10the top of `node checks/check.mjs` says whether this project has it, and which release). This skill11is the Groundwork side of that seam. It carries what is genuinely ours, hands it over as binding12input, and holds open the three points where the owner decides.1314`docs/DESIGN.md` sections 1 and 2 and `docs/design/VOICE.md` carry the durable principles and the15owner's standing defaults. DESIGN.md **section 3 is not written here**: it is recorded from the16world that was actually built, after the finish review (step 4). A rulebook written before the17build gets defended against reality instead of describing it.1819**Where the two documents live.** The method reads `docs/DESIGN.md` and writes its product record20to `docs/PRODUCT.md`, because `docs/` is one of the directories it searches by itself. Neither21path is configured anywhere, and neither moves. The product record holds what22`docs/product/BRIEF.md` does not own (platform, stack, brand commitments, evidence on hand,23accessibility needs) and points at the brief for scope, users and purpose: a fact that stands in24both files is a fact that will disagree with itself later.2526No design method installed (a project that started without an interface, a failed install recorded27in STATE.md)? Install it first. Everything below assumes it is there. When the install genuinely28cannot happen, section 5 is the route that still builds, visibly degraded rather than silently29worse.3031## 1. Ask the owner: only what is theirs3233Two questions, and only these: the method asks the rest at the point where the answer changes the34work, and asking twice is how an owner learns their answers do not travel.35361. **Brand reality**: existing logo, colors, fonts, brand guide? If yes, that is binding: collect37 the files into `docs/design/reference/` and carry them over as a brand commitment in step 3. If38 no, nothing is blocked; the direction round derives a brand with the owner.392. **Voice**: product language (NL/EN/...), register (je/u/you), and whether this audience changes40 the standing voice default in VOICE.md.4142Feel, accent, temperature and visual references are **not** asked here. They are the substance of43the direction round in step 3, where the owner sees them rendered instead of described, and asking44for them twice would seed the answer before that round can do its work.4546## 2. Choose the UI foundation: one source of truth for all UI4748Before anything is made, exactly one foundation is fixed for this project's UI. It stays a49Groundwork decision, made here, that the method then builds within.5051**You recommend one; the owner confirms or overrules.** Comparing ten libraries is a designer's52job, and the owner Groundwork is written for is not one: handing over a ten-page showcase moves the53research onto the person with the least basis to do it. So do the research and arrive with a54recommendation:55561. Read the stack, the brief and the brand reality from step 1. Verify the candidate's current57 maintenance, licence and accessibility from its official docs (live, never model memory; that58 is `stack` skill territory).592. Recommend **one** foundation in a short paragraph: what it is, why it fits this product, and60 what it costs. Name the one real alternative beside it, per `critical-thinking`, and say what61 would have to be true to prefer it. Bespoke is the named alternative to every library, and62 vice versa.633. Say in one line that the showcase exists and that you will open it on request:64 `docs/design/reference/ui-library-showcase.html` holds one page per library (shadcn/ui,65 Material UI, Chakra UI, Magic UI, Aceternity UI, Nyxhora UI, React-Bootstrap, React Bits,66 Mantine, HeroUI) plus the bespoke option, each with the same live components. An owner who67 wants to compare style registers themselves gets it; nobody is required to.6869**The two shapes** the recommendation picks between: a **component library** themed with the70owner's brand, or a **bespoke system** of the project's own tokens and components. Bespoke is71right when the look is part of the product's value, the brand requirements are strong, or the72owner wants zero UI dependencies; the owner can also hand over their own ideas, references or73existing UI code, which is binding input rather than a candidate.7475Rules for this step:7677- The foundation is an expensive-to-reverse choice: run the `critical-thinking` moves before78 recommending one, not after the owner has agreed.79- The stack constrains the menu. The showcase's ten are React-centric; for another stack,80 research equivalents live. The showcase shows style registers, not current facts, which is the81 other reason the research cannot be delegated to it.82- The owner's brand always sits on top: the library provides structure and behavior, the brand83 tokens flow in through the library's theming layer (or the token file, if bespoke).84- Record the choice as a decision record (see `docs/decisions/0009-ui-foundation-choice.md`). It85 travels into step 3 as a constraint the build must hold, and lands in DESIGN.md section 3 when86 that section is written. One foundation per project: mixing libraries or building raw UI beside87 the chosen one requires a new decision record first.8889## 3. Hand over, then hold the three decision points9091Fill VOICE.md section 3 first (wording table, error-message pattern, banned list, in this92product's register and language). Copy is written during the build, so the voice exists before it.9394Then hand the method its input, once, and let it run:9596- **Product truth it must not ask twice for.** `docs/product/BRIEF.md` and97 `docs/product/CONTEXT.md` already hold the users, the purpose, the positioning, the constraints98 and the domain terms, captured by `begin` in the owner's own words. The method's `init` step99 writes `docs/PRODUCT.md` from that: give it those two files as the source, play the extracted100 answers back for a one-line confirmation each, and let it interview only for what it genuinely101 adds and Groundwork never captured: platform (web, iOS, Android, adaptive), brand commitments,102 the evidence actually on hand, and accessibility needs beyond the floor. What the brief already103 owns is pointed at from the record, never copied into it. An owner who has just sat through104 `begin`'s interview answers nothing here twice.105- **The binding design input.** DESIGN.md section 1 (the ten principles) is a floor: a direction106 may build any world it likes on top of it, and may not break it. Section 2 (the owner's standing107 taste) is the pinned seed, and the method honors a pinned brief. The owner may replace section 2108 for this project, at the direction round below, in their own words; nobody else may drop it. Also109 hand over VOICE.md section 3 and the foundation decision from step 2.110- **The accessibility floor** in principle 8 and `docs/compliance/COMPLIANCE.md` is not negotiable111 by any direction.112- **The live-surface contract, on a redesign.** A surface that already has visitors carries113 commitments the method does not know about and will not preserve on its own: URL structure and114 slugs, page titles and structured data, primary navigation labels, form field names and their115 order, analytics event and field names, the logo or wordmark, and legal or consent copy. Write116 that list down from the live site before the direction round, hand it over as a constraint, and117 check the built result against it. Anything on it that does change, changes on the owner's say-so118 and ships with redirects. Losing the search ranking is the most expensive way a redesign can119 succeed visually and fail commercially.120121The owner decides at three points, in this order. This is the order of work:1221231. **The visual direction.** The method derives candidate worlds from the audience's own culture,124 an external roll assigns which one is built so runs cannot converge on the category default, and125 the owner chooses on a decision page with palettes, first viewports and honest risks, with126 re-roll and steer available. **No production code for a new visual world is written before this127 choice lands.** A direction that breaks the floor in section 1, or quietly drops section 2128 without the owner saying so, is sent back for another round; it is not accepted and fixed later.1292. **The rendered compositions.** The chosen direction is rendered as compositions and approved130 before code exists. The build then reproduces the approved composition rather than131 reinterpreting it.132133 **No image generation on this machine?** Then draw them yourself, as flat SVG, and say in one134 line that you did. Every card in a round goes through one shared frame: same size, same matte135 unfinish, only the product name and one real headline legible, everything else greeked. This is136 not decoration. A direction round where the catalogue's challengers carry hosted reference137 plates and the assigned direction carries an empty slot is a rigged comparison, and the owner138 will feel the pull without being able to name it. Measured on this repo, 2026-08-06: without139 generation the assigned card and the standing exit render empty while every challenger shows a140 picture.1413. **The finish verdict.** A reviewer that never saw the build thread scores the result and returns142 a table. Report it **as it stands, open items intact**, under the reviewer's own word for it. A143 table with open findings is never handed back as a pass, and never summarized into one. Whether144 to fund another round or ship as it stands is the owner's call.145146 **Where the reviewer comes from.** What this point is for is a reviewer with none of the build147 thread in its context; which agent the method can spawn is the method's own business and changes148 between its releases, so this skill does not restate it. Use the reviewer the installed method149 names if it can be spawned here. If it cannot, spawn a fresh subagent, hand it the method's own150 finish-reviewer brief (look it up in the payload rather than from a path written here) plus the151 input packet that brief asks for, and disclose in one line at finish which of the two ran.152 Measured 2026-09-07: the install now writes four `impeccable-*` agents into `.claude/agents/`,153 `impeccable-finish-reviewer` among them, so the first route is the live one here. It was the154 second route a month earlier, on a payload that wrote none, which is the reason this paragraph155 states the requirement and checks what is installed instead of naming one of them.156157An addition inside a surface that already exists inherits that surface: it is not a new identity158exercise, and it does not run this round again.159160## 4. Record161162After the finish review, DESIGN.md section 3 is written from the built world: the foundation from163step 2, the tokens as they exist in code (code is the SSOT, DESIGN.md mirrors it), the component164inventory with its states, and the code SSOT location. That mirror is what `design-guard` and the165mechanical checks validate against.166167Done means: VOICE.md filled and DESIGN.md section 3 written from the build (TEMPLATE markers168removed), tokens in code, decision records for the UI foundation and for any direction that169replaced the owner's standing taste, the finish verdict reported with its open items, and STATE.md170updated. Owner answers captured verbatim where wording matters.171172## 5. When the method is unavailable: the degraded route173174The method is one package from one maintainer, so it can genuinely be missing: npm unreachable,175the release gone, a Node floor this machine cannot meet, an install that refuses. The176brief's rule is that a capability which cannot degrade visibly does not get built, so this is177that degradation, written down before it is needed. Say in one line that you are on this route178and why, record it in STATE.md, and build on:179180- **The rulebook**: `docs/DESIGN.md` section 1 (the ten principles, as a floor) and section 2181 (the owner's standing taste, as the seed), plus both floors in `design-guard` section 1,182 accessibility and reduced motion. The method builds on top of these anyway. Without it you have183 the floor without the craft: plainer, and still not allowed to be inaccessible or ugly by184 default.185- **The three owner stops stay**, in the same order, at lower fidelity. Direction: two or three186 written directions, each with a palette and one flat SVG viewport, and the owner picks; there is187 no external roll, so name the category default explicitly and make sure one candidate is not it.188 Compositions: flat SVG, approved before code is written. Finish: a fresh subagent that never saw189 the build thread scores the result against the rulebook above and the story's acceptance190 criteria, and its table is reported as it stands, open items intact. Dropping a stop is what191 turns a degraded build into an unrecoverable one, because the owner never saw the choice.192- **Not attempted, and said so**: the derived visual worlds, the detector, the method's own review193 passes. Record in DESIGN.md section 3 that this surface was built on the degraded route, so a194 later session can offer a re-run through the full method instead of assuming one happened.195196A surface built this way is finished work, not a draft. It is re-run only if the owner asks. ⚓