From web-dev-toolkit
Automatically check a running web app's UI against its design spec using Playwright MCP. Use this skill whenever the user wants to verify UI/UX implementation matches designs, catch visual regressions, check color tokens, verify component structure, or audit screens against a spec doc. Trigger on phrases like "check the UI", "verify the design", "are there any UI bugs", "does this match the spec", "playwright UI check", or when a design spec exists and the app is running locally.
How this skill is triggered — by the user, by Claude, or both
Slash command
/web-dev-toolkit:web-ui-spec-checkerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Systematically verify that a running app's UI matches its design spec. Works by reading the spec, navigating each screen with Playwright, and comparing what's rendered against what's specified.
Systematically verify that a running app's UI matches its design spec. Works by reading the spec, navigating each screen with Playwright, and comparing what's rendered against what's specified.
The value is in being methodical: it's easy to spot obvious bugs but miss subtle color drifts, missing components, or wrong spacing. This skill forces a structured pass over every screen.
Before starting, confirm:
npm run dev or equivalent). Check with browser_navigate to the base URL.docs/superpowers/specs/, docs/design/, DESIGN.md.Base URL: Default to http://localhost:3000. Ask the user if it's different.
For each screen:
Before navigating, read the spec section for this screen. Note:
browser_navigate → <url>/<route>
browser_take_screenshot
Give the screenshot a descriptive name like tasks-overview.png and save to the outputs directory.
browser_snapshot
This gives you the DOM structure and visible text without relying on visual inspection alone. Use it to verify:
For elements where the spec gives exact values (colors, font sizes, border widths), verify them with:
browser_evaluate → (function() {
const el = document.querySelector('<selector>');
if (!el) return 'NOT FOUND';
const s = window.getComputedStyle(el);
return { color: s.color, backgroundColor: s.backgroundColor, fontSize: s.fontSize, borderLeftColor: s.borderLeftColor, borderLeftWidth: s.borderLeftWidth };
})()
You can also use the bundled script: read scripts/extract_styles.js and paste into browser_evaluate.
Key things to verify with computed styles:
For each screen, write findings in this format:
### <Screen Name> (<route>)
**Status:** ✅ Matches spec | ⚠️ Minor issues | ❌ Significant issues
**Verified:**
- [ list what was checked and matched ]
**Issues found:**
- [ ISSUE: description ] — Spec says X, got Y. Element: <selector>. Screenshot: <filename>.
Use the spec as your source of truth. Common things to verify across most screens:
Navigation
Colors
#fdf8f4 or white — spec will say which)Typography
Components
Task cards (if applicable)
For interactive elements in the spec:
browser_click → <element>
browser_take_screenshot ← capture the state change
browser_snapshot ← verify DOM updated correctly
Key interactions to test:
After checking all screens, write a bug-report.md to the outputs directory:
# UI Spec Check — Bug Report
**Date:** <date>
**Spec:** <path to spec file>
**App URL:** <base URL>
**Screens checked:** <list>
## Summary
- Screens checked: N
- Screens passing: N
- Issues found: N (X critical, Y minor)
## Findings by Screen
### <Screen> — ✅/⚠️/❌
...
## Recommended Fixes
<prioritized list>
Save screenshots alongside the report in the outputs directory.
style= attributes rather than CSS classes. [class*="border-l"] won't find them. Use div[style] and filter on el.style.borderLeftWidth, or walk up the DOM with getComputedStyle to catch both./tasks → /chat). Always confirm window.location.href matches the target route before running style checks.browser_resize → { width: 390, height: 844 }.npx claudepluginhub elvinouyang/claude-skill-collection --plugin web-dev-toolkitValidates UI modifications through systematic visual analysis, detecting pixel-level differences, design system compliance issues, and accessibility violations.
Use when a backpressured loop has a front-end/UI change and needs to compare the rendered result against its design reference (a Figma frame or images on a Linear ticket) — catching layout, spacing, contrast, and visual-consistency defects automated tests and happy-path clicking miss.
Verifies frontend changes against spec acceptance criteria using Playwright MCP for browser automation. Automates spec intake, dev server/auth checks, and test runs.