waypoint-skills 1.3.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 +348 -0
- package/README.npm.md +56 -0
- package/cli/bin/cli.js +127 -0
- package/cli/bin/lib/paths.mjs +31 -0
- package/cli/bin/postinstall.mjs +25 -0
- package/manifest.json +107 -0
- package/package.json +44 -0
- package/packages/agents/inspiration-scout.md +105 -0
- package/packages/agents/orchestrator.md +186 -0
- package/packages/agents/scrutiny-validator.md +136 -0
- package/packages/agents/user-testing-validator.md +171 -0
- package/packages/agents/validator.md +102 -0
- package/packages/agents/worker.md +116 -0
- package/packages/agents/wp-router.md +69 -0
- package/packages/hooks/hooks.json.example +12 -0
- package/packages/hooks/templates/mission-worktree-bootstrap.sh +88 -0
- package/packages/hooks/templates/run-assertions.sh +48 -0
- package/packages/rules/adversarial-context-isolation.mdc +57 -0
- package/packages/rules/serial-git-enforcement.mdc +77 -0
- package/packages/skills/caveman/SKILL.md +78 -0
- package/packages/skills/design-taste-frontend/SKILL.md +1206 -0
- package/packages/skills/gpt-taste/SKILL.md +74 -0
- package/packages/skills/impeccable/SKILL.md +164 -0
- package/packages/skills/impeccable/reference/adapt.md +311 -0
- package/packages/skills/impeccable/reference/animate.md +201 -0
- package/packages/skills/impeccable/reference/audit.md +133 -0
- package/packages/skills/impeccable/reference/bolder.md +120 -0
- package/packages/skills/impeccable/reference/brand.md +108 -0
- package/packages/skills/impeccable/reference/clarify.md +288 -0
- package/packages/skills/impeccable/reference/codex.md +105 -0
- package/packages/skills/impeccable/reference/colorize.md +257 -0
- package/packages/skills/impeccable/reference/craft.md +123 -0
- package/packages/skills/impeccable/reference/critique.md +780 -0
- package/packages/skills/impeccable/reference/delight.md +302 -0
- package/packages/skills/impeccable/reference/distill.md +111 -0
- package/packages/skills/impeccable/reference/document.md +429 -0
- package/packages/skills/impeccable/reference/extract.md +69 -0
- package/packages/skills/impeccable/reference/harden.md +347 -0
- package/packages/skills/impeccable/reference/hooks.md +90 -0
- package/packages/skills/impeccable/reference/init.md +172 -0
- package/packages/skills/impeccable/reference/interaction-design.md +189 -0
- package/packages/skills/impeccable/reference/layout.md +161 -0
- package/packages/skills/impeccable/reference/live.md +718 -0
- package/packages/skills/impeccable/reference/onboard.md +234 -0
- package/packages/skills/impeccable/reference/optimize.md +258 -0
- package/packages/skills/impeccable/reference/overdrive.md +130 -0
- package/packages/skills/impeccable/reference/polish.md +241 -0
- package/packages/skills/impeccable/reference/product.md +60 -0
- package/packages/skills/impeccable/reference/quieter.md +99 -0
- package/packages/skills/impeccable/reference/shape.md +165 -0
- package/packages/skills/impeccable/reference/typeset.md +279 -0
- package/packages/skills/impeccable/scripts/command-metadata.json +94 -0
- package/packages/skills/impeccable/scripts/context-signals.mjs +225 -0
- package/packages/skills/impeccable/scripts/context.mjs +961 -0
- package/packages/skills/impeccable/scripts/critique-storage.mjs +242 -0
- package/packages/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/packages/skills/impeccable/scripts/detect.mjs +21 -0
- package/packages/skills/impeccable/scripts/detector/browser/injected/index.mjs +1937 -0
- package/packages/skills/impeccable/scripts/detector/cli/main.mjs +290 -0
- package/packages/skills/impeccable/scripts/detector/design-system.mjs +750 -0
- package/packages/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +5185 -0
- package/packages/skills/impeccable/scripts/detector/detect-antipatterns.mjs +50 -0
- package/packages/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +277 -0
- package/packages/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +568 -0
- package/packages/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +1015 -0
- package/packages/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +234 -0
- package/packages/skills/impeccable/scripts/detector/engines/visual/screenshot-contrast.mjs +189 -0
- package/packages/skills/impeccable/scripts/detector/findings.mjs +12 -0
- package/packages/skills/impeccable/scripts/detector/node/file-system.mjs +198 -0
- package/packages/skills/impeccable/scripts/detector/profile/profiler.mjs +166 -0
- package/packages/skills/impeccable/scripts/detector/registry/antipatterns.mjs +459 -0
- package/packages/skills/impeccable/scripts/detector/rules/checks.mjs +2707 -0
- package/packages/skills/impeccable/scripts/detector/shared/color.mjs +124 -0
- package/packages/skills/impeccable/scripts/detector/shared/constants.mjs +101 -0
- package/packages/skills/impeccable/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/packages/skills/impeccable/scripts/detector/shared/page.mjs +7 -0
- package/packages/skills/impeccable/scripts/hook-admin.mjs +660 -0
- package/packages/skills/impeccable/scripts/hook-before-edit.mjs +476 -0
- package/packages/skills/impeccable/scripts/hook-lib.mjs +1632 -0
- package/packages/skills/impeccable/scripts/hook.mjs +61 -0
- package/packages/skills/impeccable/scripts/lib/design-parser.mjs +842 -0
- package/packages/skills/impeccable/scripts/lib/impeccable-config.mjs +638 -0
- package/packages/skills/impeccable/scripts/lib/impeccable-paths.mjs +128 -0
- package/packages/skills/impeccable/scripts/lib/is-generated.mjs +69 -0
- package/packages/skills/impeccable/scripts/lib/target-args.mjs +42 -0
- package/packages/skills/impeccable/scripts/live/browser-script-parts.mjs +49 -0
- package/packages/skills/impeccable/scripts/live/completion.mjs +19 -0
- package/packages/skills/impeccable/scripts/live/event-validation.mjs +137 -0
- package/packages/skills/impeccable/scripts/live/insert-ui.mjs +458 -0
- package/packages/skills/impeccable/scripts/live/manual-apply.mjs +939 -0
- package/packages/skills/impeccable/scripts/live/manual-edit-routes.mjs +357 -0
- package/packages/skills/impeccable/scripts/live/manual-edits-buffer.mjs +152 -0
- package/packages/skills/impeccable/scripts/live/session-store.mjs +289 -0
- package/packages/skills/impeccable/scripts/live/svelte-component.mjs +826 -0
- package/packages/skills/impeccable/scripts/live/sveltekit-adapter.mjs +274 -0
- package/packages/skills/impeccable/scripts/live/ui-core.mjs +180 -0
- package/packages/skills/impeccable/scripts/live/vocabulary.mjs +36 -0
- package/packages/skills/impeccable/scripts/live-accept.mjs +812 -0
- package/packages/skills/impeccable/scripts/live-browser-dom.js +146 -0
- package/packages/skills/impeccable/scripts/live-browser-session.js +123 -0
- package/packages/skills/impeccable/scripts/live-browser.js +11173 -0
- package/packages/skills/impeccable/scripts/live-commit-manual-edits.mjs +1241 -0
- package/packages/skills/impeccable/scripts/live-complete.mjs +75 -0
- package/packages/skills/impeccable/scripts/live-copy-edit-agent.mjs +683 -0
- package/packages/skills/impeccable/scripts/live-discard-manual-edits.mjs +51 -0
- package/packages/skills/impeccable/scripts/live-inject.mjs +583 -0
- package/packages/skills/impeccable/scripts/live-insert.mjs +272 -0
- package/packages/skills/impeccable/scripts/live-manual-edit-evidence.mjs +363 -0
- package/packages/skills/impeccable/scripts/live-poll.mjs +384 -0
- package/packages/skills/impeccable/scripts/live-resume.mjs +94 -0
- package/packages/skills/impeccable/scripts/live-server.mjs +1135 -0
- package/packages/skills/impeccable/scripts/live-status.mjs +61 -0
- package/packages/skills/impeccable/scripts/live-target.mjs +30 -0
- package/packages/skills/impeccable/scripts/live-wrap.mjs +894 -0
- package/packages/skills/impeccable/scripts/live.mjs +297 -0
- package/packages/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/packages/skills/impeccable/scripts/palette.mjs +633 -0
- package/packages/skills/impeccable/scripts/pin.mjs +214 -0
- package/packages/skills/ponytail/SKILL.md +117 -0
- package/packages/skills/stitch-design-taste/DESIGN.md +121 -0
- package/packages/skills/stitch-design-taste/SKILL.md +184 -0
- package/packages/skills/waypoint/SKILL.md +67 -0
- package/packages/skills/wp/SKILL.md +330 -0
- package/packages/skills/wp/caveman-wire.md +148 -0
- package/packages/skills/wp/reference.md +411 -0
- package/scripts/detect-platform.sh +32 -0
- package/scripts/install.sh +123 -0
- package/scripts/lib/common.sh +215 -0
- package/scripts/sync-skills.sh +21 -0
- package/scripts/uninstall.sh +38 -0
- package/scripts/waypoint +281 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
> **Additional context needed**: performance constraints.
|
|
2
|
+
|
|
3
|
+
Add motion that conveys state, gives feedback, and clarifies hierarchy. Cut motion that exists only for decoration. Animation fatigue is a real cost; spend the budget on the moments that need it.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Register
|
|
8
|
+
|
|
9
|
+
Brand: motion is part of the voice; one well-rehearsed entrance beats scattered micro-interactions. The saturated AI default is fade-and-rise reveals on every scrolled section; that's a tell, not a choreography. Reserve scroll-triggered motion for moments that earn it.
|
|
10
|
+
|
|
11
|
+
Product: 150–250 ms on most transitions. Motion conveys state: feedback, reveal, loading, transitions between views. No page-load choreography; users are in a task and won't wait for it.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Assess Animation Opportunities
|
|
16
|
+
|
|
17
|
+
Analyze where motion would improve the experience:
|
|
18
|
+
|
|
19
|
+
1. **Identify static areas**:
|
|
20
|
+
- **Missing feedback**: Actions without visual acknowledgment (button clicks, form submission, etc.)
|
|
21
|
+
- **Jarring transitions**: Instant state changes that feel abrupt (show/hide, page loads, route changes)
|
|
22
|
+
- **Unclear relationships**: Spatial or hierarchical relationships that aren't obvious
|
|
23
|
+
- **Lack of delight**: Functional but joyless interactions
|
|
24
|
+
- **Missed guidance**: Opportunities to direct attention or explain behavior
|
|
25
|
+
|
|
26
|
+
2. **Understand the context**:
|
|
27
|
+
- What's the personality? (Playful vs serious, energetic vs calm)
|
|
28
|
+
- What's the performance budget? (Mobile-first? Complex page?)
|
|
29
|
+
- Who's the audience? (Motion-sensitive users? Power users who want speed?)
|
|
30
|
+
- What matters most? (One hero animation vs many micro-interactions?)
|
|
31
|
+
|
|
32
|
+
If any of these are unclear from the codebase, ask the user directly to clarify what you cannot infer.
|
|
33
|
+
|
|
34
|
+
**CRITICAL**: Respect `prefers-reduced-motion`. Always provide non-animated alternatives for users who need them.
|
|
35
|
+
|
|
36
|
+
## Plan Animation Strategy
|
|
37
|
+
|
|
38
|
+
Create a purposeful animation plan:
|
|
39
|
+
|
|
40
|
+
- **Hero moment**: What's the ONE signature animation? (Page load? Hero section? Key interaction?)
|
|
41
|
+
- **Feedback layer**: Which interactions need acknowledgment?
|
|
42
|
+
- **Transition layer**: Which state changes need smoothing?
|
|
43
|
+
- **Delight layer**: Where can we surprise and delight?
|
|
44
|
+
|
|
45
|
+
**IMPORTANT**: One well-orchestrated experience beats scattered animations everywhere. Focus on high-impact moments.
|
|
46
|
+
|
|
47
|
+
## Implement Animations
|
|
48
|
+
|
|
49
|
+
Add motion systematically across these categories:
|
|
50
|
+
|
|
51
|
+
### Entrance Animations
|
|
52
|
+
- **Hero section**: Dramatic entrance for primary content (scale, parallax, or creative effects)
|
|
53
|
+
- **Modal/drawer entry**: Smooth slide + fade, backdrop fade, focus management
|
|
54
|
+
- **List rhythm**: Sibling stagger is legitimate for cards-in-a-grid or list-items-appearing. Whole-section fade-on-scroll is not a list and is not legitimate. Cap total stagger time: 10 items at 50ms each = 500ms total. For more items, reduce per-item delay or cap the staggered count.
|
|
55
|
+
|
|
56
|
+
Use CSS custom properties for clean stagger: `animation-delay: calc(var(--i, 0) * 50ms)` with `style="--i: 0"`, `style="--i: 1"`, etc. on each item.
|
|
57
|
+
|
|
58
|
+
### Micro-interactions
|
|
59
|
+
- **Button feedback**:
|
|
60
|
+
- Hover: Subtle scale (1.02-1.05), color shift, shadow increase
|
|
61
|
+
- Click: Quick scale down then up (0.95 → 1), ripple effect
|
|
62
|
+
- Loading: Spinner or pulse state
|
|
63
|
+
- **Form interactions**:
|
|
64
|
+
- Input focus: Border color transition, slight scale or glow
|
|
65
|
+
- Validation: Shake on error, check mark on success, smooth color transitions
|
|
66
|
+
- **Toggle switches**: Smooth slide + color transition (200-300ms)
|
|
67
|
+
- **Checkboxes/radio**: Check mark animation, ripple effect
|
|
68
|
+
- **Like/favorite**: Scale + rotation, particle effects, color transition
|
|
69
|
+
|
|
70
|
+
### State Transitions
|
|
71
|
+
- **Show/hide**: Fade + slide (not instant), appropriate timing (200-300ms)
|
|
72
|
+
- **Expand/collapse**: Height transition with overflow handling, icon rotation
|
|
73
|
+
- **Loading states**: Skeleton screen fades, spinner animations, progress bars
|
|
74
|
+
- **Success/error**: Color transitions, icon animations, gentle scale pulse
|
|
75
|
+
- **Enable/disable**: Opacity transitions, cursor changes
|
|
76
|
+
|
|
77
|
+
### Navigation & Flow
|
|
78
|
+
- **Page transitions**: Crossfade between routes, shared element transitions
|
|
79
|
+
- **Tab switching**: Slide indicator, content fade/slide
|
|
80
|
+
- **Carousel/slider**: Smooth transforms, snap points, momentum
|
|
81
|
+
- **Scroll effects**: Parallax layers, sticky headers with state changes, scroll progress indicators
|
|
82
|
+
|
|
83
|
+
### Feedback & Guidance
|
|
84
|
+
- **Hover hints**: Tooltip fade-ins, cursor changes, element highlights
|
|
85
|
+
- **Drag & drop**: Lift effect (shadow + scale), drop zone highlights, smooth repositioning
|
|
86
|
+
- **Copy/paste**: Brief highlight flash on paste, "copied" confirmation
|
|
87
|
+
- **Focus flow**: Highlight path through form or workflow
|
|
88
|
+
|
|
89
|
+
### Delight Moments
|
|
90
|
+
- **Empty states**: Subtle floating animations on illustrations
|
|
91
|
+
- **Completed actions**: Confetti, check mark flourish, success celebrations
|
|
92
|
+
- **Easter eggs**: Hidden interactions for discovery
|
|
93
|
+
- **Contextual animation**: Weather effects, time-of-day themes, seasonal touches
|
|
94
|
+
|
|
95
|
+
## Technical Implementation
|
|
96
|
+
|
|
97
|
+
Use appropriate techniques for each animation:
|
|
98
|
+
|
|
99
|
+
### Timing & Easing
|
|
100
|
+
|
|
101
|
+
**Duration: the 100/300/500 rule.** Timing matters more than easing for "feels right":
|
|
102
|
+
|
|
103
|
+
| Duration | Use Case | Examples |
|
|
104
|
+
|----------|----------|----------|
|
|
105
|
+
| **100–150ms** | Instant feedback | Button press, toggle, color change |
|
|
106
|
+
| **200–300ms** | State changes | Menu open, tooltip, hover state |
|
|
107
|
+
| **300–500ms** | Layout changes | Accordion, modal, drawer |
|
|
108
|
+
| **500–800ms** | Entrance animations | Page load, hero reveal |
|
|
109
|
+
|
|
110
|
+
**Easing curves (use these, not CSS defaults):**
|
|
111
|
+
```css
|
|
112
|
+
/* Recommended: natural deceleration */
|
|
113
|
+
--ease-out-quart: cubic-bezier(0.25, 1, 0.5, 1); /* Smooth */
|
|
114
|
+
--ease-out-quint: cubic-bezier(0.22, 1, 0.36, 1); /* Slightly snappier */
|
|
115
|
+
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1); /* Confident, decisive */
|
|
116
|
+
|
|
117
|
+
/* AVOID: feel dated and tacky */
|
|
118
|
+
/* bounce: cubic-bezier(0.34, 1.56, 0.64, 1); */
|
|
119
|
+
/* elastic: cubic-bezier(0.68, -0.6, 0.32, 1.6); */
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Exit animations are faster than entrances.** Use ~75% of enter duration.
|
|
123
|
+
|
|
124
|
+
### CSS Animations
|
|
125
|
+
```css
|
|
126
|
+
/* Prefer for simple, declarative animations */
|
|
127
|
+
- transitions for state changes
|
|
128
|
+
- @keyframes for complex sequences
|
|
129
|
+
- transform and opacity for reliable movement
|
|
130
|
+
- blur, filters, masks, clip paths, shadows, and color shifts for premium atmospheric effects when verified smooth
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### JavaScript Animation
|
|
134
|
+
```javascript
|
|
135
|
+
/* Use for complex, interactive animations */
|
|
136
|
+
- Web Animations API for programmatic control
|
|
137
|
+
- Framer Motion for React
|
|
138
|
+
- GSAP for complex sequences
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Motion Materials
|
|
142
|
+
|
|
143
|
+
Transform and opacity are reliable defaults, not the whole palette. Premium interfaces often need atmospheric properties. Match material to effect:
|
|
144
|
+
|
|
145
|
+
- **Transform / opacity**: movement, press feedback, simple reveals, list choreography
|
|
146
|
+
- **Blur / filter / backdrop-filter**: focus pulls, depth, glass or lens effects, softened entrances
|
|
147
|
+
- **Clip-path / masks**: wipes, reveals, editorial cropping, product-like transitions
|
|
148
|
+
- **Shadow / glow / color filters**: energy, affordance, focus, warmth, active state
|
|
149
|
+
- **Grid-template-rows or FLIP-style transforms**: expanding and reflowing layout without animating `height` directly
|
|
150
|
+
|
|
151
|
+
The hard rule isn't "transform and opacity only." It's: avoid animating layout-driving properties casually (`width`, `height`, `top`, `left`, margins), keep expensive effects bounded to small or isolated areas, and verify smoothness in-browser on target viewports.
|
|
152
|
+
|
|
153
|
+
### Performance
|
|
154
|
+
- **Layout safety**: Avoid casual animation of layout-driving properties (`width`, `height`, `top`, `left`, margins)
|
|
155
|
+
- **will-change**: Add sparingly for known expensive animations only (e.g. on `:hover` or an `.animating` class), never preemptively across the whole page
|
|
156
|
+
- **Scroll triggers**: Use Intersection Observer instead of scroll event listeners; unobserve after the animation fires once
|
|
157
|
+
- **Bound expensive effects**: Keep blur/filter/shadow areas small or isolated, use `contain` where appropriate
|
|
158
|
+
- **Monitor FPS**: Ensure 60fps on target devices
|
|
159
|
+
|
|
160
|
+
### Perceived Performance
|
|
161
|
+
|
|
162
|
+
Nobody cares how fast your site *is*, only how fast it feels. The 80ms threshold: anything under ~80ms feels instant because our brains buffer sensory input for that long to synchronize perception. Target this for micro-interactions.
|
|
163
|
+
|
|
164
|
+
- **Preemptive start**: Begin transitions immediately while loading (iOS app zoom, skeleton UI). Users perceive work happening.
|
|
165
|
+
- **Early completion**: Show content progressively, don't wait for everything (progressive images, streaming HTML, skeleton fade-ins).
|
|
166
|
+
- **Optimistic UI**: Update the interface immediately, handle failures gracefully. Use for low-stakes actions (likes, follows). Avoid for payments or destructive operations.
|
|
167
|
+
- **Easing affects perceived duration**: Ease-in (accelerating toward completion) makes tasks feel shorter because the peak-end effect weights final moments heavily. Ease-out feels satisfying for entrances.
|
|
168
|
+
- **Caution**: Too-fast responses can decrease perceived value for complex operations (search, analysis). Sometimes a brief delay signals "real work" is happening.
|
|
169
|
+
|
|
170
|
+
### Accessibility
|
|
171
|
+
```css
|
|
172
|
+
@media (prefers-reduced-motion: reduce) {
|
|
173
|
+
* {
|
|
174
|
+
animation-duration: 0.01ms !important;
|
|
175
|
+
animation-iteration-count: 1 !important;
|
|
176
|
+
transition-duration: 0.01ms !important;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**NEVER**:
|
|
182
|
+
- Use bounce or elastic easing curves; they feel dated and draw attention to the animation itself
|
|
183
|
+
- Animate layout properties casually (`width`, `height`, `top`, `left`, margins) when transform, FLIP, or grid-based techniques would work
|
|
184
|
+
- Use durations over 500ms for feedback (it feels laggy)
|
|
185
|
+
- Animate without purpose (every animation needs a reason)
|
|
186
|
+
- Ignore `prefers-reduced-motion` (this is an accessibility violation)
|
|
187
|
+
- Animate everything (animation fatigue makes interfaces feel exhausting)
|
|
188
|
+
- Block interaction during animations unless intentional
|
|
189
|
+
|
|
190
|
+
## Verify Quality
|
|
191
|
+
|
|
192
|
+
Test animations thoroughly:
|
|
193
|
+
|
|
194
|
+
- **Smooth at 60fps**: No jank on target devices
|
|
195
|
+
- **Feels natural**: Easing curves feel organic, not robotic
|
|
196
|
+
- **Appropriate timing**: Not too fast (jarring) or too slow (laggy)
|
|
197
|
+
- **Reduced motion works**: Animations disabled or simplified appropriately
|
|
198
|
+
- **Doesn't block**: Users can interact during/after animations
|
|
199
|
+
- **Adds value**: Makes interface clearer or more delightful
|
|
200
|
+
|
|
201
|
+
When the motion clarifies state instead of decorating it, hand off to `/impeccable polish` for the final pass.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
Run systematic **technical** quality checks and generate a comprehensive report. Don't fix issues; document them for other commands to address.
|
|
2
|
+
|
|
3
|
+
This is a code-level audit, not a design critique. Check what's measurable and verifiable in the implementation.
|
|
4
|
+
|
|
5
|
+
## Diagnostic Scan
|
|
6
|
+
|
|
7
|
+
Run comprehensive checks across 5 dimensions. Score each dimension 0-4 using the criteria below.
|
|
8
|
+
|
|
9
|
+
### 1. Accessibility (A11y)
|
|
10
|
+
|
|
11
|
+
**Check for**:
|
|
12
|
+
- **Contrast issues**: Text contrast ratios < 4.5:1 (or 7:1 for AAA)
|
|
13
|
+
- **Missing ARIA**: Interactive elements without proper roles, labels, or states
|
|
14
|
+
- **Keyboard navigation**: Missing focus indicators, illogical tab order, keyboard traps
|
|
15
|
+
- **Semantic HTML**: Improper heading hierarchy, missing landmarks, divs instead of buttons
|
|
16
|
+
- **Alt text**: Missing or poor image descriptions
|
|
17
|
+
- **Form issues**: Inputs without labels, poor error messaging, missing required indicators
|
|
18
|
+
|
|
19
|
+
**Score 0-4**: 0=Inaccessible (fails WCAG A), 1=Major gaps (few ARIA labels, no keyboard nav), 2=Partial (some a11y effort, significant gaps), 3=Good (WCAG AA mostly met, minor gaps), 4=Excellent (WCAG AA fully met, approaches AAA)
|
|
20
|
+
|
|
21
|
+
### 2. Performance
|
|
22
|
+
|
|
23
|
+
**Check for**:
|
|
24
|
+
- **Layout thrashing**: Reading/writing layout properties in loops
|
|
25
|
+
- **Expensive animations**: Casual layout-property animation, unbounded blur/filter/shadow effects, or effects that visibly drop frames
|
|
26
|
+
- **Missing optimization**: Images without lazy loading, unoptimized assets, missing will-change
|
|
27
|
+
- **Bundle size**: Unnecessary imports, unused dependencies
|
|
28
|
+
- **Render performance**: Unnecessary re-renders, missing memoization
|
|
29
|
+
|
|
30
|
+
**Score 0-4**: 0=Severe issues (layout thrash, unoptimized everything), 1=Major problems (no lazy loading, expensive animations), 2=Partial (some optimization, gaps remain), 3=Good (mostly optimized, minor improvements possible), 4=Excellent (fast, lean, well-optimized)
|
|
31
|
+
|
|
32
|
+
### 3. Theming
|
|
33
|
+
|
|
34
|
+
**Check for**:
|
|
35
|
+
- **Hard-coded colors**: Colors not using design tokens
|
|
36
|
+
- **Broken dark mode**: Missing dark mode variants, poor contrast in dark theme
|
|
37
|
+
- **Inconsistent tokens**: Using wrong tokens, mixing token types
|
|
38
|
+
- **Theme switching issues**: Values that don't update on theme change
|
|
39
|
+
|
|
40
|
+
**Score 0-4**: 0=No theming (hard-coded everything), 1=Minimal tokens (mostly hard-coded), 2=Partial (tokens exist but inconsistently used), 3=Good (tokens used, minor hard-coded values), 4=Excellent (full token system, dark mode works perfectly)
|
|
41
|
+
|
|
42
|
+
### 4. Responsive Design
|
|
43
|
+
|
|
44
|
+
**Check for**:
|
|
45
|
+
- **Fixed widths**: Hard-coded widths that break on mobile
|
|
46
|
+
- **Touch targets**: Interactive elements < 44x44px
|
|
47
|
+
- **Horizontal scroll**: Content overflow on narrow viewports
|
|
48
|
+
- **Text scaling**: Layouts that break when text size increases
|
|
49
|
+
- **Missing breakpoints**: No mobile/tablet variants
|
|
50
|
+
|
|
51
|
+
**Score 0-4**: 0=Desktop-only (breaks on mobile), 1=Major issues (some breakpoints, many failures), 2=Partial (works on mobile, rough edges), 3=Good (responsive, minor touch target or overflow issues), 4=Excellent (fluid, all viewports, proper touch targets)
|
|
52
|
+
|
|
53
|
+
### 5. Anti-Patterns (CRITICAL)
|
|
54
|
+
|
|
55
|
+
Check against ALL the **DON'T** guidelines from the parent impeccable skill (already loaded in this context). Look for AI slop tells (AI color palette, gradient text, glassmorphism, hero metrics, card grids, generic fonts) and general design anti-patterns (gray on color, nested cards, bounce easing, redundant copy).
|
|
56
|
+
|
|
57
|
+
**Score 0-4**: 0=AI slop gallery (5+ tells), 1=Heavy AI aesthetic (3-4 tells), 2=Some tells (1-2 noticeable), 3=Mostly clean (subtle issues only), 4=No AI tells (distinctive, intentional design)
|
|
58
|
+
|
|
59
|
+
## Generate Report
|
|
60
|
+
|
|
61
|
+
### Audit Health Score
|
|
62
|
+
|
|
63
|
+
| # | Dimension | Score | Key Finding |
|
|
64
|
+
|---|-----------|-------|-------------|
|
|
65
|
+
| 1 | Accessibility | ? | [most critical a11y issue or "--"] |
|
|
66
|
+
| 2 | Performance | ? | |
|
|
67
|
+
| 3 | Responsive Design | ? | |
|
|
68
|
+
| 4 | Theming | ? | |
|
|
69
|
+
| 5 | Anti-Patterns | ? | |
|
|
70
|
+
| **Total** | | **??/20** | **[Rating band]** |
|
|
71
|
+
|
|
72
|
+
**Rating bands**: 18-20 Excellent (minor polish), 14-17 Good (address weak dimensions), 10-13 Acceptable (significant work needed), 6-9 Poor (major overhaul), 0-5 Critical (fundamental issues)
|
|
73
|
+
|
|
74
|
+
### Anti-Patterns Verdict
|
|
75
|
+
**Start here.** Pass/fail: Does this look AI-generated? List specific tells. Be brutally honest.
|
|
76
|
+
|
|
77
|
+
### Executive Summary
|
|
78
|
+
- Audit Health Score: **??/20** ([rating band])
|
|
79
|
+
- Total issues found (count by severity: P0/P1/P2/P3)
|
|
80
|
+
- Top 3-5 critical issues
|
|
81
|
+
- Recommended next steps
|
|
82
|
+
|
|
83
|
+
### Detailed Findings by Severity
|
|
84
|
+
|
|
85
|
+
Tag every issue with **P0-P3 severity**:
|
|
86
|
+
- **P0 Blocking**: Prevents task completion. Fix immediately
|
|
87
|
+
- **P1 Major**: Significant difficulty or WCAG AA violation. Fix before release
|
|
88
|
+
- **P2 Minor**: Annoyance, workaround exists. Fix in next pass
|
|
89
|
+
- **P3 Polish**: Nice-to-fix, no real user impact. Fix if time permits
|
|
90
|
+
|
|
91
|
+
For each issue, document:
|
|
92
|
+
- **[P?] Issue name**
|
|
93
|
+
- **Location**: Component, file, line
|
|
94
|
+
- **Category**: Accessibility / Performance / Theming / Responsive / Anti-Pattern
|
|
95
|
+
- **Impact**: How it affects users
|
|
96
|
+
- **WCAG/Standard**: Which standard it violates (if applicable)
|
|
97
|
+
- **Recommendation**: How to fix it
|
|
98
|
+
- **Suggested command**: Which command to use (prefer: /impeccable adapt, /impeccable animate, /impeccable audit, /impeccable bolder, /impeccable clarify, /impeccable colorize, /impeccable critique, /impeccable delight, /impeccable distill, /impeccable document, /impeccable harden, /impeccable layout, /impeccable onboard, /impeccable optimize, /impeccable overdrive, /impeccable polish, /impeccable quieter, /impeccable shape, /impeccable typeset)
|
|
99
|
+
|
|
100
|
+
### Patterns & Systemic Issues
|
|
101
|
+
|
|
102
|
+
Identify recurring problems that indicate systemic gaps rather than one-off mistakes:
|
|
103
|
+
- "Hard-coded colors appear in 15+ components, should use design tokens"
|
|
104
|
+
- "Touch targets consistently too small (<44px) throughout mobile experience"
|
|
105
|
+
|
|
106
|
+
### Positive Findings
|
|
107
|
+
|
|
108
|
+
Note what's working well: good practices to maintain and replicate.
|
|
109
|
+
|
|
110
|
+
## Recommended Actions
|
|
111
|
+
|
|
112
|
+
List recommended commands in priority order (P0 first, then P1, then P2):
|
|
113
|
+
|
|
114
|
+
1. **[P?] `/command-name`**: Brief description (specific context from audit findings)
|
|
115
|
+
2. **[P?] `/command-name`**: Brief description (specific context)
|
|
116
|
+
|
|
117
|
+
**Rules**: Only recommend commands from: /impeccable adapt, /impeccable animate, /impeccable audit, /impeccable bolder, /impeccable clarify, /impeccable colorize, /impeccable critique, /impeccable delight, /impeccable distill, /impeccable document, /impeccable harden, /impeccable layout, /impeccable onboard, /impeccable optimize, /impeccable overdrive, /impeccable polish, /impeccable quieter, /impeccable shape, /impeccable typeset. Map findings to the most appropriate command. End with `/impeccable polish` as the final step if any fixes were recommended.
|
|
118
|
+
|
|
119
|
+
After presenting the summary, tell the user:
|
|
120
|
+
|
|
121
|
+
> You can ask me to run these one at a time, all at once, or in any order you prefer.
|
|
122
|
+
>
|
|
123
|
+
> Re-run `/impeccable audit` after fixes to see your score improve.
|
|
124
|
+
|
|
125
|
+
**IMPORTANT**: Be thorough but actionable. Too many P3 issues creates noise. Focus on what actually matters.
|
|
126
|
+
|
|
127
|
+
**NEVER**:
|
|
128
|
+
- Report issues without explaining impact (why does this matter?)
|
|
129
|
+
- Provide generic recommendations (be specific and actionable)
|
|
130
|
+
- Skip positive findings (celebrate what works)
|
|
131
|
+
- Forget to prioritize (everything can't be P0)
|
|
132
|
+
- Report false positives without verification
|
|
133
|
+
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
When asked for "bolder," AI defaults to the same tired tricks: cyan/purple gradients, glassmorphism, neon accents on dark backgrounds, gradient text on metrics. These are the opposite of bold. Reject them first, then increase visual impact by making the existing design language more decisive, specific, and committed.
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Register
|
|
6
|
+
|
|
7
|
+
Brand: "bolder" means distinctive. Express a stronger point of view through hierarchy, pacing, proportion, copy, evidence, and one committed visual idea.
|
|
8
|
+
|
|
9
|
+
Product: "bolder" rarely means theatrics; those undermine trust. It means stronger hierarchy, clearer weight contrast, sharper information density, and more decisive prioritization. The amplification is in clarity, not drama.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Assess Current State
|
|
14
|
+
|
|
15
|
+
Analyze what makes the design feel too safe or boring:
|
|
16
|
+
|
|
17
|
+
1. **Identify weakness sources**:
|
|
18
|
+
- **Generic choices**: The page could belong to any product in the category.
|
|
19
|
+
- **Timid scale**: Everything is medium-sized with no clear lead.
|
|
20
|
+
- **Low contrast**: Important and supporting elements have similar visual weight.
|
|
21
|
+
- **Static**: The surface has no meaningful moment of emphasis.
|
|
22
|
+
- **Predictable**: The composition follows a default pattern without a point of view.
|
|
23
|
+
- **Flat hierarchy**: Nothing stands out or commands attention.
|
|
24
|
+
|
|
25
|
+
2. **Understand the context**:
|
|
26
|
+
- What is the brand personality?
|
|
27
|
+
- What is the purpose of this surface?
|
|
28
|
+
- Who is the audience?
|
|
29
|
+
- What design system, tokens, components, and visual conventions already exist?
|
|
30
|
+
|
|
31
|
+
If any of these are unclear from the codebase, ask the user directly to clarify what you cannot infer.
|
|
32
|
+
|
|
33
|
+
**CRITICAL**: "Bolder" does not mean chaotic or garish. It means distinctive, memorable, and confident. Think intentional drama, not random noise.
|
|
34
|
+
|
|
35
|
+
**WARNING - AI SLOP TRAP**: Review ALL the DON'T guidelines from the parent impeccable skill (already loaded in this context) before proceeding. Bold means distinctive, not "more effects."
|
|
36
|
+
|
|
37
|
+
## Design-System Lock
|
|
38
|
+
|
|
39
|
+
If the project has `DESIGN.md`, tokens, theme variables, or established component styles, treat that system as the boundary. Make the existing language stronger before adding new language.
|
|
40
|
+
|
|
41
|
+
Do not invent new colors, gradients, radii, shadows, fonts, decorative backgrounds, or effects just because the request says "bolder." A bolder pass should usually change emphasis, proportion, rhythm, density, contrast, copy, artifact specificity, and layout relationships while staying inside the documented system.
|
|
42
|
+
|
|
43
|
+
If the existing system is genuinely too limited to express the bolder direction, stop and ask the user before expanding it. Name the exact additions, the role each would play, and why the current system cannot do the job. If the user approves expansion, update the design system or tokens alongside the implementation.
|
|
44
|
+
|
|
45
|
+
## Plan Amplification
|
|
46
|
+
|
|
47
|
+
Create a strategy to increase impact while maintaining coherence:
|
|
48
|
+
|
|
49
|
+
- **Focal point**: Pick one thing the viewer should remember, then make the rest support it.
|
|
50
|
+
- **System levers**: Identify which existing tokens, components, layout patterns, and copy structures can carry more weight.
|
|
51
|
+
- **Risk budget**: Decide how far the surface can push while still feeling like the same product or brand.
|
|
52
|
+
- **Hierarchy amplification**: Increase contrast between primary, secondary, and tertiary content instead of making every element louder.
|
|
53
|
+
|
|
54
|
+
**IMPORTANT**: Bold design must still be usable. Impact without function is just decoration.
|
|
55
|
+
|
|
56
|
+
## Amplify the Design
|
|
57
|
+
|
|
58
|
+
Systematically increase impact through intention, not a menu of effects:
|
|
59
|
+
|
|
60
|
+
### Typography Amplification
|
|
61
|
+
- Strengthen the existing type hierarchy before changing typefaces.
|
|
62
|
+
- Make important text meaningfully more dominant, and make supporting text quieter.
|
|
63
|
+
- Use weight, measure, spacing, and line breaks to sharpen the point of view.
|
|
64
|
+
- Add or replace fonts only after user-approved design-system expansion.
|
|
65
|
+
|
|
66
|
+
### Color Amplification
|
|
67
|
+
- Use the existing palette more decisively before adding colors.
|
|
68
|
+
- Shift the proportion, placement, and contrast of documented colors to clarify meaning.
|
|
69
|
+
- Treat any new color, gradient, or tint ramp as a design-system expansion that requires user approval.
|
|
70
|
+
- Keep color tied to hierarchy, state, or brand meaning; do not use it as surface decoration.
|
|
71
|
+
|
|
72
|
+
### Spatial Amplification
|
|
73
|
+
- Change proportion, density, alignment, and sequencing so the composition has a stronger point of view.
|
|
74
|
+
- Create clearer contrast between dense evidence and open breathing room.
|
|
75
|
+
- Let layout express priority and narrative order before adding ornament.
|
|
76
|
+
- Preserve responsive behavior and avoid text overflow at every breakpoint.
|
|
77
|
+
|
|
78
|
+
### Surface Amplification
|
|
79
|
+
- Use existing surface, border, radius, and shadow rules more deliberately.
|
|
80
|
+
- Remove timid half-measures: either give an element a clear role or simplify it.
|
|
81
|
+
- Add texture, depth, illustration, or decorative treatments only when already established by the system or explicitly approved.
|
|
82
|
+
- Make real product artifacts, imagery, data, or copy carry attention before reaching for effects.
|
|
83
|
+
|
|
84
|
+
### Motion & Animation
|
|
85
|
+
- Design one meaningful moment of emphasis when motion genuinely supports the point.
|
|
86
|
+
- Make interaction feedback feel more decisive without becoming distracting.
|
|
87
|
+
- Keep transitions smooth and intentional.
|
|
88
|
+
- **Bolder != scroll-fade-rise on every section.** That's the saturated AI default, the opposite of bold.
|
|
89
|
+
|
|
90
|
+
### Composition Boldness
|
|
91
|
+
- Make the dominant idea unmistakable.
|
|
92
|
+
- Use layout tension, sequencing, contrast, and restraint to create a stronger read.
|
|
93
|
+
- Let the page's structure communicate priority before adding decorative layers.
|
|
94
|
+
- If every element is louder, the composition is not bolder; it is flatter.
|
|
95
|
+
|
|
96
|
+
**NEVER**:
|
|
97
|
+
- Add undocumented design-system primitives without user approval
|
|
98
|
+
- Add effects randomly without purpose
|
|
99
|
+
- Hide weak hierarchy behind decoration
|
|
100
|
+
- Sacrifice readability for aesthetics
|
|
101
|
+
- Make everything bold; contrast is the point
|
|
102
|
+
- Ignore accessibility
|
|
103
|
+
- Overwhelm with motion
|
|
104
|
+
- Copy trendy aesthetics blindly
|
|
105
|
+
|
|
106
|
+
## Verify Quality
|
|
107
|
+
|
|
108
|
+
Ensure amplification maintains usability and coherence:
|
|
109
|
+
|
|
110
|
+
- **System-faithful**: Did the pass make the existing design language stronger before adding anything new?
|
|
111
|
+
- **No undocumented drift**: Are new colors, gradients, shadows, radii, fonts, and effects either absent or explicitly approved and documented?
|
|
112
|
+
- **NOT AI slop**: Does this look like every other AI-generated "bold" design? If yes, start over.
|
|
113
|
+
- **Still functional**: Can users accomplish tasks without distraction?
|
|
114
|
+
- **Coherent**: Does everything feel intentional and unified?
|
|
115
|
+
- **Memorable**: Will users remember this experience for the intended reason?
|
|
116
|
+
- **Performant and accessible**: Does the result stay fast, readable, responsive, and WCAG-conscious?
|
|
117
|
+
|
|
118
|
+
**The test**: If you showed this to someone and said "AI made this bolder," would they believe you immediately? If yes, you've failed. Bold means distinctive, not "more AI effects."
|
|
119
|
+
|
|
120
|
+
When the result feels right, hand off to `/impeccable polish` for the final pass.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Brand register
|
|
2
|
+
|
|
3
|
+
When design IS the product: brand sites, landing pages, marketing surfaces, campaign pages, portfolios, long-form content, about pages. The deliverable is the design itself; a visitor's impression is the thing being made.
|
|
4
|
+
|
|
5
|
+
The register spans every genre. A tech brand (Stripe, Linear, Vercel). A luxury brand (a hotel, a fashion house). A consumer product (a restaurant, a travel site, a CPG packaging page). A creative studio, an agency portfolio, a band's album page. They all share the stance (*communicate, not transact*) and diverge wildly in aesthetic. Don't collapse them into a single look.
|
|
6
|
+
|
|
7
|
+
## The brand slop test
|
|
8
|
+
|
|
9
|
+
If someone could look at this and say "AI made that" without hesitation, it's failed. The bar is distinctiveness; a visitor should ask "how was this made?", not "which AI made this?"
|
|
10
|
+
|
|
11
|
+
Brand isn't a neutral register. AI-generated landing pages have flooded the internet, and average is no longer findable. Restraint without intent now reads as mediocre, not refined. Brand surfaces need a POV, a specific audience, a willingness to risk strangeness. Go big or go home.
|
|
12
|
+
|
|
13
|
+
**The second slop test: aesthetic lane.** Before committing to moves, name the reference. A Klim-style specimen page is one lane; Stripe-minimal is another; Liquid-Death-acid-maximalism is another. Don't drift into editorial-magazine aesthetics on a brief that isn't editorial. A hiking brand with Cormorant italic drop caps has the wrong register within the register.
|
|
14
|
+
|
|
15
|
+
Then the inverse test: in one sentence, describe what you're about to build the way a competitor would describe theirs. If that sentence fits the modal landing page in the category, restart.
|
|
16
|
+
|
|
17
|
+
## Typography
|
|
18
|
+
|
|
19
|
+
### Font selection procedure
|
|
20
|
+
|
|
21
|
+
Every project. Never skip.
|
|
22
|
+
|
|
23
|
+
1. Read the brief. Write three concrete brand-voice words. Not "modern" or "elegant," but "warm and mechanical and opinionated" or "calm and clinical and careful." Physical-object words.
|
|
24
|
+
2. List the three fonts you'd reach for by reflex. If any appear in the reflex-reject list below, reject them; they are training-data defaults and they create monoculture.
|
|
25
|
+
3. Browse a real catalog (Google Fonts, Pangram Pangram, Future Fonts, Adobe Fonts, ABC Dinamo, Klim, Velvetyne) with the three words in mind. Find the font for the brand as a *physical object*: a museum caption, a 1970s terminal manual, a fabric label, a cheap-newsprint children's book, a concert poster, a receipt from a mid-century diner. Reject the first thing that "looks designy."
|
|
26
|
+
4. Cross-check. "Elegant" is not necessarily serif. "Technical" is not necessarily sans. "Warm" is not Fraunces. If the final pick lines up with the original reflex, start over.
|
|
27
|
+
|
|
28
|
+
### Reflex-reject list
|
|
29
|
+
|
|
30
|
+
Training-data defaults. Ban list. Look further:
|
|
31
|
+
|
|
32
|
+
Fraunces · Newsreader · Lora · Crimson · Crimson Pro · Crimson Text · Playfair Display · Cormorant · Cormorant Garamond · Syne · IBM Plex Mono · IBM Plex Sans · IBM Plex Serif · Space Mono · Space Grotesk · Inter · DM Sans · DM Serif Display · DM Serif Text · Outfit · Plus Jakarta Sans · Instrument Sans · Instrument Serif
|
|
33
|
+
|
|
34
|
+
### Reflex-reject aesthetic lanes
|
|
35
|
+
|
|
36
|
+
Parallel to the font list. Currently saturated aesthetic families that have flooded brand surfaces. If a brief lands in one of these lanes without a register reason that *requires* it (a literal magazine, a literal terminal, a literal industrial signage system), it's the second-order training reflex: the trap one tier deeper than picking a Fraunces font. Look further.
|
|
37
|
+
|
|
38
|
+
- **Editorial-typographic.** Display serif (often italic) + small mono labels + ruled separators + monochromatic restraint. Klim-influenced, magazine-cover affectation. By 2026, every Stripe-adjacent and Notion-adjacent brand has landed here. The fingerprint: three rule-separated columns, an italic Fraunces / Recoleta / Newsreader headline, lowercase track-spaced metadata, no imagery.
|
|
39
|
+
|
|
40
|
+
(More entries land here on the same cadence the font list updates. Brutalist-utility and acid-maximalism may join when they saturate. Removing entries when they fall back below saturation is also fine.)
|
|
41
|
+
|
|
42
|
+
The reflex-reject lists apply to **new design choices**. When the existing brand has already committed to a font or a lane as part of its identity, identity-preservation wins; variants on an existing surface don't second-guess what's already shipping. The reflex-reject lists are for greenfield decisions and for departure-mode variants in [live.md](live.md).
|
|
43
|
+
|
|
44
|
+
### Pairing and voice
|
|
45
|
+
|
|
46
|
+
Distinctive + refined is the goal. The specific shape depends on the brand, not on the brand's category. A category ("restaurant", "dev tool", "magazine", "fintech") is not a recipe; treating it as one is the first-order reflex SKILL.md warns against.
|
|
47
|
+
|
|
48
|
+
Two families minimum is the rule *only* when the voice needs it. A single well-chosen family with committed weight/size contrast is stronger than a timid display+body pair.
|
|
49
|
+
|
|
50
|
+
### Scale
|
|
51
|
+
|
|
52
|
+
Modular scale, fluid `clamp()` for headings, ≥1.25 ratio between steps. Flat scales (1.1× apart) read as uncommitted.
|
|
53
|
+
|
|
54
|
+
Light text on dark backgrounds: add 0.05–0.1 to line-height. Light type reads as lighter weight and needs more breathing room.
|
|
55
|
+
|
|
56
|
+
## Color
|
|
57
|
+
|
|
58
|
+
Brand surfaces have permission for Committed, Full palette, and Drenched strategies. Use them. A single saturated color spread across a hero is not excess; it's voice. A beige-and-muted-slate landing page ignores the register.
|
|
59
|
+
|
|
60
|
+
- Name a real reference before picking a strategy. "Klim Type Foundry #ff4500 orange drench", "Stripe purple-on-white restraint", "Liquid Death acid-green full palette", "Mailchimp yellow full palette", "Condé Nast Traveler muted navy restraint", "Vercel pure black monochrome". Unnamed ambition becomes beige.
|
|
61
|
+
- Palette IS voice. A calm brand and a restless brand should not share palette mechanics.
|
|
62
|
+
- When the strategy is Committed or Drenched, color carries the brand. Don't hedge with neutrals around the edges. Commit.
|
|
63
|
+
- Don't converge across projects. Each brand surface differentiates from the last.
|
|
64
|
+
- When a cultural-symbol palette is the obvious pull, reach past it. Let the cultural reading come from typography, imagery, and copy, not the palette.
|
|
65
|
+
|
|
66
|
+
## Layout
|
|
67
|
+
|
|
68
|
+
- Asymmetric compositions are one option. Break the grid intentionally for emphasis.
|
|
69
|
+
- Fluid spacing with `clamp()` that breathes on larger viewports. Vary for rhythm: generous separations, tight groupings.
|
|
70
|
+
- For image-led briefs (hotels, restaurants, magazines, photography), full-bleed hero imagery with overlaid menu and centered headline is a canonical move; let the photograph be the design.
|
|
71
|
+
- When cards ARE the right affordance, use `grid-template-columns: repeat(auto-fit, minmax(280px, 1fr))` for breakpoint-free responsiveness.
|
|
72
|
+
|
|
73
|
+
## Imagery
|
|
74
|
+
|
|
75
|
+
Brand surfaces lean on imagery. A restaurant, hotel, magazine, or product landing page without any imagery reads as incomplete, not as restrained. A solid-color rectangle where a hero image should go is worse than a representative stock photo.
|
|
76
|
+
|
|
77
|
+
**When the brief implies imagery, you must ship imagery.** Zero images is a bug, not a design choice. "Restraint" is not an excuse. If the approved comp or brief is image-led, ship real project assets, generated raster assets, or a credible canvas/SVG/WebGL scene. Do not replace photographic, architectural, product, or place imagery with generic CSS panels, decorative diagrams, cards, bullets, or copy.
|
|
78
|
+
|
|
79
|
+
- **For greenfield work without local assets, use stock imagery.** Unsplash is the default. The URL shape is `https://images.unsplash.com/photo-{id}?auto=format&fit=crop&w=1600&q=80`. **Verify the URLs before referencing them.** If you have an image-search MCP, web-fetch tool, or browser access, use it to find real photo IDs and confirm they resolve. Guessed IDs (even ones that look real) often 404 and ship as broken-image placeholders. Without a verification path, pick fewer photos you're confident exist over more that you guessed; never substitute colored `<div>` placeholders.
|
|
80
|
+
- **Search for the brand's physical object**, not the generic category: "handmade pasta on a scratched wooden table" beats "Italian food"; "cypress trees above a limestone hotel facade at dusk" beats "luxury hotel".
|
|
81
|
+
- **One decisive photo beats five mediocre ones.** Hero imagery should commit to a mood; padding with more stock doesn't rescue an indecisive one.
|
|
82
|
+
- **Alt text is part of the voice.** "Coastal fettuccine, hand-cut, served on the terrace" beats "pasta dish".
|
|
83
|
+
|
|
84
|
+
"Imagery" here is broader than stock photography: product screenshots, custom data visualizations, generated SVG, and canvas/WebGL scenes are all imagery. Text-only pages where typography alone carries the entire visual weight are the failure mode.
|
|
85
|
+
|
|
86
|
+
## Motion
|
|
87
|
+
|
|
88
|
+
- One well-orchestrated page-load beats scattered micro-interactions, when the brand invites it. Some brands skip entrance motion entirely; the restraint is the voice.
|
|
89
|
+
|
|
90
|
+
## Brand bans (on top of the shared absolute bans)
|
|
91
|
+
|
|
92
|
+
- Monospace as lazy shorthand for "technical / developer." If the brand isn't technical, mono reads as costume.
|
|
93
|
+
- Large rounded-corner icons above every heading. Screams template.
|
|
94
|
+
- Single-family pages that picked the family by reflex, not voice. (A single family chosen deliberately is fine.)
|
|
95
|
+
- All-caps body copy. Reserve caps for short labels and headings.
|
|
96
|
+
- Timid palettes and average layouts. Safe = invisible.
|
|
97
|
+
- Zero imagery on a brief that implies imagery (restaurant, hotel, food, travel, fashion, photography, hobbyist). Colored blocks where a hero photo belongs.
|
|
98
|
+
- Defaulting to editorial-magazine aesthetics (display serif + italic + drop caps + broadsheet grid) on briefs that aren't magazine-shaped. Editorial is ONE aesthetic lane, not the default brand aesthetic.
|
|
99
|
+
- Repeated tiny uppercase tracked labels above every section heading. A single strong kicker can be voice; repeating it as section grammar is AI scaffolding unless it's a deliberate, named brand system.
|
|
100
|
+
|
|
101
|
+
## Brand permissions
|
|
102
|
+
|
|
103
|
+
Brand can afford things product can't. Take them.
|
|
104
|
+
|
|
105
|
+
- Ambitious first-load motion. Reveals and typographic choreography that earn their place; not fade-on-scroll for every section.
|
|
106
|
+
- Single-purpose viewports. One dominant idea per fold, long scroll, deliberate pacing.
|
|
107
|
+
- Unexpected color strategies. Palette IS voice; a calm brand and a restless brand should not share palette mechanics.
|
|
108
|
+
- Art direction per section. Different sections can have different visual worlds if the narrative demands it. Consistency of voice beats consistency of treatment.
|