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-mapfor a thorough state audit before review. Use/animation-specto review motion and transition quality. Use/microinteraction-designfor interaction feedback detail.
Process
Step 1: Gather inputs
Ask the user to provide:
- The design — screenshots, Figma link, prototype URL, or a description of the design. Multiple screens are fine.
- The story or feature description — what this design is for, including acceptance criteria if available.
- Design system or brand guidelines — any relevant standards (colors, typography, component library) to check against. Optional.
- 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
| State | Covered? | Notes |
|---|---|---|
| Empty | Yes/No | (details) |
| Loading | Yes/No | (details) |
| Error | Yes/No | (details) |
| Overflow | Yes/No | (details) |
| First-time user | Yes/No | (details) |
Accessibility findings
| # | Finding | WCAG Criterion | Severity | Suggested 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
- (Issue) — (where it deviates)
- ...
Usability feedback
- (Observation) — (recommendation)
- ...
Acceptance criteria alignment
| Criterion | Addressed 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
| State | Covered? | Notes |
|---|---|---|
| Empty | Yes | Empty dashboard screen shows a "No funds added yet" message with a CTA — well done |
| Loading | Partial | Spinner shown at full-page level, but individual metric cards have no skeleton screens; layout shift likely on load |
| Error | No | No error state designed for failed data fetch or export failure; needs a screen or inline error pattern |
| Overflow | Partial | 40-card scenario shown but cards wrap into a 1-column layout below 8 cards with no pagination or virtualization guidance for engineers |
| Offline / disconnected | No | Not addressed; dashboard data is stale if connectivity drops mid-session |
| First-time user | Yes | Empty state doubles as onboarding entry point — acceptable for this user group |
| Single item | No | One-card layout not shown; card may stretch to full width awkwardly |
| Disabled elements | Partial | "Export Report" button appears disabled before a date range is selected but no tooltip or label explains why |
Accessibility findings
| # | Finding | WCAG Criterion | Severity | Suggested fix |
|---|---|---|---|---|
| 1 | Metric card trend indicators (up/down arrows) use green/red color only — no icon label or text alternative | 1.4.1 Use of Color | Critical | Add 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 content | 2.1.2 No Keyboard Trap (inverse) | Critical | Implement focus trap on modal open; return focus to trigger button on close |
| 3 | Date range filter inputs use placeholder text as the only label ("Start date", "End date") | 1.3.1 Info and Relationships | Major | Add persistent visible <label> elements above each input; do not rely on placeholder alone |
| 4 | Last-refreshed timestamp ("Updated 3 min ago") updates dynamically but has no aria-live region | 4.1.3 Status Messages | Minor | Wrap timestamp in aria-live="polite" so screen readers announce updates without stealing focus |
| 5 | Touch targets on card action icons (filter, pin) measure 20×20px in the spec | 2.5.8 Target Size (Minimum) | Major | Increase 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
- 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
FilledButtontoken. - Card elevation — Metric cards use
elevation-2shadow while the design system standard for dashboard cards iselevation-1. Creates visual noise at scale with 12+ cards. - 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
- 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.
- 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.
- 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
| Criterion | Addressed in design? | Notes |
|---|---|---|
| Display metric cards for each fund | Yes | Cards shown for 1–40 funds across screens |
| Allow CSV export via "Export Report" button | Partial | Button and modal designed; post-export confirmation state missing (see usability note) |
| Show last-refreshed timestamp | Yes | Visible in header; needs aria-live fix (see A11y finding #4) |
| Support filtering by date range | Partial | Filter 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.