@friedbotstudio/create-baseline 0.1.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 +202 -0
- package/README.md +222 -0
- package/bin/cli.js +247 -0
- package/obj/template/.claude/agents/swarm-worker.md +52 -0
- package/obj/template/.claude/bin/LICENSE +201 -0
- package/obj/template/.claude/bin/NOTICE +48 -0
- package/obj/template/.claude/commands/approve-spec.md +29 -0
- package/obj/template/.claude/commands/approve-swarm.md +27 -0
- package/obj/template/.claude/commands/grant-commit.md +19 -0
- package/obj/template/.claude/commands/init-project.md +191 -0
- package/obj/template/.claude/hooks/artifact_template_guard.sh +141 -0
- package/obj/template/.claude/hooks/consent_gate_grant.sh +89 -0
- package/obj/template/.claude/hooks/destructive_cmd_guard.sh +42 -0
- package/obj/template/.claude/hooks/env_guard.sh +36 -0
- package/obj/template/.claude/hooks/git_commit_guard.sh +93 -0
- package/obj/template/.claude/hooks/harness_continuation.sh +121 -0
- package/obj/template/.claude/hooks/lib/__pycache__/resume_writer.cpython-314.pyc +0 -0
- package/obj/template/.claude/hooks/lib/common.sh +328 -0
- package/obj/template/.claude/hooks/lib/resume_writer.py +341 -0
- package/obj/template/.claude/hooks/lint_runner.sh +55 -0
- package/obj/template/.claude/hooks/memory_pre_compact.sh +36 -0
- package/obj/template/.claude/hooks/memory_session_start.sh +244 -0
- package/obj/template/.claude/hooks/memory_stop.sh +173 -0
- package/obj/template/.claude/hooks/plantuml_syntax_guard.sh +161 -0
- package/obj/template/.claude/hooks/process_lifecycle_guard.sh +89 -0
- package/obj/template/.claude/hooks/setup_guard.sh +50 -0
- package/obj/template/.claude/hooks/spec_approval_guard.sh +81 -0
- package/obj/template/.claude/hooks/spec_design_calls_guard.sh +183 -0
- package/obj/template/.claude/hooks/spec_diagram_presence_guard.sh +141 -0
- package/obj/template/.claude/hooks/swarm_approval_guard.sh +39 -0
- package/obj/template/.claude/hooks/swarm_boundary_guard.sh +136 -0
- package/obj/template/.claude/hooks/tdd_order_guard.sh +176 -0
- package/obj/template/.claude/hooks/test_runner.sh +75 -0
- package/obj/template/.claude/hooks/tests/fixtures/ac008_byte_equal_reference.txt +12 -0
- package/obj/template/.claude/hooks/tests/memory_session_start_test.sh +285 -0
- package/obj/template/.claude/hooks/track_guard.sh +127 -0
- package/obj/template/.claude/hooks/verify_pass_guard.sh +88 -0
- package/obj/template/.claude/memory/README.md +108 -0
- package/obj/template/.claude/memory/_pending.md +15 -0
- package/obj/template/.claude/memory/_resume.md +12 -0
- package/obj/template/.claude/memory/conventions.md +26 -0
- package/obj/template/.claude/memory/decisions.md +29 -0
- package/obj/template/.claude/memory/landmarks.md +26 -0
- package/obj/template/.claude/memory/landmines.md +27 -0
- package/obj/template/.claude/memory/libraries.md +27 -0
- package/obj/template/.claude/memory/pending-questions.md +28 -0
- package/obj/template/.claude/project.json +221 -0
- package/obj/template/.claude/settings.json +110 -0
- package/obj/template/.claude/skills/archive/SKILL.md +48 -0
- package/obj/template/.claude/skills/archive/archive.sh +145 -0
- package/obj/template/.claude/skills/audit-baseline/SKILL.md +80 -0
- package/obj/template/.claude/skills/audit-baseline/audit.sh +919 -0
- package/obj/template/.claude/skills/brd/SKILL.md +44 -0
- package/obj/template/.claude/skills/brd/template.md +83 -0
- package/obj/template/.claude/skills/chore/SKILL.md +99 -0
- package/obj/template/.claude/skills/claude-automation-recommender/LICENSE +202 -0
- package/obj/template/.claude/skills/claude-automation-recommender/NOTICE +69 -0
- package/obj/template/.claude/skills/claude-automation-recommender/SKILL.md +358 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/hooks-patterns.md +226 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/mcp-servers.md +263 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/plugins-reference.md +98 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/skills-reference.md +408 -0
- package/obj/template/.claude/skills/claude-automation-recommender/references/subagent-templates.md +181 -0
- package/obj/template/.claude/skills/code-structure/SKILL.md +204 -0
- package/obj/template/.claude/skills/commit/SKILL.md +21 -0
- package/obj/template/.claude/skills/copywriting/SKILL.md +252 -0
- package/obj/template/.claude/skills/copywriting/evals/evals.json +111 -0
- package/obj/template/.claude/skills/copywriting/references/ai-writing-detection.md +200 -0
- package/obj/template/.claude/skills/copywriting/references/copy-frameworks.md +344 -0
- package/obj/template/.claude/skills/copywriting/references/natural-transitions.md +272 -0
- package/obj/template/.claude/skills/design-ui/SKILL.md +175 -0
- package/obj/template/.claude/skills/design-ui/references/design-vs-development.md +89 -0
- package/obj/template/.claude/skills/design-ui/references/intent-table.md +64 -0
- package/obj/template/.claude/skills/design-ui/references/orchestration.md +121 -0
- package/obj/template/.claude/skills/design-ui/references/state-machine.md +125 -0
- package/obj/template/.claude/skills/document/SKILL.md +66 -0
- package/obj/template/.claude/skills/documentation/SKILL.md +50 -0
- package/obj/template/.claude/skills/harness/SKILL.md +169 -0
- package/obj/template/.claude/skills/humanizer/SKILL.md +489 -0
- package/obj/template/.claude/skills/humanizer/references/ai-writing-detection.md +208 -0
- package/obj/template/.claude/skills/impeccable/PROJECT_NOTES.md +22 -0
- package/obj/template/.claude/skills/impeccable/SKILL.md +153 -0
- package/obj/template/.claude/skills/impeccable/agents/openai.yaml +4 -0
- package/obj/template/.claude/skills/impeccable/reference/adapt.md +190 -0
- package/obj/template/.claude/skills/impeccable/reference/animate.md +173 -0
- package/obj/template/.claude/skills/impeccable/reference/audit.md +134 -0
- package/obj/template/.claude/skills/impeccable/reference/bolder.md +113 -0
- package/obj/template/.claude/skills/impeccable/reference/brand.md +104 -0
- package/obj/template/.claude/skills/impeccable/reference/clarify.md +174 -0
- package/obj/template/.claude/skills/impeccable/reference/cognitive-load.md +106 -0
- package/obj/template/.claude/skills/impeccable/reference/color-and-contrast.md +105 -0
- package/obj/template/.claude/skills/impeccable/reference/colorize.md +154 -0
- package/obj/template/.claude/skills/impeccable/reference/craft.md +138 -0
- package/obj/template/.claude/skills/impeccable/reference/critique.md +213 -0
- package/obj/template/.claude/skills/impeccable/reference/delight.md +302 -0
- package/obj/template/.claude/skills/impeccable/reference/distill.md +111 -0
- package/obj/template/.claude/skills/impeccable/reference/document.md +427 -0
- package/obj/template/.claude/skills/impeccable/reference/extract.md +70 -0
- package/obj/template/.claude/skills/impeccable/reference/harden.md +347 -0
- package/obj/template/.claude/skills/impeccable/reference/heuristics-scoring.md +234 -0
- package/obj/template/.claude/skills/impeccable/reference/interaction-design.md +195 -0
- package/obj/template/.claude/skills/impeccable/reference/layout.md +141 -0
- package/obj/template/.claude/skills/impeccable/reference/live.md +513 -0
- package/obj/template/.claude/skills/impeccable/reference/motion-design.md +99 -0
- package/obj/template/.claude/skills/impeccable/reference/onboard.md +234 -0
- package/obj/template/.claude/skills/impeccable/reference/optimize.md +258 -0
- package/obj/template/.claude/skills/impeccable/reference/overdrive.md +130 -0
- package/obj/template/.claude/skills/impeccable/reference/personas.md +178 -0
- package/obj/template/.claude/skills/impeccable/reference/polish.md +232 -0
- package/obj/template/.claude/skills/impeccable/reference/product.md +62 -0
- package/obj/template/.claude/skills/impeccable/reference/quieter.md +99 -0
- package/obj/template/.claude/skills/impeccable/reference/responsive-design.md +114 -0
- package/obj/template/.claude/skills/impeccable/reference/shape.md +136 -0
- package/obj/template/.claude/skills/impeccable/reference/spatial-design.md +100 -0
- package/obj/template/.claude/skills/impeccable/reference/teach.md +137 -0
- package/obj/template/.claude/skills/impeccable/reference/typeset.md +124 -0
- package/obj/template/.claude/skills/impeccable/reference/typography.md +159 -0
- package/obj/template/.claude/skills/impeccable/reference/ux-writing.md +107 -0
- package/obj/template/.claude/skills/impeccable/scripts/cleanup-deprecated.mjs +284 -0
- package/obj/template/.claude/skills/impeccable/scripts/command-metadata.json +94 -0
- package/obj/template/.claude/skills/impeccable/scripts/design-parser.mjs +820 -0
- package/obj/template/.claude/skills/impeccable/scripts/detect-csp.mjs +198 -0
- package/obj/template/.claude/skills/impeccable/scripts/is-generated.mjs +69 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-accept.mjs +465 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-browser.js +4684 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-inject.mjs +436 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-poll.mjs +187 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-server.mjs +679 -0
- package/obj/template/.claude/skills/impeccable/scripts/live-wrap.mjs +395 -0
- package/obj/template/.claude/skills/impeccable/scripts/live.mjs +247 -0
- package/obj/template/.claude/skills/impeccable/scripts/load-context.mjs +93 -0
- package/obj/template/.claude/skills/impeccable/scripts/modern-screenshot.umd.js +14 -0
- package/obj/template/.claude/skills/impeccable/scripts/pin.mjs +214 -0
- package/obj/template/.claude/skills/implement/SKILL.md +83 -0
- package/obj/template/.claude/skills/intake/SKILL.md +46 -0
- package/obj/template/.claude/skills/intake/template.md +61 -0
- package/obj/template/.claude/skills/integrate/SKILL.md +62 -0
- package/obj/template/.claude/skills/memory-flush/SKILL.md +172 -0
- package/obj/template/.claude/skills/memory-flush/sweep.py +286 -0
- package/obj/template/.claude/skills/memory-flush/tests/run.sh +327 -0
- package/obj/template/.claude/skills/prose/SKILL.md +119 -0
- package/obj/template/.claude/skills/rca/SKILL.md +42 -0
- package/obj/template/.claude/skills/rca/template.md +83 -0
- package/obj/template/.claude/skills/research/SKILL.md +75 -0
- package/obj/template/.claude/skills/scenario/SKILL.md +64 -0
- package/obj/template/.claude/skills/scout/SKILL.md +72 -0
- package/obj/template/.claude/skills/security/SKILL.md +75 -0
- package/obj/template/.claude/skills/simplify/SKILL.md +67 -0
- package/obj/template/.claude/skills/spec/SKILL.md +69 -0
- package/obj/template/.claude/skills/spec/template.md +274 -0
- package/obj/template/.claude/skills/spec-diagram-review/SKILL.md +81 -0
- package/obj/template/.claude/skills/spec-lint/SKILL.md +55 -0
- package/obj/template/.claude/skills/spec-lint/lint.sh +218 -0
- package/obj/template/.claude/skills/spec-render/SKILL.md +45 -0
- package/obj/template/.claude/skills/spec-render/render.sh +109 -0
- package/obj/template/.claude/skills/spec-traceability-review/SKILL.md +72 -0
- package/obj/template/.claude/skills/swarm-dispatch/SKILL.md +212 -0
- package/obj/template/.claude/skills/swarm-dispatch/swarm_merge.sh +154 -0
- package/obj/template/.claude/skills/swarm-plan/SKILL.md +90 -0
- package/obj/template/.claude/skills/swarm-plan/validate.sh +181 -0
- package/obj/template/.claude/skills/tdd/SKILL.md +100 -0
- package/obj/template/.claude/skills/technical-tutorials/SKILL.md +569 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-context-README.md +53 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-context.md +246 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-example.md +175 -0
- package/obj/template/.claude/skills/technical-tutorials/references/audience-template.md +152 -0
- package/obj/template/.claude/skills/triage/SKILL.md +55 -0
- package/obj/template/.claude/skills/verify/SKILL.md +74 -0
- package/obj/template/.mcp.json +24 -0
- package/obj/template/CLAUDE.md +327 -0
- package/obj/template/docs/init/seed.md +585 -0
- package/obj/template/manifest.json +214 -0
- package/package.json +48 -0
- package/src/.mcp.template.json +24 -0
- package/src/.npmrc.template +2 -0
- package/src/CLAUDE.template.md +327 -0
- package/src/agents/swarm-worker.template.md +51 -0
- package/src/cli/conflict.js +31 -0
- package/src/cli/doctor.js +152 -0
- package/src/cli/install.js +93 -0
- package/src/cli/io.js +27 -0
- package/src/cli/manifest.js +38 -0
- package/src/cli/mcp.js +54 -0
- package/src/cli/merge.js +107 -0
- package/src/cli/plantuml.js +121 -0
- package/src/cli/util.js +10 -0
- package/src/memory/_pending.template.md +15 -0
- package/src/memory/_resume.template.md +12 -0
- package/src/memory/conventions.template.md +26 -0
- package/src/memory/decisions.template.md +29 -0
- package/src/memory/landmarks.template.md +26 -0
- package/src/memory/landmines.template.md +27 -0
- package/src/memory/libraries.template.md +27 -0
- package/src/memory/pending-questions.template.md +28 -0
- package/src/project.template.json +221 -0
- package/src/seed.template.md +585 -0
- package/src/settings.template.json +110 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Color & Contrast
|
|
2
|
+
|
|
3
|
+
## Color Spaces: Use OKLCH
|
|
4
|
+
|
|
5
|
+
**Stop using HSL.** Use OKLCH (or LCH) instead. It's perceptually uniform, meaning equal steps in lightness *look* equal—unlike HSL where 50% lightness in yellow looks bright while 50% in blue looks dark.
|
|
6
|
+
|
|
7
|
+
The OKLCH function takes three components: `oklch(lightness chroma hue)` where lightness is 0-100%, chroma is roughly 0-0.4, and hue is 0-360. To build a primary color and its lighter / darker variants, hold the chroma+hue roughly constant and vary the lightness — but **reduce chroma as you approach white or black**, because high chroma at extreme lightness looks garish.
|
|
8
|
+
|
|
9
|
+
The hue you pick is a brand decision and should not come from a default. Do not reach for blue (hue 250) or warm orange (hue 60) by reflex — those are the dominant AI-design defaults, not the right answer for any specific brand.
|
|
10
|
+
|
|
11
|
+
## Building Functional Palettes
|
|
12
|
+
|
|
13
|
+
### Tinted Neutrals
|
|
14
|
+
|
|
15
|
+
**Pure gray is dead.** A neutral with zero chroma feels lifeless next to a colored brand. Add a tiny chroma value (0.005-0.015) to all your neutrals, hued toward whatever your brand color is. The chroma is small enough not to read as "tinted" consciously, but it creates subconscious cohesion between brand color and UI surfaces.
|
|
16
|
+
|
|
17
|
+
The hue you tint toward should come from THIS project's brand, not from a "warm = friendly, cool = tech" formula. If your brand color is teal, your neutrals lean toward teal. If your brand color is amber, they lean toward amber. The point is cohesion with the SPECIFIC brand, not a stock palette.
|
|
18
|
+
|
|
19
|
+
**Avoid** the trap of always tinting toward warm orange or always tinting toward cool blue. Those are the two laziest defaults and they create their own monoculture across projects.
|
|
20
|
+
|
|
21
|
+
### Palette Structure
|
|
22
|
+
|
|
23
|
+
A complete system needs:
|
|
24
|
+
|
|
25
|
+
| Role | Purpose | Example |
|
|
26
|
+
|------|---------|---------|
|
|
27
|
+
| **Primary** | Brand, CTAs, key actions | 1 color, 3-5 shades |
|
|
28
|
+
| **Neutral** | Text, backgrounds, borders | 9-11 shade scale |
|
|
29
|
+
| **Semantic** | Success, error, warning, info | 4 colors, 2-3 shades each |
|
|
30
|
+
| **Surface** | Cards, modals, overlays | 2-3 elevation levels |
|
|
31
|
+
|
|
32
|
+
**Skip secondary/tertiary unless you need them.** Most apps work fine with one accent color. Adding more creates decision fatigue and visual noise.
|
|
33
|
+
|
|
34
|
+
### The 60-30-10 Rule (Applied Correctly)
|
|
35
|
+
|
|
36
|
+
This rule is about **visual weight**, not pixel count:
|
|
37
|
+
|
|
38
|
+
- **60%**: Neutral backgrounds, white space, base surfaces
|
|
39
|
+
- **30%**: Secondary colors—text, borders, inactive states
|
|
40
|
+
- **10%**: Accent—CTAs, highlights, focus states
|
|
41
|
+
|
|
42
|
+
The common mistake: using the accent color everywhere because it's "the brand color." Accent colors work *because* they're rare. Overuse kills their power.
|
|
43
|
+
|
|
44
|
+
## Contrast & Accessibility
|
|
45
|
+
|
|
46
|
+
### WCAG Requirements
|
|
47
|
+
|
|
48
|
+
| Content Type | AA Minimum | AAA Target |
|
|
49
|
+
|--------------|------------|------------|
|
|
50
|
+
| Body text | 4.5:1 | 7:1 |
|
|
51
|
+
| Large text (18px+ or 14px bold) | 3:1 | 4.5:1 |
|
|
52
|
+
| UI components, icons | 3:1 | 4.5:1 |
|
|
53
|
+
| Non-essential decorations | None | None |
|
|
54
|
+
|
|
55
|
+
**The gotcha**: Placeholder text still needs 4.5:1. That light gray placeholder you see everywhere? Usually fails WCAG.
|
|
56
|
+
|
|
57
|
+
### Dangerous Color Combinations
|
|
58
|
+
|
|
59
|
+
These commonly fail contrast or cause readability issues:
|
|
60
|
+
|
|
61
|
+
- Light gray text on white (the #1 accessibility fail)
|
|
62
|
+
- **Gray text on any colored background**—gray looks washed out and dead on color. Use a darker shade of the background color, or transparency
|
|
63
|
+
- Red text on green background (or vice versa)—8% of men can't distinguish these
|
|
64
|
+
- Blue text on red background (vibrates visually)
|
|
65
|
+
- Yellow text on white (almost always fails)
|
|
66
|
+
- Thin light text on images (unpredictable contrast)
|
|
67
|
+
|
|
68
|
+
### Never Use Pure Gray or Pure Black
|
|
69
|
+
|
|
70
|
+
Pure gray (`oklch(50% 0 0)`) and pure black (`#000`) don't exist in nature—real shadows and surfaces always have a color cast. Even a chroma of 0.005-0.01 is enough to feel natural without being obviously tinted. (See tinted neutrals example above.)
|
|
71
|
+
|
|
72
|
+
### Testing
|
|
73
|
+
|
|
74
|
+
Don't trust your eyes. Use tools:
|
|
75
|
+
|
|
76
|
+
- [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/)
|
|
77
|
+
- Browser DevTools → Rendering → Emulate vision deficiencies
|
|
78
|
+
- [Polypane](https://polypane.app/) for real-time testing
|
|
79
|
+
|
|
80
|
+
## Theming: Light & Dark Mode
|
|
81
|
+
|
|
82
|
+
### Dark Mode Is Not Inverted Light Mode
|
|
83
|
+
|
|
84
|
+
You can't just swap colors. Dark mode requires different design decisions:
|
|
85
|
+
|
|
86
|
+
| Light Mode | Dark Mode |
|
|
87
|
+
|------------|-----------|
|
|
88
|
+
| Shadows for depth | Lighter surfaces for depth (no shadows) |
|
|
89
|
+
| Dark text on light | Light text on dark (reduce font weight) |
|
|
90
|
+
| Vibrant accents | Desaturate accents slightly |
|
|
91
|
+
| White backgrounds | Never pure black—use dark gray (oklch 12-18%) |
|
|
92
|
+
|
|
93
|
+
In dark mode, depth comes from surface lightness, not shadow. Build a 3-step surface scale where higher elevations are lighter (e.g. 15% / 20% / 25% lightness). Use the SAME hue and chroma as your brand color (whatever it is for THIS project — do not reach for blue) and only vary the lightness. Reduce body text weight slightly (e.g. 350 instead of 400) because light text on dark reads as heavier than dark text on light.
|
|
94
|
+
|
|
95
|
+
### Token Hierarchy
|
|
96
|
+
|
|
97
|
+
Use two layers: primitive tokens (`--blue-500`) and semantic tokens (`--color-primary: var(--blue-500)`). For dark mode, only redefine the semantic layer—primitives stay the same.
|
|
98
|
+
|
|
99
|
+
## Alpha Is A Design Smell
|
|
100
|
+
|
|
101
|
+
Heavy use of transparency (rgba, hsla) usually means an incomplete palette. Alpha creates unpredictable contrast, performance overhead, and inconsistency. Define explicit overlay colors for each context instead. Exception: focus rings and interactive states where see-through is needed.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
**Avoid**: Relying on color alone to convey information. Creating palettes without clear roles for each color. Using pure black (#000) for large areas. Skipping color blindness testing (8% of men affected).
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
> **Additional context needed**: existing brand colors.
|
|
2
|
+
|
|
3
|
+
Strategically introduce color to designs that are too monochromatic, gray, or lacking in visual warmth and personality.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Register
|
|
8
|
+
|
|
9
|
+
Brand: palette IS voice. Pick a color strategy first per SKILL.md (Restrained / Committed / Full palette / Drenched) and follow its dosage. Committed, Full palette, and Drenched deliberately exceed the ≤10% rule — that rule is Restrained only. Unexpected combinations are allowed; a dominant color can own the page when the chosen strategy calls for it.
|
|
10
|
+
|
|
11
|
+
Product: semantic-first and almost always Restrained. Accent color is reserved for primary action, current selection, and state indicators — not decoration. Every color has a consistent meaning across every screen.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Assess Color Opportunity
|
|
16
|
+
|
|
17
|
+
Analyze the current state and identify opportunities:
|
|
18
|
+
|
|
19
|
+
1. **Understand current state**:
|
|
20
|
+
- **Color absence**: Pure grayscale? Limited neutrals? One timid accent?
|
|
21
|
+
- **Missed opportunities**: Where could color add meaning, hierarchy, or delight?
|
|
22
|
+
- **Context**: What's appropriate for this domain and audience?
|
|
23
|
+
- **Brand**: Are there existing brand colors we should use?
|
|
24
|
+
|
|
25
|
+
2. **Identify where color adds value**:
|
|
26
|
+
- **Semantic meaning**: Success (green), error (red), warning (yellow/orange), info (blue)
|
|
27
|
+
- **Hierarchy**: Drawing attention to important elements
|
|
28
|
+
- **Categorization**: Different sections, types, or states
|
|
29
|
+
- **Emotional tone**: Warmth, energy, trust, creativity
|
|
30
|
+
- **Wayfinding**: Helping users navigate and understand structure
|
|
31
|
+
- **Delight**: Moments of visual interest and personality
|
|
32
|
+
|
|
33
|
+
If any of these are unclear from the codebase, ask the user directly to clarify what you cannot infer.
|
|
34
|
+
|
|
35
|
+
**CRITICAL**: More color ≠ better. Strategic color beats rainbow vomit every time. Every color should have a purpose.
|
|
36
|
+
|
|
37
|
+
## Plan Color Strategy
|
|
38
|
+
|
|
39
|
+
Create a purposeful color introduction plan:
|
|
40
|
+
|
|
41
|
+
- **Color palette**: What colors match the brand/context? (Choose 2-4 colors max beyond neutrals)
|
|
42
|
+
- **Dominant color**: Which color owns 60% of colored elements?
|
|
43
|
+
- **Accent colors**: Which colors provide contrast and highlights? (30% and 10%)
|
|
44
|
+
- **Application strategy**: Where does each color appear and why?
|
|
45
|
+
|
|
46
|
+
**IMPORTANT**: Color should enhance hierarchy and meaning, not create chaos. Less is more when it matters more.
|
|
47
|
+
|
|
48
|
+
## Introduce Color Strategically
|
|
49
|
+
|
|
50
|
+
Add color systematically across these dimensions:
|
|
51
|
+
|
|
52
|
+
### Semantic Color
|
|
53
|
+
- **State indicators**:
|
|
54
|
+
- Success: Green tones (emerald, forest, mint)
|
|
55
|
+
- Error: Red/pink tones (rose, crimson, coral)
|
|
56
|
+
- Warning: Orange/amber tones
|
|
57
|
+
- Info: Blue tones (sky, ocean, indigo)
|
|
58
|
+
- Neutral: Gray/slate for inactive states
|
|
59
|
+
|
|
60
|
+
- **Status badges**: Colored backgrounds or borders for states (active, pending, completed, etc.)
|
|
61
|
+
- **Progress indicators**: Colored bars, rings, or charts showing completion or health
|
|
62
|
+
|
|
63
|
+
### Accent Color Application
|
|
64
|
+
- **Primary actions**: Color the most important buttons/CTAs
|
|
65
|
+
- **Links**: Add color to clickable text (maintain accessibility)
|
|
66
|
+
- **Icons**: Colorize key icons for recognition and personality
|
|
67
|
+
- **Headers/titles**: Add color to section headers or key labels
|
|
68
|
+
- **Hover states**: Introduce color on interaction
|
|
69
|
+
|
|
70
|
+
### Background & Surfaces
|
|
71
|
+
- **Tinted backgrounds**: Replace pure gray (`#f5f5f5`) with warm neutrals (`oklch(97% 0.01 60)`) or cool tints (`oklch(97% 0.01 250)`)
|
|
72
|
+
- **Colored sections**: Use subtle background colors to separate areas
|
|
73
|
+
- **Gradient backgrounds**: Add depth with subtle, intentional gradients (not generic purple-blue)
|
|
74
|
+
- **Cards & surfaces**: Tint cards or surfaces slightly for warmth
|
|
75
|
+
|
|
76
|
+
**Use OKLCH for color**: It's perceptually uniform, meaning equal steps in lightness *look* equal. Great for generating harmonious scales.
|
|
77
|
+
|
|
78
|
+
### Data Visualization
|
|
79
|
+
- **Charts & graphs**: Use color to encode categories or values
|
|
80
|
+
- **Heatmaps**: Color intensity shows density or importance
|
|
81
|
+
- **Comparison**: Color coding for different datasets or timeframes
|
|
82
|
+
|
|
83
|
+
### Borders & Accents
|
|
84
|
+
- **Hairline borders**: 1px colored borders on full perimeter (not side-stripes — see the absolute ban on `border-left/right > 1px`)
|
|
85
|
+
- **Underlines**: Color underlines for emphasis or active states
|
|
86
|
+
- **Dividers**: Subtle colored dividers instead of gray lines
|
|
87
|
+
- **Focus rings**: Colored focus indicators matching brand
|
|
88
|
+
- **Surface tints**: A 4-8% background wash of the accent color instead of a stripe
|
|
89
|
+
|
|
90
|
+
**NEVER**: `border-left` or `border-right` greater than 1px as a colored accent stripe. This is one of the three absolute bans in the parent skill. If you want to mark a card as "active" or "warning", use a full hairline border, a background tint, a leading glyph, or a numbered prefix — not a side stripe.
|
|
91
|
+
|
|
92
|
+
### Typography Color
|
|
93
|
+
- **Colored headings**: Use brand colors for section headings (maintain contrast)
|
|
94
|
+
- **Highlight text**: Color for emphasis or categories
|
|
95
|
+
- **Labels & tags**: Small colored labels for metadata or categories
|
|
96
|
+
|
|
97
|
+
### Decorative Elements
|
|
98
|
+
- **Illustrations**: Add colored illustrations or icons
|
|
99
|
+
- **Shapes**: Geometric shapes in brand colors as background elements
|
|
100
|
+
- **Gradients**: Colorful gradient overlays or mesh backgrounds
|
|
101
|
+
- **Blobs/organic shapes**: Soft colored shapes for visual interest
|
|
102
|
+
|
|
103
|
+
## Balance & Refinement
|
|
104
|
+
|
|
105
|
+
Ensure color addition improves rather than overwhelms:
|
|
106
|
+
|
|
107
|
+
### Maintain Hierarchy
|
|
108
|
+
- **Dominant color** (60%): Primary brand color or most used accent
|
|
109
|
+
- **Secondary color** (30%): Supporting color for variety
|
|
110
|
+
- **Accent color** (10%): High contrast for key moments
|
|
111
|
+
- **Neutrals** (remaining): Gray/black/white for structure
|
|
112
|
+
|
|
113
|
+
### Accessibility
|
|
114
|
+
- **Contrast ratios**: Ensure WCAG compliance (4.5:1 for text, 3:1 for UI components)
|
|
115
|
+
- **Don't rely on color alone**: Use icons, labels, or patterns alongside color
|
|
116
|
+
- **Test for color blindness**: Verify red/green combinations work for all users
|
|
117
|
+
|
|
118
|
+
### Cohesion
|
|
119
|
+
- **Consistent palette**: Use colors from defined palette, not arbitrary choices
|
|
120
|
+
- **Systematic application**: Same color meanings throughout (green always = success)
|
|
121
|
+
- **Temperature consistency**: Warm palette stays warm, cool stays cool
|
|
122
|
+
|
|
123
|
+
**NEVER**:
|
|
124
|
+
- Use every color in the rainbow (choose 2-4 colors beyond neutrals)
|
|
125
|
+
- Apply color randomly without semantic meaning
|
|
126
|
+
- Put gray text on colored backgrounds—it looks washed out; use a darker shade of the background color or transparency instead
|
|
127
|
+
- Use pure gray for neutrals—add subtle color tint (warm or cool) for sophistication
|
|
128
|
+
- Use pure black (`#000`) or pure white (`#fff`) for large areas
|
|
129
|
+
- Violate WCAG contrast requirements
|
|
130
|
+
- Use color as the only indicator (accessibility issue)
|
|
131
|
+
- Make everything colorful (defeats the purpose)
|
|
132
|
+
- Default to purple-blue gradients (AI slop aesthetic)
|
|
133
|
+
|
|
134
|
+
## Verify Color Addition
|
|
135
|
+
|
|
136
|
+
Test that colorization improves the experience:
|
|
137
|
+
|
|
138
|
+
- **Better hierarchy**: Does color guide attention appropriately?
|
|
139
|
+
- **Clearer meaning**: Does color help users understand states/categories?
|
|
140
|
+
- **More engaging**: Does the interface feel warmer and more inviting?
|
|
141
|
+
- **Still accessible**: Do all color combinations meet WCAG standards?
|
|
142
|
+
- **Not overwhelming**: Is color balanced and purposeful?
|
|
143
|
+
|
|
144
|
+
Remember: Color is emotional and powerful. Use it to create warmth, guide attention, communicate meaning, and express personality. But restraint and strategy matter more than saturation and variety. Be colorful, but be intentional.
|
|
145
|
+
|
|
146
|
+
## Live-mode signature params
|
|
147
|
+
|
|
148
|
+
When invoked from live mode, each variant MUST declare a `color-amount` param so the user can dial between a restrained accent and a drenched surface without regeneration. Author the variant's CSS against `var(--p-color-amount, 0.5)` — typically as the alpha multiplier on backgrounds, or as a scaling factor on the chroma axis in an OKLCH expression. 0 = neutral/monochrome, 1 = full saturation / dominant coverage.
|
|
149
|
+
|
|
150
|
+
```json
|
|
151
|
+
{"id":"color-amount","kind":"range","min":0,"max":1,"step":0.05,"default":0.5,"label":"Color amount"}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Layer 1-2 variant-specific params on top: palette selection (`steps` with named options), temperature warmth, or tint vs. true color. See `reference/live.md` for the full params contract.
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Craft Flow
|
|
2
|
+
|
|
3
|
+
Build a feature with impeccable UX and UI quality through a structured process: shape the design, load the right references, then build and iterate visually until the result is delightful.
|
|
4
|
+
|
|
5
|
+
## Real Example: Neon Mirai
|
|
6
|
+
|
|
7
|
+
Neon Mirai is the full craft loop in public. A retro-futurist AI design conference started with generated brand and hi-fi reference images, then shipped as a responsive static site in `public/neon-mirai`.
|
|
8
|
+
|
|
9
|
+
Repro command:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
$impeccable craft retro-futurist AI design conference website
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The important detail is the artifact chain: brand toolkit, north-star mock, semantic implementation, regenerated assets, browser iteration, responsive fixes. The mock was not treated as a screenshot to trace. It was used as direction for a real page.
|
|
16
|
+
|
|
17
|
+
## Step 1: Shape the Design
|
|
18
|
+
|
|
19
|
+
Run $impeccable shape, passing along whatever feature description the user provided.
|
|
20
|
+
|
|
21
|
+
Wait for the design brief to be fully confirmed before proceeding. The brief is your blueprint, and every implementation decision should trace back to it.
|
|
22
|
+
|
|
23
|
+
If the user has already run $impeccable shape and has a confirmed design brief, skip this step and use the existing brief.
|
|
24
|
+
|
|
25
|
+
## Step 2: Load References
|
|
26
|
+
|
|
27
|
+
Based on the design brief's "Recommended References" section, consult the relevant impeccable reference files. At minimum, always consult:
|
|
28
|
+
|
|
29
|
+
- [spatial-design.md](spatial-design.md) for layout and spacing
|
|
30
|
+
- [typography.md](typography.md) for type hierarchy
|
|
31
|
+
|
|
32
|
+
Then add references based on the brief's needs:
|
|
33
|
+
- Complex interactions or forms? Consult [interaction-design.md](interaction-design.md)
|
|
34
|
+
- Animation or transitions? Consult [motion-design.md](motion-design.md)
|
|
35
|
+
- Color-heavy or themed? Consult [color-and-contrast.md](color-and-contrast.md)
|
|
36
|
+
- Responsive requirements? Consult [responsive-design.md](responsive-design.md)
|
|
37
|
+
- Heavy on copy, labels, or errors? Consult [ux-writing.md](ux-writing.md)
|
|
38
|
+
|
|
39
|
+
## Step 3: North Star Mock (Capability-Gated)
|
|
40
|
+
|
|
41
|
+
Before implementation, generate a small set of high-fidelity visual comps when all of these are true:
|
|
42
|
+
|
|
43
|
+
- The work is **net-new** or visually open-ended enough that composition exploration will improve the build.
|
|
44
|
+
- The brief's scope is **mid-fi, high-fi, or production-ready**.
|
|
45
|
+
- The current harness has **built-in image generation capability** (for example, Codex with a native image tool). Do **not** ask the user to set up external APIs, shell scripts, or one-off tooling just to do this.
|
|
46
|
+
|
|
47
|
+
When those conditions are met, this step is the default for **both brand and product work**.
|
|
48
|
+
|
|
49
|
+
### Purpose
|
|
50
|
+
|
|
51
|
+
Use the mock step to find a stronger visual lane than code-first generation would reliably discover on its own. The brief remains authoritative on user, purpose, content, constraints, states, and anti-goals. The mock clarifies composition, hierarchy, density, typography, and visual tone.
|
|
52
|
+
|
|
53
|
+
### What to generate
|
|
54
|
+
|
|
55
|
+
Generate **1 to 3** high-fidelity north-star comps based on the confirmed brief.
|
|
56
|
+
|
|
57
|
+
- For brand work, push visual identity, composition, and mood aggressively.
|
|
58
|
+
- For product work, still push hierarchy, topology, density, and tone, but keep the comps grounded in realistic product structure and states.
|
|
59
|
+
|
|
60
|
+
The comps must be genuinely different in primary visual direction, not just color variants.
|
|
61
|
+
|
|
62
|
+
### After generation
|
|
63
|
+
|
|
64
|
+
Choose a direction with the user, or if the user delegated the decision, pick the strongest one and explain why.
|
|
65
|
+
|
|
66
|
+
Before moving to implementation, summarize:
|
|
67
|
+
|
|
68
|
+
- What to carry into code
|
|
69
|
+
- What **not** to literalize from the mock
|
|
70
|
+
|
|
71
|
+
Treat the mock as a **north star**, not a screenshot to trace. Do **not** let it override the confirmed brief.
|
|
72
|
+
|
|
73
|
+
## Step 4: Asset Extraction (Optional)
|
|
74
|
+
|
|
75
|
+
If the chosen direction includes image-native visual ingredients that would materially improve the implementation, generate them as separate assets before building.
|
|
76
|
+
|
|
77
|
+
Good candidates:
|
|
78
|
+
|
|
79
|
+
- stickers
|
|
80
|
+
- badges
|
|
81
|
+
- seals
|
|
82
|
+
- tickets
|
|
83
|
+
- graphic labels
|
|
84
|
+
- textures
|
|
85
|
+
- abstract objects
|
|
86
|
+
- decorative marks
|
|
87
|
+
- non-semantic scene elements
|
|
88
|
+
|
|
89
|
+
Do **not** export assets for core UI text, navigation, body copy, or any structure that should stay semantic and editable in code.
|
|
90
|
+
|
|
91
|
+
Usually **1 to 5** extracted assets is enough. If the design can be built cleanly in HTML/CSS/SVG, prefer that over raster assets.
|
|
92
|
+
|
|
93
|
+
## Step 5: Build
|
|
94
|
+
|
|
95
|
+
Implement the feature following the design brief. Work in this order:
|
|
96
|
+
|
|
97
|
+
1. **Structure first**: HTML/semantic structure for the primary state. No styling yet.
|
|
98
|
+
2. **Layout and spacing**: Establish the spatial rhythm and visual hierarchy.
|
|
99
|
+
3. **Typography and color**: Apply the type scale and color system.
|
|
100
|
+
4. **Interactive states**: Hover, focus, active, disabled.
|
|
101
|
+
5. **Edge case states**: Empty, loading, error, overflow, first-run.
|
|
102
|
+
6. **Motion**: Purposeful transitions and animations (if appropriate).
|
|
103
|
+
7. **Responsive**: Adapt for different viewports. Don't just shrink; redesign for the context.
|
|
104
|
+
|
|
105
|
+
### During Build
|
|
106
|
+
- Test with real (or realistic) data at every step, not placeholder text
|
|
107
|
+
- Check each state as you build it, not all at the end
|
|
108
|
+
- If you discover a design question, stop and ask rather than guessing
|
|
109
|
+
- Every visual choice should trace back to something in the design brief or the chosen north-star direction
|
|
110
|
+
- Keep text semantic, layout real, and interactions accessible. Do not turn the mock into a pile of rasterized UI
|
|
111
|
+
- If assets were extracted, use them intentionally. They support the build; they do not replace interface structure
|
|
112
|
+
|
|
113
|
+
## Step 6: Visual Iteration
|
|
114
|
+
|
|
115
|
+
**This step is critical.** Do not stop after the first implementation pass.
|
|
116
|
+
|
|
117
|
+
Open the result in a browser window. If browser automation tools are available, use them to navigate to the page and visually inspect the result. If not, ask the user to open it and provide feedback.
|
|
118
|
+
|
|
119
|
+
Iterate through these checks visually:
|
|
120
|
+
|
|
121
|
+
1. **Does it match the brief?** Compare the live result against every section of the design brief. Fix discrepancies.
|
|
122
|
+
2. **Does it pass the AI slop test?** If someone saw this and said "AI made this," would they believe it immediately? If yes, it needs more design intention.
|
|
123
|
+
3. **Check against impeccable's DON'T guidelines.** Fix any anti-pattern violations.
|
|
124
|
+
4. **Check every state.** Navigate through empty, error, loading, and edge case states. Each one should feel intentional, not like an afterthought.
|
|
125
|
+
5. **Check responsive.** Resize the viewport. Does it adapt well or just shrink?
|
|
126
|
+
6. **Check the details.** Spacing consistency, type hierarchy clarity, color contrast, interactive feedback, motion timing.
|
|
127
|
+
|
|
128
|
+
After each round of fixes, visually verify again. **Repeat until you would be proud to show this to the user.** The bar is not "it works"; the bar is "this delights."
|
|
129
|
+
|
|
130
|
+
## Step 7: Present
|
|
131
|
+
|
|
132
|
+
Present the result to the user:
|
|
133
|
+
- Show the feature in its primary state
|
|
134
|
+
- Walk through the key states (empty, error, responsive)
|
|
135
|
+
- Explain design decisions that connect back to the design brief and, when used, the chosen north-star mock
|
|
136
|
+
- Ask: "What's working? What isn't?"
|
|
137
|
+
|
|
138
|
+
Iterate based on feedback. Good design is rarely right on the first pass.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
> **Additional context needed**: what the interface is trying to accomplish.
|
|
2
|
+
|
|
3
|
+
### Gather Assessments
|
|
4
|
+
|
|
5
|
+
Launch two independent assessments. **Neither may see the other's output** — this isolation is what makes the combined score honest. Running both in one head silently anchors them to each other; do not shortcut it for cost, speed, or context-size reasons.
|
|
6
|
+
|
|
7
|
+
Delegate each assessment to a separate sub-agent (Claude Code's `Agent` tool, Codex's subagent spawning, etc.). Each returns structured findings as text. Do NOT output findings to the user yet.
|
|
8
|
+
|
|
9
|
+
Fall back to sequential in-head work only if the environment genuinely cannot spawn sub-agents.
|
|
10
|
+
|
|
11
|
+
**Tab isolation**: When browser automation is available, each assessment MUST create its own new tab. Never reuse an existing tab, even if one is already open at the correct URL. This prevents the two assessments from interfering with each other's page state.
|
|
12
|
+
|
|
13
|
+
#### Assessment A: LLM Design Review
|
|
14
|
+
|
|
15
|
+
Read the relevant source files (HTML, CSS, JS/TS) and, if browser automation is available, visually inspect the live page. **Create a new tab** for this; do not reuse existing tabs. After navigation, label the tab by setting the document title:
|
|
16
|
+
```javascript
|
|
17
|
+
document.title = '[LLM] ' + document.title;
|
|
18
|
+
```
|
|
19
|
+
Think like a design director. Evaluate:
|
|
20
|
+
|
|
21
|
+
**AI Slop Detection (CRITICAL)**: Does this look like every other AI-generated interface? Review against ALL **DON'T** guidelines from the parent impeccable skill (already loaded in this context). Check for AI color palette, gradient text, dark glows, glassmorphism, hero metric layouts, identical card grids, generic fonts, and all other tells. **The test**: If someone said "AI made this," would you believe them immediately?
|
|
22
|
+
|
|
23
|
+
**Holistic Design Review**: visual hierarchy (eye flow, primary action clarity), information architecture (structure, grouping, cognitive load), emotional resonance (does it match brand and audience?), discoverability (are interactive elements obvious?), composition (balance, whitespace, rhythm), typography (hierarchy, readability, font choices), color (purposeful use, cohesion, accessibility), states & edge cases (empty, loading, error, success), microcopy (clarity, tone, helpfulness).
|
|
24
|
+
|
|
25
|
+
**Cognitive Load** (consult [cognitive-load](cognitive-load.md)):
|
|
26
|
+
- Run the 8-item cognitive load checklist. Report failure count: 0-1 = low (good), 2-3 = moderate, 4+ = critical.
|
|
27
|
+
- Count visible options at each decision point. If >4, flag it.
|
|
28
|
+
- Check for progressive disclosure: is complexity revealed only when needed?
|
|
29
|
+
|
|
30
|
+
**Emotional Journey**:
|
|
31
|
+
- What emotion does this interface evoke? Is that intentional?
|
|
32
|
+
- **Peak-end rule**: Is the most intense moment positive? Does the experience end well?
|
|
33
|
+
- **Emotional valleys**: Check for anxiety spikes at high-stakes moments (payment, delete, commit). Are there design interventions (progress indicators, reassurance copy, undo options)?
|
|
34
|
+
|
|
35
|
+
**Nielsen's Heuristics** (consult [heuristics-scoring](heuristics-scoring.md)):
|
|
36
|
+
Score each of the 10 heuristics 0-4. This scoring will be presented in the report.
|
|
37
|
+
|
|
38
|
+
Return structured findings covering: AI slop verdict, heuristic scores, cognitive load assessment, what's working (2-3 items), priority issues (3-5 with what/why/fix), minor observations, and provocative questions.
|
|
39
|
+
|
|
40
|
+
#### Assessment B: Automated Detection
|
|
41
|
+
|
|
42
|
+
Run the bundled deterministic detector, which flags 25 specific patterns (AI slop tells + general design quality).
|
|
43
|
+
|
|
44
|
+
**CLI scan**:
|
|
45
|
+
```bash
|
|
46
|
+
npx impeccable --json [--fast] [target]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
- Pass HTML/JSX/TSX/Vue/Svelte files or directories as `[target]` (anything with markup). Do not pass CSS-only files.
|
|
50
|
+
- For URLs, skip the CLI scan (it requires Puppeteer). Use browser visualization instead.
|
|
51
|
+
- For large directories (200+ scannable files), use `--fast` (regex-only, skips jsdom)
|
|
52
|
+
- For 500+ files, narrow scope or ask the user
|
|
53
|
+
- Exit code 0 = clean, 2 = findings
|
|
54
|
+
|
|
55
|
+
**Browser visualization** — **required** when browser automation tools are available AND the target is a viewable page. The `[Human]` overlay tab is the user-facing deliverable; the critique is incomplete without it. Skip only if the target is not a viewable page (CSS-only file, non-browser target).
|
|
56
|
+
|
|
57
|
+
The overlay is a **visual aid for the user**. It highlights issues directly in their browser. Do NOT scroll through the page to screenshot overlays. Instead, read the console output to get the results programmatically.
|
|
58
|
+
|
|
59
|
+
1. **Start the live detection server**:
|
|
60
|
+
```bash
|
|
61
|
+
npx impeccable live &
|
|
62
|
+
```
|
|
63
|
+
Note the port printed to stdout (auto-assigned). Use `--port=PORT` to fix it.
|
|
64
|
+
2. **Create a new tab** and navigate to the page (use dev server URL for local files, or direct URL). Do not reuse existing tabs.
|
|
65
|
+
3. **Label the tab** via `javascript_tool` so the user can distinguish it:
|
|
66
|
+
```javascript
|
|
67
|
+
document.title = '[Human] ' + document.title;
|
|
68
|
+
```
|
|
69
|
+
4. **Scroll to top** to ensure the page is scrolled to the very top before injection
|
|
70
|
+
5. **Inject** via `javascript_tool` (replace PORT with the port from step 1):
|
|
71
|
+
```javascript
|
|
72
|
+
const s = document.createElement('script'); s.src = 'http://localhost:PORT/detect.js'; document.head.appendChild(s);
|
|
73
|
+
```
|
|
74
|
+
6. Wait 2-3 seconds for the detector to render overlays
|
|
75
|
+
7. **Read results from console** using `read_console_messages` with pattern `impeccable`. The detector logs all findings with the `[impeccable]` prefix. Do NOT scroll through the page to take screenshots of the overlays.
|
|
76
|
+
8. **Cleanup**: Stop the live server when done:
|
|
77
|
+
```bash
|
|
78
|
+
npx impeccable live stop
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
For multi-view targets, inject on 3-5 representative pages. If injection fails, continue with CLI results only.
|
|
82
|
+
|
|
83
|
+
Return: CLI findings (JSON), browser console findings (if applicable), and any false positives noted.
|
|
84
|
+
|
|
85
|
+
### Generate Combined Critique Report
|
|
86
|
+
|
|
87
|
+
Synthesize both assessments into a single report. Do NOT simply concatenate. Weave the findings together, noting where the LLM review and detector agree, where the detector caught issues the LLM missed, and where detector findings are false positives.
|
|
88
|
+
|
|
89
|
+
Structure your feedback as a design director would:
|
|
90
|
+
|
|
91
|
+
#### Design Health Score
|
|
92
|
+
> *Consult [heuristics-scoring](heuristics-scoring.md)*
|
|
93
|
+
|
|
94
|
+
Present the Nielsen's 10 heuristics scores as a table:
|
|
95
|
+
|
|
96
|
+
| # | Heuristic | Score | Key Issue |
|
|
97
|
+
|---|-----------|-------|-----------|
|
|
98
|
+
| 1 | Visibility of System Status | ? | [specific finding or "n/a" if solid] |
|
|
99
|
+
| 2 | Match System / Real World | ? | |
|
|
100
|
+
| 3 | User Control and Freedom | ? | |
|
|
101
|
+
| 4 | Consistency and Standards | ? | |
|
|
102
|
+
| 5 | Error Prevention | ? | |
|
|
103
|
+
| 6 | Recognition Rather Than Recall | ? | |
|
|
104
|
+
| 7 | Flexibility and Efficiency | ? | |
|
|
105
|
+
| 8 | Aesthetic and Minimalist Design | ? | |
|
|
106
|
+
| 9 | Error Recovery | ? | |
|
|
107
|
+
| 10 | Help and Documentation | ? | |
|
|
108
|
+
| **Total** | | **??/40** | **[Rating band]** |
|
|
109
|
+
|
|
110
|
+
Be honest with scores. A 4 means genuinely excellent. Most real interfaces score 20-32.
|
|
111
|
+
|
|
112
|
+
#### Anti-Patterns Verdict
|
|
113
|
+
|
|
114
|
+
**Start here.** Does this look AI-generated?
|
|
115
|
+
|
|
116
|
+
**LLM assessment**: Your own evaluation of AI slop tells. Cover overall aesthetic feel, layout sameness, generic composition, missed opportunities for personality.
|
|
117
|
+
|
|
118
|
+
**Deterministic scan**: Summarize what the automated detector found, with counts and file locations. Note any additional issues the detector caught that you missed, and flag any false positives.
|
|
119
|
+
|
|
120
|
+
**Visual overlays** (if browser was used): Tell the user that overlays are now visible in the **[Human]** tab in their browser, highlighting the detected issues. Summarize what the console output reported.
|
|
121
|
+
|
|
122
|
+
#### Overall Impression
|
|
123
|
+
A brief gut reaction: what works, what doesn't, and the single biggest opportunity.
|
|
124
|
+
|
|
125
|
+
#### What's Working
|
|
126
|
+
Highlight 2-3 things done well. Be specific about why they work.
|
|
127
|
+
|
|
128
|
+
#### Priority Issues
|
|
129
|
+
The 3-5 most impactful design problems, ordered by importance.
|
|
130
|
+
|
|
131
|
+
For each issue, tag with **P0-P3 severity** (consult [heuristics-scoring](heuristics-scoring.md) for severity definitions):
|
|
132
|
+
- **[P?] What**: Name the problem clearly
|
|
133
|
+
- **Why it matters**: How this hurts users or undermines goals
|
|
134
|
+
- **Fix**: What to do about it (be concrete)
|
|
135
|
+
- **Suggested command**: Which command could address this (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)
|
|
136
|
+
|
|
137
|
+
#### Persona Red Flags
|
|
138
|
+
> *Consult [personas](personas.md)*
|
|
139
|
+
|
|
140
|
+
Auto-select 2-3 personas most relevant to this interface type (use the selection table in the reference). If `AGENTS.md` contains a `## Design Context` section from `impeccable teach`, also generate 1-2 project-specific personas from the audience/brand info.
|
|
141
|
+
|
|
142
|
+
For each selected persona, walk through the primary user action and list specific red flags found:
|
|
143
|
+
|
|
144
|
+
**Alex (Power User)**: No keyboard shortcuts detected. Form requires 8 clicks for primary action. Forced modal onboarding. High abandonment risk.
|
|
145
|
+
|
|
146
|
+
**Jordan (First-Timer)**: Icon-only nav in sidebar. Technical jargon in error messages ("404 Not Found"). No visible help. Will abandon at step 2.
|
|
147
|
+
|
|
148
|
+
Be specific. Name the exact elements and interactions that fail each persona. Don't write generic persona descriptions; write what broke for them.
|
|
149
|
+
|
|
150
|
+
#### Minor Observations
|
|
151
|
+
Quick notes on smaller issues worth addressing.
|
|
152
|
+
|
|
153
|
+
#### Questions to Consider
|
|
154
|
+
Provocative questions that might unlock better solutions:
|
|
155
|
+
- "What if the primary action were more prominent?"
|
|
156
|
+
- "Does this need to feel this complex?"
|
|
157
|
+
- "What would a confident version of this look like?"
|
|
158
|
+
|
|
159
|
+
**Remember**:
|
|
160
|
+
- Be direct. Vague feedback wastes everyone's time.
|
|
161
|
+
- Be specific. "The submit button," not "some elements."
|
|
162
|
+
- Say what's wrong AND why it matters to users.
|
|
163
|
+
- Give concrete suggestions, not just "consider exploring..."
|
|
164
|
+
- Prioritize ruthlessly. If everything is important, nothing is.
|
|
165
|
+
- Don't soften criticism. Developers need honest feedback to ship great design.
|
|
166
|
+
|
|
167
|
+
### Ask the User
|
|
168
|
+
|
|
169
|
+
**After presenting findings**, use targeted questions based on what was actually found. ask the user directly to clarify what you cannot infer. These answers will shape the action plan.
|
|
170
|
+
|
|
171
|
+
Ask questions along these lines (adapt to the specific findings; do NOT ask generic questions):
|
|
172
|
+
|
|
173
|
+
1. **Priority direction**: Based on the issues found, ask which category matters most to the user right now. For example: "I found problems with visual hierarchy, color usage, and information overload. Which area should we tackle first?" Offer the top 2-3 issue categories as options.
|
|
174
|
+
|
|
175
|
+
2. **Design intent**: If the critique found a tonal mismatch, ask whether it was intentional. For example: "The interface feels clinical and corporate. Is that the intended tone, or should it feel warmer/bolder/more playful?" Offer 2-3 tonal directions as options based on what would fix the issues found.
|
|
176
|
+
|
|
177
|
+
3. **Scope**: Ask how much the user wants to take on. For example: "I found N issues. Want to address everything, or focus on the top 3?" Offer scope options like "Top 3 only", "All issues", "Critical issues only".
|
|
178
|
+
|
|
179
|
+
4. **Constraints** (optional; only ask if relevant): If the findings touch many areas, ask if anything is off-limits. For example: "Should any sections stay as-is?" This prevents the plan from touching things the user considers done.
|
|
180
|
+
|
|
181
|
+
**Rules for questions**:
|
|
182
|
+
- Every question must reference specific findings from the report. Never ask generic "who is your audience?" questions.
|
|
183
|
+
- Keep it to 2-4 questions maximum. Respect the user's time.
|
|
184
|
+
- Offer concrete options, not open-ended prompts.
|
|
185
|
+
- If findings are straightforward (e.g., only 1-2 clear issues), skip questions and go directly to Recommended Actions.
|
|
186
|
+
|
|
187
|
+
### Recommended Actions
|
|
188
|
+
|
|
189
|
+
**After receiving the user's answers**, present a prioritized action summary reflecting the user's priorities and scope from Ask the User.
|
|
190
|
+
|
|
191
|
+
#### Action Summary
|
|
192
|
+
|
|
193
|
+
List recommended commands in priority order, based on the user's answers:
|
|
194
|
+
|
|
195
|
+
1. **`$command-name`**: Brief description of what to fix (specific context from critique findings)
|
|
196
|
+
2. **`$command-name`**: Brief description (specific context)
|
|
197
|
+
...
|
|
198
|
+
|
|
199
|
+
**Rules for recommendations**:
|
|
200
|
+
- 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
|
|
201
|
+
- Order by the user's stated priorities first, then by impact
|
|
202
|
+
- Each item's description should carry enough context that the command knows what to focus on
|
|
203
|
+
- Map each Priority Issue to the appropriate command
|
|
204
|
+
- Skip commands that would address zero issues
|
|
205
|
+
- If the user chose a limited scope, only include items within that scope
|
|
206
|
+
- If the user marked areas as off-limits, exclude commands that would touch those areas
|
|
207
|
+
- End with `$impeccable polish` as the final step if any fixes were recommended
|
|
208
|
+
|
|
209
|
+
After presenting the summary, tell the user:
|
|
210
|
+
|
|
211
|
+
> You can ask me to run these one at a time, all at once, or in any order you prefer.
|
|
212
|
+
>
|
|
213
|
+
> Re-run `$impeccable critique` after fixes to see your score improve.
|