agentleFS
kensauruskensaurus/cursor-kenji/skills/audit-ux/SKILL.md

audit-ux

Skill9 starsChanged 42 days agoMITView on GitHub

Per-page UX audit with NN/g heuristics, microcopy review, and Google HEART. Use when evaluating usability, auditing microcopy, or assessing cognitive load. Cross-page flows/IA → audit-ux-journeys.

1 other project uses a version of this, 1 of them edited.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

12 rules. About 0 are common, 2 are distinctive, and 10 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 10

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read protocol-browser-anti-stall before any browser interaction.

    line 15
  2. Distinctive:

    Before scoring a heuristic: who is the human (state, not "users"), where this page sits in the journey, how data moves input → API → DB → …

    line 42
  3. Distinctive:

    Read README, landing page, marketing copy, and any onboarding flows to answer:

    line 52
  4. Very specific:

    Search *.tsx for feedback patterns: loading|isLoading|isPending|skeleton|Skeleton|spinner|Spinner (loading states).

    line 144
  5. Very specific:

    Search *.tsx for copy-quality TODOs: TODO.*wording|TODO.*copy|TODO.*label|TODO.*text (case-insensitive).

    line 162
  6. Very specific:

    Search *.tsx for emergency-exit patterns: onCancel|handleCancel|onClose|handleClose|onDismiss (cancel/close handlers).

    line 178
  7. Very specific:

    Search *.tsx for prevention patterns: disabled.*(!|=.*false)|isDisabled|isInvalid (disabled/invalid states).

    line 208
  8. Very specific:

    Check package.json for validation libraries: zod|yup|joi|superstruct|valibot.

    line 210
  9. Very specific:

    Search *.tsx for efficiency patterns: keyboard|shortcut|hotkey|useHotkeys|Cmd\+|Ctrl\+ (keyboard accelerators).

    line 238
  10. Very specific:

    Search *.tsx for error-handling patterns: error.*message|errorMessage|Error.*:.*' (error message strings).

    line 267
  11. Very specific:

    Search *.tsx for in-app help: Tooltip|tooltip|HelpCircle|InfoIcon|help.*text|aria-describedby (contextual help).

    line 285
  12. Very specific:

    Find violations: search *.tsx for >([\w\s]{3,})< to surface hardcoded visible text strings that may be i18n misses.

    line 364

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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 pipeline, routes, and emotional arc

For each core task, trace how data moves from the human's input through client validation, the API call, server processing, the database, the response, and the client update to the feedback the human sees (api/, actions/, hooks/use*, lib/, and fetch|axios|ky|useSWR|useQuery|trpc call sites locate the integration points). Mark the latency-sensitive, error-prone, and trust-sensitive points — H1, H5, and H9 findings come from there. Discover routes by framework (app/**/page.tsx, pages/**/*.tsx, src/routes/, router.*) and note nav shape (flat / hierarchical / hub-and-spoke), depth, cross-links, and dead ends for the pages in scope; cross-page IA belongs to audit-ux-journeys. For each core flow, note the entry emotion, where confusion or anxiety spikes, where the product earns trust, the peak moment (best or worst), and how the flow ends.

0c. Record discovery

One short block in whatever shape fits: product type, the human problem, the primary human and their emotional context, the top core tasks, the success moment, trust level (money / data / time / reputation), page count, auth pattern, locale/i18n, and known latency or error-prone points.


Step 1: Research Current UX Standards

1a. NN/g — Usability Heuristics and Methods

firecrawl:firecrawl_search
{
 "query": "site:nngroup.com heuristic evaluation checklist [current year]",
 "limit": 5,
 "sources": [{ "type": "web" }]
}

1b. Intuit Content Design — Microcopy Principles

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

firecrawl:firecrawl_scrape
{
 "url": "https://lawsofux.com",
 "formats": ["markdown"],
 "onlyMainContent": true
}

1d. Domain-Specific UX Research

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:

