@hegemonart/get-design-done 1.0.7

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.
Files changed (144) hide show
  1. package/.claude-plugin/marketplace.json +63 -0
  2. package/.claude-plugin/plugin.json +54 -0
  3. package/CHANGELOG.md +221 -0
  4. package/LICENSE +21 -0
  5. package/README.md +724 -0
  6. package/SKILL.md +232 -0
  7. package/agents/README.md +226 -0
  8. package/agents/a11y-mapper.md +118 -0
  9. package/agents/component-taxonomy-mapper.md +88 -0
  10. package/agents/design-advisor.md +139 -0
  11. package/agents/design-assumptions-analyzer.md +171 -0
  12. package/agents/design-auditor.md +383 -0
  13. package/agents/design-context-builder.md +544 -0
  14. package/agents/design-context-checker-gate.md +90 -0
  15. package/agents/design-context-checker.md +260 -0
  16. package/agents/design-discussant.md +98 -0
  17. package/agents/design-doc-writer.md +229 -0
  18. package/agents/design-executor.md +452 -0
  19. package/agents/design-figma-writer.md +302 -0
  20. package/agents/design-fixer.md +180 -0
  21. package/agents/design-integration-checker-gate.md +93 -0
  22. package/agents/design-integration-checker.md +326 -0
  23. package/agents/design-pattern-mapper.md +206 -0
  24. package/agents/design-phase-researcher.md +229 -0
  25. package/agents/design-plan-checker.md +164 -0
  26. package/agents/design-planner.md +352 -0
  27. package/agents/design-reflector.md +175 -0
  28. package/agents/design-research-synthesizer.md +127 -0
  29. package/agents/design-verifier-gate.md +97 -0
  30. package/agents/design-verifier.md +605 -0
  31. package/agents/gdd-graphify-sync.md +100 -0
  32. package/agents/gdd-intel-updater.md +88 -0
  33. package/agents/gdd-learnings-extractor.md +85 -0
  34. package/agents/motion-mapper.md +103 -0
  35. package/agents/token-mapper.md +103 -0
  36. package/agents/visual-hierarchy-mapper.md +95 -0
  37. package/connections/chromatic.md +247 -0
  38. package/connections/claude-design.md +190 -0
  39. package/connections/connections.md +218 -0
  40. package/connections/figma-writer.md +139 -0
  41. package/connections/figma.md +146 -0
  42. package/connections/graphify.md +197 -0
  43. package/connections/pinterest.md +153 -0
  44. package/connections/preview.md +173 -0
  45. package/connections/refero.md +189 -0
  46. package/connections/storybook.md +280 -0
  47. package/hooks/budget-enforcer.js +318 -0
  48. package/hooks/context-exhaustion.js +127 -0
  49. package/hooks/gdd-read-injection-scanner.js +44 -0
  50. package/hooks/hooks.json +44 -0
  51. package/package.json +60 -0
  52. package/reference/BRANCH-PROTECTION.md +65 -0
  53. package/reference/DEPRECATIONS.md +41 -0
  54. package/reference/STATE-TEMPLATE.md +200 -0
  55. package/reference/accessibility.md +190 -0
  56. package/reference/anti-patterns.md +336 -0
  57. package/reference/audit-scoring.md +205 -0
  58. package/reference/checklists.md +137 -0
  59. package/reference/config-schema.md +319 -0
  60. package/reference/debugger-philosophy.md +32 -0
  61. package/reference/heuristics.md +201 -0
  62. package/reference/intel-schema.md +266 -0
  63. package/reference/model-prices.md +37 -0
  64. package/reference/model-tiers.md +118 -0
  65. package/reference/motion.md +285 -0
  66. package/reference/parallelism-rules.md +108 -0
  67. package/reference/priority-matrix.md +31 -0
  68. package/reference/project-skills-guide.md +42 -0
  69. package/reference/review-format.md +107 -0
  70. package/reference/schemas/config.schema.json +41 -0
  71. package/reference/schemas/hooks.schema.json +55 -0
  72. package/reference/schemas/intel.schema.json +191 -0
  73. package/reference/schemas/marketplace.schema.json +72 -0
  74. package/reference/schemas/plugin.schema.json +59 -0
  75. package/reference/shared-preamble.md +82 -0
  76. package/reference/typography.md +229 -0
  77. package/scripts/aggregate-agent-metrics.js +144 -0
  78. package/scripts/apply-branch-protection.sh +75 -0
  79. package/scripts/bootstrap-manifest.txt +3 -0
  80. package/scripts/bootstrap.sh +80 -0
  81. package/scripts/build-intel.cjs +458 -0
  82. package/scripts/detect-stale-refs.cjs +101 -0
  83. package/scripts/extract-changelog-section.cjs +57 -0
  84. package/scripts/release-smoke-test.cjs +169 -0
  85. package/scripts/rollback-release.sh +42 -0
  86. package/scripts/run-injection-scanner-ci.cjs +92 -0
  87. package/scripts/validate-frontmatter.cjs +68 -0
  88. package/scripts/validate-schemas.cjs +225 -0
  89. package/scripts/verify-version-sync.cjs +30 -0
  90. package/skills/add-backlog/SKILL.md +47 -0
  91. package/skills/analyze-dependencies/SKILL.md +184 -0
  92. package/skills/apply-reflections/SKILL.md +112 -0
  93. package/skills/audit/SKILL.md +54 -0
  94. package/skills/brief/SKILL.md +75 -0
  95. package/skills/cache-manager/SKILL.md +120 -0
  96. package/skills/compare/SKILL.md +322 -0
  97. package/skills/complete-cycle/SKILL.md +33 -0
  98. package/skills/darkmode/SKILL.md +331 -0
  99. package/skills/debug/SKILL.md +38 -0
  100. package/skills/design/SKILL.md +281 -0
  101. package/skills/discover/SKILL.md +172 -0
  102. package/skills/discuss/SKILL.md +67 -0
  103. package/skills/do/SKILL.md +45 -0
  104. package/skills/explore/SKILL.md +109 -0
  105. package/skills/extract-learnings/SKILL.md +98 -0
  106. package/skills/fast/SKILL.md +44 -0
  107. package/skills/figma-write/SKILL.md +40 -0
  108. package/skills/graphify/SKILL.md +48 -0
  109. package/skills/health/SKILL.md +48 -0
  110. package/skills/help/SKILL.md +76 -0
  111. package/skills/list-assumptions/SKILL.md +60 -0
  112. package/skills/map/SKILL.md +112 -0
  113. package/skills/new-cycle/SKILL.md +35 -0
  114. package/skills/new-project/SKILL.md +53 -0
  115. package/skills/next/SKILL.md +42 -0
  116. package/skills/note/SKILL.md +47 -0
  117. package/skills/optimize/SKILL.md +120 -0
  118. package/skills/pause/SKILL.md +41 -0
  119. package/skills/plan/SKILL.md +251 -0
  120. package/skills/plant-seed/SKILL.md +47 -0
  121. package/skills/pr-branch/SKILL.md +31 -0
  122. package/skills/progress/SKILL.md +60 -0
  123. package/skills/quick/SKILL.md +43 -0
  124. package/skills/reapply-patches/SKILL.md +31 -0
  125. package/skills/reflect/SKILL.md +73 -0
  126. package/skills/resume/SKILL.md +37 -0
  127. package/skills/review-backlog/SKILL.md +45 -0
  128. package/skills/router/SKILL.md +67 -0
  129. package/skills/scan/SKILL.md +721 -0
  130. package/skills/settings/SKILL.md +78 -0
  131. package/skills/ship/SKILL.md +31 -0
  132. package/skills/sketch/SKILL.md +78 -0
  133. package/skills/sketch-wrap-up/SKILL.md +88 -0
  134. package/skills/skill-manifest/SKILL.md +79 -0
  135. package/skills/spike/SKILL.md +67 -0
  136. package/skills/spike-wrap-up/SKILL.md +81 -0
  137. package/skills/stats/SKILL.md +50 -0
  138. package/skills/style/SKILL.md +193 -0
  139. package/skills/synthesize/SKILL.md +93 -0
  140. package/skills/todo/SKILL.md +54 -0
  141. package/skills/undo/SKILL.md +30 -0
  142. package/skills/update/SKILL.md +36 -0
  143. package/skills/verify/SKILL.md +452 -0
  144. package/skills/warm-cache/SKILL.md +113 -0
