@cliangdev/flux-plugin 0.2.0-dev.2b9c207 → 0.2.0-dev.359209a
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/bin/install.cjs +22 -1
- package/commands/dashboard.md +29 -0
- package/manifest.json +2 -1
- package/package.json +4 -2
- package/skills/ux-ui-design/SKILL.md +346 -0
- package/skills/ux-ui-design/references/design-tokens.md +359 -0
- package/src/dashboard/__tests__/api.test.ts +211 -0
- package/src/dashboard/browser.ts +35 -0
- package/src/dashboard/public/app.js +869 -0
- package/src/dashboard/public/index.html +90 -0
- package/src/dashboard/public/styles.css +807 -0
- package/src/dashboard/public/vendor/highlight.css +10 -0
- package/src/dashboard/public/vendor/highlight.min.js +8422 -0
- package/src/dashboard/public/vendor/marked.min.js +2210 -0
- package/src/dashboard/server.ts +296 -0
- package/src/dashboard/watchers.ts +83 -0
- package/src/server/adapters/local-adapter.ts +8 -2
- package/src/server/db/__tests__/queries.test.ts +2 -1
- package/src/server/tools/__tests__/crud.test.ts +2 -1
- package/src/server/tools/__tests__/mcp-interface.test.ts +2 -1
- package/src/server/tools/__tests__/query.test.ts +4 -2
- package/src/server/tools/__tests__/z-configure-linear.test.ts +1 -1
- package/src/server/tools/__tests__/z-get-linear-url.test.ts +1 -1
- package/src/status-line/__tests__/status-line.test.ts +1 -1
package/bin/install.cjs
CHANGED
|
@@ -21,6 +21,19 @@ if (args[0] === "serve") {
|
|
|
21
21
|
process.exit(1);
|
|
22
22
|
});
|
|
23
23
|
child.on("close", (code) => process.exit(code || 0));
|
|
24
|
+
} else if (args[0] === "dashboard") {
|
|
25
|
+
const dashboardSrc = path.join(__dirname, "..", "src", "dashboard", "server.ts");
|
|
26
|
+
const bunPath = getBunPath();
|
|
27
|
+
if (!bunPath) {
|
|
28
|
+
console.error("Failed to start Flux Dashboard: Bun is required but not found");
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const child = spawn(bunPath, ["run", dashboardSrc], { stdio: "inherit" });
|
|
32
|
+
child.on("error", (err) => {
|
|
33
|
+
console.error("Failed to start Flux Dashboard:", err.message);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
});
|
|
36
|
+
child.on("close", (code) => process.exit(code || 0));
|
|
24
37
|
} else {
|
|
25
38
|
runInstaller();
|
|
26
39
|
}
|
|
@@ -66,7 +79,12 @@ ${cyan} ███████╗██╗ ██╗ ██╗██╗
|
|
|
66
79
|
console.log(banner);
|
|
67
80
|
|
|
68
81
|
if (hasHelp) {
|
|
69
|
-
console.log(` ${yellow}Usage:${reset} bunx @cliangdev/flux-plugin [options]
|
|
82
|
+
console.log(` ${yellow}Usage:${reset} bunx @cliangdev/flux-plugin [command] [options]
|
|
83
|
+
|
|
84
|
+
${yellow}Commands:${reset}
|
|
85
|
+
${cyan}(none)${reset} Run the installer (default)
|
|
86
|
+
${cyan}serve${reset} Start the MCP server
|
|
87
|
+
${cyan}dashboard${reset} Open the Flux Dashboard in browser
|
|
70
88
|
|
|
71
89
|
${yellow}Options:${reset}
|
|
72
90
|
${cyan}-g, --global${reset} Install globally (to ~/.claude)
|
|
@@ -83,6 +101,9 @@ ${cyan} ███████╗██╗ ██╗ ██╗██╗
|
|
|
83
101
|
${dim}# Install locally (current project only)${reset}
|
|
84
102
|
bunx @cliangdev/flux-plugin --local
|
|
85
103
|
|
|
104
|
+
${dim}# Open the dashboard${reset}
|
|
105
|
+
bunx @cliangdev/flux-plugin dashboard
|
|
106
|
+
|
|
86
107
|
${yellow}Note:${reset} This plugin requires Bun. Install from https://bun.sh
|
|
87
108
|
`);
|
|
88
109
|
process.exit(0);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flux:dashboard
|
|
3
|
+
description: Open the Flux Dashboard to visualize PRDs, epics, and tasks
|
|
4
|
+
allowed-tools: Bash
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Flux Dashboard
|
|
8
|
+
|
|
9
|
+
Launch the Flux Dashboard web interface to visualize project status.
|
|
10
|
+
|
|
11
|
+
## Instructions
|
|
12
|
+
|
|
13
|
+
Run the dashboard server:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
bunx @cliangdev/flux-plugin dashboard
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
This will:
|
|
20
|
+
1. Start the dashboard server on port 3333 (or next available)
|
|
21
|
+
2. Open the dashboard in the default browser
|
|
22
|
+
|
|
23
|
+
The dashboard shows:
|
|
24
|
+
- All PRDs with their epics and tasks
|
|
25
|
+
- Status indicators and progress
|
|
26
|
+
- Dependency graph visualization
|
|
27
|
+
- Detailed views for each entity
|
|
28
|
+
|
|
29
|
+
Tell the user the dashboard is starting and they can close it with Ctrl+C when done.
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cliangdev/flux-plugin",
|
|
3
|
-
"version": "0.2.0-dev.
|
|
3
|
+
"version": "0.2.0-dev.359209a",
|
|
4
4
|
"description": "Claude Code plugin for AI-first workflow orchestration with MCP server",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/server/index.js",
|
|
@@ -17,9 +17,11 @@
|
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
19
|
"dev": "bun run src/server/index.ts",
|
|
20
|
-
"build": "bun build --compile --outfile bin/flux-server src/server/index.ts && bun build --compile --outfile bin/flux-status src/status-line/index.ts",
|
|
20
|
+
"build": "bun build --compile --outfile bin/flux-server src/server/index.ts && bun build --compile --outfile bin/flux-status src/status-line/index.ts && bun build --compile --outfile bin/flux-dashboard src/dashboard/server.ts",
|
|
21
21
|
"build:server": "bun build --compile --outfile bin/flux-server src/server/index.ts",
|
|
22
22
|
"build:status": "bun build --compile --outfile bin/flux-status src/status-line/index.ts",
|
|
23
|
+
"build:dashboard": "bun build --compile --outfile bin/flux-dashboard src/dashboard/server.ts",
|
|
24
|
+
"dev:dashboard": "bun run src/dashboard/server.ts",
|
|
23
25
|
"validate": "node scripts/validate-structure.cjs",
|
|
24
26
|
"test:integration": "bun test scripts/__tests__/integration.test.ts --timeout 120000",
|
|
25
27
|
"prepublishOnly": "bun run validate && bun run test:integration",
|
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flux:ux-ui-design
|
|
3
|
+
description: Expert UX/UI design guidance for creating simple, user-focused experiences with clean, cohesive interfaces. Use when designing or reviewing UI components, layouts, navigation, forms, or any user-facing interface. Applies human-centered design principles and explicitly avoids AI slop patterns (generic, over-designed, feature-bloated interfaces). Triggers on UI implementation, design decisions, component creation, or layout work.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# UX/UI Design Skill
|
|
8
|
+
|
|
9
|
+
Design guidance for creating interfaces that are simple for users and visually clean—not generic AI slop.
|
|
10
|
+
|
|
11
|
+
## Core Philosophy
|
|
12
|
+
|
|
13
|
+
**UX**: Remove friction. Every interaction should feel effortless.
|
|
14
|
+
**UI**: Less is more. Every element earns its place.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## UX Principles
|
|
19
|
+
|
|
20
|
+
### 1. Reduce Cognitive Load
|
|
21
|
+
|
|
22
|
+
Users form opinions in 50ms. Simplify ruthlessly.
|
|
23
|
+
|
|
24
|
+
- **One primary action per screen** — Secondary actions stay subtle
|
|
25
|
+
- **Progressive disclosure** — Show basics upfront, reveal complexity on demand
|
|
26
|
+
- **Predictable patterns** — Consistency reduces learning curve
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
❌ Dashboard with 12 cards, 5 CTAs, sidebar, and floating action button
|
|
30
|
+
✅ Dashboard with 3 key metrics, one primary action, minimal navigation
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Design for Intent, Not Features
|
|
34
|
+
|
|
35
|
+
Start with user goals, not feature lists.
|
|
36
|
+
|
|
37
|
+
| User Intent | Good Design | Bad Design |
|
|
38
|
+
|-------------|-------------|------------|
|
|
39
|
+
| "Find a product" | Search bar prominent, filters accessible | Feature tour modal on load |
|
|
40
|
+
| "Complete checkout" | Linear flow, minimal fields | Upsells interrupting every step |
|
|
41
|
+
| "Check status" | Status visible immediately | Requires 3 clicks to find |
|
|
42
|
+
|
|
43
|
+
### 3. Respect User Time
|
|
44
|
+
|
|
45
|
+
- **Minimize steps** — Combine related actions
|
|
46
|
+
- **Smart defaults** — Pre-fill what you can infer
|
|
47
|
+
- **Instant feedback** — Show loading states, confirm actions immediately
|
|
48
|
+
- **Remember state** — Don't make users repeat themselves
|
|
49
|
+
|
|
50
|
+
### 4. Error Prevention Over Error Messages
|
|
51
|
+
|
|
52
|
+
Design to prevent errors, not just handle them.
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
❌ "Invalid email format" after submit
|
|
56
|
+
✅ Real-time validation as user types
|
|
57
|
+
|
|
58
|
+
❌ Delete button with no confirmation
|
|
59
|
+
✅ Undo within 5 seconds, or confirmation for destructive actions
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## UI Principles
|
|
65
|
+
|
|
66
|
+
### 1. Visual Hierarchy
|
|
67
|
+
|
|
68
|
+
Guide attention through deliberate contrast.
|
|
69
|
+
|
|
70
|
+
**Size**: Larger = more important
|
|
71
|
+
**Color**: Accent colors for actions, muted for secondary
|
|
72
|
+
**Space**: Whitespace groups related elements, separates sections
|
|
73
|
+
**Position**: Top-left starts the reading flow (LTR languages)
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
Primary action: Bold, accent color, prominent size
|
|
77
|
+
Secondary action: Outlined or text-only, subdued
|
|
78
|
+
Tertiary action: Text link, smallest
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 2. Limited Color Palette
|
|
82
|
+
|
|
83
|
+
95% of minimalist interfaces use a restricted palette.
|
|
84
|
+
|
|
85
|
+
**Core palette structure:**
|
|
86
|
+
- 1 neutral background (white, off-white, or dark mode equivalent)
|
|
87
|
+
- 1-2 accent colors (one primary, one optional secondary)
|
|
88
|
+
- Semantic colors: success (green), warning (amber), error (red), info (blue)
|
|
89
|
+
- Text: 2-3 shades (primary, secondary, disabled)
|
|
90
|
+
|
|
91
|
+
```css
|
|
92
|
+
/* Example minimal palette */
|
|
93
|
+
--bg-primary: #FFFFFF;
|
|
94
|
+
--bg-secondary: #F8F9FA;
|
|
95
|
+
--text-primary: #1A1A1A;
|
|
96
|
+
--text-secondary: #6B7280;
|
|
97
|
+
--accent: #2563EB;
|
|
98
|
+
--accent-hover: #1D4ED8;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 3. Typography
|
|
102
|
+
|
|
103
|
+
One typeface, multiple weights. Never more than two font families.
|
|
104
|
+
|
|
105
|
+
**Hierarchy through weight and size, not different fonts:**
|
|
106
|
+
- Headings: Semibold or bold, larger size
|
|
107
|
+
- Body: Regular weight, comfortable reading size (16px minimum)
|
|
108
|
+
- Captions: Regular or medium, smaller size, secondary color
|
|
109
|
+
|
|
110
|
+
**Line height**: 1.4-1.6 for body text, 1.2-1.3 for headings
|
|
111
|
+
|
|
112
|
+
### 4. Spacing System
|
|
113
|
+
|
|
114
|
+
Use consistent spacing tokens—never arbitrary values.
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
4px (xs) — Tight spacing within components
|
|
118
|
+
8px (sm) — Related elements
|
|
119
|
+
16px (md) — Standard spacing
|
|
120
|
+
24px (lg) — Section separation
|
|
121
|
+
32px (xl) — Major sections
|
|
122
|
+
48px (2xl) — Page-level spacing
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Rule**: Space between elements = relationship strength. Closer = more related.
|
|
126
|
+
|
|
127
|
+
### 5. Whitespace as Design Element
|
|
128
|
+
|
|
129
|
+
Empty space is not wasted space. It:
|
|
130
|
+
- Reduces cognitive load
|
|
131
|
+
- Creates visual breathing room
|
|
132
|
+
- Emphasizes important elements
|
|
133
|
+
- Communicates hierarchy
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
❌ Cramped form with no padding
|
|
137
|
+
✅ Generous padding, grouped fields with clear sections
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Avoiding AI Slop
|
|
143
|
+
|
|
144
|
+
AI slop = generic, over-engineered, feature-bloated design that looks "designed" but lacks soul.
|
|
145
|
+
|
|
146
|
+
### Red Flags (Don't Do This)
|
|
147
|
+
|
|
148
|
+
| Pattern | Problem | Fix |
|
|
149
|
+
|---------|---------|-----|
|
|
150
|
+
| Gradient everything | Looks like a template | Flat colors, subtle shadows only |
|
|
151
|
+
| Rounded corners on everything | Generic "modern" look | Consistent radius, not excessive |
|
|
152
|
+
| Unnecessary animations | Distracting, slow | Purposeful micro-interactions only |
|
|
153
|
+
| Stock illustrations everywhere | Feels corporate/hollow | Use sparingly or not at all |
|
|
154
|
+
| Feature overload | "Look how much it does!" | Ship less, ship focused |
|
|
155
|
+
| Symmetric grids always | Predictable, boring | Intentional asymmetry when appropriate |
|
|
156
|
+
| Drop shadows on everything | Cluttered, dated | Minimal elevation, purposeful depth |
|
|
157
|
+
| Glassmorphism/neumorphism by default | Trendy but often inaccessible | Use sparingly, ensure contrast |
|
|
158
|
+
|
|
159
|
+
### AI Slop Content Patterns to Avoid
|
|
160
|
+
|
|
161
|
+
- Generic hero sections with vague taglines ("Empower your workflow")
|
|
162
|
+
- Cookie-cutter landing page layouts
|
|
163
|
+
- Feature grids with icons that could apply to anything
|
|
164
|
+
- Excessive use of buzzwords in UI copy
|
|
165
|
+
- Decorative elements that add no meaning
|
|
166
|
+
|
|
167
|
+
### What Makes Design Feel Human
|
|
168
|
+
|
|
169
|
+
- **Personality in copywriting** — Real voice, not corporate speak
|
|
170
|
+
- **Intentional imperfection** — Hand-drawn elements, custom illustrations
|
|
171
|
+
- **Constraint** — Knowing what NOT to include
|
|
172
|
+
- **Context-awareness** — Design serves the specific use case, not generic patterns
|
|
173
|
+
- **Consistency over novelty** — Boring is often better
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
## Component Guidelines
|
|
178
|
+
|
|
179
|
+
### Buttons
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
Primary: Solid background, high contrast text, clear CTA
|
|
183
|
+
Secondary: Outlined or ghost, lower visual weight
|
|
184
|
+
Tertiary: Text-only, for less important actions
|
|
185
|
+
Disabled: 50% opacity, no pointer events
|
|
186
|
+
|
|
187
|
+
Sizing:
|
|
188
|
+
- Small: 32px height, compact UI
|
|
189
|
+
- Medium: 40px height, default
|
|
190
|
+
- Large: 48px height, touch targets, primary CTAs
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Forms
|
|
194
|
+
|
|
195
|
+
- Labels above inputs (not placeholder-as-label)
|
|
196
|
+
- Clear focus states (visible ring, color change)
|
|
197
|
+
- Inline validation, not just on submit
|
|
198
|
+
- Logical tab order
|
|
199
|
+
- Required field indicators (asterisk or text)
|
|
200
|
+
- Helpful hint text for complex fields
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
❌ Placeholder text as the only label
|
|
204
|
+
❌ Error messages appearing somewhere else on screen
|
|
205
|
+
❌ Submit button disabled with no explanation why
|
|
206
|
+
|
|
207
|
+
✅ Clear labels, visible focus, inline errors, enabled submit with validation
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Cards
|
|
211
|
+
|
|
212
|
+
- Consistent padding (16-24px)
|
|
213
|
+
- Clear content hierarchy
|
|
214
|
+
- Single primary action if any
|
|
215
|
+
- Subtle shadow or border, not both
|
|
216
|
+
- Avoid nesting cards within cards
|
|
217
|
+
|
|
218
|
+
### Navigation
|
|
219
|
+
|
|
220
|
+
- Primary nav: 5-7 items maximum
|
|
221
|
+
- Mobile: Hamburger menu or bottom nav (not both)
|
|
222
|
+
- Current state clearly indicated
|
|
223
|
+
- Breadcrumbs for deep hierarchies
|
|
224
|
+
- Search accessible on complex sites
|
|
225
|
+
|
|
226
|
+
### Tables
|
|
227
|
+
|
|
228
|
+
- Left-align text, right-align numbers
|
|
229
|
+
- Zebra striping OR grid lines, not both
|
|
230
|
+
- Sticky headers for long tables
|
|
231
|
+
- Sort indicators when sortable
|
|
232
|
+
- Row actions: hover reveal or action column
|
|
233
|
+
- Pagination or infinite scroll, clear indication of more data
|
|
234
|
+
|
|
235
|
+
### Modals/Dialogs
|
|
236
|
+
|
|
237
|
+
- Clear title describing the action
|
|
238
|
+
- Single primary action, cancel always available
|
|
239
|
+
- Focus trapped within modal
|
|
240
|
+
- Escape key closes (unless destructive action)
|
|
241
|
+
- Background overlay with click-to-close
|
|
242
|
+
- Don't nest modals
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Responsive Design
|
|
247
|
+
|
|
248
|
+
### Breakpoints (Standard)
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
sm: 640px — Small tablets, large phones landscape
|
|
252
|
+
md: 768px — Tablets portrait
|
|
253
|
+
lg: 1024px — Tablets landscape, small laptops
|
|
254
|
+
xl: 1280px — Desktops
|
|
255
|
+
2xl: 1536px — Large desktops
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Mobile-First Patterns
|
|
259
|
+
|
|
260
|
+
- Stack columns on mobile, expand on desktop
|
|
261
|
+
- Touch targets: minimum 44x44px
|
|
262
|
+
- Thumb-friendly zones for critical actions
|
|
263
|
+
- Simplify navigation for mobile
|
|
264
|
+
- Reduce content density, not just shrink
|
|
265
|
+
|
|
266
|
+
### What Changes on Mobile
|
|
267
|
+
|
|
268
|
+
| Desktop | Mobile |
|
|
269
|
+
|---------|--------|
|
|
270
|
+
| Horizontal nav | Hamburger or bottom nav |
|
|
271
|
+
| Multi-column grid | Single column or 2-col max |
|
|
272
|
+
| Hover states | Tap states (no hover on touch) |
|
|
273
|
+
| Side panels | Full-screen overlays |
|
|
274
|
+
| Data tables | Cards or simplified tables |
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## Accessibility Checklist
|
|
279
|
+
|
|
280
|
+
Not optional. Design for everyone.
|
|
281
|
+
|
|
282
|
+
- [ ] Color contrast: 4.5:1 minimum for text
|
|
283
|
+
- [ ] Don't rely on color alone (add icons, text, patterns)
|
|
284
|
+
- [ ] Focus states visible and clear
|
|
285
|
+
- [ ] Keyboard navigation works
|
|
286
|
+
- [ ] Alt text on meaningful images
|
|
287
|
+
- [ ] Form labels associated with inputs
|
|
288
|
+
- [ ] Error messages clear and specific
|
|
289
|
+
- [ ] Touch targets 44x44px minimum
|
|
290
|
+
- [ ] Motion can be reduced (respects prefers-reduced-motion)
|
|
291
|
+
- [ ] Text resizable without breaking layout
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Implementation Checklist
|
|
296
|
+
|
|
297
|
+
Before shipping any interface:
|
|
298
|
+
|
|
299
|
+
### UX Verification
|
|
300
|
+
- [ ] Primary action is immediately obvious
|
|
301
|
+
- [ ] User can accomplish goal in minimum steps
|
|
302
|
+
- [ ] Error states are helpful, not just red
|
|
303
|
+
- [ ] Loading states exist for async operations
|
|
304
|
+
- [ ] Empty states guide users to next action
|
|
305
|
+
|
|
306
|
+
### UI Verification
|
|
307
|
+
- [ ] Spacing follows consistent scale
|
|
308
|
+
- [ ] Typography hierarchy is clear
|
|
309
|
+
- [ ] Color palette is limited and intentional
|
|
310
|
+
- [ ] Components are consistent throughout
|
|
311
|
+
- [ ] No orphan elements (everything aligned to grid)
|
|
312
|
+
|
|
313
|
+
### Anti-Slop Check
|
|
314
|
+
- [ ] Could remove any element without losing function?
|
|
315
|
+
- [ ] Does every gradient/shadow/animation serve a purpose?
|
|
316
|
+
- [ ] Would a non-designer find it cluttered?
|
|
317
|
+
- [ ] Is the copywriting specific to this product?
|
|
318
|
+
- [ ] Does it look distinct from a template?
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Quick Reference
|
|
323
|
+
|
|
324
|
+
### When Designing
|
|
325
|
+
|
|
326
|
+
1. **Start with user intent** — What are they trying to do?
|
|
327
|
+
2. **Minimize choices** — Each decision = cognitive load
|
|
328
|
+
3. **Establish hierarchy** — What's most important?
|
|
329
|
+
4. **Apply constraints** — Limited colors, spacing scale, one typeface
|
|
330
|
+
5. **Remove until it breaks** — Then add back only what's needed
|
|
331
|
+
|
|
332
|
+
### When Reviewing
|
|
333
|
+
|
|
334
|
+
Ask these questions:
|
|
335
|
+
- Can I remove anything?
|
|
336
|
+
- Is the primary action obvious?
|
|
337
|
+
- Does the spacing feel consistent?
|
|
338
|
+
- Is there unnecessary decoration?
|
|
339
|
+
- Would this work on mobile?
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## References
|
|
344
|
+
|
|
345
|
+
For detailed design token specifications and component patterns, see:
|
|
346
|
+
- `references/design-tokens.md` — Spacing, color, typography scales
|