browser-review

Visual QA via browser MCP tools (Playwright/browser-use). Use for UI review, visual bugs, or web interface inspection.

Browser Review

Perform thorough visual QA by navigating a web interface, taking screenshots between every action, and reviewing each screenshot for regressions, design compliance, layout issues, accessibility problems, and visual bugs.

Inputs

  • Target URL or an already-active browser session
  • Design specs (optional) — Figma URL, design tokens file, style guide, or verbal description of expected appearance
  • Viewport sizes (optional) — specific breakpoints to test. Default: desktop (1440x900), tablet (768x1024), mobile (375x812)

Outputs

  • Visual QA findings with screenshot references. Each finding includes what is wrong, where it appears, expected vs actual, and severity.
  • Summary verdict: ship-ready, needs fixes, or blocked.

Exit Condition

All visible screens and states have been reviewed, findings are documented with screenshot evidence, and a summary verdict is delivered.

Prerequisites

At least one browser MCP toolset is available. Check for:

  • Playwright: browser_navigate, browser_snapshot, browser_take_screenshot
  • browser-use: browse, browse_screenshot, browse_extract

If neither is available, tell the user to connect a browser MCP and stop. Do not attempt to review without visual tools.

Instructions

1. Establish Baseline

Navigate to the target URL (or confirm the current browser state if a session is already active). Take an initial screenshot before any interaction. This is the baseline — all subsequent screenshots are compared against it to identify deltas.

Playwright: browser_navigate -> browser_take_screenshot
browser-use: browse (navigate) -> browse_screenshot

2. Systematic Page Review

Review the initial screenshot against the design review checklist (below). Document every issue found. Then systematically navigate through the application:

  • Primary navigation — click through each nav item, take a screenshot after each transition
  • Interactive elements — hover states, focus states, active states for buttons, links, form inputs
  • Form flows — empty state, validation errors, success state
  • Empty states — pages with no data
  • Error states — trigger 404, permission denied, or network error if possible
  • Loading states — if the app has async data, capture the loading indicator

Between every navigation or interaction, take a screenshot and review the delta from the previous state.

3. Responsive Testing

If viewport sizes were specified (or using defaults), resize the browser and repeat the review at each breakpoint:

Playwright: browser_resize -> browser_take_screenshot

Focus on:

  • Content reflow and text wrapping
  • Navigation collapse (hamburger menu behavior)
  • Touch target sizes (minimum 44x44px)
  • Image scaling and cropping
  • Horizontal scrolling (should not exist unless intentional)

4. Design Compliance Check

If design specs are available (Figma URL, design tokens, style guide), compare each screenshot against the spec:

  • Colors — do they match the design tokens? Use the Figma MCP (get_design_context, get_variable_defs) if a Figma URL is provided
  • Typography — correct font family, size, weight, line height
  • Spacing — margins and padding match the design system grid
  • Components — do interactive elements match their spec (button variants, input styles, card layouts)

Without design specs, use general best-practice standards instead and note that no design spec was available for comparison.

5. Accessibility Spot Check

Visual accessibility issues that can be caught from screenshots:

  • Color contrast — text against background meets WCAG AA (4.5:1 for normal text, 3:1 for large text). Flag anything that looks low-contrast
  • Focus indicators — tab through interactive elements and verify visible focus rings
  • Text readability — minimum 16px body text, adequate line spacing, no text over busy backgrounds
  • Alt text — use browser_snapshot or browse_extract to check that images have alt attributes
  • Keyboard navigation — use browser_press_key (Tab, Enter, Escape) and verify the interface is navigable without a mouse
  • Landmarks — check for semantic HTML structure (header, main, nav, footer) via DOM inspection

6. Document Findings

For each issue found, record:

## [SEVERITY] Finding Title

**Type**: Layout | Typography | Color | Component | Accessibility | Responsive | State
**Location**: Page/route + element description
**Screenshot**: Reference to the screenshot where this was observed

**Expected**: What it should look like (from design spec or best practice)
**Actual**: What it actually looks like

**Recommendation**: Specific fix suggestion

Severity levels:

  • CRITICAL — Blocks usage. Broken layout, unreadable text, inaccessible primary flow
  • HIGH — Significant visual defect visible to all users
  • MEDIUM — Noticeable issue that degrades perceived quality
  • LOW — Minor polish item or enhancement suggestion

7. Summary Verdict

End with a summary:

## Visual QA Summary

| Severity | Count |
|---|---|
| Critical | N |
| High | N |
| Medium | N |
| Low | N |

**Verdict**: Ship-ready / Needs fixes before ship / Blocked — critical issues

**Top 3 Issues**:
1. ...
2. ...
3. ...
  • Ship-ready — zero critical or high issues, any medium/low are cosmetic
  • Needs fixes — one or more high issues, or 3+ medium issues
  • Blocked — any critical issue exists

Design Review Checklist

Use this checklist for every screenshot review. Not every item applies to every screenshot — use judgment.

Typography

  • Font family matches design system
  • Font sizes are consistent and hierarchical
  • Line height provides comfortable reading
  • No orphaned words or awkward line breaks in headings

Spacing

  • Consistent padding within components
  • Consistent margins between components
  • Adequate whitespace — nothing feels cramped or floating
  • Alignment to grid (if design system uses one)

Color

  • Background/foreground contrast meets WCAG AA
  • Brand colors used consistently
  • No unexpected color shifts (wrong theme, stale CSS)
  • Hover/active states have visible color change

Layout

  • No overlapping elements
  • No unexpected horizontal scroll
  • Content fills available space appropriately
  • Responsive breakpoints transition cleanly

Components

  • Buttons have all states: default, hover, active, disabled, loading
  • Form inputs show: empty, filled, focused, error, disabled
  • Cards/lists handle variable content length
  • Empty states have helpful messaging (not blank screens)
  • Loading indicators present where async data loads

Accessibility

  • Focus indicators visible on all interactive elements
  • Skip-to-content link present
  • Color is not the only differentiator (icons, patterns, labels)
  • Interactive elements have adequate touch targets

Examples

User: Check if the new dashboard page looks right.
--> Navigate to the dashboard URL. Take screenshot. Review against the
    checklist. Test responsive breakpoints. Document findings. Deliver
    verdict.
User: I just pushed a CSS refactor. Can you do a visual QA pass?
--> Navigate to the app root. Systematically click through all major routes,
    screenshotting each. Compare against previous known-good state (if
    available) or check for obvious regressions. Focus on layout breakage
    and color consistency since CSS was refactored.
User: Does the mobile view look right? Check on iPhone dimensions.
--> Resize browser to 375x812. Navigate through primary flows. Screenshot
    each screen. Focus on responsive issues: touch targets, text wrapping,
    nav collapse, horizontal scroll.
User: Compare the implementation against this Figma design. [Figma URL]
--> Use Figma MCP to pull design context and variable definitions. Navigate
    to the implementation. Take screenshots. Side-by-side comparison against
    Figma specs for colors, typography, spacing, and component fidelity.
    Document every deviation.

Before completing, read and follow ../references/cross-cutting-rules.md.