Audit a website, mobile application, design mockup, or web UI from a UX/UI standpoint and generate a severity-ranked, actionable report written at the level of a senior design lead. Use this skill whenever asked to review a UI, audit UX/UI friction, critique a design or flow, verify accessibility (WCAG), give feedback on forms, dashboards, and interactive screens, check for dark patterns, or explain why a UI "feels off", looks unprofessional, or needs polish. Works for web and native mobile (React Native, Flutter, SwiftUI, Jetpack Compose). Builds grounded personas from repository inspection and lightweight confirmation, persists context in .ux-audit/context.json, tracks issue resolutions across runs, and gives each finding calibrated severity, confidence, effort, and priority with a concrete fix and acceptance criteria. Supports Source-Only, Interactive (Playwright + axe-core), and Design Review modes. Do not use for backend API performance tuning, database schema optimization, or infrastructure/CI-CD audits.
Recursos
7Instal·la
npx skillscat add eytanbab/job-application-tracker/ux-audit Instal·la des del registre de SkillsCat.
UX/UI Audit Skill
Produces structured UX/UI audits grounded in project-specific user personas, written to the standard of a head of design: a clear verdict, systemic themes, calibrated severity, honest confidence, and fixes a team can act on. Persists context and tracks resolved and recurring issues across runs.
The bar: every finding must be real, rated by its effect on users, and fixable from the report alone. Fewer correct findings beat many speculative ones.
Execution Workflow
- Step 1: Check Context / Auto-Detect & Confirm (
.ux-audit/context.json) - Step 2: Determine Flow & Audit Mode (Source-Only | Interactive | Design Review)
- Step 3: Instantiate Grounded Personas (2–4 domain personas)
- Step 4: Enumerate, Measure & Audit (file enumeration, measurement scripts, six audit passes)
- Step 5: Verify & Rate Every Candidate Finding (false-positive protocol, severity model)
- Step 6: Reconcile With the Findings Ledger (stable IDs; New, Recurring, Regressed, Resolved)
- Step 7: Synthesize, Write Report & Update Context (
.ux-audit/reports/) - Step 8: Present Summary & Hand Off to Developer (Read-only finish)
Step 1: Establish Project Context (Auto-Detect & Confirm)
- Check for
.ux-audit/context.jsonat the workspace root:- If found: Check that required fields (
product_description,audience,business_model,platform,tech_stack,last_flow,last_updated) are present and non-empty. Consult context-schema.md for field definitions. Present a 2-line summary to the developer. Ifaudience_is_generic_fallback: trueorlast_updatedis >90 days old, offer to refresh the context. - If not found: Execute the Auto-Detect & Confirm protocol from interview.md:
- Scan manifests (
package.json, etc.),README.md, and routing files. - Draft initial context, including detected frameworks/libraries in
tech_stack. - Present the drafted context for single-turn confirmation (or use interactive question tools if available).
- Save confirmed data to
.ux-audit/context.json.
- Scan manifests (
- If found: Check that required fields (
[!CAUTION]
GUARDRAIL: Never audit using placeholder personas ("everyone", "all users") without developer confirmation. Grounded personas are required for accurate friction analysis.
Step 2: Scope the Audit Flow & Mode
- Select Flow: Ask which user flow or screen to audit (default to
last_flowfromcontext.jsonif present).- If the requested scope is unconstrained ("the whole app"), advise the user to scope to a specific journey (e.g. checkout, onboarding, dashboard) for deeper rigor.
- Select Mode:
- Source-Only (Default): Inspect component source, markup, state hooks, and CSS/Tailwind classes. Exclude
node_modules/,.git/, and build artifacts. - Interactive: If a local server or URL is provided, run
inspect_page.js(screenshots, axe-core, keyboard walk, touch targets) following interactive-mode.md. Findings seen or measured in the rendered UI can be rated Observed. Combine with source reading to locate the code behind each issue. - Design Review: If the developer provides image files, screenshots, or design mockups, evaluate visual/layout categories (
HIER,TYPO,COLOR,DSYS,COPY,AFFORD,ETHIC). Mark dynamic categories (FORMvalidation timing,STATEasync transitions,A11Ykeyboard operability,PERF,MOTION) as Not evaluable in this mode in the Coverage table. - Native apps: If
platformincludesiosorandroid, also use native-mobile.md for platform conventions and code signals. Rendered evidence comes from developer-provided or simulator screenshots.
- Source-Only (Default): Inspect component source, markup, state hooks, and CSS/Tailwind classes. Exclude
- Privacy & Secrets Guardrail:
- Never output API keys, passwords, or tokens found in
.envor code files into findings or reports.
- Never output API keys, passwords, or tokens found in
Step 3: Instantiate Grounded Personas
Construct 2–4 distinct personas derived directly from context.json and domain requirements:
- Role & Primary Goal: What the user is trying to accomplish in this flow.
- Context & Constraints: Time pressure, technical proficiency, device and viewport, environment (noise, glare, interruptions), and abilities (including at least one persona or constraint covering keyboard-only, screen-reader, low-vision, or motor-impaired use).
- Mental Model: Expectations based on competitor conventions (Jakob's Law) and
reference_product.
Every persona must be used: each should be named in at least one finding or explicitly noted in the walkthrough as unaffected.
Step 4: Enumerate, Measure & Sweep
4.1 File Enumeration
Identify all files belonging to the flow before auditing:
- Entry Route: Locate the entry route or page definition in the project router (
app/,pages/,routes/,router.ts). - Import Tree: Follow
importstatements recursively from the entry component to collect all child components, subviews, custom hooks, and style modules. - Shared UI Primitives: Include referenced shared components (e.g.
<Button>,<Input>,<Modal>,<Drawer>,<Table>), plus global styles and theme/token files (globals.css,tailwind.config.*, theme providers). - Route-level wrappers: Include the layouts that wrap the route (navigation bars, banners, footers) and its loading, error, and not-found boundaries.
- List In-Scope Files: Record all collected files for the report's "Files Reviewed" appendix.
4.2 Measure Before Judging
Collect objective evidence with the bundled scripts (run from the audited project's root; <skill-path> is this skill's directory):
# Design-token inventory: distinct colors, type sizes, radii, shadows, spacing, icon libraries
node <skill-path>/scripts/token_inventory.js <in-scope files or src dir>
# Contrast: resolve tokens/classes to real values first, then compute
node <skill-path>/scripts/contrast.js "<fg>" "<bg>" [--size <px>] [--weight <n>]
node <skill-path>/scripts/contrast.js --pairs pairs.json- Run
token_inventory.json the flow's files, and once on the whole source root when design-system drift is suspected. Itssignalsare leads to investigate, not findings. - Never estimate contrast by eye. Every contrast claim in the report must come from
contrast.js(or a browser measurement in Interactive mode) on resolved values.contrast.jsaccepts hex, rgb, hsl, oklch, bare shadcn HSL channels, andtw:<color>-<shade>. - In Interactive mode, also run
inspect_page.js(see interactive-mode.md) and treat its output as evidence for the passes below. - If Node.js is unavailable, say so in Method & Evidence and mark contrast findings Needs verification.
4.3 Audit Passes
Run the six passes defined in methods.md. Each pass looks through a different lens and finds problems the others miss:
- Task walkthrough: each persona, step by step, asking the four walkthrough questions.
- State inventory: every empty, loading, error, partial, success, and edge-content state.
- Heuristic sweep: every in-scope file against all 22 categories in categories.md (listed below).
- Accessibility conformance: the WCAG 2.2 AA checklist.
- Visual craft review: hierarchy, spacing, alignment, type, color, iconography, polish, and generic or template looks, grounded in the token inventory.
- Content review: term list, action labels, errors, empty states, and voice.
The 22 categories:
- Group 1: Visual Design:
[HIER]Visual Hierarchy & Layout,[TYPO]Typography & Readability,[COLOR]Color, Contrast & Visual Cues,[DSYS]Visual Consistency & Design System Adherence,[MOTION]Motion & Animation. - Group 2: Content & Language:
[COPY]Content, Microcopy & Clarity,[STATE]Empty, Loading & Error States,[I18N]Localization & Content Resilience. - Group 3: Interaction & Structure:
[NAV]Navigation & Information Architecture,[AFFORD]Interaction Affordance & Touch Targets,[FORM]Forms, Input Validation & Friction,[FLOW]Task Flow Continuity & Friction,[COGN]Cognitive Load & Progressive Disclosure,[SRCH]Search, Filtering & Sorting (Conditional),[DATA]Data Display & Visualization (Conditional). - Group 4: System Trust & Feedback:
[TRUST]Feedback, Confirmation & Error Prevention,[A11Y]Accessibility & Keyboard Operability,[PERF]Perceived Performance & Optimistic UI,[ETHIC]Dark Patterns & Ethical Design. - Group 5: Platform & Context:
[PLAT]Platform-Specific Conventions & Safe Areas,[ONBD]Onboarding & First-Use Experience (Conditional),[PERS]Personalization & State Persistence (Conditional).
Also note strengths as you go: deliberate, well-executed decisions the team should protect.
[!IMPORTANT]
SWEEP INTEGRITY RULES:
- No Early Exit: Do not stop after finding the first 2–3 obvious bugs. Run every pass, and evaluate every file in the flow against all applicable categories.
- Judgment vs Grep: Give equal weight to content, copy clarity, and cognitive flow as to mechanical checks like missing
alttags. The most valuable findings are often a confusing step or a request for information the user doesn't have.- Cross-File Consistency: Compare styles and naming across components to detect styling drift and redundant inputs.
Step 5: Verify & Rate Every Candidate Finding
- Verify each candidate with the protocol in false-positives.md: confirm it renders, trace parents and global styles, and check what the component library and platform already provide. Record anything ruled out under Checked & cleared.
- Assign confidence using severity.md: Observed, Code-confirmed, or Needs verification. Needs-verification items go to the To Verify table, not the findings list.
- Rate severity from Impact × Reach using the lookup table and calibration examples in severity.md. Write the reasoning on the finding (e.g.
Impedes × Core). - Rate effort and derive priority (Now / Next / Later) using the rules in severity.md.
- Merge duplicates: one root cause in a shared component is one finding, with the instance count as evidence.
Step 6: Reconcile With the Findings Ledger
.ux-audit/findings.json holds every finding across all runs, with IDs that never change. Follow findings-ledger.md:
- Load it with
node <skill-path>/scripts/ledger.js list --status all --flow <slug>. If there is no ledger but.ux-audit/reports/contains reports, runledger.js migrateonce. Otherwise start empty. - Match each verified finding to an existing entry (category + rule + file, then anchor, then root cause). Matched findings keep their ID. Unmatched findings are New: allocate IDs with
ledger.js allocate <CAT>. - Classify for the report: New, Recurring (open and seen again; show First flagged), Regressed (was resolved, now back), and Resolved (an open entry in this flow whose location you re-checked and found fixed).
- Respect decisions: entries marked
wont-fixorfalse-positiveare not reported again. Count them as Suppressed in Method & Evidence. - Update the ledger entries and run
ledger.js validate.
Step 7: Synthesize, Write the Report & Update Context
- Synthesize before writing, in this order:
- Themes: group findings that share a root cause, and name the systemic fix for each.
- Scorecard: score each dimension with the rubric in report-template.md.
- Top priorities: the 3 changes with the most user and business value, written as outcomes.
- Verdict: 2–3 plain-language sentences, written last.
- Format the report using report-template.md. Save to
.ux-audit/reports/[YYYY-MM-DD]-[flow-slug].md(append-2,-3if multiple runs occur on the same day). - Every finding must include:
- ID:
[CAT-NN]from the ledger (e.g.[A11Y-01],[FORM-02]). - Severity with its Impact × Reach reasoning: 🔴 Critical | 🟠 High | 🟡 Medium | 🔵 Low.
- Confidence with the evidence: Observed | Code-confirmed.
- Effort, Priority, and Theme (if any).
- Location: a link relative to the report (
../../src/Component.tsx#L42), neverfile:///. - Persona: who is affected and what happens to them.
- Problem: why it matters, with the principle or WCAG criterion.
- Recommendation: design intent, then the fitting format: code diff, copy rewrite, or design spec.
- Acceptance criteria: observable conditions that prove the fix.
- ID:
- Run the consistency check from the template's authoring directives (counts, roadmap, themes, scores).
- Update
context.json, settinglast_flowandlast_updated: YYYY-MM-DD.
Step 8: Summary & Handoff
Output a concise summary in chat:
- The verdict (1–2 sentences).
- Scorecard in one line (e.g.
Visual 3 · Content 3 · Flow 2 · Trust 3 · A11y 2 · Platform 4). - Top 3 priorities, with IDs.
- Severity counts, Quick Wins count, and the number of items to verify.
- Path to the saved report file.
[!CAUTION]
READ-ONLY FINISH: Stop once the report is delivered. Do not modify source code or implement fixes automatically. Ask the developer which issues they would like to address, suggesting the Now column as the default starting point.
Rating Summary
Full definitions, the lookup table, and calibration examples are in severity.md.
- Severity (Impact × Reach): 🔴 Critical blocks the task or causes harm · 🟠 High causes errors, backtracking, or abandonment on a core or common path · 🟡 Medium causes hesitation or affects an edge path · 🔵 Low is cosmetic or polish.
- Confidence: Observed (rendered or measured) · Code-confirmed (source proves it, after verification) · Needs verification (listed separately, not counted).
- Effort: ⚡ Quick Win (<15 min) · Low (1–2 h) · Medium (half-day to 2 days) · High (multi-day).
- Priority: Now · Next · Later, derived from severity and effort.