SignalPassFail
Loading statesSkeleton/spinner visible during data fetchBlank screen or frozen UI
Form submissionButton shows loading, success/error feedbackNo feedback, user clicks again
Progress indicationMulti-step flows show step countUser doesn't know where they are
Active navigationCurrent page/section highlightedNo indication of current location
Real-time updatesOptimistic UI or polling feedbackStale 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:

SignalPassFail
Labels and terminologyDomain-appropriate language users expectTechnical jargon, internal codenames
IconsUniversally recognized or labeledAmbiguous icons without text labels
Data formatDates, currency, numbers in user's localeISO dates, raw numbers, wrong currency
Logical groupingInformation organized by user mental modelOrganized by database schema or dev convenience
MetaphorsReal-world analogies aid understandingForced 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:

SignalPassFail
Modal escapeClose button + Escape key + backdrop clickNo way to close, trapped
Form abandonmentBack button works, drafts savedData lost on navigation
Destructive actionsConfirmation dialog with clear consequencesOne-click delete, no undo
Multi-step flowsBack/previous step without data lossCan only go forward
UndoUndo available after significant actionsIrreversible changes without warning

H4: Consistency and Standards

What to verify in browser:

SignalPassFail
Button hierarchyPrimary/secondary/ghost used consistentlyRandom button styles
TerminologySame action = same label everywhere"Save" / "Submit" / "Confirm" / "Apply" for same action
Layout patternsConsistent page structure across viewsEach page has different layout logic
Interaction patternsSame gesture = same resultClick sometimes navigates, sometimes opens modal
Platform conventionsFollows 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:

SignalPassFail
Input constraintsDate pickers (not free text), dropdowns for known optionsFree text for structured data
Inline validationValidation on blur/change, before submitOnly validates on submit
Destructive guardsRequires confirmation, type-to-confirm for critical actionsOne-click irreversible actions
DefaultsSmart defaults reduce input neededAll fields blank, user guesses
Disabled statesButtons disabled when form invalid, with explanationEnabled but silently fails

H6: Recognition Over Recall

What to verify in browser:

SignalPassFail
NavigationAll major sections visible in navFeatures hidden in deep menus
SearchSearch available for large data setsUser must scroll/browse to find
BreadcrumbsBreadcrumbs in hierarchical contentUser loses context in deep pages
Recent itemsRecently accessed items surfacedMust remember and navigate from scratch
Contextual helpTooltips, placeholders explain fieldsLabels 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:

SignalPassFail
Keyboard shortcutsPower-user shortcuts availableMouse-only interaction
Bulk actionsMulti-select, batch operationsOne-at-a-time only
Filters and sortFilter/sort on data-heavy pagesMust scan manually
CustomizationUsers can configure views/preferencesOne-size-fits-all
Quick actionsCommon tasks reachable in 1-2 clicksCore tasks buried in menus

H8: Aesthetic and Minimalist Design

What to verify in browser:

SignalPassFail
Information densityProgressive disclosure, expand-on-demandEverything visible at once
Visual hierarchyClear primary/secondary/tertiary contentEverything same visual weight
WhitespaceBreathing room between sectionsCramped, dense layout
CTAs1 primary action per view, clearly distinguishedMultiple competing CTAs
Content priorityMost important content first/prominentCritical 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:

SignalPassFail
Error languagePlain language, no codes"Error 500", "ECONNREFUSED", raw stack trace
SpecificitySays exactly what went wrong"Something went wrong"
Recovery actionSuggests what user can do nextDead end, user must guess
Inline errorsField-level errors near the inputSingle error at top of form
Empty statesHelpful empty states with next actionBlank 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:

SignalPassFail
Contextual helpTooltips on complex fields/featuresNo explanation, user must guess
OnboardingFirst-time user guidance availableDropped into complex UI cold
DocumentationHelp accessible from within the appMust search external docs
Input guidancePlaceholders, hint text, format examplesBare input fields

Step 3: Laws of UX Evaluation

