Back to Skills
Visual Diff
Visual Regression Testing — screenshot comparison before and after changes. Use when user wants to check for visual regressions, compare UI changes, or verify CSS/layout changes didn't break anything.
testing
By Houseofmvps
Skill Content
# Visual Regression Testing
Automated screenshot comparison using Playwright. Catch visual bugs before they ship.
## Process
### Phase 1: Determine Test Scope
Ask the user:
1. **What URL(s) to test?** (localhost, staging, or production)
2. **What changed?** (CSS update, component refactor, dependency upgrade, etc.)
If the user already described what changed, skip asking.
### Phase 2: Take "Before" Screenshots
If comparing against the current state (before making changes):
Use the Playwright MCP to capture screenshots:
1. Navigate to the URL:
- Use `browser_navigate` to go to the target URL
2. Take full-page screenshot:
- Use `browser_take_screenshot` to capture the current state
3. Capture key viewports:
- Desktop (1920x1080): `browser_resize` then `browser_take_screenshot`
- Tablet (768x1024): `browser_resize` then `browser_take_screenshot`
- Mobile (375x812): `browser_resize` then `browser_take_screenshot`
4. Save screenshots with descriptive names noting they are "before" state.
### Phase 3: Make Changes
Let the user make their changes, or make them yourself if that's the task.
### Phase 4: Take "After" Screenshots
Repeat the same screenshot process for the same URLs and viewports.
### Phase 5: Visual Comparison
Compare before and after screenshots:
1. **Layout shifts** — did any elements move unexpectedly?
2. **Color changes** — did colors, gradients, or shadows change?
3. **Typography** — did font sizes, weights, or spacing change?
4. **Responsive issues** — does it look correct on all viewports?
5. **Missing elements** — did anything disappear?
6. **Overflow issues** — is content clipping or overflowing?
Use `browser_snapshot` to get the accessibility tree and compare DOM structure between before/after.
### Phase 6: Report
Present findings in a clear format:
**No Visual Regressions Found:**
- "All pages look identical across desktop, tablet, and mobile viewports."
**Regressions Detected:**
For each regression:
- **Page:** URL where the issue appears
- **Viewport:** Which screen size is affected
- **What changed:** Description of the visual difference
- **Severity:** Critical (broken layout), High (noticeable shift), Medium (minor difference), Low (pixel-level)
- **Suggested fix:** How to resolve the regression
### Phase 7: Targeted Testing
For specific component changes, also test:
- Hover states (use `browser_hover`)
- Click interactions (use `browser_click`)
- Form states (use `browser_fill_form`)
- Dark mode (if applicable)
- Loading states
- Error states
- Empty states
## Key Pages to Always Test
When the user doesn't specify pages, test these by default:
1. Homepage / Landing page (/)
2. Login/signup page (if exists)
3. Main app page (dashboard, etc.)
4. Any page the user recently modified
## Key Principle
**Trust screenshots, not assumptions.** CSS changes cascade unpredictably. A "small tweak" in one component can break layouts across the entire app. Always verify visually.How to use
- Copy the skill content above
- Create a .claude/skills directory in your project
- Save as .claude/skills/ultraship-visual-diff.md
- Use /ultraship-visual-diff in Claude Code to invoke this skill