Per-page UX audit using NN/g heuristics, Intuit microcopy, and Google HEART. Use when evaluating usability, auditing microcopy, checking UX heuristics, or assessing cognitive load. Cross-page flows/IA → audit-ux-journeys. Layout/breakpoints → audit-responsive. Empty/error states → audit-ui-states.
Scanned 9/11/2026
Install to Claude Code
npx -y skills add kensaurus/cursor-kenji --skill audit-ux --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Audit Ux?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/kensaurus-audit-ux)More formats (shields.io, HTML) on the badges page.
---
name: audit-ux
description: >
Per-page UX audit using NN/g heuristics, Intuit microcopy, and Google HEART.
Use when evaluating usability, auditing microcopy, checking UX heuristics, or
assessing cognitive load. Cross-page flows/IA → audit-ux-journeys.
Layout/breakpoints → audit-responsive. Empty/error states → audit-ui-states.
license: MIT
---
# UX Audit Skill
**Degree of freedom: MIXED** — Steps 0, 2–5 `[HIGH freedom]`; Step 1
research JSON and every playwright step `[LOW freedom — run exactly]`.
Read `protocol-browser-anti-stall` before any browser interaction.
## How to reason
1. **Observe** — quote the screenshot, copy, or code line
2. **Interpret** — what does this do to the human in this moment of the pipeline?
3. **Classify** — heuristic fail / law violation / microcopy / correct-as-is
4. **Severity** — blocks the success moment = P0; recoverable friction = P1; nit = P2
## Worked example
> **Observe:** invoice Submit stays enabled; no toast; `POST /invoices` in-flight 4s.
> **Interpret:** a second click creates a duplicate invoice (H1 + H5, money path).
> **Classify:** heuristic fail on a trust-sensitive write.
> **Severity:** P0 — double-submit on money.
> **Finding:** `/invoices/new` | H1/H5 | P0 | no pending state | disable + toast.
## Self-critique before reporting [LOW freedom — do not skip]
1. **Evidenced** — screenshot or quoted copy, not "feels confusing"
2. **Per-page** — cross-page IA/stories → `audit-ux-journeys`
3. **Severity justified** — P0 blocks the recorded success moment
4. **Right owner** — breakpoints → `audit-responsive`; empty/error → `audit-ui-states`
5. **Context first** — no finding without Step 0 human + pipeline
## Context-First
Before scoring a heuristic: who is the human (state, not "users"), where this
page sits in the journey, how data moves input → API → DB → screen, and the
emotional arc. Step 0 is mandatory.
---
## Step 0: Deep Product and Pipeline Understanding
### 0a. Understand the Business and Human Context
Read README, landing page, marketing copy, and any onboarding flows to answer:
- **What problem does this solve?** (Not features — the human pain it alleviates)
- **Who is the primary human?** (Demographics, technical skill, emotional state when using)
- **What's the alternative?** (What do people do without this product? Spreadsheets? Phone calls? Nothing?)
- **What's the success moment?** (The "aha" — when the human gets what they came for)
- **What's the trust model?** (Does the user trust this product with money? Health data? Business data?)
### 0b. Map the Full Data Pipeline
Trace how data flows through the system from the human's perspective:
Search for data-flow entry points: `api/` for API routes, `actions/` for server actions,
`hooks/use*` for data-fetching hooks, `lib/` for core business logic. Count occurrences
of `fetch|axios|ky|useSWR|useQuery|trpc` in `*.{ts,tsx}` to map integration points.
Map the pipeline for each core task:
```
PIPELINE MAP (per core task):
1. Human input → [form / click / gesture]
2. Client-side validation → [schema / inline / none]
3. API call → [endpoint, method, payload]
4. Server processing → [validation, business logic, side effects]
5. Database operation → [create / read / update / delete]
6. Response → [shape, status codes, error format]
7. Client update → [optimistic / refetch / cache invalidation]
8. Human feedback → [toast / redirect / inline update / nothing]
Latency-sensitive points: [where slow responses hurt UX]
Error-prone points: [where failures are most likely]
Trust-sensitive points: [where wrong data erodes confidence]
```
### 0c. Map Routes and Information Architecture
Discover routes by framework: `app/**/page.tsx` (Next.js App Router), `pages/**/*.tsx`
(Next.js Pages Router), `src/routes/` (SvelteKit / Remix), `router.*` (Vue Router /
React Router config).
Build the information architecture mental model (per-page only):
```
INFORMATION ARCHITECTURE:
- Navigation structure: [flat / hierarchical / hub-and-spoke]
- Depth: [max clicks from landing to deepest page]
- Cross-links: [can users jump between sections, or must they go back?]
- Dead ends: [pages with no forward navigation]
```
### 0d. Identify Emotional Touchpoints
Map the emotional arc of core user journeys:
```
EMOTIONAL MAP (per core flow):
- Entry emotion: [anxious / curious / frustrated / neutral]
- Friction points: [where confusion or anxiety spikes]
- Confidence builders: [where the product earns trust]
- Peak moment: [the most positive or negative experience]
- End emotion: [satisfied / relieved / confused / abandoned]
```
### 0e. Record Full Discovery
```
PRODUCT CONTEXT:
- Type: [SaaS / e-commerce / dashboard / etc.]
- Human problem solved: [the pain, not the feature]
- Primary human: [description including emotional context]
- Core tasks: [list top 3-5]
- Success moment: [what "done" looks like to the human]
- Trust level: [what's at stake — money / data / time / reputation]
- Page count: [N]
- Auth required: [YES/NO — pattern]
- Locale/i18n: [YES — languages / NO]
- Pipeline health: [known latency or error-prone points]
```
---
## Step 1: Research Current UX Standards
### 1a. NN/g — Usability Heuristics and Methods
```json
firecrawl:firecrawl_search
{
"query": "site:nngroup.com heuristic evaluation checklist [current year]",
"limit": 5,
"sources": [{ "type": "web" }]
}
```
### 1b. Intuit Content Design — Microcopy Principles
```json
firecrawl:firecrawl_search
{
"query": "site:contentdesign.intuit.com UX writing principles",
"limit": 5,
"sources": [{ "type": "web" }]
}
```
Scrape the most relevant result for detailed writing guidelines.
### 1c. Laws of UX — Interaction Psychology
```json
firecrawl:firecrawl_scrape
{
"url": "https://lawsofux.com",
"formats": ["markdown"],
"onlyMainContent": true
}
```
### 1d. Domain-Specific UX Research
```json
firecrawl:firecrawl_search
{
"query": "<PRODUCT_TYPE> UX best practices usability patterns [current year]",
"limit": 5,
"sources": [{ "type": "web" }]
}
```
Scrape the best result for domain-specific UX patterns.
---
## Step 2: Nielsen's 10 Usability Heuristics (Deep Evaluation)
For each heuristic: code analysis and live browser verification.
### H1: Visibility of System Status
**What to find in code:**
Search `*.tsx` for feedback patterns: `loading|isLoading|isPending|skeleton|Skeleton|spinner|Spinner`
(loading states); `progress|Progress|step.*of|currentStep` (multi-step progress);
`toast|Toast|notification|Notification|snackbar` (user notifications).
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Loading states | Skeleton/spinner visible during data fetch | Blank screen or frozen UI |
| Form submission | Button shows loading, success/error feedback | No feedback, user clicks again |
| Progress indication | Multi-step flows show step count | User doesn't know where they are |
| Active navigation | Current page/section highlighted | No indication of current location |
| Real-time updates | Optimistic UI or polling feedback | Stale data, no refresh indication |
### H2: Match Between System and Real World
**What to find in code:**
Search `*.tsx` for copy-quality TODOs: `TODO.*wording|TODO.*copy|TODO.*label|TODO.*text` (case-insensitive).
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Labels and terminology | Domain-appropriate language users expect | Technical jargon, internal codenames |
| Icons | Universally recognized or labeled | Ambiguous icons without text labels |
| Data format | Dates, currency, numbers in user's locale | ISO dates, raw numbers, wrong currency |
| Logical grouping | Information organized by user mental model | Organized by database schema or dev convenience |
| Metaphors | Real-world analogies aid understanding | Forced metaphors that confuse |
### H3: User Control and Freedom
**What to find in code:**
Search `*.tsx` for emergency-exit patterns: `onCancel|handleCancel|onClose|handleClose|onDismiss`
(cancel/close handlers); `undo|Undo|revert|Revert` (undo actions);
`confirm.*delete|confirm.*remove|AlertDialog|ConfirmDialog` (destructive-action guards).
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Modal escape | Close button + Escape key + backdrop click | No way to close, trapped |
| Form abandonment | Back button works, drafts saved | Data lost on navigation |
| Destructive actions | Confirmation dialog with clear consequences | One-click delete, no undo |
| Multi-step flows | Back/previous step without data loss | Can only go forward |
| Undo | Undo available after significant actions | Irreversible changes without warning |
### H4: Consistency and Standards
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Button hierarchy | Primary/secondary/ghost used consistently | Random button styles |
| Terminology | Same action = same label everywhere | "Save" / "Submit" / "Confirm" / "Apply" for same action |
| Layout patterns | Consistent page structure across views | Each page has different layout logic |
| Interaction patterns | Same gesture = same result | Click sometimes navigates, sometimes opens modal |
| Platform conventions | Follows web conventions (links underlined, form patterns) | Custom patterns that break expectations |
### H5: Error Prevention
**What to find in code:**
Search `*.tsx` for prevention patterns: `disabled.*(!|=.*false)|isDisabled|isInvalid`
(disabled/invalid states); `required|min.*length|max.*length|pattern=` (input constraints).
Check `package.json` for validation libraries: `zod|yup|joi|superstruct|valibot`.
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Input constraints | Date pickers (not free text), dropdowns for known options | Free text for structured data |
| Inline validation | Validation on blur/change, before submit | Only validates on submit |
| Destructive guards | Requires confirmation, type-to-confirm for critical actions | One-click irreversible actions |
| Defaults | Smart defaults reduce input needed | All fields blank, user guesses |
| Disabled states | Buttons disabled when form invalid, with explanation | Enabled but silently fails |
### H6: Recognition Over Recall
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Navigation | All major sections visible in nav | Features hidden in deep menus |
| Search | Search available for large data sets | User must scroll/browse to find |
| Breadcrumbs | Breadcrumbs in hierarchical content | User loses context in deep pages |
| Recent items | Recently accessed items surfaced | Must remember and navigate from scratch |
| Contextual help | Tooltips, placeholders explain fields | Labels without context |
### H7: Flexibility and Efficiency of Use
**What to find in code:**
Search `*.tsx` for efficiency patterns: `keyboard|shortcut|hotkey|useHotkeys|Cmd\+|Ctrl\+`
(keyboard accelerators); `bulk|batch|selectAll|multiSelect` (bulk operations).
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Keyboard shortcuts | Power-user shortcuts available | Mouse-only interaction |
| Bulk actions | Multi-select, batch operations | One-at-a-time only |
| Filters and sort | Filter/sort on data-heavy pages | Must scan manually |
| Customization | Users can configure views/preferences | One-size-fits-all |
| Quick actions | Common tasks reachable in 1-2 clicks | Core tasks buried in menus |
### H8: Aesthetic and Minimalist Design
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Information density | Progressive disclosure, expand-on-demand | Everything visible at once |
| Visual hierarchy | Clear primary/secondary/tertiary content | Everything same visual weight |
| Whitespace | Breathing room between sections | Cramped, dense layout |
| CTAs | 1 primary action per view, clearly distinguished | Multiple competing CTAs |
| Content priority | Most important content first/prominent | Critical info buried below fold |
### H9: Help Users Recognize, Diagnose, and Recover from Errors
**What to find in code:**
Search `*.tsx` for error-handling patterns: `error.*message|errorMessage|Error.*:.*'` (error
message strings); `try.*catch|\.catch\(|onError` (catch sites); `fallback|ErrorBoundary|error\.tsx`
(fallback components — list files with matches, not just count).
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Error language | Plain language, no codes | "Error 500", "ECONNREFUSED", raw stack trace |
| Specificity | Says exactly what went wrong | "Something went wrong" |
| Recovery action | Suggests what user can do next | Dead end, user must guess |
| Inline errors | Field-level errors near the input | Single error at top of form |
| Empty states | Helpful empty states with next action | Blank page, "No data" |
### H10: Help and Documentation
**What to find in code:**
Search `*.tsx` for in-app help: `Tooltip|tooltip|HelpCircle|InfoIcon|help.*text|aria-describedby`
(contextual help); `onboarding|tour|walkthrough|guide|Onboarding` (guided flows).
**What to verify in browser:**
| Signal | Pass | Fail |
|--------|------|------|
| Contextual help | Tooltips on complex fields/features | No explanation, user must guess |
| Onboarding | First-time user guidance available | Dropped into complex UI cold |
| Documentation | Help accessible from within the app | Must search external docs |
| Input guidance | Placeholders, hint text, format examples | Bare input fields |
---
## Step 3: Laws of UX Evaluation
| Law | Principle | What to Check | How to Fix Violations |
|-----|-----------|---------------|----------------------|
| **Jakob's Law** | Users expect your site to work like other sites | Navigation, form patterns, checkout flows follow platform conventions | Research 3 competitors via Firecrawl, adopt their common patterns |
| **Fitts's Law** | Larger, closer targets are faster to click | Primary CTAs large enough, not in corners. Touch targets ≥44px | Increase CTA size, move primary actions to natural thumb zones on mobile |
| **Hick's Law** | More choices = longer decisions | Menus ≤7 items, option lists not overwhelming, progressive disclosure | Group options, add search/filter, hide advanced options behind "More" |
| **Miller's Law** | Working memory holds ~7 items | Groups of >7 chunked. Nav items ≤7 per level | Chunk long lists, add category headers, paginate |
| **Cognitive Load** | Minimize mental effort | No unnecessary fields, no memory burden between steps | Remove optional fields from default view, show only what's needed now |
| **Aesthetic-Usability** | Beautiful = perceived as easier | First impression inspires confidence | Visual polish on landing + key flows. Personality, not just correctness |
| **Tesler's Law** | Complexity can't be eliminated, only moved | Complex tasks simplified for the user, not pushed to them | Smart defaults, auto-detection, progressive disclosure of complexity |
| **Doherty Threshold** | Productivity rises when response <400ms | Do interactions feel instant? | Optimistic UI, skeleton screens, prefetching, perceived performance tricks |
| **Postel's Law** | Be liberal in what you accept | Flexible input parsing (phone, date, case) | Accept multiple input formats, auto-format, don't reject valid variations |
| **Peak-End Rule** | People judge by peaks and endings | Success moment satisfying? Error moments handled gracefully? | Celebrate completions (confetti, clear confirmation). Soften errors |
---
## Step 4: Content and Microcopy Audit (Intuit Content Design Principles)
### 4a. Voice and Tone
| Principle | Pass | Fail |
|-----------|------|------|
| Conversational | Reads like talking to a friend | Reads like a legal document or robot |
| Active voice | "We saved your changes" | "Your changes have been saved by the system" |
| Second person | "You" for the user, "We" for the product | Third person, passive constructions |
| Contractions | Natural contractions used ("don't", "we'll") | Stilted formal language ("do not", "we will") |
### 4b. Clarity and Precision
| Principle | Pass | Fail |
|-----------|------|------|
| Specific language | "We can't connect to Square right now" | "Something went wrong. Try again later" |
| Consistent terms | Same word for same concept throughout | "Save" / "Submit" / "Confirm" / "Apply" used interchangeably |
| Simple verbs | Present/past/future simple tense | Progressive, perfect, complex tenses |
| Short sentences | ≤20 words per sentence | Run-on sentences with multiple clauses |
### 4c. Microcopy Quality
**Check these locations in the browser:**
| Location | What to Evaluate |
|----------|-----------------|
| Button labels | Action-oriented, specific ("Save invoice" not just "Submit") |
| Error messages | Plain language, specific cause, recovery action |
| Empty states | Helpful, guides next action, not just "No data" |
| Confirmations | Clear consequence ("Delete this invoice? This can't be undone") |
| Tooltips | Concise, answers one question, not paragraphs |
| Placeholders | Format hints ("e.g., john@example.com"), not labels |
| Loading text | Informative when possible ("Loading your invoices...") |
| Success messages | Confirms what happened ("Invoice sent to John") |
### 4d. Internationalization Readiness
| Check | Pass | Fail |
|-------|------|------|
| Hardcoded strings | All strings in i18n files | Strings inline in components |
| Cultural idioms | Neutral metaphors | Culture-specific slang or humor |
| Text expansion | UI handles 40% longer translated text | Layout breaks with longer strings |
| RTL readiness | Logical properties (`margin-inline-start`) | Physical properties (`margin-left`) |
**Find violations:** search `*.tsx` for `>([\w\s]{3,})<` to surface hardcoded visible text strings that may be i18n misses.
---
## Step 5: Emotional Design and Human-Centric Evaluation
### 5a. First Impression Test (5-Second Test)
Navigate to the landing/home page. In the first 5 seconds of the screenshot:
| Question | Evidence |
|----------|----------|
| Can you tell what this product does? | [yes/no — what's communicated] |
| Do you trust it? | [visual polish, credibility signals, brand presence] |
| Do you know what to do first? | [clear CTA, obvious starting point] |
| Does it feel like a real product or a template? | [personality, craft, vs generic bootstrap] |
## Further reading
- [5b. Emotional Friction Map and more](references/details.md)
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!