UX Interaction Taste
Language
Match user's language: Respond in the same language the user uses.
Overview
A structured UX interaction review skill focused on how things work, not how they look. Evaluates interaction completeness, feedback quality, and user experience robustness of web applications built with AI coding tools.
Complements visual design skills (like design-taste-frontend) — this skill handles interaction/UX, that skill handles visual aesthetics. Recommend pairing them for full coverage.
Workflow
- Identify scope — Ask what to review:
- Path: Scan directory for component/page files (.tsx, .vue, .svelte, .html). Auto-detect framework from package.json.
- URL: Requires browser tools. If unavailable, ask for source code path instead.
- "Current project": Detect framework from package.json, scan src/ or app/ directories.
- Scan code — Read key files. Evaluate against the 3-tier framework below.
- Browser check (optional) — If browser tools are available and a dev server is running, take screenshots to verify actual rendered behavior.
- Produce report — Structured findings with priority and actionable fixes.
Review Framework: Foundation → Craft → Polish
Tier 1: Foundation — Does it work?
If Foundation has 3+ failures across different categories, stop and report Foundation issues first. Do not evaluate Craft/Polish until Foundation is acceptable.
States coverage — For every data-fetching view or async operation, check:
Interactive feedback — For every clickable/tappable element:
Keyboard accessibility:
Tier 2: Craft — Is it well-designed?
Feedback timing:
- Input response feels instant (< 100ms)
- Loading indicator appears for operations > 500ms
- Optimistic updates where appropriate (don't wait for server round-trip)
Form UX:
- Labels associated with inputs (clickable labels)
- Validation timing appropriate (on blur or submit, not on every keystroke)
- Error messages appear near the relevant field, not just at top
- Required fields are marked
- Successful submission has clear confirmation
Focus management:
- Opening a modal moves focus into it
- Closing returns focus to the trigger
- Route changes move focus to new content or page top
- Skip-to-content link exists for keyboard users
Responsive behavior:
- Touch targets >= 44x44px on mobile
- No horizontal scroll on standard viewports
- Navigation adapts (hamburger menu, bottom nav, etc.)
- Content remains readable and usable across breakpoints
Animation quality (when animation exists):
- Duration 150-300ms for micro-interactions
- Ease-out for entrances, ease-in for exits
- Respects
prefers-reduced-motion
- Serves a purpose (guides attention, shows state change) — not decorative
Tier 3: Polish — Does it feel right?
Micro-interactions:
- User actions are acknowledged (button state change, ripple, etc.)
- Transitions between states feel smooth, not jarring
- Progressive loading (skeleton → content, not blank → full page flash)
Error recovery:
- Failed actions can be retried without re-entering data
- Network errors suggest checking connection, offer retry
- Form data preserved on validation failure
- Undo available for destructive actions (or confirmation dialog)
Flow intentionality:
- User always knows where they are (breadcrumbs, active nav state)
- User always knows what to do next (clear CTAs, progressive disclosure)
- Back button works as expected
- No dead ends (every state has a path forward)
Anti-patterns (common in AI-generated code)
Flag these if found — they are strong signals of interaction debt:
| Anti-pattern |
Why it matters |
| No loading state anywhere |
Users think the app is broken during fetches |
onClick handler with no loading/disabled logic |
Double-submit, race conditions |
No onError / error boundary |
White screen of death |
Empty catch {} blocks |
Swallowed errors, no user feedback |
No aria-label on icon buttons |
Screen readers say "button" with no context |
| Links styled as buttons (or vice versa) |
Breaks keyboard/screen reader expectations |
outline: none / outline: 0 without replacement |
Keyboard users lose focus visibility |
| Autofocus on wrong element in modals |
Keyboard user starts in wrong place |
| Infinite scroll with no keyboard alternative |
Keyboard users trapped |
| Alert/confirm dialogs for user decisions |
Blocks thread, poor UX, inaccessible |
Completion Report
[UX Interaction Review] Complete!
Target: <path or URL>
Framework: <React/Vue/Svelte/HTML...>
Foundation: <PASS / X issues>
Craft: <PASS / X issues>
Polish: <PASS / X issues>
Top priorities:
1. <most impactful issue + specific fix>
2. <second issue + fix>
3. <third issue + fix>
💡 For visual design quality, pair with `design-taste-frontend`.
Keep the top priorities list to 3-5 items max. Don't dump 30 findings — prioritize by user impact.
Detailed findings format
For each finding:
[Tier] Category — Issue title
File: path/to/file.tsx:42
What: <specific problem found>
Why: <impact on user experience>
Fix: <concrete code-level suggestion>
Integration with design-taste-frontend
If visual issues are noticed during review (AI slop patterns, poor color choices, typography problems), note them briefly but recommend:
If installed:
"Visual design issues detected. Run design-taste-frontend for detailed visual quality review."
If not installed:
"Visual design issues detected. For detailed visual review, install: npx skills add leonxlnx/taste-skill -g -y"
Do not duplicate visual design review work.
References
Read references/interaction-checklist.md for the full expanded checklist with code-level detection patterns.
1---2name: ux-interaction-taste3description: Review and audit the interaction quality and UX of web applications. Evaluates states coverage, interaction feedback, keyboard accessibility, form UX, responsive behavior, error recovery, and loading experience. Use when: 'review UX', 'check interaction quality', 'audit UX', '走查交互', '检查用户体验', '交互体验怎么样', 'UX review', 'interaction audit'.4---56# UX Interaction Taste78## Language910**Match user's language**: Respond in the same language the user uses.1112## Overview1314A structured UX interaction review skill focused on **how things work**, not how they look. Evaluates interaction completeness, feedback quality, and user experience robustness of web applications built with AI coding tools.1516Complements visual design skills (like `design-taste-frontend`) — this skill handles interaction/UX, that skill handles visual aesthetics. Recommend pairing them for full coverage.1718## Workflow19201. **Identify scope** — Ask what to review:21 - **Path**: Scan directory for component/page files (.tsx, .vue, .svelte, .html). Auto-detect framework from package.json.22 - **URL**: Requires browser tools. If unavailable, ask for source code path instead.23 - **"Current project"**: Detect framework from package.json, scan src/ or app/ directories.242. **Scan code** — Read key files. Evaluate against the 3-tier framework below.253. **Browser check (optional)** — If browser tools are available and a dev server is running, take screenshots to verify actual rendered behavior.264. **Produce report** — Structured findings with priority and actionable fixes.2728## Review Framework: Foundation → Craft → Polish2930### Tier 1: Foundation — Does it work?3132If Foundation has **3+ failures across different categories**, stop and report Foundation issues first. Do not evaluate Craft/Polish until Foundation is acceptable.3334**States coverage** — For every data-fetching view or async operation, check:35- [ ] Loading state (skeleton, spinner, or progress for > 500ms ops)36- [ ] Empty state (helpful guidance, not just "No data" or blank)37- [ ] Error state (human-readable message + actionable next step, not raw stack trace)38- [ ] Disabled state on buttons during submission (prevent double-submit)3940**Interactive feedback** — For every clickable/tappable element:41- [ ] Hover state exists (visual change on mouse-over)42- [ ] Focus state exists (visible keyboard focus indicator)43- [ ] Active/pressed state (feedback on click/tap)44- [ ] Cursor style correct (`pointer` on clickable, `not-allowed` on disabled)4546**Keyboard accessibility**:47- [ ] All interactive elements reachable via Tab48- [ ] Tab order follows visual/logical order49- [ ] Escape dismisses modals/drawers/dropdowns50- [ ] Enter/Space activates buttons and links51- [ ] Focus trapped in modals (can't tab behind overlay)52- [ ] Focus restored to trigger element after modal closes5354### Tier 2: Craft — Is it well-designed?5556**Feedback timing**:57- Input response feels instant (< 100ms)58- Loading indicator appears for operations > 500ms59- Optimistic updates where appropriate (don't wait for server round-trip)6061**Form UX**:62- Labels associated with inputs (clickable labels)63- Validation timing appropriate (on blur or submit, not on every keystroke)64- Error messages appear near the relevant field, not just at top65- Required fields are marked66- Successful submission has clear confirmation6768**Focus management**:69- Opening a modal moves focus into it70- Closing returns focus to the trigger71- Route changes move focus to new content or page top72- Skip-to-content link exists for keyboard users7374**Responsive behavior**:75- Touch targets >= 44x44px on mobile76- No horizontal scroll on standard viewports77- Navigation adapts (hamburger menu, bottom nav, etc.)78- Content remains readable and usable across breakpoints7980**Animation quality** (when animation exists):81- Duration 150-300ms for micro-interactions82- Ease-out for entrances, ease-in for exits83- Respects `prefers-reduced-motion`84- Serves a purpose (guides attention, shows state change) — not decorative8586### Tier 3: Polish — Does it feel right?8788**Micro-interactions**:89- User actions are acknowledged (button state change, ripple, etc.)90- Transitions between states feel smooth, not jarring91- Progressive loading (skeleton → content, not blank → full page flash)9293**Error recovery**:94- Failed actions can be retried without re-entering data95- Network errors suggest checking connection, offer retry96- Form data preserved on validation failure97- Undo available for destructive actions (or confirmation dialog)9899**Flow intentionality**:100- User always knows where they are (breadcrumbs, active nav state)101- User always knows what to do next (clear CTAs, progressive disclosure)102- Back button works as expected103- No dead ends (every state has a path forward)104105## Anti-patterns (common in AI-generated code)106107Flag these if found — they are strong signals of interaction debt:108109| Anti-pattern | Why it matters |110|---|---|111| No loading state anywhere | Users think the app is broken during fetches |112| `onClick` handler with no loading/disabled logic | Double-submit, race conditions |113| No `onError` / error boundary | White screen of death |114| Empty `catch {}` blocks | Swallowed errors, no user feedback |115| No `aria-label` on icon buttons | Screen readers say "button" with no context |116| Links styled as buttons (or vice versa) | Breaks keyboard/screen reader expectations |117| `outline: none` / `outline: 0` without replacement | Keyboard users lose focus visibility |118| Autofocus on wrong element in modals | Keyboard user starts in wrong place |119| Infinite scroll with no keyboard alternative | Keyboard users trapped |120| Alert/confirm dialogs for user decisions | Blocks thread, poor UX, inaccessible |121122## Completion Report123124```125[UX Interaction Review] Complete!126127Target: <path or URL>128Framework: <React/Vue/Svelte/HTML...>129130Foundation: <PASS / X issues>131Craft: <PASS / X issues>132Polish: <PASS / X issues>133134Top priorities:1351. <most impactful issue + specific fix>1362. <second issue + fix>1373. <third issue + fix>138139💡 For visual design quality, pair with `design-taste-frontend`.140```141142Keep the top priorities list to **3-5 items max**. Don't dump 30 findings — prioritize by user impact.143144## Detailed findings format145146For each finding:147```148[Tier] Category — Issue title149File: path/to/file.tsx:42150What: <specific problem found>151Why: <impact on user experience>152Fix: <concrete code-level suggestion>153```154155## Integration with design-taste-frontend156157If visual issues are noticed during review (AI slop patterns, poor color choices, typography problems), note them briefly but recommend:158159If installed:160> "Visual design issues detected. Run `design-taste-frontend` for detailed visual quality review."161162If not installed:163> "Visual design issues detected. For detailed visual review, install: `npx skills add leonxlnx/taste-skill -g -y`"164165Do not duplicate visual design review work.166167## References168169Read `references/interaction-checklist.md` for the full expanded checklist with code-level detection patterns.170171<!-- Keep this file under 200 lines. Move detailed docs to references/. -->172<!-- The context window is shared with conversation history and other skills. -->173<!-- Do NOT add README.md, CHANGELOG.md, or other docs to this skill directory. -->