soureeui 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/AGENTS.md +84 -0
- package/LICENSE +6 -0
- package/README.md +210 -0
- package/SKILL.md +148 -0
- package/bin/soureeui.js +491 -0
- package/package.json +47 -0
- package/references/accessibility.md +77 -0
- package/references/anti-ai-patterns.md +74 -0
- package/references/audit-and-refactor.md +64 -0
- package/references/content-and-copy.md +75 -0
- package/references/design-directions.md +81 -0
- package/references/design-system.md +124 -0
- package/references/imagery-and-icons.md +87 -0
- package/references/motion.md +186 -0
- package/references/packages.md +127 -0
- package/references/product-brief.md +68 -0
- package/references/responsive.md +145 -0
- package/references/review-and-done.md +98 -0
- package/references/workflow.md +107 -0
- package/templates/design-plan.md +124 -0
- package/templates/image-prompt.md +71 -0
- package/templates/ui-audit.md +77 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Packages and Component Decisions
|
|
2
|
+
|
|
3
|
+
The most common failure after bad visual design: reimplementing something the project already has, or installing something the project did not need.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Decision ladder
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Existing project component? → reuse or extend it
|
|
11
|
+
↓ no
|
|
12
|
+
Existing installed dependency? → adapt it
|
|
13
|
+
↓ no
|
|
14
|
+
Simple enough for the platform? → native / CSS / framework capability
|
|
15
|
+
↓ no
|
|
16
|
+
Mature package fits? → recommend, install only when justified
|
|
17
|
+
↓ no
|
|
18
|
+
build a reusable custom component
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Walk it top to bottom every time. Stop at the first yes.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Before recommending any package
|
|
26
|
+
|
|
27
|
+
- inspect the dependency manifest — is there already an equivalent?
|
|
28
|
+
- framework and version compatibility
|
|
29
|
+
- typing support when the project is typed
|
|
30
|
+
- accessibility support — a component library that fails keyboard support is a liability, not a shortcut
|
|
31
|
+
- maintenance signals: recent releases, open critical issues, active maintainers
|
|
32
|
+
- runtime and bundle cost relative to the value
|
|
33
|
+
- license compatibility
|
|
34
|
+
- how much customization the design direction requires — a heavily-themed library often costs more than building
|
|
35
|
+
- whether the feature is simple enough to not need it at all
|
|
36
|
+
|
|
37
|
+
Never install because a package is popular. Never add a second library in a category the project already covers.
|
|
38
|
+
|
|
39
|
+
## Proportionality
|
|
40
|
+
|
|
41
|
+
| Need | Right answer |
|
|
42
|
+
|---|---|
|
|
43
|
+
| Hover transition, simple reveal | Native CSS |
|
|
44
|
+
| Modal, dropdown, tooltip, tabs | Existing primitives library if present; otherwise a headless primitives package — these are accessibility-hard |
|
|
45
|
+
| Sortable, filterable, paginated, virtualized table | Mature table library. Hand-rolling this is a multi-week trap |
|
|
46
|
+
| Form with validation | Project's existing form approach; a form library only past real complexity |
|
|
47
|
+
| One chart | Consider hand-built SVG or a light library |
|
|
48
|
+
| A charting surface across the product | A real charting library |
|
|
49
|
+
| Date picker | Library. Time zones, locales, and keyboard support are worse than they look |
|
|
50
|
+
| Complex gesture, scroll, or layout animation | Established animation library |
|
|
51
|
+
| Icon | The icon library (`imagery-and-icons.md`) |
|
|
52
|
+
| Toast, command palette, drag and drop, rich text | Library — each is deceptively deep |
|
|
53
|
+
|
|
54
|
+
## Recommendation format
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Package: <name>
|
|
58
|
+
Use it for: <specific capability>
|
|
59
|
+
Why: <technical or design reason>
|
|
60
|
+
Why not custom: <maintenance / accessibility / edge-case cost>
|
|
61
|
+
Project fit: <how it sits with the existing stack>
|
|
62
|
+
Cost: <bundle / runtime / API surface>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Present this before installing. If the project already covers the category, do not present it at all.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Category reference
|
|
70
|
+
|
|
71
|
+
Examples, not prescriptions. Choose by detected stack and existing conventions.
|
|
72
|
+
|
|
73
|
+
| Category | Examples |
|
|
74
|
+
|---|---|
|
|
75
|
+
| UI primitives / headless | Radix UI, Headless UI, Ark, Base UI |
|
|
76
|
+
| Component libraries | shadcn/ui, MUI, Mantine, Chakra, Ant Design |
|
|
77
|
+
| Icons | Lucide, Heroicons, Phosphor, Tabler, Radix Icons |
|
|
78
|
+
| Animation | Motion, GSAP, AutoAnimate |
|
|
79
|
+
| Tables | TanStack Table |
|
|
80
|
+
| Forms / validation | React Hook Form, Zod, Valibot |
|
|
81
|
+
| Charts | Recharts, Nivo, ECharts, Chart.js, Visx |
|
|
82
|
+
| Carousel | Embla, Swiper |
|
|
83
|
+
| Drag and drop | dnd-kit |
|
|
84
|
+
| Command palette | cmdk |
|
|
85
|
+
| Notifications | Sonner, React Hot Toast |
|
|
86
|
+
| Rich text | Tiptap, Lexical, ProseMirror |
|
|
87
|
+
| Dates | date-fns, Day.js, Temporal polyfill, React Day Picker |
|
|
88
|
+
|
|
89
|
+
Non-React stacks have their own equivalents; find the project's ecosystem standard rather than porting a React answer.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Component architecture
|
|
94
|
+
|
|
95
|
+
Create a component when it earns **reusability, maintainability, consistency, or readability**. Markup existing is not a reason.
|
|
96
|
+
|
|
97
|
+
Prefer one component with variants over a family of adjectives:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Card variant="product" | "featured" | "compact"
|
|
101
|
+
|
|
102
|
+
not: ModernCard BeautifulCard PremiumCard FancyCard
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Organize by role, following whatever the project already does:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
ui/ primitives: button, input, dialog
|
|
109
|
+
layout/ shells, grids, containers
|
|
110
|
+
navigation/ nav, breadcrumbs, tabs
|
|
111
|
+
forms/ composed fields and form patterns
|
|
112
|
+
feedback/ toast, empty state, error state, skeleton
|
|
113
|
+
<domain>/ product-specific components
|
|
114
|
+
sections/ page composition blocks
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
Avoid: a wrapper component that only adds a class, a component used once with ten props, an abstraction invented before the second use case exists.
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Reference-based design
|
|
122
|
+
|
|
123
|
+
When the user supplies a reference site, screenshot, or design: extract principles, do not clone.
|
|
124
|
+
|
|
125
|
+
Analyze composition, hierarchy, type system, spacing rhythm, color relationships, surface treatment, interaction patterns, information density. Then translate those principles into this product's content and constraints.
|
|
126
|
+
|
|
127
|
+
Never copy another brand's identity, assets, or copy.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Product Brief
|
|
2
|
+
|
|
3
|
+
Design decisions come from product facts. Collect them cheaply, infer what is inferable, ask only what changes the work.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## What to establish
|
|
8
|
+
|
|
9
|
+
| Question | Why it changes the design |
|
|
10
|
+
|---|---|
|
|
11
|
+
| What is the product? | Determines vocabulary, density, imagery, tone |
|
|
12
|
+
| Who uses it? | A trader, a nurse, and a teenager need different densities and affordances |
|
|
13
|
+
| What problem does it solve? | Sets what the first screen must communicate |
|
|
14
|
+
| What is the primary user goal? | Sets the focal point |
|
|
15
|
+
| What is the single most important action? | Sets the primary CTA and its placement |
|
|
16
|
+
| What information matters most? | Sets hierarchy |
|
|
17
|
+
| What is the expected journey? | Sets navigation and section order |
|
|
18
|
+
| What is the brand personality? | Sets typography, color, motion character |
|
|
19
|
+
| What sector? | Consumer, enterprise, developer, fintech, health, education, commerce, gov — each carries conventions users rely on |
|
|
20
|
+
| What devices? | Mobile-first field use and desktop analyst use are different products |
|
|
21
|
+
| Existing brand guidelines or assets? | Constraints beat invention |
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Infer, do not ask, when
|
|
26
|
+
|
|
27
|
+
- the repository already answers it (existing screens, copy, tokens, logo, meta tags)
|
|
28
|
+
- the request names the product type and the convention is strong ("an invoice app" implies dense tables, not hero imagery)
|
|
29
|
+
- the answer would not change any decision being made now
|
|
30
|
+
|
|
31
|
+
State the inference in one line and continue: *"Assuming a B2B ops audience on desktop, so density over decoration."*
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Ask when
|
|
36
|
+
|
|
37
|
+
- two reasonable readings lead to materially different interfaces
|
|
38
|
+
- brand constraints may exist and getting them wrong wastes the work
|
|
39
|
+
- the primary action is genuinely ambiguous
|
|
40
|
+
|
|
41
|
+
Keep it to a small number of targeted questions. Batch them into one message. Never run a questionnaire to look thorough.
|
|
42
|
+
|
|
43
|
+
Good question shape — concrete, answerable, consequential:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Two things before I build:
|
|
47
|
+
|
|
48
|
+
1. Primary action on this screen — start a trial, or book a demo?
|
|
49
|
+
2. Existing brand colors and fonts, or do I choose?
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Bad question shape: "What vibe are you going for?" · "Do you want it to be modern?" · asking for anything the repo already contains.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Sector conventions worth respecting
|
|
57
|
+
|
|
58
|
+
| Sector | Users expect |
|
|
59
|
+
|---|---|
|
|
60
|
+
| Enterprise / internal tools | Density, keyboard paths, predictable layout, table-first, no marketing gloss |
|
|
61
|
+
| Developer tools | Monospace where it means something, code samples, dark mode parity, terse copy |
|
|
62
|
+
| Fintech / banking | Numeric clarity, tabular figures, conservative color, unmistakable state, audit trails |
|
|
63
|
+
| Healthcare | Legibility, error prevention, plain language, high contrast, no ambiguity |
|
|
64
|
+
| Education | Progressive disclosure, clear progress, forgiving interaction |
|
|
65
|
+
| Commerce | Product imagery leads, price and availability unmistakable, fast path to cart |
|
|
66
|
+
| Consumer social | Speed, gesture, avatar and media density, thumb reach |
|
|
67
|
+
|
|
68
|
+
Break a convention only deliberately, and say why.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# Responsive
|
|
2
|
+
|
|
3
|
+
Shrinking a desktop layout is not responsive design. Each breakpoint is a deliberate composition of the same content.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Per-section worksheet
|
|
8
|
+
|
|
9
|
+
Run this for every major section before building it. Write the answers down; they are design decisions, not implementation details.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
What stacks? multi-column → single column, and in what source order
|
|
13
|
+
What reorders? the visually-secondary column is often first on mobile
|
|
14
|
+
What collapses? nav → drawer, filters → sheet, table → cards, sidebar → tabs
|
|
15
|
+
What scrolls sideways? tables, chip rows, carousels — with a visible affordance
|
|
16
|
+
What disappears? genuinely secondary content only; never a core action
|
|
17
|
+
What changes interaction? hover reveals need a tap or persistent equivalent
|
|
18
|
+
What grows? touch targets to ~44px, spacing between adjacent targets
|
|
19
|
+
What shrinks? display type scales down faster than body type
|
|
20
|
+
What re-crops? images whose subject would be cut out of the frame
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
A section that answers "nothing changes" at every breakpoint is either very simple or unexamined.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Breakpoint strategy
|
|
28
|
+
|
|
29
|
+
Design the **content's** breakpoints. Break where the layout stops working — where the measure gets too long, where columns get too narrow, where a table stops fitting. Not at device widths, which change every year.
|
|
30
|
+
|
|
31
|
+
- follow the project's existing breakpoints. Consistency beats a better set
|
|
32
|
+
- three to four named by intent, not by device, when starting fresh
|
|
33
|
+
- **container queries over viewport queries** for components. A card in a sidebar and the same card in a main column need different layouts at the same viewport width. Query the container it sits in
|
|
34
|
+
- fewer breakpoints held rigorously beats many applied loosely
|
|
35
|
+
- mobile-first source order in most stacks: base styles are the small layout, each query adds
|
|
36
|
+
|
|
37
|
+
## Fluid vs stepped
|
|
38
|
+
|
|
39
|
+
| Property | Approach |
|
|
40
|
+
|---|---|
|
|
41
|
+
| Type scale | Fluid between a min and max, clamped at both ends. Never unbounded |
|
|
42
|
+
| Spacing / section rhythm | Fluid or stepped, but tied to the scale; never arbitrary per breakpoint |
|
|
43
|
+
| Layout structure | Stepped. Columns change at a decision point, not continuously |
|
|
44
|
+
| Container width | Fluid with a max, plus a side gutter that never collapses to zero |
|
|
45
|
+
|
|
46
|
+
Fluid type without a maximum produces absurd headlines on wide monitors. Fluid type without a minimum makes body text unreadable on small screens. Clamp both.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Layout patterns
|
|
51
|
+
|
|
52
|
+
| Pattern | What it does | Use when |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| **Stack** | Columns become rows in source order | Equal-weight content |
|
|
55
|
+
| **Reflow** | Grid changes column count at each step | Card and tile collections |
|
|
56
|
+
| **Reorder** | Source order differs from visual order at one size | A sidebar that must lead on mobile |
|
|
57
|
+
| **Priority+** | Show what fits, move the rest into a "more" affordance | Toolbars, tab bars, nav |
|
|
58
|
+
| **Off-canvas** | Secondary region slides in on demand | Navigation, filters, detail panels |
|
|
59
|
+
| **Reveal** | Content hidden behind disclosure on small, visible on large | Dense metadata |
|
|
60
|
+
| **Summary + detail** | List on small, list-plus-detail on large | Inbox, records, settings |
|
|
61
|
+
| **Swap** | A genuinely different component per size | Table vs card list, menu vs drawer |
|
|
62
|
+
|
|
63
|
+
Reordering visual position away from DOM order breaks the keyboard path. Reorder in the source where possible, and verify tab order afterward either way.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Component-by-component
|
|
68
|
+
|
|
69
|
+
### Navigation
|
|
70
|
+
Horizontal bar → priority+ → drawer or bottom bar. Decide which, do not default to a hamburger. Keep the primary action visible outside the drawer. On mobile, a bottom bar reaches the thumb better than a top bar for frequent actions. Sticky headers cost vertical space and must earn it.
|
|
71
|
+
|
|
72
|
+
### Tables
|
|
73
|
+
Never a squashed table. Pick one:
|
|
74
|
+
- horizontal scroll with the key column frozen and a visible scroll affordance
|
|
75
|
+
- card-per-row on small screens, with the two or three fields that matter
|
|
76
|
+
- summary column plus a detail view or sheet
|
|
77
|
+
- column priority: hide low-value columns below a threshold, with a way to reveal
|
|
78
|
+
|
|
79
|
+
Pair with: sticky header row, right-aligned numeric columns, tabular figures.
|
|
80
|
+
|
|
81
|
+
### Forms
|
|
82
|
+
One column on every size. Labels above fields. Group related fields. Correct input type and autocomplete per field so the right keyboard appears. Keep the submit action reachable when the on-screen keyboard is open. Inline validation that does not shift layout when a message appears.
|
|
83
|
+
|
|
84
|
+
### Modals and overlays
|
|
85
|
+
Dialog on desktop, full-screen or bottom sheet on small screens. Sheets need a drag or close affordance and must not trap scroll behind them.
|
|
86
|
+
|
|
87
|
+
### Cards and grids
|
|
88
|
+
Define the minimum readable card width and let the grid choose the column count from it, rather than hardcoding counts per breakpoint.
|
|
89
|
+
|
|
90
|
+
### Images and media
|
|
91
|
+
Art-direct the crop when the subject would be lost. Serve appropriate sizes. Always reserve the aspect ratio so nothing shifts on load. Video needs a poster and must not autoplay with sound.
|
|
92
|
+
|
|
93
|
+
### Long-form text
|
|
94
|
+
Constrain the measure to roughly 60 to 75 characters at every width. A full-width paragraph on a wide monitor is a responsive failure even though nothing overflows.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Touch, pointer, and input
|
|
99
|
+
|
|
100
|
+
- hover does not exist on touch. Anything revealed only on hover must have a tap equivalent or be persistent
|
|
101
|
+
- query input capability rather than assuming from width: coarse pointer means bigger targets and no hover reliance
|
|
102
|
+
- a device can have both. A laptop with a touchscreen must satisfy both paths
|
|
103
|
+
- drag interactions need a keyboard and a non-drag alternative
|
|
104
|
+
- avoid gestures as the only way to reach anything
|
|
105
|
+
- respect safe areas on notched devices; keep interactive content out of the home-indicator strip
|
|
106
|
+
- account for the on-screen keyboard: inputs must not end up hidden behind it
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Density
|
|
111
|
+
|
|
112
|
+
Responsive is not only about width. The same product may need a comfortable density for occasional users and a compact density for people in it all day. If the product has a density switch, it is a token-level decision made at the same time as spacing, not a late retrofit.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Verification
|
|
117
|
+
|
|
118
|
+
| Width | Check |
|
|
119
|
+
|---|---|
|
|
120
|
+
| 320–360px | No overflow, no clipped text, targets reachable |
|
|
121
|
+
| ~480px | Stack decisions read correctly |
|
|
122
|
+
| ~768px | The awkward middle — most layouts break here |
|
|
123
|
+
| ~1024px | Tablet landscape, sidebar decisions |
|
|
124
|
+
| ~1440px+ | Measure is constrained, content is not stranded |
|
|
125
|
+
|
|
126
|
+
Also verify: 200% browser zoom, 400% zoom for reflow compliance, landscape on a short viewport, a long-string worst case, and the largest realistic dataset.
|
|
127
|
+
|
|
128
|
+
**No horizontal page scroll at any width, ever.** An overflowing element inside its own scroll container is fine; the page body scrolling sideways is a bug.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Common failures
|
|
133
|
+
|
|
134
|
+
| Symptom | Cause |
|
|
135
|
+
|---|---|
|
|
136
|
+
| Sideways page scroll on mobile | A fixed width, a negative margin, or an unconstrained image or table |
|
|
137
|
+
| Text touching the screen edge | Gutter applied to an inner element instead of the container |
|
|
138
|
+
| Tiny tap targets crowded together | Desktop spacing carried down unchanged |
|
|
139
|
+
| Content hidden on mobile that users need | "Simplification" that removed a core action |
|
|
140
|
+
| Mobile nav that hides the primary CTA | Everything swept into the drawer |
|
|
141
|
+
| Layout shift as images load | Aspect ratio not reserved |
|
|
142
|
+
| Unreadable line lengths on wide screens | No max width on text containers |
|
|
143
|
+
| Keyboard covering the field being typed in | No scroll-into-view handling |
|
|
144
|
+
|
|
145
|
+
Mobile should feel designed for mobile, not tolerated.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Review and Definition of Done
|
|
2
|
+
|
|
3
|
+
Building is not finishing. Run this before reporting completion.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Visual and UX review
|
|
8
|
+
|
|
9
|
+
Look at the rendered result, at real widths, with real content.
|
|
10
|
+
|
|
11
|
+
### Hierarchy
|
|
12
|
+
- Is the most important content visible immediately, without scrolling?
|
|
13
|
+
- Is the primary action obvious within seconds?
|
|
14
|
+
- Does the screen have one clear focal point, not four competing ones?
|
|
15
|
+
- Does the visual weight of each element match its actual importance?
|
|
16
|
+
|
|
17
|
+
### Layout
|
|
18
|
+
- Is everything aligned to the grid or to a deliberate exception?
|
|
19
|
+
- Is spacing consistent and from the scale?
|
|
20
|
+
- Is the composition balanced, and does it have a reading axis?
|
|
21
|
+
- Do related items group and unrelated items separate?
|
|
22
|
+
|
|
23
|
+
### Typography
|
|
24
|
+
- Are headings legible and clearly ranked?
|
|
25
|
+
- Is body text comfortable — size, line height, measure?
|
|
26
|
+
- Is the hierarchy readable from a squint, with no text in focus?
|
|
27
|
+
- Do long strings, long words, and translated text survive?
|
|
28
|
+
|
|
29
|
+
### Color and surfaces
|
|
30
|
+
- Are color roles used for their meaning?
|
|
31
|
+
- Does contrast pass on text, icons, and focus rings?
|
|
32
|
+
- Does dark mode hold, if the product has one?
|
|
33
|
+
|
|
34
|
+
### Components
|
|
35
|
+
- Is each component consistent with its siblings?
|
|
36
|
+
- Are all states implemented: hover, focus-visible, active, disabled, loading, empty, error, success?
|
|
37
|
+
- Does the empty state teach, and does the error state say what to do?
|
|
38
|
+
|
|
39
|
+
### Responsive
|
|
40
|
+
- Does mobile look designed, not compressed?
|
|
41
|
+
- Any horizontal overflow at any width?
|
|
42
|
+
- Are touch targets large enough and well separated?
|
|
43
|
+
- Do tables, modals, and navigation have real mobile treatments?
|
|
44
|
+
- Does it hold at 200% zoom?
|
|
45
|
+
|
|
46
|
+
### Interaction
|
|
47
|
+
- Does every action give immediate feedback?
|
|
48
|
+
- Are destructive actions confirmed with consequence stated?
|
|
49
|
+
- Is motion purposeful, and does reduced motion work?
|
|
50
|
+
- Is there a loading treatment for anything that waits?
|
|
51
|
+
|
|
52
|
+
### UX
|
|
53
|
+
- Can a first-time user tell what to do?
|
|
54
|
+
- Is navigation predictable and is there always a way back?
|
|
55
|
+
- Are errors preventable, and recoverable when they happen?
|
|
56
|
+
- Is cognitive load reasonable — is anything asking for more than it needs?
|
|
57
|
+
|
|
58
|
+
### Visual identity
|
|
59
|
+
- Does this feel specific to this product?
|
|
60
|
+
- Does it pass the human-design test in `anti-ai-patterns.md`?
|
|
61
|
+
- Are there at least two decisions no competitor would share?
|
|
62
|
+
- Would a stranger recognize the product from a screenshot?
|
|
63
|
+
|
|
64
|
+
### Engineering
|
|
65
|
+
- Tokens used, no magic values?
|
|
66
|
+
- Existing components reused, no duplicate abstraction added?
|
|
67
|
+
- No unrelated refactoring, existing behavior preserved?
|
|
68
|
+
- Dead code, unused styles, and unused dependencies removed?
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Definition of done
|
|
73
|
+
|
|
74
|
+
Not done because it builds. Not done because it renders. Not done because the components work.
|
|
75
|
+
|
|
76
|
+
Done when **all** hold:
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
[ ] UX is clear — primary action and next step are obvious
|
|
80
|
+
[ ] Visual hierarchy is strong
|
|
81
|
+
[ ] Design direction is applied consistently across every screen touched
|
|
82
|
+
[ ] Components are coherent and states are implemented
|
|
83
|
+
[ ] Responsive behavior is designed at every breakpoint
|
|
84
|
+
[ ] Accessibility is verified, not assumed
|
|
85
|
+
[ ] Interaction states exist: hover, focus, active, disabled, loading, empty, error, success
|
|
86
|
+
[ ] Imagery is intentional, with placeholders and prompts where assets are missing
|
|
87
|
+
[ ] Icons come from one library, used semantically
|
|
88
|
+
[ ] Copy is real and product-specific
|
|
89
|
+
[ ] Tokens are used throughout
|
|
90
|
+
[ ] The interface does not look AI-generated
|
|
91
|
+
[ ] The review above was run and its findings addressed
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Reporting
|
|
97
|
+
|
|
98
|
+
State what was built, what the review found, and what was left undone and why. If something was skipped — a state not implemented, a breakpoint not verified, an asset still a placeholder — say so plainly. Silence on a gap reads as completion.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Workflow
|
|
2
|
+
|
|
3
|
+
The full loop, with the gate that must pass before each step ends.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Inspect → Understand → Direct → Plan → Systemize → Implement → Review → Refine
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Inspect
|
|
12
|
+
|
|
13
|
+
Read the project before recommending anything. Determine:
|
|
14
|
+
|
|
15
|
+
- framework / runtime / language / package manager
|
|
16
|
+
- styling system (CSS, CSS modules, utility framework, CSS-in-JS, preprocessor, native platform styles)
|
|
17
|
+
- existing design tokens or theme file
|
|
18
|
+
- existing component library and existing in-project components
|
|
19
|
+
- icon library
|
|
20
|
+
- animation library
|
|
21
|
+
- form, table, chart, editor libraries
|
|
22
|
+
- routing and layout structure
|
|
23
|
+
- naming, file, and folder conventions
|
|
24
|
+
- accessibility and responsive conventions already in use
|
|
25
|
+
- dependency manifest and relevant config files
|
|
26
|
+
|
|
27
|
+
Cheap ways to find these: the dependency manifest, the theme/token file, one representative screen, one representative component, the global stylesheet.
|
|
28
|
+
|
|
29
|
+
**Gate:** can name the stack, the styling system, and at least three components worth reusing — or has confirmed the project is empty.
|
|
30
|
+
|
|
31
|
+
Never force a recommendation from a framework the project does not use. If the project already has a design system, extend it; do not replace it.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 2. Understand
|
|
36
|
+
|
|
37
|
+
See `product-brief.md`. Establish, by inference or by asking:
|
|
38
|
+
|
|
39
|
+
product · audience · problem solved · primary user goal · primary action · most important information · expected journey · brand personality · sector · primary devices · existing brand assets or guidelines
|
|
40
|
+
|
|
41
|
+
**Gate:** can state the primary user goal and the single most important action on the screen in one sentence each.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 3. Direct
|
|
46
|
+
|
|
47
|
+
See `design-directions.md`. Select a visual direction from product, audience, brand, content, UX needs, sector, and existing identity — never at random and never by trend popularity.
|
|
48
|
+
|
|
49
|
+
Target: **one primary visual language plus at most one supporting technique.**
|
|
50
|
+
|
|
51
|
+
If the requirements do not specify a style and more than one direction would genuinely work, present 2–3 named directions in three lines each and ask which to use. If the correct direction is obvious, state it and move on — do not manufacture a choice.
|
|
52
|
+
|
|
53
|
+
**Gate:** the direction is named, and there is a product-specific reason for it.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 4. Plan
|
|
58
|
+
|
|
59
|
+
Write the design plan before implementation code. Template: `../templates/design-plan.md`. Covers direction, color, typography, layout, components, imagery, interaction states, accessibility.
|
|
60
|
+
|
|
61
|
+
**Gate:** every color role, type level, and spacing step used later exists in the plan.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 5. Systemize
|
|
66
|
+
|
|
67
|
+
See `design-system.md`. Define or extend tokens before building many components. A system defined after ten components is a refactor, not a system.
|
|
68
|
+
|
|
69
|
+
**Gate:** tokens exist for color, type scale, spacing, radius, elevation, motion, breakpoints, icon sizes.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 6. Implement
|
|
74
|
+
|
|
75
|
+
- build the smallest coherent change that fully delivers the request
|
|
76
|
+
- follow the project's existing conventions over personal preference
|
|
77
|
+
- component abstraction only where it earns reuse, maintainability, consistency, or readability
|
|
78
|
+
- handle interaction states as they are built, not afterwards: hover, focus-visible, active, disabled, loading, empty, error, success
|
|
79
|
+
- no unrelated refactoring
|
|
80
|
+
- preserve existing behavior
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 7. Review
|
|
85
|
+
|
|
86
|
+
See `review-and-done.md`. Look at the result, not just the code. Hierarchy, layout, typography, component consistency, responsive behavior, UX clarity, visual identity.
|
|
87
|
+
|
|
88
|
+
**Gate:** the checklist has been run and findings are written down.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 8. Refine
|
|
93
|
+
|
|
94
|
+
Fix what the review found. Remove anything that survived only because it was already there: dead styles, unused effects, leftover dependencies, decoration without purpose.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Scaling the process
|
|
99
|
+
|
|
100
|
+
| Request | Process |
|
|
101
|
+
|---|---|
|
|
102
|
+
| Change a label, fix spacing on one element, swap an icon | Inspect, implement |
|
|
103
|
+
| Add a component to an existing system | Inspect, implement to existing tokens, review |
|
|
104
|
+
| New screen in an existing product | Full loop, plan can be short, direction inherited |
|
|
105
|
+
| New product, redesign, "make it modern" | Full loop, explicit direction and plan |
|
|
106
|
+
|
|
107
|
+
Ceremony on a small task is its own failure mode. So is skipping direction on a large one.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Design Plan Template
|
|
2
|
+
|
|
3
|
+
Write this before implementation code on any non-trivial UI task. Keep it tight — a page, not a document. Delete rows that do not apply to the task.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Product
|
|
8
|
+
|
|
9
|
+
- **Product:** what it is, in one line
|
|
10
|
+
- **Audience:** who uses it and in what context
|
|
11
|
+
- **Primary user goal:**
|
|
12
|
+
- **Primary action:** the one thing this screen must get people to do
|
|
13
|
+
- **Most important information:**
|
|
14
|
+
- **Devices:** where it is actually used
|
|
15
|
+
- **Brand constraints:** existing identity, assets, guidelines — or "none, choosing"
|
|
16
|
+
|
|
17
|
+
## Direction
|
|
18
|
+
|
|
19
|
+
- **Primary visual language:**
|
|
20
|
+
- **Supporting technique (at most one):**
|
|
21
|
+
- **Why this fits:** two concrete product reasons
|
|
22
|
+
- **Deliberately avoiding:** patterns that would weaken this specific design
|
|
23
|
+
- **Originality anchors:** at least two decisions no competitor would share
|
|
24
|
+
|
|
25
|
+
## Color
|
|
26
|
+
|
|
27
|
+
| Role | Value | Notes |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| background | | |
|
|
30
|
+
| surface | | |
|
|
31
|
+
| surface-elevated | | |
|
|
32
|
+
| text | | contrast vs background |
|
|
33
|
+
| text-muted | | contrast vs background |
|
|
34
|
+
| border | | |
|
|
35
|
+
| primary | | |
|
|
36
|
+
| primary-contrast | | |
|
|
37
|
+
| secondary / accent | | |
|
|
38
|
+
| success | | |
|
|
39
|
+
| warning | | |
|
|
40
|
+
| error | | |
|
|
41
|
+
| info | | |
|
|
42
|
+
|
|
43
|
+
Dark mode: yes / no. If yes, roles defined for both modes now.
|
|
44
|
+
|
|
45
|
+
## Typography
|
|
46
|
+
|
|
47
|
+
- **Display family:**
|
|
48
|
+
- **Body family:**
|
|
49
|
+
- **Mono family (if needed):**
|
|
50
|
+
- **Weights in use:**
|
|
51
|
+
- **Scale:** display / h1 / h2 / h3 / body-lg / body / body-sm / caption — with sizes, line heights, tracking
|
|
52
|
+
- **Measure:** target characters per line for body text
|
|
53
|
+
|
|
54
|
+
## Layout
|
|
55
|
+
|
|
56
|
+
- **Container width / max content width:**
|
|
57
|
+
- **Grid:** columns, gutters
|
|
58
|
+
- **Spacing scale:**
|
|
59
|
+
- **Section rhythm:** vertical space between major sections
|
|
60
|
+
- **Desktop composition:**
|
|
61
|
+
- **Tablet composition:**
|
|
62
|
+
- **Mobile composition:** what stacks, reorders, collapses, scrolls, grows
|
|
63
|
+
|
|
64
|
+
### Responsive per section
|
|
65
|
+
|
|
66
|
+
| Section | Stacks | Reorders | Collapses to | Scrolls sideways | Hidden | Target size change |
|
|
67
|
+
|---|---|---|---|---|---|---|
|
|
68
|
+
| | | | | | | |
|
|
69
|
+
|
|
70
|
+
- **Navigation on small screens:** drawer / bottom bar / priority+ — and where the primary action stays visible
|
|
71
|
+
- **Tables on small screens:** scroll with frozen column / cards / summary plus detail
|
|
72
|
+
- **Container queries needed for:** components that appear in more than one container width
|
|
73
|
+
|
|
74
|
+
## Components
|
|
75
|
+
|
|
76
|
+
| Component | Reused / extended / new | Variants | States needed |
|
|
77
|
+
|---|---|---|---|
|
|
78
|
+
| | | | |
|
|
79
|
+
|
|
80
|
+
New dependencies, with justification (see `../references/packages.md`): none / list
|
|
81
|
+
|
|
82
|
+
## Imagery
|
|
83
|
+
|
|
84
|
+
| Slot | Purpose | Aspect ratio | Negative space | Asset status |
|
|
85
|
+
|---|---|---|---|---|
|
|
86
|
+
| | | | | real / placeholder + prompt |
|
|
87
|
+
|
|
88
|
+
## Icons
|
|
89
|
+
|
|
90
|
+
- **Library:** existing project library, or chosen one
|
|
91
|
+
- **Sizes:**
|
|
92
|
+
- **Where icons appear, and what they mean:**
|
|
93
|
+
|
|
94
|
+
## Interaction
|
|
95
|
+
|
|
96
|
+
- **Hover:**
|
|
97
|
+
- **Focus-visible:** (never animated in)
|
|
98
|
+
- **Active / pressed:**
|
|
99
|
+
- **Loading:** inline / skeleton / determinate progress, per expected wait
|
|
100
|
+
- **Empty:**
|
|
101
|
+
- **Error:**
|
|
102
|
+
- **Success:**
|
|
103
|
+
|
|
104
|
+
### Motion
|
|
105
|
+
|
|
106
|
+
| Moment | Job (feedback / continuity / hierarchy / progress / attention) | Duration | Easing | Origin |
|
|
107
|
+
|---|---|---|---|---|
|
|
108
|
+
| | | | | |
|
|
109
|
+
|
|
110
|
+
- **Anything that animates without user action:** (justify or cut)
|
|
111
|
+
- **Reduced-motion alternative for each row above:**
|
|
112
|
+
|
|
113
|
+
## Accessibility
|
|
114
|
+
|
|
115
|
+
- **Contrast verified on:** text, muted text, icons, focus rings
|
|
116
|
+
- **Keyboard path for the primary task:**
|
|
117
|
+
- **Heading structure:**
|
|
118
|
+
- **Labels and announcements:**
|
|
119
|
+
- **Touch targets:**
|
|
120
|
+
- **Reduced motion behavior:**
|
|
121
|
+
|
|
122
|
+
## Copy
|
|
123
|
+
|
|
124
|
+
Real, product-specific strings for headings, primary actions, empty states, and errors. Mark anything invented as invented.
|