visual-qa
Skill1 starsChanged 44 days agoMITView on GitHub
Compares an implementation against its design and reports the differences: Playwright screenshots at 320, 768, 1024, and 1440, overlays and pixel diffs, a checklist covering spacing, type, color, states, motion, dark mode, 200% zoom, long content, and ~30% translation expansion, with severity and bug reports stating expected vs. actual. Use for "QA this against Figma", "does it match the design", "design review of the build", "visual bugs", "pixel check", or "compare staging to the mock". Not for raising craft beyond the design; use interface-polish.
20 other projects use a version of this.
Adopted by
Most recently taken up by
- DevNewbie1826/skillstheir own version, first seen Nov 8, 2026
- claude-world/cf-browsertheir own version, first seen Nov 1, 2026
- UXLana/design-skills-packtheir own version, first seen Oct 25, 2026
- Alfred-Lau/skillstheir own version, first seen Oct 20, 2026
- nimadorostkar/Claude-Skills-collectiontheir own version, first seen Oct 13, 2026
- wjgoarxiv/litopencodetheir own version, first seen Oct 13, 2026
Other versions20 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 20
- RandallLiuXin/GodotMaker★ 555same name
- dylanfeltus/skills★ 179same name
- liangdabiao/Godogen★ 120same name
- DanielKerridge/claude-code-power-platform-skills★ 61same name
- nimadorostkar/Claude-Skills-collection★ 33same name
- archibate/agent-skills★ 16same name
- claude-world/cf-browser★ 9same name
- UXLana/design-skills-pack★ 8same name
- dev-ik/ai-design-rules★ 3same name
- DevNewbie1826/skills★ 2same name
10 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository33 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- accessibility-reviewSkill
- art-directionSkill
- brand-identitySkill
- brand-strategySkill
- brand-voiceSkill
- color-systemSkill
- component-api-designSkill
- design-briefSkill
- design-case-studySkill
- design-critiqueSkill
- design-discoverySkill
- design-handoffSkill
- design-system-auditSkill
- design-system-docsSkill
- design-to-codeSkill
- design-tokensSkill
- iconographySkill
- information-architectureSkill
- interface-polishSkill
- landing-page-designSkill
- layout-and-hierarchySkill
- micro-interactionsSkill
- motion-implementationSkill
- motion-languageSkill
- product-design-processSkill
- reference-researchSkill
- typography-systemSkill
- usability-testingSkill
- user-researchSkill
- ux-writingSkill
- wireframingSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 3 are distinctive, and 1 is very specific to this project.
0
Common
Most of the 20 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 27
Before a release, as the design sign-off
- Distinctive: line 28
After a refactor or dependency upgrade that might have shifted visuals
- Very specific: line 45
If the Figma MCP is connected, pull reference images with get_screenshot and exact values with get_design_context and get_variable_defs.
- Distinctive: line 66
Grade severity: Use the table below. Output: each finding tagged.
“Common” is measured: kept by at least 6 in 10 of the 20 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Visual QA
Visual QA answers one question: does the build match the agreed design, everywhere it will be seen? "Everywhere" is the point. Most mismatches do not show at the designer's own laptop width in light mode with short English copy; they show at 320px, in dark mode, at 200% zoom, with a German label or a 3-line title. This skill captures the build under those conditions, compares it against the design, and reports only what fails, each with a location, a severity, and expected vs. actual, so an engineer can fix it without a meeting.
When to use
- A feature is built and deployed to a preview or staging URL
- Before a release, as the design sign-off
- After a refactor or dependency upgrade that might have shifted visuals
- Setting up visual regression for a component library
Not for: improving craft beyond what the design specifies (use
interface-polish), a full accessibility audit (use accessibility-review), or
testing whether people can use it (use usability-testing).
Inputs
- The build: a URL (local, preview, or staging) and any login or seed data.
- The design: Figma frames for the same screens and states, or the handoff package. [If the design has no frame for a state or breakpoint, compare against the handoff's written behavior, and flag the gap instead of inventing a standard.]
- Acceptance criteria from
design-handoff, if they exist. - Scope: screens and states. [Default: every frame marked "Ready for dev".]
- Supported browsers: [latest Chrome, Safari, Firefox; iOS Safari]
If the Figma MCP is connected, pull reference images with get_screenshot and exact
values with get_design_context and get_variable_defs. If Playwright is connected,
use it for all captures. If either is missing, say so in one line and fall back to
exports and manual screenshots.
Process
- Build the matrix. Screens × states × breakpoints × themes. Prune combinations that cannot differ, but never prune 320px or dark mode. Output: a capture list.
- Capture. Playwright screenshots at 320, 768, 1024, and 1440, both color
schemes, with animations disabled and fonts loaded. Model:
references/capture-script.md. Copy that shape. Output: a folder of named images (settings--empty--1024--dark.png). - Compare at the design's width. Overlay the build on the Figma export at 50% opacity, or diff them, at the frame's exact width. Output: marked-up differences.
- Inspect values. For each difference, read the computed style in DevTools and compare it to the design's token. Values beat pixels: a 2px shift caused by a wrong token is a bug; a 1px shift caused by subpixel rendering is not. Output: expected vs. actual per finding.
- Run the stress checklist. Dark mode, 200% zoom, long content, ~30% text expansion, empty and error data, reduced motion, keyboard focus. Output: failures.
- Grade severity. Use the table below. Output: each finding tagged.
- Write the report. Failures only, grouped by screen, using
templates/bug-report.md. Copy that shape. End with the verdict. Output: the report, linked from the ticket. - Re-verify fixes. Recapture the same matrix cells. Close only what now matches.
Standards
Breakpoints
| Width | Represents | Why it is in the matrix |
| 320 | Smallest phones, 400% zoom on 1280 desktop (WCAG reflow) | Overflow, wrapping, and truncation bugs |
| 768 | Tablet portrait, md | Where most layouts switch columns |
| 1024 | Tablet landscape, small laptop, lg | Sidebars appear; cramped middle layouts |
| 1440 | Common desktop design width | The width most designs are drawn at |
Also resize slowly from 320 to 1440 once, watching for widths between breakpoints where things collide.
Checklist
| Area | Check |
| Spacing | Gaps, padding, and margins match the design's tokens. Alignment edges line up. |
| Type | Family, weight, size, line height, letter spacing, case, wrapping. No faux bold or faux italic. |
| Color | Every color is the specified token, in both themes. Borders and dividers included. |
| Radius and shadow | Correct tokens; nested radii concentric. |
| Icons and images | Right icon, size, stroke; images crisp at 2x; correct crop and aspect ratio. |
| Layout | Column counts, alignment, max widths, sticky elements at each breakpoint. |
| States | Hover, focus-visible, active, disabled, loading, empty, error, selected, all present and matching. |
| Motion | Duration, easing, and direction match the spec; reduced motion honored. Record at 0.25x speed to compare. |
| Dark mode | No light-mode leftovers (white flashes, dark text on dark), images and charts legible. |
| Zoom 200% | Browser zoom and text-only zoom: nothing clipped, overlapping, or hidden. |
| Long content | 60-character names, 3-line titles, 12-digit numbers, 1,000-row lists. |
| Text expansion | Replace copy with ~30% longer strings (pseudo-localization); buttons, tabs, and nav still fit. |
| Missing data | No avatar, no image, empty optional fields. |
| Focus | Visible on every stop, in visual order. |
| Browsers | Safari differences: backdrop-filter, sticky, date inputs, scrollbar, font rendering. |
Severity
| Level | Definition | Example | Ship? |
| S1 blocking | Broken, unusable, inaccessible, or wrong information | Button hidden at 320px; text invisible in dark mode; no focus ring | No |
| S2 major | Clearly visible mismatch that changes meaning or hierarchy | Wrong heading size; missing error state; wrong token for destructive | Not without sign-off |
| S3 minor | Visible on inspection, does not change meaning | Gap 12 instead of 16; icon 1px low | Yes, fix next |
| S4 nit | Only visible in overlay | Subpixel offset, antialiasing | Log or drop |
Grade by effect, not by size: a 1px border missing on an input that then disappears in dark mode is S1.
Tolerances
- Differences caused by snapping to a token are correct. Log them as design debt if the design used an off-scale value.
- Pixel diffs: expect ~0.1–2% noise from font rendering and antialiasing. Investigate regions, not totals.
- Copy differences are always findings. Either the build is wrong or the design is stale; the report says which is the source of truth.
Visual regression
For component libraries, make this automatic: every Storybook story snapshotted by
Chromatic on each pull request, reviewed and approved there. For pages, Playwright's
toHaveScreenshot() with a stable seed and animations: "disabled". Keep the
baseline images out of manual QA reports; the report is for people.
Output
A report in the shape of templates/bug-report.md:
- Header: build URL, commit, date, matrix covered, what was not covered.
- Failures only, grouped by screen, each with ID, severity, location (screen, state,
breakpoint, theme, browser, and
file:linewhen known), expected, actual, evidence (paired screenshots), and suggested fix. - A one-line verdict: ready, or N blocking issues (S1 count, then S2 count).
Verify
The QA pass is done when:
- Every cell in the matrix was captured, or listed as not covered with a reason
- 320px and dark mode were checked for every screen
- 200% zoom, long content, and ~30% expansion were checked on at least the densest screen
- Every state the design specifies was opened in the build
- Motion was compared at 0.25x speed and with reduced motion on
- Keyboard focus was walked on every screen
- Every finding has severity, location, expected, actual, and a screenshot pair
- Every expected value names a token or a frame, not "as designed"
- The report contains no passing items
- The report ends with a verdict
Delegate the comparison to the visual-qa-reviewer subagent when the scope has many
screens: give it the capture folder and the Figma references; it reports failures
only and ends with a verdict. Send focus and contrast findings to the
accessibility-auditor subagent and suspected raw values in code to the
token-auditor subagent.
Anti-patterns
- Checking only at 1440 in light mode with the design's sample copy
- "Doesn't match Figma" with no expected value, location, or screenshot
- Filing subpixel antialiasing as a bug while the 320px layout overflows
- Reports that list every passing check, burying the three that failed
- Pixel-diff percentages as the verdict instead of reviewed regions
- Comparing against a Figma frame that changed after handoff without saying so
- Filing token-snapping differences as bugs
- Logging design gaps (no empty state designed) as engineering bugs; they go back to design with the finding
Related skills
- Feeds from:
design-to-code(the build),design-handoff(the acceptance criteria and states) - Leads to:
interface-polish(after fidelity is right),accessibility-review(for anything beyond focus and contrast),design-system-audit(when the same mismatch appears across many screens)
References
From REFERENCE-BANK.md:
- Figma MCP:
get_screenshotfor references,get_variable_defsfor expected values. - Polypane: many synchronized viewports, overlays, and zoom in one window.
- Chromatic and Storybook: automated visual regression per story.
- axe DevTools: catch contrast and focus failures during the same pass.
- Rauno Freiberg, Interaction Guidelines: states and details that designs often leave implicit.
From FIBO.md: Chromatic snapshots of every story on pull requests
as the model for automated regression, and the definition of done that requires
opening each part in both themes and walking the keyboard path.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

