design-protocol 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +225 -0
- package/agents/dp-researcher.md +239 -0
- package/agents/dp-verifier.md +207 -0
- package/bin/install.js +464 -0
- package/commands/dp-back.md +221 -0
- package/commands/dp-discuss.md +257 -0
- package/commands/dp-execute.md +513 -0
- package/commands/dp-journey.md +85 -0
- package/commands/dp-progress.md +178 -0
- package/commands/dp-roadmap.md +83 -0
- package/commands/dp-skip.md +186 -0
- package/commands/dp-start.md +510 -0
- package/commands/dp-storytell.md +94 -0
- package/commands/dp-verify.md +207 -0
- package/package.json +59 -0
- package/skills/dp-color/SKILL.md +214 -0
- package/skills/dp-color/export_tokens.py +297 -0
- package/skills/dp-color/references/apca-contrast.md +87 -0
- package/skills/dp-color/references/hue-emotions.md +109 -0
- package/skills/dp-color/references/oklch-gamut.md +79 -0
- package/skills/dp-color/references/pitfalls.md +171 -0
- package/skills/dp-color/references/scale-patterns.md +206 -0
- package/skills/dp-color/references/tool-workflows.md +200 -0
- package/skills/dp-discovery/SKILL.md +480 -0
- package/skills/dp-eng_review/SKILL.md +471 -0
- package/skills/dp-eng_review/references/code-review-checklist.md +385 -0
- package/skills/dp-eng_review/references/react-patterns.md +512 -0
- package/skills/dp-eng_review/references/shadcn-patterns.md +510 -0
- package/skills/dp-eng_review/references/tailwind-conventions.md +351 -0
- package/skills/dp-journey/SKILL.md +682 -0
- package/skills/dp-journey/references/journey-types.md +97 -0
- package/skills/dp-journey/references/map-structures.md +177 -0
- package/skills/dp-journey/references/omnichannel-patterns.md +208 -0
- package/skills/dp-journey/references/research-methods.md +125 -0
- package/skills/dp-prd/SKILL.md +201 -0
- package/skills/dp-prd/references/claude-code-spec.md +107 -0
- package/skills/dp-prd/references/interview-questions.md +158 -0
- package/skills/dp-prd/references/section-templates.md +231 -0
- package/skills/dp-research/SKILL.md +540 -0
- package/skills/dp-research/references/facilitation-guide.md +291 -0
- package/skills/dp-research/references/interview-guide-template.md +190 -0
- package/skills/dp-research/references/method-selection.md +195 -0
- package/skills/dp-research/references/question-writing.md +244 -0
- package/skills/dp-research/references/research-report-template.md +363 -0
- package/skills/dp-research/references/synthesis-methods.md +289 -0
- package/skills/dp-research/references/usability-test-template.md +260 -0
- package/skills/dp-roadmap/SKILL.md +648 -0
- package/skills/dp-roadmap/references/prioritization-frameworks.md +312 -0
- package/skills/dp-roadmap/references/roadmap-structures.md +179 -0
- package/skills/dp-roadmap/references/roadmap-workshops.md +264 -0
- package/skills/dp-roadmap/references/theme-development.md +168 -0
- package/skills/dp-storytell/SKILL.md +645 -0
- package/skills/dp-storytell/references/audience-playbooks.md +260 -0
- package/skills/dp-storytell/references/content-type-templates.md +310 -0
- package/skills/dp-storytell/references/delivery-tactics.md +228 -0
- package/skills/dp-storytell/references/narrative-frameworks.md +259 -0
- package/skills/dp-ui/SKILL.md +503 -0
- package/skills/dp-ui/references/b2b-enterprise-patterns.md +319 -0
- package/skills/dp-ui/references/data-visualization.md +304 -0
- package/skills/dp-ui/references/visual-design-principles.md +237 -0
- package/skills/dp-ux/SKILL.md +414 -0
- package/skills/dp-ux/references/accessibility-checklist.md +128 -0
- package/skills/dp-ux/references/product-excellence.md +149 -0
- package/skills/dp-ux/references/usability-principles.md +140 -0
- package/skills/dp-ux/references/ux-patterns.md +221 -0
- package/templates/config.json +55 -0
- package/templates/context.md +96 -0
- package/templates/project.md +83 -0
- package/templates/requirements.md +137 -0
- package/templates/roadmap.md +168 -0
- package/templates/state.md +107 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Accessibility Checklist
|
|
2
|
+
|
|
3
|
+
Essential WCAG 2.1 AA compliance for production interfaces.
|
|
4
|
+
|
|
5
|
+
## Keyboard Navigation
|
|
6
|
+
|
|
7
|
+
- [ ] All interactive elements reachable via Tab
|
|
8
|
+
- [ ] Logical tab order (follows visual flow)
|
|
9
|
+
- [ ] Focus indicator visible on all focusable elements
|
|
10
|
+
- [ ] Custom focus styles (not just browser default)
|
|
11
|
+
- [ ] Skip links for main content on complex pages
|
|
12
|
+
- [ ] No keyboard traps (can always Tab out)
|
|
13
|
+
- [ ] Modal focus trapping (Tab cycles within modal)
|
|
14
|
+
- [ ] Escape closes modals/dropdowns
|
|
15
|
+
- [ ] Arrow keys for menu/option navigation
|
|
16
|
+
- [ ] Enter/Space activates buttons and links
|
|
17
|
+
|
|
18
|
+
## Color & Contrast
|
|
19
|
+
|
|
20
|
+
- [ ] Text contrast ratio ≥ 4.5:1 (normal text)
|
|
21
|
+
- [ ] Text contrast ratio ≥ 3:1 (large text, 18px+ or 14px bold)
|
|
22
|
+
- [ ] UI component contrast ≥ 3:1 against background
|
|
23
|
+
- [ ] Focus indicators have ≥ 3:1 contrast
|
|
24
|
+
- [ ] Color is never the ONLY indicator of meaning
|
|
25
|
+
- [ ] Error states use icon/text + color, not just red
|
|
26
|
+
- [ ] Links distinguishable from body text (underline or 3:1 contrast)
|
|
27
|
+
|
|
28
|
+
## Text & Typography
|
|
29
|
+
|
|
30
|
+
- [ ] Base font size ≥ 16px
|
|
31
|
+
- [ ] Line height ≥ 1.5 for body text
|
|
32
|
+
- [ ] Text resizable up to 200% without breaking layout
|
|
33
|
+
- [ ] No text in images (except logos)
|
|
34
|
+
- [ ] Language attribute set on HTML element
|
|
35
|
+
- [ ] Avoid justified text (uneven spacing)
|
|
36
|
+
|
|
37
|
+
## Images & Media
|
|
38
|
+
|
|
39
|
+
- [ ] All images have alt text (or alt="" for decorative)
|
|
40
|
+
- [ ] Complex images have extended descriptions
|
|
41
|
+
- [ ] Icons with meaning have accessible labels
|
|
42
|
+
- [ ] Decorative icons hidden from screen readers (aria-hidden="true")
|
|
43
|
+
- [ ] Video has captions
|
|
44
|
+
- [ ] Audio has transcript
|
|
45
|
+
|
|
46
|
+
## Forms
|
|
47
|
+
|
|
48
|
+
- [ ] All inputs have associated labels (not just placeholder)
|
|
49
|
+
- [ ] Labels are visible (not visually hidden unless icon is clear)
|
|
50
|
+
- [ ] Required fields marked and announced
|
|
51
|
+
- [ ] Error messages linked to inputs (aria-describedby)
|
|
52
|
+
- [ ] Error messages are specific and helpful
|
|
53
|
+
- [ ] Form validation announced to screen readers
|
|
54
|
+
- [ ] Autocomplete attributes for common fields
|
|
55
|
+
- [ ] Input type matches expected data (email, tel, etc.)
|
|
56
|
+
|
|
57
|
+
## Interactive Elements
|
|
58
|
+
|
|
59
|
+
- [ ] Buttons use `<button>`, not `<div onClick>`
|
|
60
|
+
- [ ] Links use `<a>` with href, not `<span onClick>`
|
|
61
|
+
- [ ] Custom components have appropriate ARIA roles
|
|
62
|
+
- [ ] aria-expanded for collapsible sections
|
|
63
|
+
- [ ] aria-selected for tabs/selections
|
|
64
|
+
- [ ] aria-live regions for dynamic content
|
|
65
|
+
- [ ] Loading states announced (aria-busy or live region)
|
|
66
|
+
- [ ] Disabled states use `disabled` attribute or aria-disabled
|
|
67
|
+
|
|
68
|
+
## Motion & Animation
|
|
69
|
+
|
|
70
|
+
- [ ] Respect prefers-reduced-motion media query
|
|
71
|
+
- [ ] No auto-playing video/audio
|
|
72
|
+
- [ ] Animations can be paused
|
|
73
|
+
- [ ] No flashing content (< 3 flashes/second)
|
|
74
|
+
- [ ] Essential information not conveyed only through motion
|
|
75
|
+
|
|
76
|
+
## Touch & Mobile
|
|
77
|
+
|
|
78
|
+
- [ ] Touch targets ≥ 44×44px
|
|
79
|
+
- [ ] Adequate spacing between touch targets (≥ 8px)
|
|
80
|
+
- [ ] Gestures have alternative controls
|
|
81
|
+
- [ ] Pinch-to-zoom not disabled
|
|
82
|
+
- [ ] Orientation not locked (unless essential)
|
|
83
|
+
|
|
84
|
+
## Screen Reader Essentials
|
|
85
|
+
|
|
86
|
+
```html
|
|
87
|
+
<!-- Landmark regions -->
|
|
88
|
+
<header role="banner">
|
|
89
|
+
<nav role="navigation">
|
|
90
|
+
<main role="main">
|
|
91
|
+
<footer role="contentinfo">
|
|
92
|
+
|
|
93
|
+
<!-- Headings hierarchy -->
|
|
94
|
+
<h1> (one per page)
|
|
95
|
+
<h2>
|
|
96
|
+
<h3>
|
|
97
|
+
|
|
98
|
+
<!-- Live regions for dynamic updates -->
|
|
99
|
+
<div aria-live="polite">Status updates here</div>
|
|
100
|
+
<div aria-live="assertive">Critical alerts here</div>
|
|
101
|
+
|
|
102
|
+
<!-- Hide decorative elements -->
|
|
103
|
+
<span aria-hidden="true">🎉</span>
|
|
104
|
+
|
|
105
|
+
<!-- Accessible names -->
|
|
106
|
+
<button aria-label="Close dialog">×</button>
|
|
107
|
+
<input aria-describedby="hint-id">
|
|
108
|
+
<span id="hint-id">Password must be 8+ characters</span>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Testing Checklist
|
|
112
|
+
|
|
113
|
+
1. **Keyboard only** — Unplug mouse, complete all tasks
|
|
114
|
+
2. **Screen reader** — Test with VoiceOver (Mac) or NVDA (Windows)
|
|
115
|
+
3. **Zoom** — Test at 200% browser zoom
|
|
116
|
+
4. **Color blindness** — Use simulator (Stark, Sim Daltonism)
|
|
117
|
+
5. **Reduced motion** — Enable in OS settings, verify animations reduce
|
|
118
|
+
6. **Contrast checker** — Use WebAIM contrast checker or Figma plugin
|
|
119
|
+
|
|
120
|
+
## Quick Wins
|
|
121
|
+
|
|
122
|
+
If limited time, prioritize these high-impact items:
|
|
123
|
+
1. Keyboard navigation works for all interactions
|
|
124
|
+
2. All form inputs have visible labels
|
|
125
|
+
3. Color contrast meets minimums
|
|
126
|
+
4. Focus indicators are visible
|
|
127
|
+
5. Images have alt text
|
|
128
|
+
6. Buttons are `<button>`, links are `<a>`
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Product Excellence
|
|
2
|
+
|
|
3
|
+
What separates great products from good ones. Learn from the best.
|
|
4
|
+
|
|
5
|
+
## Linear — Speed as a Feature
|
|
6
|
+
|
|
7
|
+
**Philosophy**: Software should feel instant. Every interaction should respond in milliseconds.
|
|
8
|
+
|
|
9
|
+
**Key UX decisions**:
|
|
10
|
+
- **Optimistic updates everywhere** — Actions feel instant, sync in background
|
|
11
|
+
- **Keyboard-first** — Every action has a shortcut, power users never touch mouse
|
|
12
|
+
- **Command palette (Cmd+K)** — Single entry point to everything
|
|
13
|
+
- **Minimal UI chrome** — Content takes center stage, UI fades away
|
|
14
|
+
- **Animations are fast** — 150-200ms transitions, never sluggish
|
|
15
|
+
- **Offline-capable** — Works without network, syncs when available
|
|
16
|
+
|
|
17
|
+
**Steal these patterns**:
|
|
18
|
+
- Sub-100ms response to all interactions
|
|
19
|
+
- Global keyboard shortcuts with discoverability (Cmd+/)
|
|
20
|
+
- Dense but scannable information display
|
|
21
|
+
- Smooth, fast animations (ease-out, short duration)
|
|
22
|
+
|
|
23
|
+
## Stripe — Clarity in Complexity
|
|
24
|
+
|
|
25
|
+
**Philosophy**: Complex systems should feel simple. Guide users through sophisticated workflows without overwhelming them.
|
|
26
|
+
|
|
27
|
+
**Key UX decisions**:
|
|
28
|
+
- **Progressive disclosure** — Show basics first, reveal complexity on demand
|
|
29
|
+
- **Inline documentation** — Help text right where you need it, not in separate docs
|
|
30
|
+
- **Real-time validation** — Card fields validate as you type with clear feedback
|
|
31
|
+
- **Test mode everywhere** — Safe sandbox to experiment without consequences
|
|
32
|
+
- **Consistent patterns** — Once you learn one part, you understand the whole
|
|
33
|
+
|
|
34
|
+
**Steal these patterns**:
|
|
35
|
+
- Inline validation with specific, helpful messages
|
|
36
|
+
- Contextual help (?) icons with popovers
|
|
37
|
+
- Clear success/error states with next steps
|
|
38
|
+
- Dashboard overviews that answer "what should I do now?"
|
|
39
|
+
|
|
40
|
+
## Notion — Flexibility Without Chaos
|
|
41
|
+
|
|
42
|
+
**Philosophy**: One tool that adapts to any workflow. Blocks as universal building blocks.
|
|
43
|
+
|
|
44
|
+
**Key UX decisions**:
|
|
45
|
+
- **Slash commands** — Universal entry point for all content types
|
|
46
|
+
- **Blocks** — Everything is a draggable, transformable block
|
|
47
|
+
- **Templates** — Reduce blank page anxiety with starting points
|
|
48
|
+
- **Gentle onboarding** — Learn by using, not by reading
|
|
49
|
+
- **Multiplayer presence** — See who's here, what they're doing
|
|
50
|
+
|
|
51
|
+
**Steal these patterns**:
|
|
52
|
+
- Slash commands for contextual actions
|
|
53
|
+
- Drag-and-drop for organization
|
|
54
|
+
- Template galleries for common use cases
|
|
55
|
+
- Inline @mentions for collaboration
|
|
56
|
+
|
|
57
|
+
## Vercel — Developer Experience as UX
|
|
58
|
+
|
|
59
|
+
**Philosophy**: Developers are users too. Reduce friction to zero.
|
|
60
|
+
|
|
61
|
+
**Key UX decisions**:
|
|
62
|
+
- **Zero-config defaults** — Works out of box, configure only when needed
|
|
63
|
+
- **Preview deployments** — Every PR gets a live URL automatically
|
|
64
|
+
- **Real-time logs** — See what's happening instantly
|
|
65
|
+
- **Git-centric workflow** — Meets developers where they are
|
|
66
|
+
- **Beautiful CLI** — Even terminal output is designed
|
|
67
|
+
|
|
68
|
+
**Steal these patterns**:
|
|
69
|
+
- Smart defaults that handle 80% of cases
|
|
70
|
+
- Live previews of changes
|
|
71
|
+
- Clear deployment/build status visualization
|
|
72
|
+
- One-click actions for common tasks
|
|
73
|
+
|
|
74
|
+
## Figma — Collaborative by Default
|
|
75
|
+
|
|
76
|
+
**Philosophy**: Design is a team sport. Real-time collaboration changes everything.
|
|
77
|
+
|
|
78
|
+
**Key UX decisions**:
|
|
79
|
+
- **Multiplayer cursors** — Always know who's here and where
|
|
80
|
+
- **Browser-based** — No install, share via URL
|
|
81
|
+
- **Components & variants** — Single source of truth for design systems
|
|
82
|
+
- **Comments in context** — Feedback attached to what it's about
|
|
83
|
+
- **Prototyping built-in** — Design and prototype in one tool
|
|
84
|
+
|
|
85
|
+
**Steal these patterns**:
|
|
86
|
+
- Real-time presence indicators
|
|
87
|
+
- Shareable URLs for everything
|
|
88
|
+
- Comment threads attached to specific elements
|
|
89
|
+
- Version history with named checkpoints
|
|
90
|
+
|
|
91
|
+
## Apple — Invisible Technology
|
|
92
|
+
|
|
93
|
+
**Philosophy**: Technology should disappear. The best interface is no interface.
|
|
94
|
+
|
|
95
|
+
**Key UX decisions**:
|
|
96
|
+
- **Sensible defaults** — Works perfectly out of box
|
|
97
|
+
- **Reduce options** — One obvious way to do things
|
|
98
|
+
- **Direct manipulation** — Touch, drag, pinch — interact naturally
|
|
99
|
+
- **System-wide consistency** — Learn once, use everywhere
|
|
100
|
+
- **Delight in details** — Polish that makes you smile
|
|
101
|
+
|
|
102
|
+
**Steal these patterns**:
|
|
103
|
+
- Haptic feedback for physical confirmation
|
|
104
|
+
- Smooth, physics-based animations
|
|
105
|
+
- Limited but powerful feature sets
|
|
106
|
+
- Empty states that guide, not just inform
|
|
107
|
+
|
|
108
|
+
## Common Patterns Across Great Products
|
|
109
|
+
|
|
110
|
+
### Speed
|
|
111
|
+
- < 100ms for feedback on any interaction
|
|
112
|
+
- Optimistic UI for perceived performance
|
|
113
|
+
- Skeleton screens, not spinners
|
|
114
|
+
- Background sync, not blocking operations
|
|
115
|
+
|
|
116
|
+
### Keyboard-First
|
|
117
|
+
- All actions have keyboard shortcuts
|
|
118
|
+
- Command palette (Cmd+K) as universal entry point
|
|
119
|
+
- Tab navigation works logically
|
|
120
|
+
- Shortcut hints in UI
|
|
121
|
+
|
|
122
|
+
### Progressive Disclosure
|
|
123
|
+
- Simple by default, powerful when needed
|
|
124
|
+
- Advanced options tucked away but findable
|
|
125
|
+
- Contextual help, not separate documentation
|
|
126
|
+
- Learn by doing, not by reading
|
|
127
|
+
|
|
128
|
+
### Status & Feedback
|
|
129
|
+
- Always show system status
|
|
130
|
+
- Clear success/error/loading states
|
|
131
|
+
- Undo for mistakes, not confirmation dialogs
|
|
132
|
+
- Non-blocking notifications
|
|
133
|
+
|
|
134
|
+
### Polish
|
|
135
|
+
- Consistent spacing and alignment
|
|
136
|
+
- Smooth, purposeful animations
|
|
137
|
+
- Attention to empty states
|
|
138
|
+
- Error messages that help
|
|
139
|
+
|
|
140
|
+
## Anti-Patterns to Avoid
|
|
141
|
+
|
|
142
|
+
- **Modal abuse** — Modals interrupt flow; use sheets, drawers, or inline expansion
|
|
143
|
+
- **Confirmation dialogs for routine actions** — Provide undo instead
|
|
144
|
+
- **Spinners for content loading** — Use skeleton screens
|
|
145
|
+
- **Error codes without explanation** — Always explain what went wrong and how to fix
|
|
146
|
+
- **Hidden navigation** — Don't make users hunt for common actions
|
|
147
|
+
- **Requiring signup before value** — Show the product first
|
|
148
|
+
- **Feature overload** — Not every feature needs to be visible always
|
|
149
|
+
- **Inconsistent patterns** — Same action should work same way everywhere
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Usability Principles
|
|
2
|
+
|
|
3
|
+
## Nielsen's 10 Heuristics (with Modern Interpretations)
|
|
4
|
+
|
|
5
|
+
### 1. Visibility of System Status
|
|
6
|
+
**Classic**: Keep users informed about what's going on through appropriate feedback within reasonable time.
|
|
7
|
+
|
|
8
|
+
**Modern application**:
|
|
9
|
+
- Skeleton screens during loading (not spinners for content)
|
|
10
|
+
- Progress indicators for multi-step processes
|
|
11
|
+
- Real-time sync status (saved, saving, offline)
|
|
12
|
+
- Subtle toast notifications for background operations
|
|
13
|
+
- Network/connection status indicators
|
|
14
|
+
|
|
15
|
+
**Examples**: Linear shows "Saving..." → "Saved" transitions. Figma shows multiplayer cursors and selection states.
|
|
16
|
+
|
|
17
|
+
### 2. Match Between System and Real World
|
|
18
|
+
**Classic**: Use words, phrases, and concepts familiar to the user, not system-oriented jargon.
|
|
19
|
+
|
|
20
|
+
**Modern application**:
|
|
21
|
+
- Domain-specific language matching user's mental model
|
|
22
|
+
- Metaphors that make sense (folder, trash, archive)
|
|
23
|
+
- Date/time in user's locale and relative terms ("2 hours ago")
|
|
24
|
+
- Currency and number formatting per locale
|
|
25
|
+
- Avoid technical errors ("Error 500") — translate to human impact
|
|
26
|
+
|
|
27
|
+
### 3. User Control and Freedom
|
|
28
|
+
**Classic**: Provide a clearly marked "emergency exit" to leave unwanted states.
|
|
29
|
+
|
|
30
|
+
**Modern application**:
|
|
31
|
+
- Undo everywhere (Cmd+Z should work)
|
|
32
|
+
- Non-destructive operations by default (soft delete, archive)
|
|
33
|
+
- Easy escape from modals (click outside, Escape key)
|
|
34
|
+
- Clear back/cancel paths in flows
|
|
35
|
+
- Bulk undo for batch operations
|
|
36
|
+
- Draft auto-save so users never lose work
|
|
37
|
+
|
|
38
|
+
**Examples**: Gmail's "Undo Send", Notion's version history, Linear's Cmd+Z for almost everything.
|
|
39
|
+
|
|
40
|
+
### 4. Consistency and Standards
|
|
41
|
+
**Classic**: Follow platform conventions — users shouldn't wonder if different words/actions mean the same thing.
|
|
42
|
+
|
|
43
|
+
**Modern application**:
|
|
44
|
+
- Platform-native keyboard shortcuts (Cmd on Mac, Ctrl on Windows)
|
|
45
|
+
- Standard icon meanings (gear = settings, X = close)
|
|
46
|
+
- Consistent terminology throughout the app
|
|
47
|
+
- Design tokens for spacing, colors, typography
|
|
48
|
+
- Component behavior consistency (all dropdowns work the same)
|
|
49
|
+
|
|
50
|
+
### 5. Error Prevention
|
|
51
|
+
**Classic**: Eliminate error-prone conditions or present users with a confirmation option.
|
|
52
|
+
|
|
53
|
+
**Modern application**:
|
|
54
|
+
- Disable invalid actions, don't just error afterward
|
|
55
|
+
- Smart defaults that minimize required input
|
|
56
|
+
- Inline validation as users type
|
|
57
|
+
- Format hints and input masks for structured data
|
|
58
|
+
- Confirmation only for truly destructive/irreversible actions
|
|
59
|
+
- Autosuggest to prevent typos
|
|
60
|
+
|
|
61
|
+
**Examples**: Stripe's inline card validation, Linear's smart date parsing.
|
|
62
|
+
|
|
63
|
+
### 6. Recognition Rather Than Recall
|
|
64
|
+
**Classic**: Minimize memory load by making objects, actions, and options visible.
|
|
65
|
+
|
|
66
|
+
**Modern application**:
|
|
67
|
+
- Command palette with searchable actions (Cmd+K)
|
|
68
|
+
- Recent items and frequently used at the top
|
|
69
|
+
- Contextual actions in right-click menus
|
|
70
|
+
- Autocomplete with recent/suggested options
|
|
71
|
+
- Visual affordances for draggable/interactive elements
|
|
72
|
+
- Breadcrumbs for deep navigation
|
|
73
|
+
|
|
74
|
+
### 7. Flexibility and Efficiency of Use
|
|
75
|
+
**Classic**: Accelerators — unseen by novices — speed up interaction for experts.
|
|
76
|
+
|
|
77
|
+
**Modern application**:
|
|
78
|
+
- Keyboard shortcuts for power users
|
|
79
|
+
- Command palette (Cmd+K) for everything
|
|
80
|
+
- Bulk operations and multi-select
|
|
81
|
+
- Quick actions and hover menus
|
|
82
|
+
- Customizable workflows and views
|
|
83
|
+
- API/integrations for automation
|
|
84
|
+
|
|
85
|
+
**Examples**: Notion's slash commands, Linear's keyboard-first design, Figma's plugins.
|
|
86
|
+
|
|
87
|
+
### 8. Aesthetic and Minimalist Design
|
|
88
|
+
**Classic**: Don't include information that is irrelevant or rarely needed.
|
|
89
|
+
|
|
90
|
+
**Modern application**:
|
|
91
|
+
- Progressive disclosure — show advanced options on demand
|
|
92
|
+
- Information hierarchy — most important content is most prominent
|
|
93
|
+
- Whitespace as a design element, not wasted space
|
|
94
|
+
- Reduce visual noise — every element should earn its place
|
|
95
|
+
- Contextual UI that adapts to current task
|
|
96
|
+
|
|
97
|
+
### 9. Help Users Recognize, Diagnose, and Recover from Errors
|
|
98
|
+
**Classic**: Error messages should be expressed in plain language, precisely indicate the problem, and constructively suggest a solution.
|
|
99
|
+
|
|
100
|
+
**Modern application**:
|
|
101
|
+
- Error format: What happened → Why → How to fix
|
|
102
|
+
- Inline errors next to the field, not at page top
|
|
103
|
+
- Suggested fixes and one-click resolution when possible
|
|
104
|
+
- Link to help docs for complex errors
|
|
105
|
+
- Never show stack traces or error codes alone
|
|
106
|
+
|
|
107
|
+
**Example**: "This email is already registered. [Log in instead] or [Reset password]"
|
|
108
|
+
|
|
109
|
+
### 10. Help and Documentation
|
|
110
|
+
**Classic**: Provide help and documentation that is easy to search and focused on user tasks.
|
|
111
|
+
|
|
112
|
+
**Modern application**:
|
|
113
|
+
- Contextual help (? icons, tooltips) over manual hunting
|
|
114
|
+
- Searchable help within the app
|
|
115
|
+
- Interactive tutorials and onboarding
|
|
116
|
+
- Empty states as teaching moments
|
|
117
|
+
- Keyboard shortcut cheat sheets (Cmd+/)
|
|
118
|
+
|
|
119
|
+
## Additional Modern Principles
|
|
120
|
+
|
|
121
|
+
### Performance is a Feature
|
|
122
|
+
- First contentful paint < 1.5s
|
|
123
|
+
- Time to interactive < 3s
|
|
124
|
+
- Perceived performance through optimistic UI
|
|
125
|
+
- Skeleton screens and progressive loading
|
|
126
|
+
- Offline-capable when relevant
|
|
127
|
+
|
|
128
|
+
### Mobile is Not Desktop Shrunk Down
|
|
129
|
+
- Touch targets 44×44px minimum
|
|
130
|
+
- Thumb-zone optimized primary actions
|
|
131
|
+
- Swipe gestures for common actions
|
|
132
|
+
- Pull-to-refresh where expected
|
|
133
|
+
- Bottom sheets over modals on mobile
|
|
134
|
+
|
|
135
|
+
### Accessibility is Not Optional
|
|
136
|
+
- Keyboard navigable
|
|
137
|
+
- Screen reader compatible
|
|
138
|
+
- Sufficient color contrast
|
|
139
|
+
- Focus indicators visible
|
|
140
|
+
- Motion-reduced alternatives
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# UX Patterns
|
|
2
|
+
|
|
3
|
+
Proven patterns for common UI challenges.
|
|
4
|
+
|
|
5
|
+
## Component States
|
|
6
|
+
|
|
7
|
+
Every interactive component needs these states designed:
|
|
8
|
+
|
|
9
|
+
### Button States
|
|
10
|
+
```
|
|
11
|
+
Default → Hover → Focus → Active (pressed) → Disabled → Loading
|
|
12
|
+
```
|
|
13
|
+
- **Loading**: Replace label with spinner, maintain button width, disable interaction
|
|
14
|
+
- **Disabled**: Reduce opacity (50-60%), remove hover effects, `cursor: not-allowed`
|
|
15
|
+
- **Focus**: Visible ring (not just browser default), works on dark and light backgrounds
|
|
16
|
+
|
|
17
|
+
### Input States
|
|
18
|
+
```
|
|
19
|
+
Empty → Focused → Filled → Error → Disabled → Read-only
|
|
20
|
+
```
|
|
21
|
+
- **Focused**: Border color change + subtle shadow/glow
|
|
22
|
+
- **Error**: Red border + error icon + message below (not just red border)
|
|
23
|
+
- **Filled**: Subtle distinction from empty (optional, for complex forms)
|
|
24
|
+
|
|
25
|
+
### Card/Item States
|
|
26
|
+
```
|
|
27
|
+
Default → Hover → Selected → Dragging → Drop target
|
|
28
|
+
```
|
|
29
|
+
- **Hover**: Subtle lift (shadow) or background shift
|
|
30
|
+
- **Selected**: Checkmark + background color + border (multiple indicators)
|
|
31
|
+
- **Dragging**: Reduced opacity on original, cursor change
|
|
32
|
+
|
|
33
|
+
## Empty States
|
|
34
|
+
|
|
35
|
+
Never leave users staring at blank space.
|
|
36
|
+
|
|
37
|
+
**Good empty state includes**:
|
|
38
|
+
1. Clear message about why it's empty
|
|
39
|
+
2. Visual element (illustration or icon)
|
|
40
|
+
3. Primary action to remedy the emptiness
|
|
41
|
+
4. Secondary context (optional)
|
|
42
|
+
|
|
43
|
+
**Examples**:
|
|
44
|
+
```
|
|
45
|
+
[Illustration of inbox]
|
|
46
|
+
No messages yet
|
|
47
|
+
When you receive messages, they'll appear here.
|
|
48
|
+
[Compose message] ← Primary CTA
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
[Search icon]
|
|
53
|
+
No results for "quarterly reports"
|
|
54
|
+
Try adjusting your search or filters.
|
|
55
|
+
[Clear filters] [Browse all]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Loading States
|
|
59
|
+
|
|
60
|
+
### Skeleton Screens (preferred for content)
|
|
61
|
+
- Match layout of expected content
|
|
62
|
+
- Animate with subtle shimmer (left to right)
|
|
63
|
+
- Transition smoothly to loaded state
|
|
64
|
+
|
|
65
|
+
### Spinners (for actions)
|
|
66
|
+
- Use for button loading states
|
|
67
|
+
- Use for discrete operations (save, submit)
|
|
68
|
+
- Include timeout/retry for long operations
|
|
69
|
+
|
|
70
|
+
### Progress Bars (for known duration)
|
|
71
|
+
- File uploads, multi-step processes
|
|
72
|
+
- Show percentage or steps remaining
|
|
73
|
+
- Include cancel option for long operations
|
|
74
|
+
|
|
75
|
+
### Optimistic UI (for fast actions)
|
|
76
|
+
- Show success immediately, reconcile in background
|
|
77
|
+
- Have rollback plan for failures
|
|
78
|
+
- Example: Toggling a like shows instantly, syncs async
|
|
79
|
+
|
|
80
|
+
## Error Handling
|
|
81
|
+
|
|
82
|
+
### Inline Validation
|
|
83
|
+
```
|
|
84
|
+
[Email input with red border]
|
|
85
|
+
✗ Please enter a valid email address
|
|
86
|
+
```
|
|
87
|
+
- Validate on blur (not on every keystroke)
|
|
88
|
+
- Clear error when user starts fixing
|
|
89
|
+
- Show success state when corrected ✓
|
|
90
|
+
|
|
91
|
+
### Error Messages Formula
|
|
92
|
+
```
|
|
93
|
+
What happened + Why + How to fix
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Bad**: "Error 422: Unprocessable entity"
|
|
97
|
+
**Good**: "We couldn't save your changes. The file is too large (max 10MB). Try compressing it or choosing a smaller file."
|
|
98
|
+
|
|
99
|
+
### Error Message Placement
|
|
100
|
+
- Form errors: Below the input, not at page top
|
|
101
|
+
- System errors: Toast notification or banner
|
|
102
|
+
- Critical errors: Full-screen with recovery options
|
|
103
|
+
|
|
104
|
+
### Error Recovery
|
|
105
|
+
- Preserve user input on error (never clear the form)
|
|
106
|
+
- Offer one-click retry
|
|
107
|
+
- Suggest alternatives when primary path fails
|
|
108
|
+
|
|
109
|
+
## Feedback & Confirmation
|
|
110
|
+
|
|
111
|
+
### Toast Notifications
|
|
112
|
+
- Position: Top-right or bottom-center
|
|
113
|
+
- Auto-dismiss: 3-5 seconds for success, persist for errors
|
|
114
|
+
- Include undo action when relevant
|
|
115
|
+
- Stack if multiple (limit to 3 visible)
|
|
116
|
+
|
|
117
|
+
### Success Feedback
|
|
118
|
+
- Checkmark animation (200-300ms)
|
|
119
|
+
- Brief toast: "Saved" / "Sent" / "Done"
|
|
120
|
+
- Don't overdo it — success should feel lightweight
|
|
121
|
+
|
|
122
|
+
### Destructive Action Confirmation
|
|
123
|
+
**Use confirmation dialog when**:
|
|
124
|
+
- Action is irreversible
|
|
125
|
+
- Data loss would occur
|
|
126
|
+
- Significant impact on others
|
|
127
|
+
|
|
128
|
+
**Avoid confirmation when**:
|
|
129
|
+
- Undo is available
|
|
130
|
+
- Action is easily recoverable
|
|
131
|
+
- Frequent/routine action
|
|
132
|
+
|
|
133
|
+
**Confirmation dialog pattern**:
|
|
134
|
+
```
|
|
135
|
+
Delete "Q3 Report"?
|
|
136
|
+
This will permanently delete the file and cannot be undone.
|
|
137
|
+
[Cancel] [Delete] ← Destructive action in red, on right
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Navigation Patterns
|
|
141
|
+
|
|
142
|
+
### Breadcrumbs
|
|
143
|
+
- Use for hierarchical content (> 2 levels deep)
|
|
144
|
+
- Current page is last item, not clickable
|
|
145
|
+
- Truncate middle items on mobile: Home > ... > Current
|
|
146
|
+
|
|
147
|
+
### Tabs
|
|
148
|
+
- Use for same-level, parallel content
|
|
149
|
+
- One tab active at a time
|
|
150
|
+
- Content changes, URL optionally changes
|
|
151
|
+
- Tab count: 2-7 (more = consider different pattern)
|
|
152
|
+
|
|
153
|
+
### Command Palette (Cmd+K)
|
|
154
|
+
- Search across all actions, pages, items
|
|
155
|
+
- Recent/frequent items first
|
|
156
|
+
- Keyboard navigable (arrows, enter)
|
|
157
|
+
- Show keyboard shortcuts in results
|
|
158
|
+
|
|
159
|
+
### Back Navigation
|
|
160
|
+
- Back button returns to previous view/state
|
|
161
|
+
- Preserve scroll position and filters when returning
|
|
162
|
+
- Clear navigation history mental model
|
|
163
|
+
|
|
164
|
+
## Form Patterns
|
|
165
|
+
|
|
166
|
+
### Single Column Layout
|
|
167
|
+
- One column for most forms (fastest to complete)
|
|
168
|
+
- Only use multi-column for related short fields (First/Last name)
|
|
169
|
+
|
|
170
|
+
### Logical Grouping
|
|
171
|
+
- Group related fields with subtle visual separator
|
|
172
|
+
- Limit groups to 5-7 fields each
|
|
173
|
+
- Progressive disclosure for optional/advanced fields
|
|
174
|
+
|
|
175
|
+
### Smart Defaults
|
|
176
|
+
- Pre-fill from context (timezone from location, etc.)
|
|
177
|
+
- Remember user preferences
|
|
178
|
+
- Select most common option by default
|
|
179
|
+
|
|
180
|
+
### Required vs Optional
|
|
181
|
+
- If most fields required: Mark optional ones "(optional)"
|
|
182
|
+
- If most fields optional: Mark required ones with asterisk *
|
|
183
|
+
- Never mark both — redundant
|
|
184
|
+
|
|
185
|
+
### Form Submission
|
|
186
|
+
```
|
|
187
|
+
[Idle] → [Submitting...] → [Success ✓] or [Error]
|
|
188
|
+
```
|
|
189
|
+
- Disable submit button while processing
|
|
190
|
+
- Show inline errors on validation failure
|
|
191
|
+
- Success: Navigate away or show clear confirmation
|
|
192
|
+
|
|
193
|
+
## Mobile-Specific Patterns
|
|
194
|
+
|
|
195
|
+
### Bottom Sheet
|
|
196
|
+
- Prefer over modals on mobile
|
|
197
|
+
- Drag handle at top
|
|
198
|
+
- Swipe down to dismiss
|
|
199
|
+
- Multiple breakpoints (peek, half, full)
|
|
200
|
+
|
|
201
|
+
### Pull to Refresh
|
|
202
|
+
- Use for feed/list content
|
|
203
|
+
- Loading spinner at top
|
|
204
|
+
- Release threshold before triggering
|
|
205
|
+
|
|
206
|
+
### Swipe Actions
|
|
207
|
+
- Swipe to reveal actions (delete, archive)
|
|
208
|
+
- Show action preview during swipe
|
|
209
|
+
- Snap back if not completed
|
|
210
|
+
|
|
211
|
+
### Thumb Zone
|
|
212
|
+
```
|
|
213
|
+
┌─────────────────┐
|
|
214
|
+
│ Hard to reach │
|
|
215
|
+
│ │
|
|
216
|
+
│ Okay reach │
|
|
217
|
+
│ │
|
|
218
|
+
│ Easy reach │ ← Primary actions here
|
|
219
|
+
└─────────────────┘
|
|
220
|
+
```
|
|
221
|
+
Primary actions (FAB, main nav) in bottom third.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.1",
|
|
3
|
+
"created": "",
|
|
4
|
+
"project_name": "",
|
|
5
|
+
"workflow": {
|
|
6
|
+
"current_phase": 0,
|
|
7
|
+
"phases_completed": [],
|
|
8
|
+
"workflow_status": "not_started",
|
|
9
|
+
"executions": {
|
|
10
|
+
"wireframe": {
|
|
11
|
+
"completed": false,
|
|
12
|
+
"timestamp": null,
|
|
13
|
+
"output_dir": null
|
|
14
|
+
},
|
|
15
|
+
"polished": {
|
|
16
|
+
"completed": false,
|
|
17
|
+
"timestamp": null,
|
|
18
|
+
"output_dir": null
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"settings": {
|
|
23
|
+
"depth": "standard",
|
|
24
|
+
"challenge_mode": "heavy"
|
|
25
|
+
},
|
|
26
|
+
"phases": {
|
|
27
|
+
"discovery": {
|
|
28
|
+
"enabled": true,
|
|
29
|
+
"challenge_mode": "heavy",
|
|
30
|
+
"depth": "standard"
|
|
31
|
+
},
|
|
32
|
+
"ux": {
|
|
33
|
+
"enabled": true,
|
|
34
|
+
"include_accessibility": true,
|
|
35
|
+
"include_all_states": true
|
|
36
|
+
},
|
|
37
|
+
"ui": {
|
|
38
|
+
"enabled": true,
|
|
39
|
+
"include_b2b": false,
|
|
40
|
+
"include_data_viz": false,
|
|
41
|
+
"grid_system": "8px"
|
|
42
|
+
},
|
|
43
|
+
"review": {
|
|
44
|
+
"enabled": true,
|
|
45
|
+
"severity_threshold": "moderate",
|
|
46
|
+
"include_spec_alignment": true
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"optional_phases": {
|
|
50
|
+
"research": {
|
|
51
|
+
"enabled": false,
|
|
52
|
+
"methods": []
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|