@@ -0,0 +1,336 @@
1
+ # Anti-Pattern Catalog
2
+
3
+ Use during Discover (baseline audit), Design (prevention), and Verify (compliance scoring).
4
+
5
+ ---
6
+
7
+ ## The AI-Slop Test
8
+
9
+ Before shipping any artifact: **"If I told someone 'AI made this,' would they believe me immediately?"**
10
+
11
+ If yes — redo. The training-set monoculture has specific fingerprints. Learn them all.
12
+
13
+ ---
14
+
15
+ ## Hard Bans (BAN-XX)
16
+
17
+ Zero tolerance. Each violation = −3 points from Anti-Pattern score. Rewrite rather than soften.
18
+
19
+ ### BAN-01: Side-Stripe Borders
20
+
21
+ ```css
22
+ /* BANNED — AI-generated card tell, regardless of color */
23
+ border-left: 4px solid var(--color-primary);
24
+ border-right: 3px solid #6366f1;
25
+ ```
26
+
27
+ **Why**: The border-left accent card is the most recognizable AI default. It signals no design thinking happened.
28
+
29
+ **Fix**: Use different element structure — colored icon, colored background section, or inline accent element.
30
+
31
+ **Grep**: `border-left:\s*[2-9][0-9]*px|border-right:\s*[2-9][0-9]*px`
32
+
33
+ ### BAN-02: Gradient Text
34
+
35
+ ```css
36
+ /* BANNED */
37
+ background: linear-gradient(to right, #6366f1, #8b5cf6);
38
+ -webkit-background-clip: text;
39
+ -webkit-text-fill-color: transparent;
40
+ background-clip: text;
41
+ ```
42
+
43
+ **Why**: Every AI-generated hero uses this. It's a visual cliché and fails against light backgrounds.
44
+
45
+ **Fix**: Solid color, emphasis via weight or size increase.
46
+
47
+ **Grep**: `background-clip:\s*text|text-fill-color:\s*transparent`
48
+
49
+ ### BAN-03: Bounce/Elastic Easing
50
+
51
+ ```css
52
+ /* BANNED */
53
+ transition: all 300ms cubic-bezier(0.68, -0.55, 0.265, 1.55);
54
+ animation: bounce 1s ease;
55
+ animation-timing-function: spring(1, 80, 10, 0);
56
+ ```
57
+
58
+ **Why**: Skeuomorphic residue from 2012. Feels toy-like and unprofessional.
59
+
60
+ **Fix**: `ease-out` for enter, `ease-in` for exit, `ease-in-out` for transitions.
61
+
62
+ **Grep**: `cubic-bezier\(.*-[0-9]|bounce|elastic|spring\(`
63
+
64
+ ### BAN-04: Animating Keyboard Actions
65
+
66
+ No animation on: command palette open/close, keyboard shortcuts, tab switching, filter/sort toggles, navigation item expand/collapse.
67
+
68
+ **Why**: These repeat 100+ times per day. Every millisecond of animation accumulates into felt sluggishness.
69
+
70
+ **Fix**: Instant state change. Zero transition duration.
71
+
72
+ ### BAN-05: Pure Black Dark Mode
73
+
74
+ ```css
75
+ /* BANNED */
76
+ background: #000000;
77
+ background: rgb(0, 0, 0);
78
+ ```
79
+
80
+ **Why**: Pure black in dark mode creates harsh contrast and looks amateur.
81
+
82
+ **Fix**: oklch(12% 0 0) through oklch(18% 0.005 [hue]) — slightly warm or cool near-black.
83
+
84
+ **Grep**: `background.*#000000|background.*rgb\(0,\s*0,\s*0\)`
85
+
86
+ ### BAN-06: Disabling Zoom
87
+
88
+ ```html
89
+ <!-- BANNED -->
90
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
91
+ <meta name="viewport" content="width=device-width, maximum-scale=1">
92
+ ```
93
+
94
+ **Why**: WCAG 1.4.4 violation. Breaks accessibility for low-vision users.
95
+
96
+ **Grep**: `user-scalable=no|maximum-scale=1`
97
+
98
+ ### BAN-07: Naked `outline: none`
99
+
100
+ ```css
101
+ /* BANNED — unless a custom focus indicator replaces it */
102
+ :focus { outline: none; }
103
+ button:focus { outline: 0; }
104
+ ```
105
+
106
+ **Why**: Removes keyboard navigation visibility. WCAG 2.4.7 failure.
107
+
108
+ **Fix**: `:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: 2px; }` with `outline: none` only on `:focus:not(:focus-visible)`.
109
+
110
+ **Grep**: `:focus\s*\{[^}]*outline:\s*(none|0)`
111
+
112
+ ### BAN-08: `transition: all`
113
+
114
+ ```css
115
+ /* BANNED */
116
+ transition: all 300ms ease;
117
+ ```
118
+
119
+ **Why**: Animates every property including layout properties (width, height, top) causing expensive paint/layout operations.
120
+
121
+ **Fix**: Specify exact properties: `transition: transform 200ms ease-out, opacity 150ms ease-out;`
122
+
123
+ **Grep**: `transition:\s*all\s`
124
+
125
+ ### BAN-09: `scale(0)` Animation Entry
126
+
127
+ ```css
128
+ /* BANNED — nothing in the real world materializes from nothing */
129
+ @keyframes enter { from { transform: scale(0); } }
130
+ ```
131
+
132
+ **Fix**: `scale(0.95)` + `opacity: 0` → `scale(1)` + `opacity: 1`.
133
+
134
+ ---
135
+
136
+ ## AI-Slop Tells (SLOP-XX)
137
+
138
+ Each confirmed tell = −1 point from Anti-Pattern score. These signal training-set monoculture without deliberate design choices.
139
+
140
+ ### SLOP-01: AI Default Palette
141
+
142
+ ```
143
+ #6366f1 (indigo-500) + #8b5cf6 (violet-500) + #06b6d4 (cyan-500)
144
+ ```
145
+
146
+ The exact palette generated by GPT-4 and Claude for 80% of UI requests.
147
+
148
+ **Grep**: `#6366f1|#8b5cf6|#06b6d4`
149
+
150
+ ### SLOP-02: Purple → Blue Gradient Hero
151
+
152
+ ```css
153
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
154
+ background: linear-gradient(to right, #6366f1, #8b5cf6);
155
+ ```
156
+
157
+ ### SLOP-03: Cyan Accent on Dark Background
158
+
159
+ `color: #06b6d4` or `color: #22d3ee` as the primary accent in dark mode.
160
+
161
+ ### SLOP-04: `backdrop-filter: blur` Without Purpose
162
+
163
+ ```css
164
+ /* SLOP if used purely decoratively */
165
+ backdrop-filter: blur(20px);
166
+ -webkit-backdrop-filter: blur(10px);
167
+ ```
168
+
169
+ Glassmorphism as the default card treatment signals no layout thinking.
170
+
171
+ **Valid uses**: Modal overlays dimming content behind them, floating command palette, persistent header over content.
172
+
173
+ **Grep**: `backdrop-filter:\s*blur`
174
+
175
+ ### SLOP-05: Default Font Without Decision
176
+
177
+ Using Inter, DM Sans, Space Grotesk, or Plus Jakarta Sans without a documented brand reason.
178
+
179
+ **Test**: Can you give 3 concrete reasons this font matches the product's brand? If not — choose again.
180
+
181
+ ### SLOP-06: Card-in-Card
182
+
183
+ A component with `border-radius` + `background` + `box-shadow` nested inside another such component.
184
+
185
+ ### SLOP-07: "Icon in Rounded Square Above Every Heading"
186
+
187
+ The feature section pattern where every item has: `rounded-xl bg-primary/10 p-3 mb-4` containing an icon, followed by a heading and 2 sentences.
188
+
189
+ ### SLOP-08: Rainbow Status Badges
190
+
191
+ Assigning a different color to every status: blue (pending), yellow (in review), purple (waiting), orange (blocked), teal (processing). Status color must be semantic: green (success/active), yellow (warning/pending), red (error/blocked), gray (inactive/draft). Only those four roles.
192
+
193
+ ### SLOP-09: Decorative Sparklines
194
+
195
+ Charts placed in dashboards with no real data, purely decorative "trend lines" that don't encode information.
196
+
197
+ ### SLOP-10: Generic Drop Shadow
198
+
199
+ ```css
200
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
201
+ ```
202
+
203
+ The Tailwind `shadow-md` default. Used without considering elevation system.
204
+
205
+ ### SLOP-11: "Simple, Powerful, Flexible" Copy
206
+
207
+ Hero headline triplets with no subject or verb. Feature list as the hero. "We're passionate about..." opener.
208
+
209
+ ### SLOP-12: 3D Isometric Illustration
210
+
211
+ Pastel-colored isometric illustrations with floating icons. Figma community template vibe. Use photography, real screenshots, or purposefully-styled illustration with brand character.
212
+
213
+ ---
214
+
215
+ ## Visual Anti-Patterns
216
+
217
+ ### Color Errors
218
+
219
+ - Gray on colored backgrounds (fails contrast, not "subtle")
220
+ - Pure gray neutrals — add 0.005–0.015 chroma toward brand hue
221
+ - Red + green as the only meaning carrier (colorblind failure)
222
+ - Text over image without scrim or overlay
223
+ - Alpha-heavy transparency everywhere (incomplete palette signal)
224
+ - > 1 semantic role for the same color (red = danger ONLY)
225
+
226
+ ### Typography Errors
227
+
228
+ - Body text < 16px on web (< 12px anywhere)
229
+ - > 6 font-size/weight combinations on a single page
230
+ - `all-caps` body text (labels/badges only)
231
+ - Fluid `clamp()` on app/dashboard UI (marketing headings only)
232
+ - Line height 1.0–1.2 on body text (needs 1.5–1.75)
233
+ - `letter-spacing` changes with no typographic reason
234
+ - `font-weight: 300` on text < 16px (illegible)
235
+
236
+ ### Layout Errors
237
+
238
+ - Full-width buttons for every CTA (primary only)
239
+ - Placeholder-only labels (no visible `<label>` above input)
240
+ - Multi-column forms on mobile
241
+ - Hamburger as PRIMARY nav on desktop (> 1024px)
242
+ - Bottom nav with > 5 items
243
+ - Container width fixed at 1200px (breaks at 1300+)
244
+ - Spacing values not from 4/8/12/16/24/32/48/64 series (e.g. `padding: 13px`)
245
+
246
+ ### Shadow/Elevation Errors
247
+
248
+ - 3+ shadow depths when 2 tiers is enough
249
+ - Shadow AND border AND background color on the same element
250
+ - Inner shadow + outer shadow simultaneously
251
+ - Drop shadows on flat/minimal design systems
252
+
253
+ ---
254
+
255
+ ## Motion Anti-Patterns
256
+
257
+ - `ease-in` on entrances (use `ease-out`)
258
+ - Same duration for enter and exit (exit should be 60–70% of enter)
259
+ - Animating `width`/`height` (triggers layout — use `transform` only)
260
+ - No `prefers-reduced-motion` media query
261
+ - Popover origin `transform-origin: center` (should come from trigger element)
262
+ - Button with no `:active` press feedback
263
+ - Toast re-playing entrance on every state update
264
+ - Decorative pulses > 1s that loop forever
265
+
266
+ ---
267
+
268
+ ## UX/Interaction Anti-Patterns
269
+
270
+ ### Forms
271
+ - Validation firing on every keystroke (exception: password strength)
272
+ - Errors shown only at top of form for field-level problems
273
+ - Native `<select>` for > 10 options without typeahead search
274
+ - No progressive disclosure on long forms (show all fields upfront)
275
+
276
+ ### Feedback
277
+ - Instant (0ms) state transitions — feels broken
278
+ - "Loading..." spinners with no context ("Loading contacts..." is better)
279
+ - Success toast that blocks the next interaction
280
+ - Destructive action with no undo and no confirmation
281
+ - Confirmation dialog for reversible action (annoyance — use undo instead)
282
+
283
+ ### Navigation
284
+ - Browser back button breaks app state
285
+ - Custom back button overriding native swipe gesture (mobile)
286
+ - FAB (floating action button) on iOS native (Material Design pattern, not HIG)
287
+
288
+ ---
289
+
290
+ ## Copy Anti-Patterns
291
+
292
+ - Placeholder text as the only label (disappears on focus; accessibility failure)
293
+ - "Click here" / "Read more" / "Learn more" links (use verb-first + specific: "Download the guide")
294
+ - "OK" / "Submit" / "Yes" buttons (use action verbs: "Save changes", "Create account", "Delete message")
295
+ - Error messages that blame the user: "You entered an invalid email" → "Email address not recognized"
296
+ - "Oops!" / "Uh oh!" in error states
297
+ - Empty state that only says "No items found" (missed onboarding opportunity)
298
+
299
+ ---
300
+
301
+ ## Auto-Detection Grep Commands
302
+
303
+ Run these against the codebase for quick anti-pattern audit:
304
+
305
+ ```bash
306
+ # BAN violations (−3 each)
307
+ grep -rn "border-left:\s*[2-9]" src/ --include="*.css" --include="*.scss"
308
+ grep -rn "background-clip:\s*text" src/
309
+ grep -rn "text-fill-color:\s*transparent" src/
310
+ grep -rn "cubic-bezier(.*-[0-9]" src/
311
+ grep -rn "user-scalable=no\|maximum-scale=1" public/
312
+ grep -rn ":focus\s*{" src/ | grep -v "focus-visible"
313
+ grep -rn "transition:\s*all\s" src/
314
+
315
+ # SLOP signals (−1 each)
316
+ grep -rn "#6366f1\|#8b5cf6\|#06b6d4" src/
317
+ grep -rn "backdrop-filter:\s*blur" src/
318
+ grep -rn "bounce\|elastic" src/ --include="*.css"
319
+ ```
320
+
321
+ ---
322
+
323
+ ## Pre-Ship Self-Check
324
+
325
+ - [ ] Default font (Inter, DM Sans, Space Grotesk) used without a brand reason?
326
+ - [ ] Accent uses purple → blue gradient, cyan-on-dark, or AI default palette?
327
+ - [ ] Any card-in-card nesting?
328
+ - [ ] Every shadow a rounded-rectangle drop shadow?
329
+ - [ ] Hero headline: "Simple, powerful, [noun]"?
330
+ - [ ] Decorative sparklines with no real data?
331
+ - [ ] Empty state just says "No items found"?
332
+ - [ ] Border-left accent on cards/alerts?
333
+ - [ ] Gradient text on any heading?
334
+ - [ ] Bounce or elastic easing anywhere?
335
+
336
+ If YES to any → rewrite that element before proceeding.
@@ -0,0 +1,205 @@
1
+ # Design Audit Scoring Framework
2
+
3
+ Use during Discover (establishing baseline) and Verify (measuring improvement).
4
+
5
+ ---
6
+
7
+ ## Severity Classification
8
+
9
+ | Level | Code | Impact | Action |
10
+ |---|---|---|---|
11
+ | Blocker | **P0** | Breaks functionality or violates a hard requirement | Fix before shipping — no exceptions |
12
+ | Major | **P1** | Significantly degrades UX or fails accessibility standard | Fix in this design pass |
13
+ | Minor | **P2** | Noticeable issue but doesn't break flows | Fix if time allows |
14
+ | Cosmetic | **P3** | Polish item only, subjective quality issue | Deferred to polish pass |
15
+
16
+ ---
17
+
18
+ ## Audit Categories and Scoring Rubric
19
+
20
+ Score each category 0–10. Overall score = weighted average.
21
+
22
+ ### 1. Accessibility (Weight: 25%)
23
+
24
+ | Score | Criteria |
25
+ |---|---|
26
+ | 10 | All WCAG 2.1 AA criteria pass. Keyboard nav works end-to-end. Focus rings visible. No color-only meaning. |
27
+ | 8–9 | Minor issues — 1–2 non-critical violations, no contrast failures on primary text |
28
+ | 5–7 | Several violations — contrast issues on secondary text, some missing labels |
29
+ | 3–4 | Multiple failures — some interactive elements inaccessible, missing alt text |
30
+ | 0–2 | Critical failures — primary text fails contrast, keyboard nav broken, missing form labels |
31
+
32
+ Auto-checkable:
33
+ - Body text contrast ≥ 4.5:1
34
+ - Large text contrast ≥ 3:1
35
+ - Touch targets ≥ 44×44px
36
+ - Focus rings present (`:focus-visible` defined)
37
+ - Form labels associated
38
+ - Images have alt text
39
+ - No `<div onClick>` for interactive elements
40
+
41
+ ### 2. Visual Hierarchy (Weight: 20%)
42
+
43
+ | Score | Criteria |
44
+ |---|---|
45
+ | 10 | Clear primary action per view. Reading order is instantly obvious. Headlines scannable without reading body. |
46
+ | 8–9 | Mostly clear hierarchy, 1–2 competing priorities |
47
+ | 5–7 | Multiple elements compete for primary attention, visual noise |
48
+ | 3–4 | Hard to identify primary action, everything is same weight |
49
+ | 0–2 | No discernible hierarchy, flat design with equal visual weight throughout |
50
+
51
+ Check for:
52
+ - One primary CTA per section/screen
53
+ - Heading vs body text visually distinguishable by weight/family (not just size)
54
+ - Spacing used to group related elements (8–16px within groups, 32–64px between groups)
55
+
56
+ ### Auto-checkable grep patterns (Phase 3 addition)
57
+
58
+ Use these patterns during audit to flag hierarchy violations automatically:
59
+
60
+ **Multiple same-weight headings (hierarchy violation):**
61
+ ```bash
62
+ grep -rEn "font-weight:\s*400.*(h1|h2|h3)" src/ --include="*.css" --include="*.scss" 2>/dev/null | head -10
63
+ ```
64
+
65
+ **CTA count (flag >1 primary per section):**
66
+ ```bash
67
+ grep -rEn 'variant="primary"|btn-primary|bg-primary' src/ --include="*.tsx" --include="*.jsx" 2>/dev/null | wc -l
68
+ ```
69
+
70
+ **Spacing groups (within-group 8–16px vs between-group 32–64px):**
71
+ ```bash
72
+ grep -rEn "(padding|margin|gap):\s*(8|12|16)px" src/ --include="*.css" 2>/dev/null | head -5
73
+ grep -rEn "(margin-top|margin-bottom|gap):\s*(32|40|48|64)px" src/ --include="*.css" 2>/dev/null | head -5
74
+ ```
75
+
76
+ These patterns supplement the qualitative rubric above — they cannot replace
77
+ visual inspection but reduce false positives during automated audit passes.
78
+
79
+ ### 3. Typography (Weight: 15%)
80
+
81
+ | Score | Criteria |
82
+ |---|---|
83
+ | 10 | Systematic type scale, harmonious pairing, correct line-height/length, consistent weights |
84
+ | 8–9 | Scale mostly consistent, minor deviations |
85
+ | 5–7 | Ad-hoc sizes, inconsistent weights, or poor pairing |
86
+ | 3–4 | No system evident, mixing too many families, poor readability |
87
+ | 0–2 | Body text below 16px, light weights on small text, unreadable |
88
+
89
+ Check for:
90
+ - Font sizes from a defined scale (not arbitrary px values)
91
+ - Line height 1.5–1.75 on body
92
+ - Max 2 font families (code font is a 3rd exception)
93
+ - No default-Inter-without-decision
94
+ - Weight hierarchy: bold headings, regular body, medium labels
95
+
96
+ ### 4. Color System (Weight: 15%)
97
+
98
+ | Score | Criteria |
99
+ |---|---|
100
+ | 10 | Cohesive palette with clear roles (primary, secondary, semantic tokens), dark mode quality, no accidental palette |
101
+ | 8–9 | Mostly consistent, minor token inconsistencies |
102
+ | 5–7 | Ad-hoc color usage, some semantic inconsistency |
103
+ | 3–4 | Multiple shades of same hue used without logic, no clear semantic roles |
104
+ | 0–2 | AI default palette, pure black dark mode, decorative gradient overuse |
105
+
106
+ Check for:
107
+ - Color semantic consistency (red = danger, ONLY danger)
108
+ - No AI-slop palette (#6366f1 + #8b5cf6 + #06b6d4)
109
+ - Dark mode: desaturated variant colors, not pure black
110
+ - Single primary accent used consistently
111
+
112
+ ### 5. Layout & Spacing (Weight: 10%)
113
+
114
+ | Score | Criteria |
115
+ |---|---|
116
+ | 10 | Consistent 8pt grid, intentional white space, clear content zones, responsive breakpoints |
117
+ | 8–9 | Mostly grid-aligned, minor inconsistencies |
118
+ | 5–7 | Mixed spacing values, some alignment issues |
119
+ | 3–4 | No evident system, arbitrary spacing |
120
+ | 0–2 | Cramped or chaotic layout, broken mobile layout |
121
+
122
+ Check for:
123
+ - Spacing values from 4/8/12/16/24/32/48/64 series
124
+ - Content max-width enforced (prose: 65ch, layout: 1200–1440px)
125
+ - Mobile breakpoint respected (no horizontal scroll)
126
+
127
+ ### 6. Anti-Pattern Compliance (Weight: 10%)
128
+
129
+ Score = 10 − (number of hard-ban violations × 3) − (number of AI-slop tells × 1), minimum 0.
130
+
131
+ Auto-detect (grep):
132
+ - Side-stripe borders > 1px → BAN violation
133
+ - Gradient text → BAN violation
134
+ - `backdrop-filter: blur` without purpose context → slop signal
135
+ - AI palette colors → slop signal
136
+ - Bounce easing → BAN violation
137
+
138
+ ### 7. Interaction & Motion (Weight: 5%)
139
+
140
+ | Score | Criteria |
141
+ |---|---|
142
+ | 10 | `prefers-reduced-motion` implemented, motion purposeful, correct easing, no bounce, exit < enter |
143
+ | 8–9 | Minor motion issues, no accessibility violations |
144
+ | 5–7 | Some unnecessary motion or poor easing |
145
+ | 3–4 | Bounce easing, missing reduced-motion, blocking animations |
146
+ | 0–2 | Animates keyboard actions, no reduced-motion, excessive animation |
147
+
148
+ ---
149
+
150
+ ## Weighted Score Calculation
151
+
152
+ ```
153
+ Score = (Accessibility × 0.25)
154
+ + (Visual Hierarchy × 0.20)
155
+ + (Typography × 0.15)
156
+ + (Color × 0.15)
157
+ + (Layout × 0.10)
158
+ + (Anti-Patterns × 0.10)
159
+ + (Motion × 0.05)
160
+ ```
161
+
162
+ | Grade | Score | Meaning |
163
+ |---|---|---|
164
+ | A | 90–100 | Excellent — production ready |
165
+ | B | 75–89 | Good — minor polish needed |
166
+ | C | 60–74 | Acceptable — notable issues to address |
167
+ | D | 45–59 | Poor — significant redesign needed |
168
+ | F | 0–44 | Failing — fundamental problems |
169
+
170
+ ---
171
+
172
+ ## Audit Output Format
173
+
174
+ ```markdown
175
+ ## Design Audit — [Project Name]
176
+ Date: [ISO 8601]
177
+ Baseline score: [N/100]
178
+
179
+ ### Category Scores
180
+ | Category | Score | Weight | Weighted |
181
+ |---|---|---|---|
182
+ | Accessibility | /10 | 25% | |
183
+ | Visual Hierarchy | /10 | 20% | |
184
+ | Typography | /10 | 15% | |
185
+ | Color | /10 | 15% | |
186
+ | Layout | /10 | 10% | |
187
+ | Anti-Patterns | /10 | 10% | |
188
+ | Motion | /10 | 5% | |
189
+ | **Total** | | | **/100** |
190
+
191
+ ### Findings
192
+ | ID | Severity | Category | Description | Fix |
193
+ |---|---|---|---|---|
194
+ | A-01 | P0 | Accessibility | Body text contrast 3.2:1 (needs 4.5:1) | Change #9CA3AF → #6B7280 |
195
+ | A-02 | P1 | Anti-Pattern | Gradient text on hero heading | Use solid #111827 |
196
+ | A-03 | P2 | Typography | Body line-height 1.3 (needs 1.5+) | Change to 1.6 |
197
+
198
+ ### NNG Heuristic Scores
199
+ | Heuristic | Score /4 | Notes |
200
+ |---|---|---|
201
+ | H-01 Visibility of status | /4 | |
202
+ | H-02 Real world match | /4 | |
203
+ | ... | | |
204
+ | **Total** | /40 | **= NNG Score:** /100 |
205
+ ```
@@ -0,0 +1,137 @@
1
+ # Pre-Delivery Checklists
2
+
3
+ Run these before saying "done." Each checklist below is **gated** — if any item fails, you cannot ship.
4
+
5
+ ## Master pre-ship checklist
6
+
7
+ Use this before any design artifact goes to the user or into a PR.
8
+
9
+ ### Discovery check
10
+ - [ ] Pulled ≥3 real references via refero (or awesome-design-md library if refero unavailable)
11
+ - [ ] Wrote down 3 concrete brand-voice words (not "modern"/"elegant")
12
+ - [ ] Identified 1–2 North Star brand references
13
+ - [ ] Cited references in output so user can redirect
14
+
15
+ ### Context check
16
+ - [ ] `.impeccable.md` exists at project root
17
+ - [ ] `DESIGN.md` exists at project root
18
+ - [ ] Design direction explicitly stated (brutalist / editorial / …)
19
+ - [ ] User approved direction before Phase 3
20
+
21
+ ### AI-slop check (see anti-patterns.md)
22
+ - [ ] Did NOT default to Inter / DM Sans / Space Grotesk / Plus Jakarta Sans
23
+ - [ ] No purple→blue or teal→cyan gradient
24
+ - [ ] No glassmorphism + rounded rect + drop shadow combo
25
+ - [ ] No card-in-card
26
+ - [ ] No `border-left`/`border-right` > 1px on cards/alerts
27
+ - [ ] No gradient text
28
+ - [ ] No sparkline as decoration
29
+ - [ ] No emoji as UI icon
30
+ - [ ] Empty states give context + positive framing + one CTA (not just "No items")
31
+
32
+ ### Accessibility check
33
+ - [ ] Body text ≥ 16px; contrast ≥ 4.5:1
34
+ - [ ] UI components contrast ≥ 3:1
35
+ - [ ] `:focus-visible` style defined (2–3px ring)
36
+ - [ ] Touch targets ≥ 44×44pt iOS / 48×48dp Android
37
+ - [ ] No color-only meaning (pair with icon/text)
38
+ - [ ] `prefers-reduced-motion` respected on all animations
39
+ - [ ] Keyboard can reach and operate every interactive element
40
+ - [ ] Form labels above fields (not placeholder-only)
41
+ - [ ] Semantic heading hierarchy (h1→h6, no skipping)
42
+
43
+ ### Motion check (if any animations)
44
+ - [ ] All animations use transform / opacity (not width/height/top/left)
45
+ - [ ] Custom easing curves (not built-in `ease`)
46
+ - [ ] Exit duration ~75% of enter duration
47
+ - [ ] No animation on keyboard-initiated actions
48
+ - [ ] No `scale(0)` entries (min `scale(0.95)` + opacity)
49
+ - [ ] Popovers use `transform-origin: var(...content-transform-origin)`, not `center`
50
+
51
+ ### Token check
52
+ - [ ] No raw hex in component files (all colors via `var(--...)`)
53
+ - [ ] No `padding: 13px` (off 4pt grid)
54
+ - [ ] All interactive components have: default / hover / focus-visible / active / disabled / loading / error / success
55
+ - [ ] Dark mode defined (not inverted light; tinted oklch 14-18% base)
56
+ - [ ] Typography uses the committed scale (no one-off sizes)
57
+
58
+ ### Copy check (if any text)
59
+ - [ ] Button labels are verb-first and outcome-specific (not "OK" / "Submit" / "Click here")
60
+ - [ ] Error messages: what happened + how to fix (not just what's wrong)
61
+ - [ ] Empty state acknowledges state + explains value + one CTA
62
+ - [ ] No "Oops!" / forced cheer in errors
63
+ - [ ] No 3-adjective pile-up ("beautiful, seamless, intuitive")
64
+ - [ ] Placeholders show format, not restated label
65
+
66
+ ### Technical check (code artifacts)
67
+ - [ ] Browser: running in preview; no console errors
68
+ - [ ] Dev server responds with HTTP 200 on expected routes
69
+ - [ ] Mobile viewport tested (or `impeccable-adapt` run)
70
+ - [ ] Tap delay removed (`touch-action: manipulation`)
71
+ - [ ] Images use WebP/AVIF + `srcset` + lazy-loading where appropriate
72
+
73
+ ### Handoff check (if cross-team)
74
+ - [ ] Ran `Skill(design:design-handoff)` to produce spec sheet
75
+ - [ ] Spec lists every state, every token, every breakpoint
76
+ - [ ] Figma and code token names match (or explicit rename map documented)
77
+ - [ ] Known-unimplemented edge cases flagged with severity
78
+
79
+ ---
80
+
81
+ ## Quick checklist — Small changes
82
+
83
+ When the change is a single-screen tweak, use this shortened list:
84
+
85
+ - [ ] Pulled 1–2 references before touching code
86
+ - [ ] Change respects `.impeccable.md` direction (didn't sneak in a different tone)
87
+ - [ ] Interactive element has all 8 states
88
+ - [ ] No item on the absolute-ban list (anti-patterns.md)
89
+ - [ ] Contrast AA
90
+ - [ ] Focus ring present
91
+ - [ ] Touch target ≥ 44pt
92
+ - [ ] Tested in the preview browser
93
+ - [ ] Review presented as Before/After table
94
+
95
+ ---
96
+
97
+ ## Checklist for design system contributions
98
+
99
+ When adding tokens/components to the design system:
100
+
101
+ - [ ] New tokens follow `[category].[variant].[property].[state]` naming
102
+ - [ ] No primitive token used directly in a component — route through semantic
103
+ - [ ] Component has full anatomy doc (slots + variants + states + behavior + platform notes + do/don't)
104
+ - [ ] Figma spec frame exists OR explicit note that it doesn't
105
+ - [ ] Component validated against: same-structure-variant rule, not-a-new-component rule
106
+ - [ ] 30-min audit performed — no off-grid spacings, no duplicate color tokens
107
+
108
+ ---
109
+
110
+ ## Checklist for presentations
111
+
112
+ Before presenting to stakeholders:
113
+
114
+ - [ ] 6-step narrative spine applied (Orient → Shape → Decision → Why → Defuse → Ask)
115
+ - [ ] Opened with a decision, not exploration
116
+ - [ ] Anticipated top 2–3 objections with pre-addressed slides
117
+ - [ ] Design language translated to business language (efficiency, conversion, a11y reach)
118
+ - [ ] Closed with ONE specific ask (not "thoughts?")
119
+ - [ ] Parking lot section ready if detail derail starts
120
+ - [ ] Decision log slide referenced if revisiting prior choices
121
+
122
+ ---
123
+
124
+ ## Mega-smoke-test for full pages/features
125
+
126
+ For flagship work:
127
+
128
+ 1. **Squint test.** Blur the screen; most important element still identifiable? Second most? Groupings?
129
+ 2. **Zoom to 200%.** No horizontal scroll; nothing clipped; hierarchy holds.
130
+ 3. **Tab test.** Tab through every interactive element. Focus visible? Order logical? Nothing skipped?
131
+ 4. **Kill CSS test.** Disable all styles. Page still has logical reading order? Headings hierarchical?
132
+ 5. **Kill JS test.** Form still submittable via HTML action? Content still visible?
133
+ 6. **Throttle test.** Simulate 3G. Skeletons/placeholders in place? LCP < 2.5s?
134
+ 7. **Dark mode test.** Toggle. Any broken contrast? Any colors that failed to theme?
135
+ 8. **Reduced motion test.** Enable it at OS level. Functional animations preserved, spatial ones killed?
136
+ 9. **Mobile test.** Real device or Chrome DevTools mobile emulation. Touch targets? Safe areas? Viewport zoom allowed?
137
+ 10. **The AI-slop self-check** (see anti-patterns.md). Honest answer: would someone believe this was AI-generated? If yes, which elements? Fix those.