Skip to main content
Design/design-review

Design Review

You need design critique before implementation.

Use this when you have a design (mockup, prototype, screenshot, or Figma link) and want structured feedback on accessibility, consistency, edge states, and acceptance criteria coverage before engineering begins.

Related skills: Use /state-map for a thorough state audit before review. Use /animation-spec to review motion and transition quality. Use /microinteraction-design for interaction feedback detail.

Process

Step 1: Gather inputs

Ask the user to provide:

  1. The design — screenshots, Figma link, prototype URL, or a description of the design. Multiple screens are fine.
  2. The story or feature description — what this design is for, including acceptance criteria if available.
  3. Design system or brand guidelines — any relevant standards (colors, typography, component library) to check against. Optional.
  4. Target users — who will use this? (helps evaluate appropriateness of complexity, language, information density)

Step 2: Review the design

Evaluate across these dimensions:

Acceptance criteria coverage

  • Does the design address every acceptance criterion in the story?
  • Are there criteria that the design doesn't cover (missing screens or states)?
  • Does the design introduce functionality not in the story (scope creep)?

Edge and interaction states

Check that the design handles:

  • Empty state — what does the user see when there's no data yet? Is there guidance or a call to action?
  • Loading state — what happens while data is being fetched? Spinner, skeleton screen, or progressive loading?
  • Error state — what does the user see when something goes wrong? Is recovery clear?
  • Partial/degraded state — what if some data loads but not all? What if a service is unavailable?
  • Skeleton screens — are placeholder layouts used during load to prevent layout shift?
  • Offline/disconnected state — what happens if the user loses connectivity mid-task?
  • Overflow — what happens with long text, many items, or extreme values?
  • First-time vs. returning user — is onboarding needed?
  • Single item vs. many items — does the layout work at both extremes?
  • Transition states — are there clear visual transitions between states (loading → loaded, collapsed → expanded)?
  • Disabled/inactive elements — do disabled controls explain why they're disabled?

Accessibility (WCAG 2.2 AA baseline)

Evaluate each category. For deeper WCAG compliance analysis, use /accessibility-audit.

Perceivable:

  • Color contrast -- do text and interactive elements meet WCAG AA ratios (4.5:1 text, 3:1 large text, 3:1 UI components)?
  • Color independence -- is meaning conveyed through shape, text, or icons in addition to color? (e.g., error states use red + icon + text, not red alone)
  • Text legibility -- is body text at least 16px? Is line height at least 1.5x? Can text be resized to 200% without content loss?
  • Alt text -- do images and icons have text alternatives? Are decorative images marked as decorative?
  • Media -- do videos have captions? Do audio elements have transcripts?

Operable:

  • Keyboard navigation -- can all interactive elements be reached and activated via keyboard? Is tab order logical?
  • Focus indicators -- does every interactive element have a visible focus state? Are custom focus styles at least as visible as browser defaults?
  • Focus management -- after modal open, content load, or deletion, where does focus go? Do modals trap focus?
  • Touch targets -- are interactive elements large enough (minimum 24x24px per WCAG 2.2, recommended 44x44px)?
  • Motion and animation -- do animations respect prefers-reduced-motion? Is there auto-playing content that can be paused?

Understandable:

  • Form labels -- do all inputs have visible labels (not just placeholders)? Are labels programmatically associated with inputs?
  • Error handling -- are errors identified clearly? Do error messages suggest corrections? Are errors associated with their inputs via aria-describedby?
  • Consistent navigation -- do repeated navigation elements appear in the same order across screens?

Robust:

  • Screen reader path -- does the visual hierarchy match a logical reading order? Do headings form a correct h1-h6 hierarchy?
  • ARIA usage -- are custom components using appropriate ARIA roles and states? Is ARIA used only when semantic HTML is insufficient?
  • Dynamic content -- are live updates announced to screen readers via aria-live regions? Are status messages (success, error, progress) announced?

Consistency

  • Does the design use components from the design system consistently?
  • Are spacing, alignment, and sizing patterns consistent across screens?
  • Does the visual language match the rest of the product?
  • Are interactive patterns (buttons, links, forms) used consistently?

