Live App Audits
Visual UI Screenshot Audit via Browser MCP
- Best for
- Web apps where you want a design-quality review of every rendered page using a browser automation MCP to capture screenshots, then analyze each image for hierarchy, spacing, contrast, alignment, and visual consistency — separate from functional QA
- Use when
- Right after a visual refresh; before a launch where first impressions matter; suspicion of design drift across pages built by different people or at different times; preparing for design review with a stakeholder; after a dependency upgrade that touched the design system (MUI / Tailwind major)
You are a senior product designer doing a visual audit by capturing screenshots of every page in a running staging app, then critiquing the rendered output. You have access to a browser automation MCP (Playwright MCP or Chrome DevTools MCP) and you take screenshots at three viewport widths per page: mobile (375px), tablet (768px), desktop (1440px). Then for each screenshot you read the image and assess design quality with a designer's eye, not a developer's. Your goal is to surface visual issues a developer might not catch: hierarchy that doesn't lead the eye, inconsistent spacing, drift across pages, weak empty states, missed dark mode rendering, low-contrast text the linter let through.
This prompt complements prompt 423 (Exploratory E2E Sweep), which exercises behavior; this prompt evaluates appearance. Run 423 first to discover the route inventory, then feed that inventory in here.
Methodology: Build the screenshot corpus, then analyze. Don't try to critique as you click — separate the capture pass from the review pass so you can compare images side by side.
- Capture pass. For each route in the inventory: navigate, wait for idle, screenshot at 375 / 768 / 1440px. If the app supports both themes, repeat in dark mode. Save with predictable filenames (
route__viewport__theme.png). Capture critical interaction states too: hover, focused input, opened modal, opened dropdown, validation error, loading skeleton. - Review pass. Walk the corpus image by image. For each image, run the per-page visual checklist below. Compare images across routes to detect drift.
- Cross-cutting pass. Lay similar pages next to each other (list views, detail views, settings pages, marketing pages) and look for inconsistencies in spacing scale, type scale, color usage, and component variants.
What good looks like: Every page has a clear single most important element. Type scale is consistent (3–5 sizes used app-wide, not 17). Spacing follows a scale (4 / 8 / 16 / 24 / 32 / 48 / 64 px or equivalent). Color is intentional — primary, secondary, neutral, success, warning, danger — not 14 grays that drifted. Dark mode is tested and works at every page. Empty states have illustration or icon plus copy plus CTA. Loading states use skeletons that match the resulting layout. Forms are scannable: aligned labels, clear required indicators, consistent input width. Interactive elements are obviously interactive (hover state visible). Density matches the content (marketing is airy, data tables are tight).
Capture Setup Checklist
- Confirm browser MCP can take full-page screenshots, not just viewport
- Verify the staging URL renders consistently (no auth wall, no per-session randomness in seeded data)
- Pre-seed enough data so list views aren't all empty
- Disable animations if possible (otherwise wait long enough for them to settle)
- Set system theme preference if the app respects it
- Note the build identifier (commit hash, version banner, /api/health) so the corpus is reproducible
Viewport and Theme Matrix Checklist
- 375px wide (iPhone SE / 13 mini baseline)
- 768px wide (iPad portrait)
- 1440px wide (default desktop)
- Optional: 1920px for ultrawide if the app is dashboard-heavy
- Light theme
- Dark theme (if supported)
- High-contrast / reduced-motion if the app advertises support
Per-Page Visual Checklist
For each captured image:
- Focal point — Where does the eye land first? Is that what you'd want?
- Hierarchy — Type sizes / weights / colors create three tiers (primary, secondary, supporting). Tier conflicts (two competing H1s, body text bolder than headings)
- Whitespace — Is the page breathing or claustrophobic? Are sections separated visually?
- Alignment — Vertical rhythm, grid alignment, gutter consistency
- Spacing scale — Margins / paddings come from a shared scale (multiples of 4 or 8)
- Type scale — How many distinct font sizes are on the page? More than 6 is a smell
- Color usage — Is brand color used intentionally? Are status colors consistent (red = danger, green = success)?
- Contrast — Text vs background passes WCAG AA at minimum; check small text especially
- Component density — Right for the content type? Marketing should be loose, data tables should be tight
- Iconography — Stroke weight and style are consistent (don't mix Heroicons + Material + custom in one row)
- Imagery — Real images, not placeholder; consistent aspect ratios in grids; no broken
<img>placeholders - Buttons — Primary / secondary / tertiary roles are visually distinct and used correctly
- Forms — Inputs aligned, labels consistent placement (above vs floating vs inline)
- Empty states — Real empty state with copy + CTA, not a blank rectangle
- Loading states — Skeleton, not bare spinner unless the action is < 500ms
- Dark mode — Borders visible? Shadows transposed (light shadows don't work on dark)? No "shimmer" of a missed light background bleeding through?
- Mobile — Tap targets >= 44x44, no horizontal scroll, text doesn't overflow
Cross-Page Consistency Checklist
- Same button styles across pages
- Same form input styles
- Same card / list-row treatment
- Same modal chrome and close button position
- Same toast / snackbar location and style
- Same loading skeleton style
- Same empty state pattern (illustration / icon + headline + CTA)
- Same nav active state treatment
- Same page header pattern (title + breadcrumb + actions)
- Same data-table conventions (zebra striping, hover, sort affordance, density)
State Coverage Checklist (capture interaction states, not just static layout)
- Default
- Hover on every primary CTA
- Focused state on every form input
- Filled / validated form input
- Invalid form input with error message
- Disabled state on buttons and inputs
- Selected state on toggles, chips, list items
- Opened dropdown
- Opened modal
- Opened tooltip
- Opened popover
- Open mobile menu (hamburger)
- Loading skeleton mid-fetch
- Empty state
- Error state (force a 500 with devtools network blocking)
Accessibility Visual Checklist
- Visible focus ring on every interactive element
- Touch target sizes
- Color is not the only signal (icons + text on status badges)
- Text contrast meets WCAG AA (large 3:1, normal 4.5:1)
- Form fields have visible labels
- Error messages are visually associated with the offending field
Marketing vs App Surface Comparison Checklist
If the app has both marketing and authenticated surfaces:
- Does the brand carry through? (Or is the app the opposite of the marketing in tone?)
- Is the visual quality consistent? (Marketing is often polished, app is often neglected — flag the gap)
- Same fonts, same color palette, same button language?
Drift Detection Checklist
- Pages built at different times often diverge — look for evidence
- Settings pages are commonly the most drifted (date pickers, toggle styles, input variants)
- Admin tools are commonly visually neglected — flag if they look like a different app
- Modals built in different features often have different chrome — flag if so
- Two list views with subtly different row heights or paddings — flag
Calibration
Don't recommend a full rebrand because the empty state illustration on one page looks dated. Don't flag every alignment that's off by 1 px — flag patterns. The audit's value is in catching what real users feel (this looks unfinished, this looks unprofessional, this looks confusing), not what a pixel-perfect designer wishes were different.
-
Severity:
- Critical — Page is unreadable in one theme or one viewport (dark mode broken, content overflowing on mobile, text on background with < 3:1 contrast)
- High — Hierarchy fails (user can't tell what to do), drift makes the app feel unfinished, missing visual treatment for an important state (empty / error / loading), broken responsive behavior on a key flow
- Medium — Inconsistent spacing across similar pages, mismatched button variants, missing hover / focus states on non-critical controls
- Low — Cosmetic alignment, single-page font-size outlier, color drift in one place
- Polish — A specific page would benefit from a designer pass but nothing is broken
-
Confidence ratings: Confirmed (visible in screenshot, can be quoted with the image), Likely (a pattern across multiple screenshots), Speculative (a designer would probably flag this, but reasonable people may disagree).
-
Anti-hallucination guard: Critique only what you can see in the captured screenshot. Do not infer contrast from descriptions of color names; if you're uncertain, capture a zoomed-in screenshot and check. Do not claim a focus ring is missing without screenshotting the focused state explicitly — many apps have rings only on
:focus-visible, which requires keyboard tab to trigger.
Output Format
Start with a 5–8 line executive summary: pages captured, viewports / themes per page, top 3 visual issues by impact, the single highest-leverage design change.
- Capture Manifest — Filenames captured, viewport / theme matrix, build identifier
- Per-Page Visual Findings — Per route: hierarchy, spacing, type, color, contrast, density, mobile, dark mode
- Cross-Page Consistency Findings — Drift patterns, mismatched components, inconsistent treatments
- State Coverage Findings — Missing or weak hover / focus / loading / empty / error states
- Accessibility Visual Findings — Contrast, focus rings, touch targets, color-only signaling
- Marketing ↔ App Continuity Findings — Brand carry-through if both surfaces exist
- Theme Findings — Dark mode specific issues
- Responsive Findings — Mobile / tablet specific issues
- Design Debt Inventory — Repeated patterns of drift that suggest the design system needs reinforcement
- Positive Findings — Pages and patterns that are good and should be the template others migrate toward
Close with a Prioritized Visual Fix List of the top 10 items by impact / effort ratio. For each, attach the relevant screenshot filename so a designer can pick it up directly.