Reviewing Design Fidelity
Purpose
Implementation drifts from design — silently, in small increments, every sprint. Padding shrinks by 2px to fit a label, a hex code gets approximated, a state variant is forgotten. Each drift is invisible alone; together they erode the brand and the design system. This skill performs side-by-side capture and structured comparison so drift is surfaced concretely, with evidence, before it accumulates further.
The skill produces an annotated gap report — not a redesign. It assumes the design is the source of truth and the implementation should match it; if that assumption is wrong (e.g., implementation revealed a design problem), surface that as a separate finding rather than rewriting the design.
When to use this skill
- A Figma URL is shared together with a live URL or built page screenshot
- User asks to "verify design", "compare with Figma", "check publishing", "디자인 검수", "퍼블리싱 검토", "design QA pass"
- After a frontend feature is implemented and before sign-off
- When the design system maintainer reports drift across a release
When NOT to use
- Reviewing the design itself (no implementation yet) → use
reviewing-spec-and-policy
- Reviewing code structure / component APIs → use
superpowers:requesting-code-review
- Generating new design from code → that's the figma-generate-design skill, not this one
Workflow
1. Identify both sides
Before capturing anything, confirm:
- Design side: Figma file URL + specific frame node IDs to review (one frame per screen state, including hover/focus/error/empty if applicable)
- Implementation side: live URL OR a path to deployed screenshots OR a local dev server URL
If either side is missing, pause and ask. A one-sided "review" is just an opinion.
2. Extract the design context
For each frame:
mcp__plugin_figma_figma__get_metadata → confirm frame structure and identify variant set
mcp__plugin_figma_figma__get_variable_defs → pull design tokens (color/spacing/typography) referenced by the frame. These are the canonical values; any drift in implementation should be measured against tokens, not against rendered pixel values, when tokens exist.
mcp__plugin_figma_figma__get_design_context → structured component data + Code Connect mappings if present
mcp__plugin_figma_figma__get_screenshot → reference image for the frame
See references/figma-extraction.md for tactics on multi-variant frames and Code Connect interpretation.
3. Capture the implementation
Use Playwright MCP to capture the live page in matched viewport sizes:
browser_resize to the design's intended viewport (mobile 375, tablet 768, desktop 1440 — or match the Figma frame width)
browser_navigate to the page URL
browser_snapshot for the accessibility tree (text content, ARIA roles, heading structure)
browser_take_screenshot for visual comparison
- For interaction states, use
browser_hover / browser_click then re-snapshot to capture hover/active/focus visuals
browser_console_messages once per page — console errors during rendering are themselves fidelity findings (broken images, missing fonts)
See references/playwright-capture.md for state coverage and viewport-matrix patterns.
4. Compare across the fidelity matrix
Apply the seven dimensions from references/fidelity-matrix.md:
- Layout & spacing — padding, margin, gap match design tokens
- Typography — font family, weight, size, line-height, letter-spacing
- Color — fills, strokes, text — match tokens (not just visually similar)
- Iconography & imagery — correct asset, correct size, correct positioning
- State coverage — hover, focus, active, disabled, loading, empty, error all implemented
- Responsive behavior — design intent preserved at each breakpoint, not just "doesn't crash"
- Accessibility — contrast ratio, focus visibility, semantic structure, alt text, keyboard reachability
Each dimension produces zero or more findings.
5. Prioritize by user impact
- Critical — broken or unusable (missing state, content overflow that hides info, accessibility blocker)
- Major — visibly wrong (color/spacing off enough that a designer would call it out, missing variant)
- Minor — token drift not visually detectable but breaks design-system contract (e.g., 14px instead of token
text-sm/15px)
Skip subjective preference findings ("I'd prefer more whitespace"); only flag drift from the documented design.
6. Produce the report
Use the structure in references/fidelity-report-template.md. Each finding includes:
- Frame reference (Figma node ID)
- Implementation reference (URL + viewport)
- Side-by-side evidence (screenshot paths or quoted token values)
- Dimension category
- Priority
- Concrete fix suggestion (token name, CSS property, or component prop change)
When the report leads to an actual PR, embed the captured screenshots in the PR body — text-only fidelity reports lose their evidence the moment the temp screenshot files are deleted. See references/fidelity-report-template.md § "Embedding evidence in PRs".
7. Hand off to the next skill
A fidelity review often surfaces gaps that aren't fidelity gaps — empty/error states missing entirely, API contract drift, no integration coverage for the BE change you just discovered. Don't fix them silently inside this skill — invoke the right next-step skill so the work stays auditable. See references/skill-handoff.md for the trigger matrix.
Principles
- Tokens first, pixels second. A 14px font-size when the design token is
text-sm (15px) is a finding even if visually indistinguishable — the design system contract is what gets re-rendered when tokens change.
- Capture all states, not just the default. Most drift hides in hover/focus/error/empty states because those rarely appear in a happy-path design review.
- Match viewports. A "looks fine on my laptop" review misses the 70% of users on other viewports. Capture each breakpoint in the design.
- Evidence is required. Every finding must reference a captured artifact (screenshot, snapshot tree, console log, computed style). "It looks off" without artifact = not a finding.
- Distinguish drift from design conflict. If implementation reveals a design problem (e.g., text actually overflows in real content), that's a separate finding flagging the design — don't try to silently "fix it" in implementation.
Detailed references
references/figma-extraction.md — tactics for multi-variant frames, Code Connect mappings, and choosing which frames to review
references/playwright-capture.md — viewport matrix, state-capture checklist, console-error interpretation
references/fidelity-matrix.md — full descriptions and example findings for the seven dimensions
references/fidelity-report-template.md — annotated template with example findings showing artifact references, plus PR-embed guidance
references/skill-handoff.md — when to invoke improving-feature-completeness, running-integration-tests, or reviewing-spec-and-policy from a fidelity review
1---2name: reviewing-design-fidelity3description: Reviews implemented UI against design source-of-truth (Figma frames, mockup images, design tokens) for visual fidelity — spacing, typography, color, responsive behavior, interaction states, accessibility. Use when comparing built pages to design specs, when a Figma URL is shared alongside a live URL/screenshot, or for "디자인 검수", "퍼블리싱 검토", "compare with figma", "픽셀 비교", "design QA", "피그마대로 되어있나", "figma vs 현재 화면", "구현이 디자인과 맞는지". Also triggers when a Figma URL is shared with reference to existing implementation. Triggers even when the change appears trivial — single label swap, one CSS rule, one-line JSX edit — because apparent simplicity is the most common skip rationalization, and the skill itself decides scope (full audit vs quick check) faster than the caller can. Captures both sides (Figma + Playwright snapshot), runs structured visual diff, reports gaps by user-visible impact. Distinct from reviewing-spec-and-policy (audits docs) and code review (audits code structure).4---56# Reviewing Design Fidelity78## Purpose910Implementation drifts from design — silently, in small increments, every sprint. Padding shrinks by 2px to fit a label, a hex code gets approximated, a state variant is forgotten. Each drift is invisible alone; together they erode the brand and the design system. This skill performs side-by-side capture and structured comparison so drift is surfaced concretely, with evidence, before it accumulates further.1112The skill produces an annotated gap report — not a redesign. It assumes the design is the source of truth and the implementation should match it; if that assumption is wrong (e.g., implementation revealed a design problem), surface that as a separate finding rather than rewriting the design.1314## When to use this skill1516- A Figma URL is shared together with a live URL or built page screenshot17- User asks to "verify design", "compare with Figma", "check publishing", "디자인 검수", "퍼블리싱 검토", "design QA pass"18- After a frontend feature is implemented and before sign-off19- When the design system maintainer reports drift across a release2021## When NOT to use2223- Reviewing the design itself (no implementation yet) → use `reviewing-spec-and-policy`24- Reviewing code structure / component APIs → use `superpowers:requesting-code-review`25- Generating new design from code → that's the figma-generate-design skill, not this one2627## Workflow2829### 1. Identify both sides3031Before capturing anything, confirm:32- **Design side:** Figma file URL + specific frame node IDs to review (one frame per screen state, including hover/focus/error/empty if applicable)33- **Implementation side:** live URL OR a path to deployed screenshots OR a local dev server URL3435If either side is missing, pause and ask. A one-sided "review" is just an opinion.3637### 2. Extract the design context3839For each frame:40411. `mcp__plugin_figma_figma__get_metadata` → confirm frame structure and identify variant set422. `mcp__plugin_figma_figma__get_variable_defs` → pull design tokens (color/spacing/typography) referenced by the frame. These are the canonical values; any drift in implementation should be measured against tokens, not against rendered pixel values, when tokens exist.433. `mcp__plugin_figma_figma__get_design_context` → structured component data + Code Connect mappings if present444. `mcp__plugin_figma_figma__get_screenshot` → reference image for the frame4546See `references/figma-extraction.md` for tactics on multi-variant frames and Code Connect interpretation.4748### 3. Capture the implementation4950Use Playwright MCP to capture the live page in matched viewport sizes:51521. `browser_resize` to the design's intended viewport (mobile 375, tablet 768, desktop 1440 — or match the Figma frame width)532. `browser_navigate` to the page URL543. `browser_snapshot` for the accessibility tree (text content, ARIA roles, heading structure)554. `browser_take_screenshot` for visual comparison565. For interaction states, use `browser_hover` / `browser_click` then re-snapshot to capture hover/active/focus visuals576. `browser_console_messages` once per page — console errors during rendering are themselves fidelity findings (broken images, missing fonts)5859See `references/playwright-capture.md` for state coverage and viewport-matrix patterns.6061### 4. Compare across the fidelity matrix6263Apply the seven dimensions from `references/fidelity-matrix.md`:64651. **Layout & spacing** — padding, margin, gap match design tokens662. **Typography** — font family, weight, size, line-height, letter-spacing673. **Color** — fills, strokes, text — match tokens (not just visually similar)684. **Iconography & imagery** — correct asset, correct size, correct positioning695. **State coverage** — hover, focus, active, disabled, loading, empty, error all implemented706. **Responsive behavior** — design intent preserved at each breakpoint, not just "doesn't crash"717. **Accessibility** — contrast ratio, focus visibility, semantic structure, alt text, keyboard reachability7273Each dimension produces zero or more findings.7475### 5. Prioritize by user impact7677- **Critical** — broken or unusable (missing state, content overflow that hides info, accessibility blocker)78- **Major** — visibly wrong (color/spacing off enough that a designer would call it out, missing variant)79- **Minor** — token drift not visually detectable but breaks design-system contract (e.g., 14px instead of token `text-sm`/15px)8081Skip subjective preference findings ("I'd prefer more whitespace"); only flag drift from the documented design.8283### 6. Produce the report8485Use the structure in `references/fidelity-report-template.md`. Each finding includes:86- Frame reference (Figma node ID)87- Implementation reference (URL + viewport)88- Side-by-side evidence (screenshot paths or quoted token values)89- Dimension category90- Priority91- Concrete fix suggestion (token name, CSS property, or component prop change)9293When the report leads to an actual PR, embed the captured screenshots in the PR body — text-only fidelity reports lose their evidence the moment the temp screenshot files are deleted. See `references/fidelity-report-template.md` § "Embedding evidence in PRs".9495### 7. Hand off to the next skill9697A fidelity review often surfaces gaps that aren't fidelity gaps — empty/error states missing entirely, API contract drift, no integration coverage for the BE change you just discovered. Don't fix them silently inside this skill — invoke the right next-step skill so the work stays auditable. See `references/skill-handoff.md` for the trigger matrix.9899## Principles100101- **Tokens first, pixels second.** A 14px font-size when the design token is `text-sm` (15px) is a finding even if visually indistinguishable — the design system contract is what gets re-rendered when tokens change.102- **Capture all states, not just the default.** Most drift hides in hover/focus/error/empty states because those rarely appear in a happy-path design review.103- **Match viewports.** A "looks fine on my laptop" review misses the 70% of users on other viewports. Capture each breakpoint in the design.104- **Evidence is required.** Every finding must reference a captured artifact (screenshot, snapshot tree, console log, computed style). "It looks off" without artifact = not a finding.105- **Distinguish drift from design conflict.** If implementation reveals a design problem (e.g., text actually overflows in real content), that's a separate finding flagging the design — don't try to silently "fix it" in implementation.106107## Detailed references108109- `references/figma-extraction.md` — tactics for multi-variant frames, Code Connect mappings, and choosing which frames to review110- `references/playwright-capture.md` — viewport matrix, state-capture **checklist**, console-error interpretation111- `references/fidelity-matrix.md` — full descriptions and example findings for the seven dimensions112- `references/fidelity-report-template.md` — annotated template with example findings showing artifact references, plus PR-embed guidance113- `references/skill-handoff.md` — when to invoke `improving-feature-completeness`, `running-integration-tests`, or `reviewing-spec-and-policy` from a fidelity review