
ux-audit
Feature-level UX audit for React/Next.js code. Catches what Lighthouse, axe, ESLint, and Storybook miss — state coverage gaps (missing loading/empty/error), form data loss on validation, broken focus management, optimistic UI without rollback, skeleton-induced layout shift, vague microcopy, and 25+ other modern frontend UX bugs. Diff-aware (audits changed files only) and produces a 3-tier ship-readiness verdict (release-blocker / fix-this-sprint / backlog) grouped by surface, with concrete fixes using modern React 19 APIs (useActionState, useFormStatus, useOptimistic, useTransition, Suspense). Use before merging a frontend PR, before shipping a feature, or when asked "is this checkout/onboarding/dashboard ready?", "review this PR for UX bugs", "audit this component", "what would break in production?", "is this ready to ship?"
- Installs
- 238
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/mblode/agent-skills --skill ux-audit- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads ux-audit automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
UX Audit
Static UX-quality reviewer for React/Next.js code. Operates at the feature level (a checkout flow, an onboarding flow, a dashboard) — not the principle level. Answers one question for a frontend dev with a PR open: "which of these will hurt users in production, and which are nice-to-haves?"
What this skill IS
- A diff-aware reviewer that audits changed files in a PR
- A feature-level checklist runner: detects "this is a sign-in flow" / "this is a checkout" / "this is a modal" and runs the right playbook
- A ship-readiness verdict generator: every finding gets
release-blocker | fix-this-sprint | backlog - A concrete-fix advisor that uses modern React 19 APIs (
useActionState,useFormStatus,useOptimistic,useTransition,<Suspense>, error boundaries)
What this skill IS NOT
Defer to the right tool. Do not duplicate what these already do well:
| Concern | Use this tool instead | Why |
|---|---|---|
| Core Web Vitals (LCP, CLS, INP) | Lighthouse + web-vitals + Vercel Agent | Field + lab measurement, not static |
| WCAG rule violations | axe-core / jsx-a11y | Authoritative rule list, structured violations |
| a11y prevention at write time | eslint-plugin-jsx-a11y | Lint catches before runtime |
| Visual regression | Chromatic / Percy | Pixel-level diffs |
| Bundle size budget | size-limit / bundle-analyzer | Continuous budget tracking |
| Generic bug review | CodeRabbit / Vercel Agent | LLM bug review of the whole diff |
When a finding overlaps any of the above, link out — don't restate.
See references/defer-to-other-tools.md for the full inventory.
Audit Workflow
Copy and track this checklist:
UX Audit progress:
- [ ] Step 1: Determine scope (PR diff via `git diff --name-only main` OR explicit file/folder)
- [ ] Step 2: Detect features in scope (sign-in / checkout / form / modal / list / dashboard / etc.)
- [ ] Step 3: For each feature, run its playbook from references/feature-playbooks.md
- [ ] Step 4: For each check, load the matching rule (rules-modern/ for state/form/focus bugs; rules/ for Laws of UX)
- [ ] Step 5: Assign each finding a ship tier per references/ship-readiness.md
- [ ] Step 6: Group findings by surface, render with the chosen output adapter
- [ ] Step 7: Verify the audit-self-check before reporting
- Scope. Default to
git diff --name-only mainif in a git repo with uncommitted changes; otherwise audit the explicit scope the user passes. Don't audit the whole codebase by default — noise floor is too high. - Detect features. Match on element semantics + filenames + route paths. A
<form>with email + password = sign-in. A<form>with a multi-step indicator = onboarding. Arole="dialog"= modal. Seereferences/feature-playbooks.mdfor detection heuristics per feature. - Run playbook. Each feature has 5-7 ordered checks. Don't skip checks even when you expect them to pass; each pass goes into the audit-self-check.
- Load rules. Two layers:
rules-modern/(Layer 2) — modern frontend UX failure modes (state coverage, form preservation, focus mgmt, optimistic rollback, CLS, microcopy). This is where most findings come from.rules/(Layer 3) — Laws of UX (Hick's, Fitts's, Miller's, etc.). Used for cognitive/perceptual reasoning when Layer 2 doesn't apply.
- Ship tier. Every finding gets one of three tiers (see
references/ship-readiness.md):release-blocker— fix before merge (data loss, broken auth, missing critical-path error state, dark patterns, focus traps that don't restore)fix-this-sprint— merge but log issue (sub-44 px target on touch, missing skeleton, vague error, missing empty CTA)backlog— track, ship (dark-mode untested, RTL not verified, microcopy nits)
- Group + render. Group by surface (component file or page). Render with one of the three adapters in
references/output-adapters.md. - Self-check. Verify the audit was actually run (rules executed > rules planned, file:line cited on every finding, fix snippet on every finding).
Three audit layers
Layer 1 — Feature playbooks (the entry point)
references/feature-playbooks.md
12 features × 5-7 ordered checks → pulls rules from Layers 2 and 3
Layer 2 — Modern frontend failure modes (the high-leverage layer)
rules-modern/<category>-<slug>.md
33 rules covering state coverage, form preservation, focus mgmt,
async/optimistic, CLS pairings, microcopy, dark mode, i18n, mobile.
Detection recipes use React 19 APIs.
Layer 3 — Laws of UX (the cognitive/perceptual reserve)
rules/<prefix>-<slug>.md
30 rules for Hick's, Fitts's, Miller's, etc. Invoked when feature
playbooks need cognitive load / decision / perception reasoning.
Usually 1-2 of these per audit; not all 30.
Diff-aware mode
Default scope is the PR diff. Detect with:
git diff --name-only main -- '*.tsx' '*.jsx' '*.ts' '*.js' '*.css' '*.module.css'
Audit only those files. Surface the base branch in the output: Auditing: 8 files changed vs main.
For a quick local check (single component): git diff --name-only HEAD -- src/Component.tsx.
For a full sweep: explicit --full src/ (rare; only when introducing the skill to a codebase).
Ship-readiness verdict
Every audit emits a top-level verdict before per-finding details:
═══════════════════════════════════════════════════════════
SHIP VERDICT: ❌ NOT READY (1 release-blocker)
Surface count: 3 (CheckoutForm, PaymentStep, ConfirmStep)
Findings: 7
Release blockers: 1 ⛔ Form data loss on validation (PaymentStep.tsx:42)
Fix this sprint: 3 ⚠️
Backlog: 3 📋
Defer-to (not audited here):
Performance (CWV): Run Lighthouse
Bundle size: Run size-limit
WCAG violations: Run axe-core
═══════════════════════════════════════════════════════════
Verdict tiers:
- ✅ READY — 0 release-blockers, ≤3 fix-this-sprint
- ⚠️ READY WITH FOLLOW-UP — 0 release-blockers, ≥4 fix-this-sprint
- ❌ NOT READY — ≥1 release-blocker
- 🚫 INCOMPLETE — audit-self-check failed (re-run)
Output adapters
Three formats, all rendered from the same JSON. Pick based on context.
| Adapter | When | Format |
|---|---|---|
| Terminal table | Local dev, fast scan | Tight 5-col table grouped by surface |
| PR comment | GitHub / Vercel review | Markdown with suggestion blocks for inline diffs |
| CI JSON | Pipelines, dashboards | Strict JSON per references/output-schema.md |
See references/output-adapters.md for verbatim templates and field mappings.
Skip protocol
A finding can be intentionally suppressed with an inline comment:
{/* ux-audit-ignore:focus-not-restored — intentional: parent owns focus */}
<Dialog open={open} onClose={onClose}>
Slug must match the rule slug. Suppressions are reported in the audit summary so reviewers can verify intent.
Reference Files
| File | Read when |
|---|---|
references/feature-playbooks.md | Step 2-3 — detecting features and selecting their playbooks |
references/modern-failure-modes.md | Index of all 33 modern rules grouped by category |
references/states-coverage.md | Validating loading/empty/error/disabled coverage per component type |
references/ship-readiness.md | Step 5 — assigning each finding a ship tier with examples |
references/output-adapters.md | Step 6 — formatting findings for terminal / PR comment / JSON |
references/defer-to-other-tools.md | Recognizing concerns to delegate (CWV, WCAG, bundle, etc.) |
references/output-schema.md | Strict JSON schema for findings + verdict |
references/observational-rubrics.md | Layer 3 rubric rules (1-5 scoring with anchors) |
rules-modern/<category>-<slug>.md | Step 4 — running a Layer 2 modern frontend check |
rules-modern/_sections.md | Category index for the modern rule layer |
rules/<prefix>-<slug>.md | Step 4 — running a Layer 3 Laws of UX check |
rules/_sections.md | Category index for the Laws of UX rule layer |
Gotchas
- Don't audit the whole codebase by default. Diff-aware mode is the default; full sweeps are explicit.
- Don't duplicate other tools. If a finding is "LCP > 4s," that's Lighthouse — link, don't restate. If it's "missing alt text," that's axe — link, don't restate.
- Don't skip the feature-detection step. Running every rule against every file produces noise; running the right playbook per feature produces signal.
- Don't assign every finding
release-blocker. Reserve that tier for genuine ship-blockers (data loss, broken critical path, dark patterns). Inflation kills the signal. - Don't suggest fixes without modern React APIs when applicable. "Add a loading state" is weak; "Wrap in
<Suspense fallback={<Skeleton />}>and useuseTransitionfor the trigger" is actionable. - Don't render markdown without a JSON pass first. Even when the user wants markdown, build the JSON document first to keep findings auditable across runs.
- Don't pile on Laws of UX findings. Layer 3 is reserve. If a finding has both a Layer-2 framing ("missing error state") and a Layer-3 framing ("Postel's Law violation"), use Layer 2 — it's more specific and actionable.
- Don't quote the source verbatim. Every rule paraphrases; lawsofux.com uses CC BY-NC-SA which would contaminate the skill.
- Don't fabricate detections. If you can't grep the file or see the JSX, mark the finding
unknownwith a reason. Never claim a finding without evidence.
Audit-self-check
Self-flag the audit as INCOMPLETE if any of these are true:
- Fewer rules ran than the playbook's planned count
- More than 30% of rules returned
unknown(insufficient evidence) - No
file:linecited on any fail/warn finding - No
reproduceStepsorfixsnippet provided - Median apparent time-per-rule was implausibly short (no Read or Grep tool calls between findings)
- Every finding ended up in the same tier (suspect: blanket-assignment without judgment)
FAQ
What does the ux-audit skill do?
Feature-level UX audit for React/Next.js code. Catches what Lighthouse, axe, ESLint, and Storybook miss — state coverage gaps (missing loading/empty/error), form data loss on validation, broken focus management, optimistic UI without rollback, skeleton-induced layout shift, vague microcopy, and 25+ other modern frontend UX bugs. Diff-aware (audits changed files only) and produces a 3-tier ship-readiness verdict (release-blocker / fix-this-sprint / backlog) grouped by surface, with concrete fixes using modern React 19 APIs (useActionState, useFormStatus, useOptimistic, useTransition, Suspense). Use before merging a frontend PR, before shipping a feature, or when asked "is this checkout/onboarding/dashboard ready?", "review this PR for UX bugs", "audit this component", "what would break in production?", "is this ready to ship?"
How do I install ux-audit?
Run npx skills add https://github.com/mblode/agent-skills --skill ux-audit in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/ux-audit/ (personal) or .claude/skills/ux-audit/ (project).
Which AI agents can use ux-audit?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is ux-audit safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains ux-audit?
It is published by mblode in mblode/agent-skills. It has 238 recorded installs.
More from mblode/agent-skills
ui-animation
mblode/agent-skills
Builds, reviews, and measures UI motion, including springs, gestures, scroll effects, curve fitting from recordings, and sparse interface sound. Use when asked to "add animation", "match this easing", "reverse engineer this motion", "add a click sound", or find animation opportunities.
multi-tenant-architecture
mblode/agent-skills
Designs tenant isolation, hostname routing, custom-domain lifecycle, and plan limits on Cloudflare or Vercel. Use when asked to "isolate tenant data", "support custom domains", "build a white-label platform", or assess PSL registration. For general module structure use codebase-architecture; for SEO content use seo.
ui-design
mblode/agent-skills
Designs and builds React/Next/Tailwind UI, audits visual and interaction defects, and stress-tests components with worst-case data. Use when asked to "build a landing page", "extract our design system", "add dark mode", "make this responsive", "remove UI slop", "audit this component", "stress-test this component", "break this UI", or "show me the worst case".
typography-audit
mblode/agent-skills
Audits font loading, type scales, measure, spacing, OpenType, and rendered punctuation with 78 scoped rules. Use when asked to "audit typography", "fix the fonts", or "review my type system". For a new visual direction use ui-design Direction; for general UI defects use ui-design Audit.
agent-skills-creator
mblode/agent-skills
Creates and improves portable Agent Skills with a validator, routing scenarios, and evidence-based keep, cut, merge, or retire decisions. Use when asked to "write a skill", "update all skills", "audit my SKILL.md", "remove redundant instructions", or fix skill triggering.
docs-writing
mblode/agent-skills
Writes and audits technical docs with Diataxis type gating, runnable examples, and 51 documentation rules. Use when asked to "review my docs", "write an API reference", or improve a documentation page. For a whole README use readme-creator; for agent instructions use agents-md.
Popular frontend & design skills
setup-matt-pocock-skills
mattpocock/skills
Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
frontend-design
anthropics/skills
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
hyperframes-animation
heygen-com/hyperframes
All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.
prototype
mattpocock/skills
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
hyperframes-core
heygen-com/hyperframes
The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.
vercel-react-best-practices
vercel-labs/agent-skills
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.