Responsive Visual Review
A one-shot, structural visual review of how a website actually renders across
screen sizes — not a pixel-diff regression tool, not a conversion/copy audit,
not an aesthetic design critique. It answers one question: does the layout
hold together at mobile, tablet, and desktop widths, right now?
Works on any website (static, SPA, SSR, CMS) — all it needs is a reachable
URL (local dev server or live). No baseline, no third-party visual-regression
account, no prior screenshot history required.
When not to use this
- Conversion, copy, brand positioning, funnel review → use
landing-page-audit (or equivalent CRO skill). This skill does not judge
whether copy persuades or a CTA converts — only whether the layout renders
correctly.
- New UI/visual design work → use
frontend-design. This skill reviews
what already exists; it doesn't design anything new.
- Automated pixel-diff regression gating in CI → use a dedicated tool
(Percy, Chromatic, Storybook test-runner, or the project's own
toHaveScreenshot() baseline if one exists). This skill produces no
baseline and does no pixel diffing — every run is a fresh structural read,
useful for ad-hoc/pre-deploy checks, not for CI gating.
- Accessibility (contrast ratios, ARIA, screen readers, keyboard nav) →
use
web-accessibility-essentials / axe-core. This skill looks at layout
integrity, not WCAG compliance — a page can pass this review and still
fail accessibility, and vice versa.
- Single-breakpoint bug already reported with a screenshot → just fix it;
this skill is for systematic multi-breakpoint sweeps, not one-off triage.
Phase 0 — Scope
- Target: confirm the base URL (local dev server, e.g.
http://localhost:8080, or a live URL) and, if the site is
multi-language, which language(s) to sample — one is usually enough
unless layout differs meaningfully per language (e.g. longer strings in
German, RTL scripts).
- Pages to sample (ask if not obvious, or infer from the site map):
- Homepage
- One representative content/detail page (article, product, listing item)
- One page with a form (signup, contact, checkout)
- One page with long-form or typography-heavy content (tests text
wrapping, line-length, heading hierarchy at narrow widths)
- Any page the user specifically flagged
Default to 3-5 pages. More than 8 pages in one run dilutes the review —
split into multiple runs instead.
- Breakpoints — default set, override if the project's own CSS
breakpoints differ:
- 375×812 (mobile — iPhone-class)
- 768×1024 (tablet, portrait)
- 1440×900 (desktop)
Add 1920×1080 only if the site has a distinct wide-desktop layout worth
checking.
Phase 1 — Capture
For each page × breakpoint combination, capture a full-page screenshot
(not just the viewport) — layout breaks below the fold are the most common
kind missed by manual spot-checks.
Use whatever browser automation is available in the environment:
- Playwright MCP tools (
browser_resize + browser_navigate +
browser_take_screenshot with fullPage: true), or
browser-use CLI, or
- A short Playwright script (
page.setViewportSize() +
page.screenshot({ fullPage: true })) if no MCP tool is available.
Name captures predictably: <page-slug>-<breakpoint-label>.png (e.g.
homepage-mobile.png), saved to the scratchpad directory — this is a
throwaway review artifact, not something to commit.
Phase 2 — Structural checklist
Walk every captured screenshot against this checklist. Compare the same
page across its three breakpoints side by side where a finding spans more
than one.
Layout integrity
Text
Images & media
Spacing & consistency
Cross-breakpoint regressions
Phase 3 — Findings
Report findings severity-ranked, each with: page, breakpoint, screenshot
reference, and a one-line description of what's wrong — concrete enough to
act on (e.g. "pricing table overflows viewport at 375px, third column cut
off" not "mobile layout needs work").
| Severity |
Examples |
| Critical |
Content unreadable/inaccessible at a breakpoint, broken checkout/signup form layout, horizontal scroll on primary pages |
| High |
Overlapping elements, broken images on key pages, nav unusable on mobile |
| Medium |
Inconsistent spacing, awkward text wrapping, minor cross-breakpoint drift |
| Low |
Cosmetic nitpicks, non-critical page, wide-desktop-only quirks |
Do not fix anything automatically — hand the findings back for triage,
the same way any other audit skill in this project reports (see
nfr-gap-audit's Phase 3/4 pattern) rather than editing CSS/templates
inline. If the user wants fixes applied, treat that as a separate,
explicit follow-up step per finding — small, verified, one at a time.
1---2name: responsive-visual-review3description: Baseline-free, Playwright-driven visual/layout review of a live or local website across breakpoints (mobile/tablet/desktop) — catches layout breaks, overflow, broken images, and inconsistent spacing without a hosted visual-regression service (Percy/Chromatic/Storybook) or an existing screenshot baseline. Works on any website, any stack. Trigger on "check responsiveness", "visual review", "does this look right on mobile", "review the layout across breakpoints", or before/after a CSS/template change that could shift layout. NOT for CRO/conversion/copy review (use landing-page-audit), new UI design work (use frontend-design), automated pixel-diff regression gating in CI (use Percy/Chromatic/Storybook-visual-regression skills, or the project's own Playwright toHaveScreenshot baseline if it has one), or accessibility/contrast auditing (use web-accessibility-essentials/axe).4---56# Responsive Visual Review78A one-shot, structural visual review of how a website actually renders across9screen sizes — not a pixel-diff regression tool, not a conversion/copy audit,10not an aesthetic design critique. It answers one question: **does the layout11hold together at mobile, tablet, and desktop widths, right now?**1213Works on any website (static, SPA, SSR, CMS) — all it needs is a reachable14URL (local dev server or live). No baseline, no third-party visual-regression15account, no prior screenshot history required.1617## When not to use this1819- **Conversion, copy, brand positioning, funnel review** → use20 `landing-page-audit` (or equivalent CRO skill). This skill does not judge21 whether copy persuades or a CTA converts — only whether the layout renders22 correctly.23- **New UI/visual design work** → use `frontend-design`. This skill reviews24 what already exists; it doesn't design anything new.25- **Automated pixel-diff regression gating in CI** → use a dedicated tool26 (Percy, Chromatic, Storybook test-runner, or the project's own27 `toHaveScreenshot()` baseline if one exists). This skill produces no28 baseline and does no pixel diffing — every run is a fresh structural read,29 useful for ad-hoc/pre-deploy checks, not for CI gating.30- **Accessibility** (contrast ratios, ARIA, screen readers, keyboard nav) →31 use `web-accessibility-essentials` / axe-core. This skill looks at layout32 integrity, not WCAG compliance — a page can pass this review and still33 fail accessibility, and vice versa.34- **Single-breakpoint bug already reported with a screenshot** → just fix it;35 this skill is for systematic multi-breakpoint sweeps, not one-off triage.3637## Phase 0 — Scope38391. **Target**: confirm the base URL (local dev server, e.g.40 `http://localhost:8080`, or a live URL) and, if the site is41 multi-language, which language(s) to sample — one is usually enough42 unless layout differs meaningfully per language (e.g. longer strings in43 German, RTL scripts).442. **Pages to sample** (ask if not obvious, or infer from the site map):45 - Homepage46 - One representative content/detail page (article, product, listing item)47 - One page with a form (signup, contact, checkout)48 - One page with long-form or typography-heavy content (tests text49 wrapping, line-length, heading hierarchy at narrow widths)50 - Any page the user specifically flagged51 Default to 3-5 pages. More than 8 pages in one run dilutes the review —52 split into multiple runs instead.533. **Breakpoints** — default set, override if the project's own CSS54 breakpoints differ:55 - 375×812 (mobile — iPhone-class)56 - 768×1024 (tablet, portrait)57 - 1440×900 (desktop)58 Add 1920×1080 only if the site has a distinct wide-desktop layout worth59 checking.6061## Phase 1 — Capture6263For each page × breakpoint combination, capture a **full-page** screenshot64(not just the viewport) — layout breaks below the fold are the most common65kind missed by manual spot-checks.6667Use whatever browser automation is available in the environment:68- Playwright MCP tools (`browser_resize` + `browser_navigate` +69 `browser_take_screenshot` with `fullPage: true`), or70- `browser-use` CLI, or71- A short Playwright script (`page.setViewportSize()` +72 `page.screenshot({ fullPage: true })`) if no MCP tool is available.7374Name captures predictably: `<page-slug>-<breakpoint-label>.png` (e.g.75`homepage-mobile.png`), saved to the scratchpad directory — this is a76throwaway review artifact, not something to commit.7778## Phase 2 — Structural checklist7980Walk every captured screenshot against this checklist. Compare the same81page across its three breakpoints side by side where a finding spans more82than one.8384**Layout integrity**85- [ ] No overlapping elements (text over images, buttons over nav)86- [ ] No horizontal scroll/overflow at any breakpoint87- [ ] Nav/menu collapses to a usable mobile pattern (not just shrunk)88- [ ] Grid/flex layouts reflow sensibly, not squeezed into unreadable columns89- [ ] Sticky/fixed elements (headers, CTAs) don't cover content or each other9091**Text**92- [ ] No truncated or clipped text (unless intentional with visible affordance)93- [ ] No orphaned single words or awkward line breaks in headings94- [ ] Line length stays readable at wide breakpoints (not full-bleed walls of text)95- [ ] Heading hierarchy still visually holds (h1 > h2 > h3 sizing) at every width9697**Images & media**98- [ ] No broken images (alt-text box instead of image)99- [ ] No images stretched/distorted or cropped to lose their subject100- [ ] Aspect ratios consistent within a repeated component (cards, thumbnails)101- [ ] No visible layout shift artifacts from lazy-loaded images (blank gaps)102103**Spacing & consistency**104- [ ] Consistent spacing rhythm between sections (no sudden gap/cramp)105- [ ] Touch targets (buttons, links) look large enough for the mobile breakpoint106- [ ] Forms: labels/inputs stay aligned and readable, no field overflow107- [ ] Footer/header consistent across the sampled pages at the same breakpoint108109**Cross-breakpoint regressions**110- [ ] Nothing that renders correctly at desktop breaks specifically at tablet111 (the most commonly under-tested breakpoint)112- [ ] Nothing present at desktop silently disappears at mobile without a113 deliberate mobile-specific alternative114115## Phase 3 — Findings116117Report findings severity-ranked, each with: page, breakpoint, screenshot118reference, and a one-line description of what's wrong — concrete enough to119act on (e.g. "pricing table overflows viewport at 375px, third column cut120off" not "mobile layout needs work").121122| Severity | Examples |123|----------|----------|124| Critical | Content unreadable/inaccessible at a breakpoint, broken checkout/signup form layout, horizontal scroll on primary pages |125| High | Overlapping elements, broken images on key pages, nav unusable on mobile |126| Medium | Inconsistent spacing, awkward text wrapping, minor cross-breakpoint drift |127| Low | Cosmetic nitpicks, non-critical page, wide-desktop-only quirks |128129Do not fix anything automatically — hand the findings back for triage,130the same way any other audit skill in this project reports (see131`nfr-gap-audit`'s Phase 3/4 pattern) rather than editing CSS/templates132inline. If the user wants fixes applied, treat that as a separate,133explicit follow-up step per finding — small, verified, one at a time.