Frontend Design Review
Most AI-generated interfaces fail the same way: they compile, they look plausible
in code, and they render as the average of every landing page in the training
data. Dark blue for a developer tool. Purple gradient for a music app. Three
icon cards in a row. A tiny uppercase eyebrow above every section.
This skill replaces taste-by-vibes with thresholds. It gives Claude a design
contract to lock before writing CSS, numeric laws to satisfy while writing it, a
list of banned defaults with the specific replacement for each, and a
render-and-compare loop so nothing is called done from reading code. It works on
product UI, dashboards, marketing pages, component systems, and app store
assets.
Core principle: strip the logo and the surface must still be unmistakably
this product, and render the result before claiming it works.
When to Use This Skill
- Building a new landing page, dashboard, app shell, or component family and you
want it to look designed rather than defaulted.
- Reviewing an interface someone (or an agent) already built, and you need
specific findings with file names, not "looks good."
- Auditing a design system for drift: inconsistent tokens, ad hoc spacing,
five shades of the same gray, components that disagree with each other.
- Comparing a mock, Figma frame, screenshot, or reference URL against a built
implementation and reporting the gaps by severity.
- Fixing a UI that feels generic and you cannot articulate why.
- Preparing high-visibility surfaces: launch pages, app store screenshots,
investor demos, docs sites.
Skip it for backend-only work, or a one-line copy change with no visual
consequence.
What This Skill Does
- Locks a design contract before implementation: audience, surface job,
primary action, register (brand vs. product), spacing scale, color roles,
type roles, copy vocabulary, and acceptance checks. Ambiguity resolved up
front instead of relitigated in review.
- Forces a committed aesthetic direction: pick one of eight named tonal
directions (refined minimal, editorial, brutalist, retro-technical, organic,
maximalist, luxury refined, product-utilitarian) and execute it fully. The
failure mode is not "too bold" or "too plain," it is uncommitted.
- Applies numeric design laws: color strategy, dark-mode surface lightness
and contrast floors, fluid type scale with
clamp(), line measure, layout
and z-index rules, component laws for forms, modals, tables, navigation, and
empty states, plus motion curves and durations. See
references/design-laws.md.
- Rejects AI-slop defaults with named replacements: gradient text,
decorative glass panels, orb backgrounds, ghost cards, over-rounded corners,
numbered section scaffolding, hero-metric templates, fake statistics. Each
ban ships with a BEFORE and an AFTER and the narrow case where the exception
is earned. See references/scoped-bans.md.
- Renders and verifies: captures desktop and mobile screenshots, compares
source visual target to implementation in the same pass, and writes a
visual-qa-report.md with findings ordered P0 to P3.
- Scores design systems out of 100 across ten dimensions and names the two
weakest to fix first.
- Ends with a ship gate:
ship, ship-with-caveats, or hold, with the
evidence that supports the verdict.
How to Use
Basic Usage
Review the design of the dashboard at http://localhost:3000/app and tell me
what is wrong with it. Render it at desktop and mobile before answering.
Claude inspects the source, renders the page, checks it against the design laws
and the banned-defaults list, and reports findings with file names and specific
fixes.
Advanced Usage
Redesign our pricing page. Before writing code:
1. Write the design contract (audience, page job, primary action, register).
2. Name the aesthetic direction and the one memorable move, and explain why the
obvious choice for this category is the wrong one.
3. Propose two approaches with tradeoffs and let me pick.
Then build it, render at 1280x900 and 390x844, and finish with a ship gate.
Compare ./designs/hero-mock.png against the implementation at
http://localhost:5173 and save visual-qa-report.md with P0-P3 findings.
Audit our design system in ./src/styles and score it out of 100 across color
consistency, typography hierarchy, spacing rhythm, component consistency,
responsive behavior, dark/light behavior, motion restraint, accessibility,
information density, and polish. Fix the two lowest dimensions.
Example
User: "Our analytics dashboard looks like every other analytics dashboard.
Fix it."
Output:
DESIGN PREFLIGHT
target=./apps/web surface=/dashboard register=product
context=partial (no DESIGN.md) render=pass (1280x900, 390x844)
DIAGNOSIS
The surface is the category average. Three findings explain most of it.
P0 Color is decorative, not semantic. src/styles/tokens.css:14
Six blues, none of which encode meaning. Threshold breaches, healthy
ranges, and stale data all render in the same accent.
Fix: commit to Restrained strategy. Tinted neutrals plus one accent
under 10% of surface area, reserved for threshold breaches only.
P1 Card-in-card nesting. src/components/MetricGrid.tsx:31
Each metric is a card inside a section card. Cards are for items that
are independently scannable or selectable, not section wrappers.
Fix: rows with a shared rule, one card level maximum.
P1 Hero-metric template. src/components/Headline.tsx:8
"$2.4M" at 80px/weight-900 with a 12px label under it. Isolated big
numbers read as marketing, not instrumentation.
Fix: put the number back in the row it belongs to, with its delta and
its comparison window beside it.
DIRECTION
Aesthetic: product-utilitarian. Scene: an on-call engineer scanning for the
one number that moved, at 2am, on a second monitor. That scene forbids hero
type and rewards density plus one loud state color.
Memorable move: a sparkline gutter down the left edge of every row, so the
shape of the week is readable before any number is.
SHIP GATE
Surface: /dashboard
Done signal: desktop + mobile render, contrast pass
Evidence: dashboard-desktop.png, dashboard-mobile.png, contrast 7.1:1 body
Blockers: none
Accepted caveats: empty state still generic, tracked separately
Next action: apply P0 token change, re-render
Status: ship-with-caveats
Inspired by: the design workflow from the
Suede Creator Skills
collection by Jason Colapietro, generalized for any product.
Tips
- Name the physical scene concretely enough that it forces the design answer.
"A studio engineer reviewing a rights dispute at 2am on a secondary monitor"
forces different choices than "a user looking at data." If the sentence does
not force the answer, add detail until it does.
- Run the two-step slop check before committing to an aesthetic. First: could
someone guess the palette from the product category alone (observability to
dark blue, healthcare to white and teal)? Reject that. Second: could someone
guess it from category plus your anti-references? That is the subtler trap.
Go further.
- Render before you claim. One-line CSS changes break mobile navigation.
Minimum coverage: 1280px wide desktop and 390px wide mobile.
npx playwright screenshot <url> --viewport-size=1280,900 desktop.png
captures the render. One-time setup: npx playwright install chromium.
- Extract a design-system issue when a token, spacing pattern, color, or state
treatment repeats three or more times, or controls a high-visibility surface.
- Never redraw, trace, recolor, or approximate a logo or brand mark. Use the
approved asset file. If it is unavailable, omit the mark and say so rather
than improvise one.
- Fake metrics and fake testimonials ship if nobody stops them. Flag every
placeholder number with
[NEEDS REAL DATA].
- Below 70/100 on the design-system score, the system is failing. Fix the two
lowest dimensions before styling new features on that surface.
Common Use Cases
- Rescuing a page that feels generic and stating precisely why.
- Pre-launch visual QA on marketing sites, docs sites, and product tours.
- Mock-versus-implementation fidelity checks with a written report.
- Design-system audits and drift cleanups before a redesign.
- Dark-mode passes that are not just inverted light mode.
- Component reviews for forms, tables, modals, navigation, and empty states.
- App store screenshot preparation (1290x2796 for 6.7-inch, 1488x2266 for
iPad Pro 13-inch).
- Accessibility sweeps: contrast ratios, focus order, touch targets, keyboard
paths, reduced-motion compliance.
Reference: Working Method
The sections below are the operating detail. Read them when doing the work, not
when deciding whether the skill applies.
Operating Stance
- Work from current source and a rendered screen. Do not design from memory when
a repo, live URL, screenshot, or local preview can be checked.
- Prefer the existing framework, tokens, components, icon library, and routing
patterns. Add a new abstraction only when it removes real complexity or
matches an established local pattern.
- Keep the product's actual differentiators in the copy. Do not flatten a
specific product into generic category language.
- Never redraw, trace, approximate, typeset, recolor, or generate a replacement
for a brand mark. Use the approved file or omit it.
Before design work, read the surface context:
PRODUCT.md if present: users, brand, tone, anti-references, principles.
DESIGN.md if present: color tokens, type scale, component inventory, spacing.
AGENTS.md, CLAUDE.md, AI_HANDOFF.md, or README.md for surface context.
If those files are missing on a major surface, note the gap, proceed with what is
available, and offer to create them afterward.
State the preflight before starting:
DESIGN PREFLIGHT
target=<repo-or-folder> surface=<route-or-url> register=<brand|product>
context=<pass|partial|none> design_system=<loaded|not_found>
render=<pass|pending|skipped:reason>
Task Router
Choose the smallest path that fits the request.
- Clear small fix: inspect current UI, make the narrow edit, verify the
render, report what changed.
- Ambiguous or net-new design: gather context, propose two or three
approaches with tradeoffs, recommend one, get approval before implementing.
- Large redesign: write a compact shape brief first, covering audience, page
job, register, scene, color strategy, typography, layout, signature moment,
constraints, and QA plan.
- Visual system work: scan current CSS, tokens, components, spacing,
shadows, breakpoints, icon usage, and repeated patterns before proposing
changes.
- Source-to-implementation QA: compare the visual target and the rendered
build in the same pass, then save
visual-qa-report.md.
- Long polish loop: iterate through a visible checklist. If the same failure
repeats, freeze the loop, reduce scope to the failing unit, and rerun with
explicit acceptance criteria.
Design Contract
Before a new surface, significant redesign, reusable component family, or
design-system pass, lock these:
- audience, surface job, primary action, and launch stage;
- spacing scale, grid behavior, breakpoints, and stable dimensions;
- color roles, semantic states, contrast requirements, and dark/light behavior;
- typography roles, hierarchy limits, body measure, and truncation strategy;
- copy vocabulary for buttons, empty states, loading, errors, and success;
- asset sources, logo use, crop rules, screenshot states, and motion rules;
- acceptance checks for desktop, mobile, accessibility, and rendered evidence.
For a narrow one-element fix, document only the relevant items instead of
forcing a full spec.
Context Checklist
- Identify the surface: repo or folder, route, live URL, deployment target,
branch, dirty files, and relevant local docs.
- Read repo-local agent and product docs when present.
- Decide the register:
- Brand: marketing, launch, campaign, public page, portfolio, editorial.
- Product: app shell, dashboard, tool, form, settings, admin, workflow.
- Name the physical scene: who uses this, where, under what light, with what
pressure, and what they need to do next.
- Inspect the current rendered UI at desktop and mobile breakpoints before
making claims about quality.
Design Laws
The numeric rules (spacing, type scale, color, contrast, dark mode, density,
motion, component behavior) are in
references/design-laws.md. Read that file whenever
writing or reviewing actual styles. It is not needed to route a request or scope
the work.
Scoped Bans And Exceptions
What is banned, the scope each ban applies to, and the narrow allowed exceptions
are in references/scoped-bans.md. Read it when a
design choice looks like it needs an exception, or when reviewing whether one was
legitimately taken.
Aesthetic Direction
Commit to a direction before writing code, and name it explicitly.
Tonal spectrum, pick one and execute it with precision:
- Refined minimal: restraint, negative space, weight as the only accent, no
ornamentation.
- Editorial: strong typographic hierarchy, asymmetry, text as structure,
headline-first layout.
- Brutalist: raw grids, exposed structure, high contrast, deliberate
anti-polish.
- Retro-technical: monospace, terminal palette, scan-line texture, system-UI
references.
- Organic: rounded forms, warm neutrals, tactile texture, soft shadow.
- Maximalist: density as delight, layered elements, multiple active
typefaces, controlled chaos.
- Luxury refined: generous space, serif hierarchy, muted palette,
detail-obsessed craft.
- Product-utilitarian: information density, data-first, compact controls, no
decorative chrome.
Bold maximalism and refined minimalism both work. The failure mode is neither: a
design with no committed direction reads as generic.
Unforgettable factor: every major surface should have one move that earns
memory, and it should be subject-native, something that only makes sense for this
product. A chain-of-title timeline for a rights platform. A live request waterfall
for an API tool. A shift-coverage ribbon for a scheduling app. Name it before
implementation.
AI slop check: run both reflex tests before committing.
- Could someone guess the theme and palette from the product category alone?
That is the first-order training-data reflex. Reject it.
- Could someone guess the aesthetic family from category plus anti-references?
That is the second-order trap. Go further.
Theme sentence: name the physical scene concretely enough that it forces the
design answer. Dark versus light is never a default. Not dark because tools look
cool dark, not light to play it safe.
Background and atmosphere: gradient meshes, noise textures, geometric
patterns, layered transparencies, dramatic shadows, grain overlays, and
decorative borders are legitimate tools when they serve the aesthetic. Do not
substitute generic gradient blobs, bokeh orbs, or CSS-only approximations for
real art direction.
Copy Rules
- Write like a product operator, not a brochure.
- Every label names an action, not a category. "Create Invoice" not "Invoice
Creation." "Verify Domain" not "Domain Verification." The actor is the user;
the object is specific.
- Cut filler, vague promises, and restated headings.
- Use the same action name across button, toast, empty state, and confirmation.
- Errors must say what happened and how to fix it.
- Empty states point to the next specific action, not a generic "get started."
Design System Quality Of Life
For any major surface, reusable app shell, or important component family,
produce these at the smallest useful fidelity:
- Token map: color roles, type scale, spacing, radii, shadows, motion,
z-layers, and semantic state names, stored in
DESIGN.md or
design-tokens.json.
- State matrix: default, hover, focus, active, disabled, loading, empty,
success, warning, error, and permission-denied for every component that
touches data.
- Copy vocabulary: action labels, toast language, error messages, and
empty-state prompts that stay consistent across the product.
- Screenshot contract: named states with seeded demo data so marketing, app
store, QA, and docs reproduce the same visuals.
- Accessibility pass: contrast ratios, focus order, touch targets, keyboard
paths, and reduced-motion compliance.
- Migration notes: what old styles still exist, what not to touch, and how
new work adopts the system without rewriting unrelated screens.
Extract a design-system issue when a token, component, spacing pattern, color,
type treatment, or state pattern repeats at least three times or controls a
high-visibility surface. Classify drift root cause as token missing, token
ignored, component gap, content pressure, platform convention, or legacy debt.
For broad audits, score:
Color consistency: /10
Typography hierarchy: /10
Spacing rhythm: /10
Component consistency: /10
Responsive behavior: /10
Dark/light behavior: /10
Motion restraint: /10
Accessibility: /10
Information density: /10
Polish: /10
Total: /100
Below 70/100 the system is failing: fix the two lowest dimensions before styling
new features on that surface. Any dimension at 4/10 or lower is a P1 finding.
Implementation Workflow
- Scan: inspect current files, styles, rendered UI, and route behavior.
- Shape: when needed, write a compact plan with color, type, layout,
motion, asset, copy, and verification decisions.
- Build: edit narrowly inside the local architecture. Keep unrelated
refactors out.
- Render: run the local server or existing preview. Capture desktop and
mobile screenshots:
npx playwright screenshot <url> --viewport-size=1280,900 desktop.png and
--viewport-size=390,844 mobile.png, or the environment's built-in preview
or screenshot tool. For app store submissions: 1290x2796 (6.7-inch),
1488x2266 (iPad Pro 13-inch).
- Review: check typography, spacing, colors, asset fidelity, copy,
accessibility, responsive behavior, and loading, empty, error, hover, focus,
and active states.
- Verify: run the relevant lint, typecheck, test, build, or focused
command. Run
git diff --check when files changed. Verify live URLs before
claiming public behavior.
- Handoff: record target, files changed, commands, verification, caveats,
and the next step.
Red Flags, Stop
If any of these thoughts appear, stop and run the check being skipped:
- "The code reads right, so it will render right." Render it. Screenshots beat
code inspection.
- "This change is too small for visual QA." One-line CSS changes break mobile
navigation. Check desktop and mobile.
- "Music tool, so dark purple." That is the first-order reflex the Color law
exists to reject. Substitute your own category and its obvious palette.
- "A placeholder metric is fine for now." Fake numbers ship unless they carry a
[NEEDS REAL DATA] flag.
- "I remember what the reference looks like." Compare source and implementation
in the same pass, never from memory.
- "I will write the tokens down later." Unlogged tokens are how drift starts.
Note the gap now.
Visual QA Report
When comparing a source visual target against an implementation, save
visual-qa-report.md with:
- source visual truth path or URL;
- implementation path, URL, or screenshot;
- viewport and state;
- theme, auth state, content or data state, and interaction state;
- full-view comparison evidence;
- focused region comparison evidence, or why it was not needed;
- findings ordered by P0/P1/P2/P3 severity;
- patches made after the previous pass;
final result: passed or final result: blocked.
Compare source and implementation in the same visual pass, not from memory.
Check typography, spacing and layout, colors and tokens, image and asset
fidelity, logos and icons, copy and content, loading/empty/error/hover/focus/
active states, responsiveness, accessibility, and motion where relevant.
Use blocked when a required artifact is missing for the comparison, or when
actionable P0/P1/P2 issues remain. Use passed only when no actionable P0/P1/P2
findings remain.
Ship Gate
For launch pages, app shells, public marketing surfaces, app store assets, or
high-visibility dashboard work, end with:
Surface:
Done signal:
Evidence:
Blockers:
Accepted caveats:
Next action:
Status: ship | ship-with-caveats | hold
Use hold when a core path is broken, claims are false, screenshots do not match
the implementation, accessibility blocks a primary action, or the live route
cannot be verified. Use ship-with-caveats only when the caveat is explicit,
non-critical, and acceptable for the launch stage.
Do not call work done because the code changed. Call it done only when the done
signal has been checked or the remaining gap is named.
Output Style
Findings lead, rationale follows. Name the file and the line. For builds, state
what changed and show the render evidence. Do not narrate internal process step
names in user-visible output.
1---2name: frontend-design-review-33description: Design, review, and visually QA web and app interfaces against explicit design laws so shipped screens look intentional instead of generic AI output.4---5
6# Frontend Design Review
7
8Most AI-generated interfaces fail the same way: they compile, they look plausible
9in code, and they render as the average of every landing page in the training
10data. Dark blue for a developer tool. Purple gradient for a music app. Three
11icon cards in a row. A tiny uppercase eyebrow above every section.
12
13This skill replaces taste-by-vibes with thresholds. It gives Claude a design
14contract to lock before writing CSS, numeric laws to satisfy while writing it, a
15list of banned defaults with the specific replacement for each, and a
16render-and-compare loop so nothing is called done from reading code. It works on
17product UI, dashboards, marketing pages, component systems, and app store
18assets.
19
20**Core principle:** strip the logo and the surface must still be unmistakably
21this product, and render the result before claiming it works.
22
23## When to Use This Skill
24
25- Building a new landing page, dashboard, app shell, or component family and you
26 want it to look designed rather than defaulted.
27- Reviewing an interface someone (or an agent) already built, and you need
28 specific findings with file names, not "looks good."
29- Auditing a design system for drift: inconsistent tokens, ad hoc spacing,
30 five shades of the same gray, components that disagree with each other.
31- Comparing a mock, Figma frame, screenshot, or reference URL against a built
32 implementation and reporting the gaps by severity.
33- Fixing a UI that feels generic and you cannot articulate why.
34- Preparing high-visibility surfaces: launch pages, app store screenshots,
35 investor demos, docs sites.
36
37Skip it for backend-only work, or a one-line copy change with no visual
38consequence.
39
40## What This Skill Does
41
421. **Locks a design contract before implementation**: audience, surface job,
43 primary action, register (brand vs. product), spacing scale, color roles,
44 type roles, copy vocabulary, and acceptance checks. Ambiguity resolved up
45 front instead of relitigated in review.
462. **Forces a committed aesthetic direction**: pick one of eight named tonal
47 directions (refined minimal, editorial, brutalist, retro-technical, organic,
48 maximalist, luxury refined, product-utilitarian) and execute it fully. The
49 failure mode is not "too bold" or "too plain," it is uncommitted.
503. **Applies numeric design laws**: color strategy, dark-mode surface lightness
51 and contrast floors, fluid type scale with `clamp()`, line measure, layout
52 and z-index rules, component laws for forms, modals, tables, navigation, and
53 empty states, plus motion curves and durations. See
54 [references/design-laws.md](./references/design-laws.md).
554. **Rejects AI-slop defaults with named replacements**: gradient text,
56 decorative glass panels, orb backgrounds, ghost cards, over-rounded corners,
57 numbered section scaffolding, hero-metric templates, fake statistics. Each
58 ban ships with a BEFORE and an AFTER and the narrow case where the exception
59 is earned. See [references/scoped-bans.md](./references/scoped-bans.md).
605. **Renders and verifies**: captures desktop and mobile screenshots, compares
61 source visual target to implementation in the same pass, and writes a
62 `visual-qa-report.md` with findings ordered P0 to P3.
636. **Scores design systems out of 100** across ten dimensions and names the two
64 weakest to fix first.
657. **Ends with a ship gate**: `ship`, `ship-with-caveats`, or `hold`, with the
66 evidence that supports the verdict.
67
68## How to Use
69
70### Basic Usage
71
72```
73Review the design of the dashboard at http://localhost:3000/app and tell me
74what is wrong with it. Render it at desktop and mobile before answering.
75```
76
77Claude inspects the source, renders the page, checks it against the design laws
78and the banned-defaults list, and reports findings with file names and specific
79fixes.
80
81### Advanced Usage
82
83```
84Redesign our pricing page. Before writing code:
851. Write the design contract (audience, page job, primary action, register).
862. Name the aesthetic direction and the one memorable move, and explain why the
87 obvious choice for this category is the wrong one.
883. Propose two approaches with tradeoffs and let me pick.
89Then build it, render at 1280x900 and 390x844, and finish with a ship gate.
90```
91
92```
93Compare ./designs/hero-mock.png against the implementation at
94http://localhost:5173 and save visual-qa-report.md with P0-P3 findings.
95```
96
97```
98Audit our design system in ./src/styles and score it out of 100 across color
99consistency, typography hierarchy, spacing rhythm, component consistency,
100responsive behavior, dark/light behavior, motion restraint, accessibility,
101information density, and polish. Fix the two lowest dimensions.
102```
103
104## Example
105
106**User**: "Our analytics dashboard looks like every other analytics dashboard.
107Fix it."
108
109**Output**:
110
111```
112DESIGN PREFLIGHT
113target=./apps/web surface=/dashboard register=product
114context=partial (no DESIGN.md) render=pass (1280x900, 390x844)
115
116DIAGNOSIS
117The surface is the category average. Three findings explain most of it.
118
119P0 Color is decorative, not semantic. src/styles/tokens.css:14
120 Six blues, none of which encode meaning. Threshold breaches, healthy
121 ranges, and stale data all render in the same accent.
122 Fix: commit to Restrained strategy. Tinted neutrals plus one accent
123 under 10% of surface area, reserved for threshold breaches only.
124
125P1 Card-in-card nesting. src/components/MetricGrid.tsx:31
126 Each metric is a card inside a section card. Cards are for items that
127 are independently scannable or selectable, not section wrappers.
128 Fix: rows with a shared rule, one card level maximum.
129
130P1 Hero-metric template. src/components/Headline.tsx:8
131 "$2.4M" at 80px/weight-900 with a 12px label under it. Isolated big
132 numbers read as marketing, not instrumentation.
133 Fix: put the number back in the row it belongs to, with its delta and
134 its comparison window beside it.
135
136DIRECTION
137Aesthetic: product-utilitarian. Scene: an on-call engineer scanning for the
138one number that moved, at 2am, on a second monitor. That scene forbids hero
139type and rewards density plus one loud state color.
140
141Memorable move: a sparkline gutter down the left edge of every row, so the
142shape of the week is readable before any number is.
143
144SHIP GATE
145Surface: /dashboard
146Done signal: desktop + mobile render, contrast pass
147Evidence: dashboard-desktop.png, dashboard-mobile.png, contrast 7.1:1 body
148Blockers: none
149Accepted caveats: empty state still generic, tracked separately
150Next action: apply P0 token change, re-render
151Status: ship-with-caveats
152```
153
154**Inspired by:** the design workflow from the
155[Suede Creator Skills](https://github.com/JasonColapietro/suede-creator-skills)
156collection by Jason Colapietro, generalized for any product.
157
158## Tips
159
160- Name the physical scene concretely enough that it forces the design answer.
161 "A studio engineer reviewing a rights dispute at 2am on a secondary monitor"
162 forces different choices than "a user looking at data." If the sentence does
163 not force the answer, add detail until it does.
164- Run the two-step slop check before committing to an aesthetic. First: could
165 someone guess the palette from the product category alone (observability to
166 dark blue, healthcare to white and teal)? Reject that. Second: could someone
167 guess it from category plus your anti-references? That is the subtler trap.
168 Go further.
169- Render before you claim. One-line CSS changes break mobile navigation.
170 Minimum coverage: 1280px wide desktop and 390px wide mobile.
171- `npx playwright screenshot <url> --viewport-size=1280,900 desktop.png`
172 captures the render. One-time setup: `npx playwright install chromium`.
173- Extract a design-system issue when a token, spacing pattern, color, or state
174 treatment repeats three or more times, or controls a high-visibility surface.
175- Never redraw, trace, recolor, or approximate a logo or brand mark. Use the
176 approved asset file. If it is unavailable, omit the mark and say so rather
177 than improvise one.
178- Fake metrics and fake testimonials ship if nobody stops them. Flag every
179 placeholder number with `[NEEDS REAL DATA]`.
180- Below 70/100 on the design-system score, the system is failing. Fix the two
181 lowest dimensions before styling new features on that surface.
182
183## Common Use Cases
184
185- Rescuing a page that feels generic and stating precisely why.
186- Pre-launch visual QA on marketing sites, docs sites, and product tours.
187- Mock-versus-implementation fidelity checks with a written report.
188- Design-system audits and drift cleanups before a redesign.
189- Dark-mode passes that are not just inverted light mode.
190- Component reviews for forms, tables, modals, navigation, and empty states.
191- App store screenshot preparation (1290x2796 for 6.7-inch, 1488x2266 for
192 iPad Pro 13-inch).
193- Accessibility sweeps: contrast ratios, focus order, touch targets, keyboard
194 paths, reduced-motion compliance.
195
196---
197
198## Reference: Working Method
199
200The sections below are the operating detail. Read them when doing the work, not
201when deciding whether the skill applies.
202
203### Operating Stance
204
205- Work from current source and a rendered screen. Do not design from memory when
206 a repo, live URL, screenshot, or local preview can be checked.
207- Prefer the existing framework, tokens, components, icon library, and routing
208 patterns. Add a new abstraction only when it removes real complexity or
209 matches an established local pattern.
210- Keep the product's actual differentiators in the copy. Do not flatten a
211 specific product into generic category language.
212- Never redraw, trace, approximate, typeset, recolor, or generate a replacement
213 for a brand mark. Use the approved file or omit it.
214
215Before design work, read the surface context:
216
217- `PRODUCT.md` if present: users, brand, tone, anti-references, principles.
218- `DESIGN.md` if present: color tokens, type scale, component inventory, spacing.
219- `AGENTS.md`, `CLAUDE.md`, `AI_HANDOFF.md`, or `README.md` for surface context.
220
221If those files are missing on a major surface, note the gap, proceed with what is
222available, and offer to create them afterward.
223
224State the preflight before starting:
225
226```text
227DESIGN PREFLIGHT
228target=<repo-or-folder> surface=<route-or-url> register=<brand|product>
229context=<pass|partial|none> design_system=<loaded|not_found>
230render=<pass|pending|skipped:reason>
231```
232
233### Task Router
234
235Choose the smallest path that fits the request.
236
237- **Clear small fix**: inspect current UI, make the narrow edit, verify the
238 render, report what changed.
239- **Ambiguous or net-new design**: gather context, propose two or three
240 approaches with tradeoffs, recommend one, get approval before implementing.
241- **Large redesign**: write a compact shape brief first, covering audience, page
242 job, register, scene, color strategy, typography, layout, signature moment,
243 constraints, and QA plan.
244- **Visual system work**: scan current CSS, tokens, components, spacing,
245 shadows, breakpoints, icon usage, and repeated patterns before proposing
246 changes.
247- **Source-to-implementation QA**: compare the visual target and the rendered
248 build in the same pass, then save `visual-qa-report.md`.
249- **Long polish loop**: iterate through a visible checklist. If the same failure
250 repeats, freeze the loop, reduce scope to the failing unit, and rerun with
251 explicit acceptance criteria.
252
253### Design Contract
254
255Before a new surface, significant redesign, reusable component family, or
256design-system pass, lock these:
257
258- audience, surface job, primary action, and launch stage;
259- spacing scale, grid behavior, breakpoints, and stable dimensions;
260- color roles, semantic states, contrast requirements, and dark/light behavior;
261- typography roles, hierarchy limits, body measure, and truncation strategy;
262- copy vocabulary for buttons, empty states, loading, errors, and success;
263- asset sources, logo use, crop rules, screenshot states, and motion rules;
264- acceptance checks for desktop, mobile, accessibility, and rendered evidence.
265
266For a narrow one-element fix, document only the relevant items instead of
267forcing a full spec.
268
269### Context Checklist
270
2711. Identify the surface: repo or folder, route, live URL, deployment target,
272 branch, dirty files, and relevant local docs.
2732. Read repo-local agent and product docs when present.
2743. Decide the register:
275 - **Brand**: marketing, launch, campaign, public page, portfolio, editorial.
276 - **Product**: app shell, dashboard, tool, form, settings, admin, workflow.
2774. Name the physical scene: who uses this, where, under what light, with what
278 pressure, and what they need to do next.
2795. Inspect the current rendered UI at desktop and mobile breakpoints before
280 making claims about quality.
281
282### Design Laws
283
284The numeric rules (spacing, type scale, color, contrast, dark mode, density,
285motion, component behavior) are in
286[references/design-laws.md](./references/design-laws.md). Read that file whenever
287writing or reviewing actual styles. It is not needed to route a request or scope
288the work.
289
290### Scoped Bans And Exceptions
291
292What is banned, the scope each ban applies to, and the narrow allowed exceptions
293are in [references/scoped-bans.md](./references/scoped-bans.md). Read it when a
294design choice looks like it needs an exception, or when reviewing whether one was
295legitimately taken.
296
297### Aesthetic Direction
298
299Commit to a direction before writing code, and name it explicitly.
300
301Tonal spectrum, pick one and execute it with precision:
302
303- **Refined minimal**: restraint, negative space, weight as the only accent, no
304 ornamentation.
305- **Editorial**: strong typographic hierarchy, asymmetry, text as structure,
306 headline-first layout.
307- **Brutalist**: raw grids, exposed structure, high contrast, deliberate
308 anti-polish.
309- **Retro-technical**: monospace, terminal palette, scan-line texture, system-UI
310 references.
311- **Organic**: rounded forms, warm neutrals, tactile texture, soft shadow.
312- **Maximalist**: density as delight, layered elements, multiple active
313 typefaces, controlled chaos.
314- **Luxury refined**: generous space, serif hierarchy, muted palette,
315 detail-obsessed craft.
316- **Product-utilitarian**: information density, data-first, compact controls, no
317 decorative chrome.
318
319Bold maximalism and refined minimalism both work. The failure mode is neither: a
320design with no committed direction reads as generic.
321
322**Unforgettable factor**: every major surface should have one move that earns
323memory, and it should be subject-native, something that only makes sense for this
324product. A chain-of-title timeline for a rights platform. A live request waterfall
325for an API tool. A shift-coverage ribbon for a scheduling app. Name it before
326implementation.
327
328**AI slop check**: run both reflex tests before committing.
329
3301. Could someone guess the theme and palette from the product category alone?
331 That is the first-order training-data reflex. Reject it.
3322. Could someone guess the aesthetic family from category plus anti-references?
333 That is the second-order trap. Go further.
334
335**Theme sentence**: name the physical scene concretely enough that it forces the
336design answer. Dark versus light is never a default. Not dark because tools look
337cool dark, not light to play it safe.
338
339**Background and atmosphere**: gradient meshes, noise textures, geometric
340patterns, layered transparencies, dramatic shadows, grain overlays, and
341decorative borders are legitimate tools when they serve the aesthetic. Do not
342substitute generic gradient blobs, bokeh orbs, or CSS-only approximations for
343real art direction.
344
345### Copy Rules
346
347- Write like a product operator, not a brochure.
348- Every label names an action, not a category. "Create Invoice" not "Invoice
349 Creation." "Verify Domain" not "Domain Verification." The actor is the user;
350 the object is specific.
351- Cut filler, vague promises, and restated headings.
352- Use the same action name across button, toast, empty state, and confirmation.
353- Errors must say what happened and how to fix it.
354- Empty states point to the next specific action, not a generic "get started."
355
356### Design System Quality Of Life
357
358For any major surface, reusable app shell, or important component family,
359produce these at the smallest useful fidelity:
360
361- **Token map**: color roles, type scale, spacing, radii, shadows, motion,
362 z-layers, and semantic state names, stored in `DESIGN.md` or
363 `design-tokens.json`.
364- **State matrix**: default, hover, focus, active, disabled, loading, empty,
365 success, warning, error, and permission-denied for every component that
366 touches data.
367- **Copy vocabulary**: action labels, toast language, error messages, and
368 empty-state prompts that stay consistent across the product.
369- **Screenshot contract**: named states with seeded demo data so marketing, app
370 store, QA, and docs reproduce the same visuals.
371- **Accessibility pass**: contrast ratios, focus order, touch targets, keyboard
372 paths, and reduced-motion compliance.
373- **Migration notes**: what old styles still exist, what not to touch, and how
374 new work adopts the system without rewriting unrelated screens.
375
376Extract a design-system issue when a token, component, spacing pattern, color,
377type treatment, or state pattern repeats at least three times or controls a
378high-visibility surface. Classify drift root cause as token missing, token
379ignored, component gap, content pressure, platform convention, or legacy debt.
380
381For broad audits, score:
382
383```text
384Color consistency: /10
385Typography hierarchy: /10
386Spacing rhythm: /10
387Component consistency: /10
388Responsive behavior: /10
389Dark/light behavior: /10
390Motion restraint: /10
391Accessibility: /10
392Information density: /10
393Polish: /10
394Total: /100
395```
396
397Below 70/100 the system is failing: fix the two lowest dimensions before styling
398new features on that surface. Any dimension at 4/10 or lower is a P1 finding.
399
400### Implementation Workflow
401
4021. **Scan**: inspect current files, styles, rendered UI, and route behavior.
4032. **Shape**: when needed, write a compact plan with color, type, layout,
404 motion, asset, copy, and verification decisions.
4053. **Build**: edit narrowly inside the local architecture. Keep unrelated
406 refactors out.
4074. **Render**: run the local server or existing preview. Capture desktop and
408 mobile screenshots:
409 `npx playwright screenshot <url> --viewport-size=1280,900 desktop.png` and
410 `--viewport-size=390,844 mobile.png`, or the environment's built-in preview
411 or screenshot tool. For app store submissions: 1290x2796 (6.7-inch),
412 1488x2266 (iPad Pro 13-inch).
4135. **Review**: check typography, spacing, colors, asset fidelity, copy,
414 accessibility, responsive behavior, and loading, empty, error, hover, focus,
415 and active states.
4166. **Verify**: run the relevant lint, typecheck, test, build, or focused
417 command. Run `git diff --check` when files changed. Verify live URLs before
418 claiming public behavior.
4197. **Handoff**: record target, files changed, commands, verification, caveats,
420 and the next step.
421
422### Red Flags, Stop
423
424If any of these thoughts appear, stop and run the check being skipped:
425
426- "The code reads right, so it will render right." Render it. Screenshots beat
427 code inspection.
428- "This change is too small for visual QA." One-line CSS changes break mobile
429 navigation. Check desktop and mobile.
430- "Music tool, so dark purple." That is the first-order reflex the Color law
431 exists to reject. Substitute your own category and its obvious palette.
432- "A placeholder metric is fine for now." Fake numbers ship unless they carry a
433 `[NEEDS REAL DATA]` flag.
434- "I remember what the reference looks like." Compare source and implementation
435 in the same pass, never from memory.
436- "I will write the tokens down later." Unlogged tokens are how drift starts.
437 Note the gap now.
438
439### Visual QA Report
440
441When comparing a source visual target against an implementation, save
442`visual-qa-report.md` with:
443
444- source visual truth path or URL;
445- implementation path, URL, or screenshot;
446- viewport and state;
447- theme, auth state, content or data state, and interaction state;
448- full-view comparison evidence;
449- focused region comparison evidence, or why it was not needed;
450- findings ordered by P0/P1/P2/P3 severity;
451- patches made after the previous pass;
452- `final result: passed` or `final result: blocked`.
453
454Compare source and implementation in the same visual pass, not from memory.
455Check typography, spacing and layout, colors and tokens, image and asset
456fidelity, logos and icons, copy and content, loading/empty/error/hover/focus/
457active states, responsiveness, accessibility, and motion where relevant.
458
459Use `blocked` when a required artifact is missing for the comparison, or when
460actionable P0/P1/P2 issues remain. Use `passed` only when no actionable P0/P1/P2
461findings remain.
462
463### Ship Gate
464
465For launch pages, app shells, public marketing surfaces, app store assets, or
466high-visibility dashboard work, end with:
467
468```text
469Surface:
470Done signal:
471Evidence:
472Blockers:
473Accepted caveats:
474Next action:
475Status: ship | ship-with-caveats | hold
476```
477
478Use `hold` when a core path is broken, claims are false, screenshots do not match
479the implementation, accessibility blocks a primary action, or the live route
480cannot be verified. Use `ship-with-caveats` only when the caveat is explicit,
481non-critical, and acceptable for the launch stage.
482
483Do not call work done because the code changed. Call it done only when the done
484signal has been checked or the remaining gap is named.
485
486### Output Style
487
488Findings lead, rationale follows. Name the file and the line. For builds, state
489what changed and show the render evidence. Do not narrate internal process step
490names in user-visible output.