LawPrincipleWhat to CheckHow to Fix Violations
Jakob's LawUsers expect your site to work like other sitesNavigation, form patterns, checkout flows follow platform conventionsResearch 3 competitors via Firecrawl, adopt their common patterns
Fitts's LawLarger, closer targets are faster to clickPrimary CTAs large enough, not in corners. Touch targets ≥44pxIncrease CTA size, move primary actions to natural thumb zones on mobile
Hick's LawMore options to weigh = longer decisionsChoice sets the user must evaluate (plans, actions, filters) are grouped, staged, or have a default. Not known-item lookups (countries, prefectures): that is searchGroup options, preselect one with a true reason, hide the long tail behind "More", typeahead for lookups
Miller's LawWorking memory holds ~4–7 chunksNothing must be carried in memory between screens; codes shown grouped with Copy; fields keep visible labels. Not a cap on visible menu items: a visible menu is read, not memorisedPersistent labels, summaries of earlier choices, chunked codes, labelled field groups
Von RestorffThe item that differs is noticedOne filled accent action per viewDemote competing CTAs to outline/ghost variants
Goal-Gradient / ZeigarnikVisible progress and unfinished work pull users to finishMulti-step flows show honest position and total; input survives reload and Back"Step 2 of 3" from real state, autosave drafts (never card numbers or codes)
Cognitive LoadMinimize mental effortNo unnecessary fields, no memory burden between stepsRemove optional fields from default view, show only what's needed now
Aesthetic-UsabilityBeautiful = perceived as easierFirst impression inspires confidenceVisual polish on landing + key flows. Personality, not just correctness
Tesler's LawComplexity can't be eliminated, only movedComplex tasks simplified for the user, not pushed to themSmart defaults, auto-detection, progressive disclosure of complexity
Doherty ThresholdProductivity rises when response <400msDo interactions feel instant?Optimistic UI, skeleton screens, prefetching, perceived performance tricks
Postel's LawBe liberal in what you acceptFlexible input parsing (phone, date, case)Accept multiple input formats, auto-format, don't reject valid variations
Peak-End RulePeople judge by peaks and endingsSuccess moment satisfying? Error moments handled gracefully?Celebrate completions (confetti, clear confirmation). Soften errors

On a native mobile app also score: primary action in the thumb zone, targets ≥ 44pt / 48dp, 3–5 tab destinations, press feedback on every tappable, haptics on confirm only, body ≥ 16sp. The fix pass for those is enhance-mobile-native-feel.


Step 4: Content and Microcopy Audit (Intuit Content Design Principles)

4a. Voice and Tone

PrinciplePassFail
ConversationalReads like talking to a friendReads 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 productThird person, passive constructions
ContractionsNatural contractions used ("don't", "we'll")Stilted formal language ("do not", "we will")

4b. Clarity and Precision

PrinciplePassFail
Specific language"We can't connect to Square right now""Something went wrong. Try again later"
Consistent termsSame word for same concept throughout"Save" / "Submit" / "Confirm" / "Apply" used interchangeably
Simple verbsPresent/past/future simple tenseProgressive, perfect, complex tenses
Short sentences≤20 words per sentenceRun-on sentences with multiple clauses

4c. Microcopy Quality

Check these locations in the browser:

LocationWhat to Evaluate
Button labelsAction-oriented, specific ("Save invoice" not just "Submit")
Error messagesPlain language, specific cause, recovery action
Empty statesHelpful, guides next action, not just "No data"
ConfirmationsClear consequence ("Delete this invoice? This can't be undone")
TooltipsConcise, answers one question, not paragraphs
PlaceholdersFormat hints ("e.g., john@example.com"), not labels
Loading textInformative when possible ("Loading your invoices...")
Success messagesConfirms what happened ("Invoice sent to John")

4d. Internationalization Readiness

CheckPassFail
Hardcoded stringsAll strings in i18n filesStrings inline in components
Cultural idiomsNeutral metaphorsCulture-specific slang or humor
Text expansionUI handles 40% longer translated textLayout breaks with longer strings
RTL readinessLogical 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:

QuestionEvidence
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

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.