Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Exhaustively extract UX patterns from a reference web app. Walks every screen, captures screenshots of every state, records interaction patterns, copy verbatim, keyboard shortcuts, responsive treatments, motion, and empty/error/loading states. Produces a reusable pattern library that other audits can compare against. The inverse of ux-audit — asks 'what is the bar?' rather than 'does this match the bar?'. Trigger with 'learn from X', 'extract patterns from X', 'study X's UX', 'reverse engineer t
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 54% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 73% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 103% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 167% | 0% |
Exhaustively study a reference web app and produce a reusable pattern library. Goes everywhere, captures everything, then organises it into a document another audit or build can reference.
The inverse of ux-audit:
Audits without extracts implicitly compare to "my memory of other apps" — fragile and inconsistent. Extracts turn that memory into a concrete, navigable artifact. An audit can then say: "Empty state on /app/clients shows no CTA. Reference (claude.ai) shows 3 keyboard shortcuts plus 'New chat' in the same position" instead of "feels a bit sparse".
Before starting, confirm the target is fair game:
robots.txt for unauthenticated crawlingIf the target is behind a paywall or requires a trial account, ask the user whether they have legitimate access before proceeding.
| Target | Tool | Notes | |--------|------|-------| | Authenticated reference (you have an account) | Chrome MCP | Uses your logged-in session | | Public reference (marketing pages, docs, public demos) | Playwright MCP | No login needed |
See ../ux-audit/references/browser-tools.md for commands.
Pin 1440×900 as baseline (MacBook standard). Also capture 768 and 375 for responsive patterns. Don't exceed 2000px wide.
On Retina Macs, Chrome captures at 2× the logical viewport — a 1440-wide window produces a 2880-wide PNG. Post-process after each batch so the library isn't full of oversized files:
bashimg-process batch ./screenshots --action optimise --max-width 1440
Idempotent — no-op on already-small files. Run at the end of each route's capture, or across the whole screenshots/ folder at the end of the extract. Playwright MCP users can set deviceScaleFactor: 1 in the context options and skip this step.
Decide before starting:
Narrower scope produces tighter, more useful libraries. "Whole app" is only worth it for apps you'll be building a direct analogue of.
Optional bias for capture. Examples:
If no focus is given, capture broadly.
Build the full route inventory:
/sitemap.xml, /robots.txt for discoverability/settings, /preferences, /admin that aren't in the main navRecord each route with its purpose: /settings/billing — subscription plan, payment method, invoice history.
Before deep-capture, scan the app once and list pattern types you'll document. Typical categories:
Not every app uses every category. Mark which apply.
For each route, capture exhaustively. Screenshots are cheap — err toward more.
Per meaningful element, capture:
| State | Trigger | |-------|---------| | Default | page loaded, nothing interacted with | | Hover | mouse over a button, row, nav item | | Focus | keyboard-focused via Tab | | Active | button mid-click, input being typed into | | Open | dropdown open, menu expanded | | Closed | dropdown closed, menu collapsed | | Expanded | accordion open, detail panel expanded | | Collapsed | accordion closed | | Selected | checkbox ticked, row selected, tab active | | Loading | skeleton, spinner, pending state | | Empty | list with no items | | Populated | list with many items | | Error | inline, toast, or full-page error | | Success | post-action confirmation |
See references/capture-checklist.md for the full per-pattern checklist.
Copy the text exactly, including punctuation, ellipses, and tone:
"Start chat", "Upgrade plan", "Delete forever""e.g. smith@company.com""Pressing Cmd+K opens this from anywhere"Raw copy is gold for writers and informs your app's voice.
For each interactive element, note:
? or Cmd+/ that reveals the shortcut list? Capture it.Cmd+K or similar? Capture the palette open, searching, a result selected, and an action executed.For each route, screenshot at 1440, 768, 375. Note what changes, not just "it works":
Record a GIF (Chrome MCP's gif_creator) of any animation worth documenting:
One 3-second GIF is worth a paragraph of description.
After capture, many patterns will appear on multiple pages. Deduplicate:
Keep two counts per pattern:
A pattern that appears once is rarely worth documenting unless it's unique and notable.
Write to docs/ux-extracts/<app-name>/ (or .jez/artifacts/ux-extracts/<app-name>/ if that directory exists):
docs/ux-extracts/claude-ai/
├── pattern-library.md ← main document
├── copy-corpus.md ← optional, raw copy by page (for writers)
└── screenshots/
├── 001-home-default.png
├── 002-home-hover-cta.png
├── 003-new-chat-empty.png
└── ...See references/pattern-library-template.md for the output structure.
The pattern library should be:
ux-audit checks for pattern libraries at .jez/artifacts/ux-extracts/<ref>/pattern-library.md or docs/ux-extracts/<ref>/pattern-library.md. If found, it uses them as the bar for comparison. Audit findings can then cite specific patterns:
> "Empty state on /app/clients has no explanatory copy and no CTA. Reference library [claude.ai § Empty States] shows CTA + 2 example prompts in the same position."
No integration is required beyond producing the library in the expected path.
| When | Read | |------|------| | Building the pattern-library.md output | references/pattern-library-template.md | | Per-pattern capture checklist (what to screenshot, what to note) | references/capture-checklist.md | | Browser tool commands | ../ux-audit/references/browser-tools.md |
Other measured skills in the registry, with their headline benchmark lift.