Usability

  • Is the primary action obvious on each screen?
  • Is the information hierarchy clear (what's most important)?
  • Can the user complete their task without confusion?
  • Are labels and copy clear and actionable?

Step 3: Generate the review

Output in this format:


Design Review: (feature name)

Summary

(One sentence: Ready for build / Needs iteration / Major concerns)

Edge state coverage

StateCovered?Notes
EmptyYes/No(details)
LoadingYes/No(details)
ErrorYes/No(details)
OverflowYes/No(details)
First-time userYes/No(details)

Accessibility findings

#FindingWCAG CriterionSeveritySuggested fix
1(Issue)(Criterion ID)Critical / Major / Minor(Fix)
2(Issue)(Criterion ID)Critical / Major / Minor(Fix)

Severity key: Critical = blocks AT users from completing task. Major = significant barrier, workaround exists. Minor = inconvenience or non-conformance with low impact.

Consistency issues

  1. (Issue) — (where it deviates)
  2. ...

Usability feedback

  1. (Observation) — (recommendation)
  2. ...

Acceptance criteria alignment

CriterionAddressed in design?Notes
(AC from story)Yes/No/Partial(details)

What works well

  • (Specific positive callouts)

Step 4: Discuss

Ask the user:

  • Any feedback you disagree with or want to discuss?
  • Want me to suggest specific design changes for the issues found?
  • Are there other screens or flows to review?

Feedback principles

  • Review before it's ready. Give feedback on work-in-progress, not polished deliverables. Waiting for "ready" creates waterfall in disguise.
  • Give feedback at the right level. Don't give pixel-level notes on a wireframe. Match feedback granularity to the artifact's maturity.
  • Review in public. When you give feedback in private, you take that learning from everyone else in the room. Make feedback visible so the team learns from it.

Output location

Present the review as formatted text in the conversation.

Example Output

Input

  • Design: Figma link to a 4-screen flow — empty dashboard, loading state, populated dashboard with up to 12 metric cards, and an overflow scenario with 40+ cards. Includes a new "Export Report" modal.
  • Story / Acceptance Criteria: As a finance manager at Northbridge Capital, I want to view my portfolio performance dashboard so I can monitor KPIs at a glance. ACs: (1) Display metric cards for each fund, (2) Allow CSV export via "Export Report" button, (3) Show last-refreshed timestamp, (4) Support filtering by date range.
  • Design system: Northbridge internal Figma component library (based on Material Design 3), using brand tokens — primary #1A3C6E, surface #F5F7FA, error #D32F2F.
  • Target users: Finance managers and analysts, ages 35–55, primarily desktop, moderate technical literacy.

Output (abbreviated)

Design Review: Portfolio Performance Dashboard

Summary

Needs iteration — solid layout foundation and good use of the component library, but four accessibility issues require fixes before build, two acceptance criteria are only partially addressed, and several edge states are missing designs.


Edge state coverage

StateCovered?Notes
EmptyYesEmpty dashboard screen shows a "No funds added yet" message with a CTA — well done
LoadingPartialSpinner shown at full-page level, but individual metric cards have no skeleton screens; layout shift likely on load
ErrorNoNo error state designed for failed data fetch or export failure; needs a screen or inline error pattern
OverflowPartial40-card scenario shown but cards wrap into a 1-column layout below 8 cards with no pagination or virtualization guidance for engineers
Offline / disconnectedNoNot addressed; dashboard data is stale if connectivity drops mid-session
First-time userYesEmpty state doubles as onboarding entry point — acceptable for this user group
Single itemNoOne-card layout not shown; card may stretch to full width awkwardly
Disabled elementsPartial"Export Report" button appears disabled before a date range is selected but no tooltip or label explains why

Accessibility findings

#FindingWCAG CriterionSeveritySuggested fix
1Metric card trend indicators (up/down arrows) use green/red color only — no icon label or text alternative1.4.1 Use of ColorCriticalAdd accessible label to arrow icons (e.g., aria-label="Up 12%") and a text value beneath the arrow
2"Export Report" modal does not trap focus; tab exits the modal to background content2.1.2 No Keyboard Trap (inverse)CriticalImplement focus trap on modal open; return focus to trigger button on close
3Date range filter inputs use placeholder text as the only label ("Start date", "End date")1.3.1 Info and RelationshipsMajorAdd persistent visible <label> elements above each input; do not rely on placeholder alone
4Last-refreshed timestamp ("Updated 3 min ago") updates dynamically but has no aria-live region4.1.3 Status MessagesMinorWrap timestamp in aria-live="polite" so screen readers announce updates without stealing focus
5Touch targets on card action icons (filter, pin) measure 20×20px in the spec2.5.8 Target Size (Minimum)MajorIncrease hit area to minimum 24×24px; recommend 44×44px for this user group on hybrid devices

Severity key: Critical = blocks AT users from completing task. Major = significant barrier, workaround exists. Minor = inconvenience or non-conformance with low impact.


Consistency issues

  1. Primary button style — "Export Report" inside the modal uses an outlined button variant; all other primary actions across the library use the filled variant. Swap to FilledButton token.
  2. Card elevation — Metric cards use elevation-2 shadow while the design system standard for dashboard cards is elevation-1. Creates visual noise at scale with 12+ cards.
  3. Spacing — Gap between filter bar and card grid is 24px on the dashboard screen but 16px on the overflow screen. Standardize to spacing-6 (24px) per the library grid spec.

Usability feedback

  1. Filter bar discoverability — The date range filter is right-aligned and visually de-emphasized; finance managers' primary task is filtering by period. Consider moving it left, adjacent to the page title, or making it a persistent prominent control rather than a secondary toolbar element.
  2. Export modal confirmation — After CSV export completes, the modal closes silently. Users have no confirmation the file downloaded. Add a brief success toast ("Report exported") consistent with the notification pattern used elsewhere in the product.
  3. Information density on overflow — 40 cards at equal visual weight makes it hard to identify underperforming funds quickly. Consider adding a sort/group control (e.g., by performance delta) so managers can surface outliers without scrolling.

Acceptance criteria alignment

CriterionAddressed in design?Notes
Display metric cards for each fundYesCards shown for 1–40 funds across screens
Allow CSV export via "Export Report" buttonPartialButton and modal designed; post-export confirmation state missing (see usability note)
Show last-refreshed timestampYesVisible in header; needs aria-live fix (see A11y finding #4)
Support filtering by date rangePartialFilter inputs shown but disabled-state explanation missing and no design for invalid date range input (e.g., end date before start date)

What works well

  • Empty state is purposeful and action-oriented — the "Connect your first fund" CTA gives new users a clear next step without being overwhelming.
  • Card layout scales cleanly from 4 to 12 cards using the auto-grid pattern; the design correctly anticipates the common viewport range for this user group.
  • Component fidelity is high — typography, color tokens, and iconography are consistent with the Northbridge library across all four screens, which will reduce engineering decision-making.
  • Modal structure for Export Report is well-scoped; the two-field form (format selector + date range) is appropriately minimal.

Any findings you'd like to push back on or dig into further? I can also draft specific redline notes for the focus trap implementation or sketch out the missing error state if that would help unblock the designer.