Interaction Patterns
Purpose
Walk a UI surface (a page, a component, or an end-to-end flow) against
Nielsen's 10 usability heuristics and a WCAG 2.2 first-pass for the
fast-to-check criteria — keyboard reachability, focus visibility, color
contrast, and motion/animation. Produces a finding-by-finding report
with severity and a remediation hint. Not a full a11y scan (see
a11y-scan for tool-driven scanning); this is the structured-thinking
pass that catches what tools miss.
Scope
In:
- One target surface — page URL, component path, or flow description.
- Nielsen's 10 heuristics, applied as a checklist.
- WCAG 2.2 fast-check criteria: 2.1.1 (keyboard), 2.4.7 (focus visible),
1.4.3 / 1.4.11 (contrast), 2.3.3 (animation from interactions),
2.2.2 (pause / stop / hide).
- A markdown report with severity tags and remediation hints.
Out:
- Tool-driven a11y scanning (axe, Pa11y, Lighthouse) — that's
a11y-scan.
- Visual design critique (color palette, spacing system, brand
cohesion) — that's
mockup-review.
- User research findings against real users — that's
usability-review
with a recruited cohort.
When to use
- Before a feature ships, as a structured second-pass after design
hand-off and before QA.
- When a designer says "I think this flow is fine" and you want a
reproducible heuristic walk to confirm.
- For component-library primitives — every primitive should pass the
full Nielsen + WCAG fast-check before adoption.
- During a design-system upgrade, against the project's flagship flows,
to catch interaction regressions.
When NOT to use
- For a brand-new mockup with no behavior yet — use
mockup-review
first; this skill needs interaction states to evaluate.
- As a substitute for the automated
a11y-scan — heuristic eval finds
different bugs than rule-based scanners. Run both.
- For server-side / API-only changes. No UI, no heuristics.
Automated pass
There is no fully automated pass — heuristic evaluation is judgment
work. The skill scaffolds the report and prompts the evaluator
through each heuristic.
Resolve the target:
target="${TARGET:?--target required: URL, component path, or flow id}"
scope="${SCOPE:-page}"
For each Nielsen heuristic, the evaluator answers: pass / minor /
major / catastrophic / N/A. The skill emits a template:
## H1. Visibility of system status
- Verdict: <pass|minor|major|catastrophic|n/a>
- Notes: <what feedback does the system give for state changes?
loading, success, error, in-progress, queued?>
- Findings: <bullet list>
## H2. Match between system and real world
## H3. User control and freedom
## H4. Consistency and standards
## H5. Error prevention
## H6. Recognition rather than recall
## H7. Flexibility and efficiency of use
## H8. Aesthetic and minimalist design
## H9. Help users recognize, diagnose, and recover from errors
## H10. Help and documentation
WCAG 2.2 fast-pass section. Each criterion has a yes/no/n/a check:
## WCAG 2.2 fast-pass
- 2.1.1 Keyboard: every interactive element reachable + operable
via keyboard alone? <yes|no|partial>
- 2.4.7 Focus visible: focused element has a visible indicator
(not relying on default that's overridden)? <yes|no>
- 1.4.3 Contrast (minimum): text contrast ≥ 4.5:1 (3:1 large)?
<yes|no|spot-checked>
- 1.4.11 Non-text contrast: UI control + state indicators ≥ 3:1?
<yes|no>
- 2.3.3 Animation from interactions: any motion ≥ 5s respects
prefers-reduced-motion? <yes|no|n/a>
- 2.2.2 Pause / stop / hide: any auto-updating content can be
paused? <yes|no|n/a>
Severity rollup. The report header shows the count by severity and
the worst finding. Catastrophic blocks merge; major requires an
ADR-style explicit accept; minor / cosmetic logged for next sprint.
Manual pass
For a fast spot-check, the evaluator uses a printed Nielsen card and
walks the surface in three modes:
- Mouse-only — does the obvious path work?
- Keyboard-only — Tab through every element. Does focus ever get
trapped or jump over an interactive element?
- Reduced-motion — flip the OS toggle. Anything still spinning,
parallaxing, or auto-playing?
…then write up the findings in a 5-line note. Skip the full template
for one-off checks.
Known gotchas
- Heuristic eval is reviewer-dependent. Two evaluators on the same
surface find ~60% overlap, not 100%. That's expected — both lists
are valid. Don't argue findings away; record them.
- WCAG 1.4.3 contrast check needs a tool. Eyeballing 4.5:1 is
unreliable. Use a contrast picker (browser dev-tool, Stark,
Contrast). Don't claim "yes" without measuring.
- Focus visibility regressions love
outline: none. A common bug:
designer removes the default outline and adds a :focus-visible
rule that only covers some elements. Tab through ALL elements, not
just the ones in the design.
- Modal / overlay focus traps. A correctly-focused modal moves
focus in on open and returns focus to the trigger on close.
Drive-by review misses this — explicitly open and close every
modal as part of the keyboard pass.
- prefers-reduced-motion is not a free pass to remove animation.
Subtle position/opacity transitions are usually fine. The criterion
targets motion that crosses the screen, parallax, and auto-playing
video. Be specific in findings.
- "Aesthetic and minimalist" (H8) is the most-abused heuristic.
It's not "make it pretty" — it's "don't put information on the
screen that the user doesn't need right now." Findings here should
cite specific noise, not vibes.
References
1---2name: interaction-patterns3description: Heuristic eval against Nielsen's 10 usability heuristics plus a WCAG 2.2 first-pass for keyboard, focus, contrast, and motion. Use when reviewing a UI's interaction design and baseline accessibility together.4---56# Interaction Patterns78## Purpose910Walk a UI surface (a page, a component, or an end-to-end flow) against11Nielsen's 10 usability heuristics and a WCAG 2.2 first-pass for the12fast-to-check criteria — keyboard reachability, focus visibility, color13contrast, and motion/animation. Produces a finding-by-finding report14with severity and a remediation hint. Not a full a11y scan (see15`a11y-scan` for tool-driven scanning); this is the structured-thinking16pass that catches what tools miss.1718## Scope1920In:21- One target surface — page URL, component path, or flow description.22- Nielsen's 10 heuristics, applied as a checklist.23- WCAG 2.2 fast-check criteria: 2.1.1 (keyboard), 2.4.7 (focus visible),24 1.4.3 / 1.4.11 (contrast), 2.3.3 (animation from interactions),25 2.2.2 (pause / stop / hide).26- A markdown report with severity tags and remediation hints.2728Out:29- Tool-driven a11y scanning (axe, Pa11y, Lighthouse) — that's30 `a11y-scan`.31- Visual design critique (color palette, spacing system, brand32 cohesion) — that's `mockup-review`.33- User research findings against real users — that's `usability-review`34 with a recruited cohort.3536## When to use3738- Before a feature ships, as a structured second-pass after design39 hand-off and before QA.40- When a designer says "I think this flow is fine" and you want a41 reproducible heuristic walk to confirm.42- For component-library primitives — every primitive should pass the43 full Nielsen + WCAG fast-check before adoption.44- During a design-system upgrade, against the project's flagship flows,45 to catch interaction regressions.4647## When NOT to use4849- For a brand-new mockup with no behavior yet — use `mockup-review`50 first; this skill needs interaction states to evaluate.51- As a substitute for the automated `a11y-scan` — heuristic eval finds52 different bugs than rule-based scanners. Run both.53- For server-side / API-only changes. No UI, no heuristics.5455## Automated pass5657There is no fully automated pass — heuristic evaluation is judgment58work. The skill scaffolds the report and prompts the evaluator59through each heuristic.60611. Resolve the target:62 ```sh63 target="${TARGET:?--target required: URL, component path, or flow id}"64 scope="${SCOPE:-page}"65 ```66672. For each Nielsen heuristic, the evaluator answers: pass / minor /68 major / catastrophic / N/A. The skill emits a template:6970 ```markdown71 ## H1. Visibility of system status72 - Verdict: <pass|minor|major|catastrophic|n/a>73 - Notes: <what feedback does the system give for state changes?74 loading, success, error, in-progress, queued?>75 - Findings: <bullet list>7677 ## H2. Match between system and real world78 ## H3. User control and freedom79 ## H4. Consistency and standards80 ## H5. Error prevention81 ## H6. Recognition rather than recall82 ## H7. Flexibility and efficiency of use83 ## H8. Aesthetic and minimalist design84 ## H9. Help users recognize, diagnose, and recover from errors85 ## H10. Help and documentation86 ```87883. WCAG 2.2 fast-pass section. Each criterion has a yes/no/n/a check:8990 ```markdown91 ## WCAG 2.2 fast-pass92 - 2.1.1 Keyboard: every interactive element reachable + operable93 via keyboard alone? <yes|no|partial>94 - 2.4.7 Focus visible: focused element has a visible indicator95 (not relying on default that's overridden)? <yes|no>96 - 1.4.3 Contrast (minimum): text contrast ≥ 4.5:1 (3:1 large)?97 <yes|no|spot-checked>98 - 1.4.11 Non-text contrast: UI control + state indicators ≥ 3:1?99 <yes|no>100 - 2.3.3 Animation from interactions: any motion ≥ 5s respects101 prefers-reduced-motion? <yes|no|n/a>102 - 2.2.2 Pause / stop / hide: any auto-updating content can be103 paused? <yes|no|n/a>104 ```1051064. Severity rollup. The report header shows the count by severity and107 the worst finding. Catastrophic blocks merge; major requires an108 ADR-style explicit accept; minor / cosmetic logged for next sprint.109110## Manual pass111112For a fast spot-check, the evaluator uses a printed Nielsen card and113walks the surface in three modes:114115- **Mouse-only** — does the obvious path work?116- **Keyboard-only** — Tab through every element. Does focus ever get117 trapped or jump over an interactive element?118- **Reduced-motion** — flip the OS toggle. Anything still spinning,119 parallaxing, or auto-playing?120121…then write up the findings in a 5-line note. Skip the full template122for one-off checks.123124## Known gotchas125126- **Heuristic eval is reviewer-dependent.** Two evaluators on the same127 surface find ~60% overlap, not 100%. That's expected — both lists128 are valid. Don't argue findings away; record them.129- **WCAG 1.4.3 contrast check needs a tool.** Eyeballing 4.5:1 is130 unreliable. Use a contrast picker (browser dev-tool, Stark,131 Contrast). Don't claim "yes" without measuring.132- **Focus visibility regressions love `outline: none`.** A common bug:133 designer removes the default outline and adds a `:focus-visible`134 rule that only covers some elements. Tab through ALL elements, not135 just the ones in the design.136- **Modal / overlay focus traps.** A correctly-focused modal moves137 focus in on open and returns focus to the trigger on close.138 Drive-by review misses this — explicitly open and close every139 modal as part of the keyboard pass.140- **prefers-reduced-motion is not a free pass to remove animation.**141 Subtle position/opacity transitions are usually fine. The criterion142 targets motion that crosses the screen, parallax, and auto-playing143 video. Be specific in findings.144- **"Aesthetic and minimalist" (H8) is the most-abused heuristic.**145 It's not "make it pretty" — it's "don't put information on the146 screen that the user doesn't need right now." Findings here should147 cite specific noise, not vibes.148149## References150151- `lib/skills/a11y-scan/SKILL.md` — tool-driven scanner pass.152- `lib/skills/mockup-review/SKILL.md` — pre-implementation review.153- `lib/skills/usability-review/SKILL.md` — heuristic eval on a working154 prototype with severity scale.155- `lib/agents/app-designer.md` — primary consumer.156- `lib/agents/accessibility-reviewer.md` — WCAG fast-pass consumer.157- Nielsen's 10 heuristics — https://www.nngroup.com/articles/ten-usability-heuristics/158- WCAG 2.2 quick-reference — https://www.w3.org/WAI/WCAG22/quickref/