brandspec 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 +21 -0
- package/README.md +230 -0
- package/dist/cli.js +1516 -0
- package/dist/index.cjs +773 -0
- package/dist/index.d.cts +402 -0
- package/dist/index.d.ts +402 -0
- package/dist/index.js +718 -0
- package/package.json +61 -0
- package/schema/spec/assets.md +219 -0
- package/schema/spec/core.md +203 -0
- package/schema/spec/guidelines.md +110 -0
- package/schema/spec/tokens.md +389 -0
- package/schema/v0.1.0.yaml +201 -0
- package/workshop/SKILL.md +218 -0
- package/workshop/flow.md +181 -0
- package/workshop/phases/01-discovery.md +156 -0
- package/workshop/phases/02-concept.md +234 -0
- package/workshop/phases/03-visual.md +271 -0
- package/workshop/phases/04-documentation.md +99 -0
- package/workshop/templates/_workshop/decisions.yml +15 -0
- package/workshop/templates/_workshop/memo.md +23 -0
- package/workshop/templates/_workshop/position.yml +9 -0
- package/workshop/templates/_workshop/session.md +28 -0
- package/workshop/templates/brand.yaml +112 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
# Phase 2: Concept
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Define the brand's personality, voice, and verbal identity.
|
|
6
|
+
|
|
7
|
+
**Spec reference:** Read `../../schema/spec/core.md` for core field definitions, voice structure, and what belongs in `core` vs `guidelines` vs `extensions`.
|
|
8
|
+
|
|
9
|
+
## Steps
|
|
10
|
+
|
|
11
|
+
### 2.1 Personality
|
|
12
|
+
|
|
13
|
+
**Questions to answer:**
|
|
14
|
+
|
|
15
|
+
- If the brand were a person, how would you describe them?
|
|
16
|
+
- What 3-5 adjectives capture the brand?
|
|
17
|
+
- What should users feel when interacting with the brand?
|
|
18
|
+
|
|
19
|
+
**Facilitation approach:**
|
|
20
|
+
|
|
21
|
+
Present contrasting pairs and ask user to choose:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
Where does your brand fall?
|
|
25
|
+
|
|
26
|
+
Formal ←───────→ Casual
|
|
27
|
+
Traditional ←───────→ Innovative
|
|
28
|
+
Serious ←───────→ Playful
|
|
29
|
+
Reserved ←───────→ Bold
|
|
30
|
+
Expert ←───────→ Friendly
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Output: Personality Traits**
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
# Example
|
|
37
|
+
personality:
|
|
38
|
+
- innovative
|
|
39
|
+
- approachable
|
|
40
|
+
- confident
|
|
41
|
+
- playful
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### 2.2 Voice
|
|
47
|
+
|
|
48
|
+
**Questions to answer:**
|
|
49
|
+
|
|
50
|
+
- How does the brand speak?
|
|
51
|
+
- What's the tone in different contexts?
|
|
52
|
+
- What words/phrases to use or avoid?
|
|
53
|
+
|
|
54
|
+
**Facilitation prompts:**
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
How would the brand greet a new user?
|
|
58
|
+
How would it apologize for an error?
|
|
59
|
+
What words are "on brand" vs "off brand"?
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Output: Voice Guidelines**
|
|
63
|
+
|
|
64
|
+
The schema `core.voice` contains only `tone` and `principles`. Do/Don't examples belong in `guidelines` as enforceable rules (see `../../schema/spec/core.md` §Voice: What Goes Where).
|
|
65
|
+
|
|
66
|
+
```yaml
|
|
67
|
+
# core.voice — tone and principles only
|
|
68
|
+
voice:
|
|
69
|
+
tone:
|
|
70
|
+
- friendly
|
|
71
|
+
- clear
|
|
72
|
+
- encouraging
|
|
73
|
+
principles:
|
|
74
|
+
- "Use active voice"
|
|
75
|
+
- "Keep sentences short"
|
|
76
|
+
- "Celebrate user wins"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Voice do/don't examples should be recorded in `guidelines.voice-examples`:
|
|
80
|
+
|
|
81
|
+
```yaml
|
|
82
|
+
# guidelines.voice-examples — enforceable voice rules
|
|
83
|
+
guidelines:
|
|
84
|
+
voice-examples:
|
|
85
|
+
content: |
|
|
86
|
+
## Voice Examples
|
|
87
|
+
- Greeting: "Hey there!" (not "Dear user")
|
|
88
|
+
- Error: "Oops, something went wrong" (not "Error 500")
|
|
89
|
+
rules:
|
|
90
|
+
- id: "voice-no-jargon"
|
|
91
|
+
description: "No corporate jargon in user-facing messages"
|
|
92
|
+
severity: warning
|
|
93
|
+
applies_to: voice
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### 2.3 Naming (if needed)
|
|
99
|
+
|
|
100
|
+
Skip if name is already decided.
|
|
101
|
+
|
|
102
|
+
**Approaches:**
|
|
103
|
+
|
|
104
|
+
1. **Descriptive** - Says what it does (Dropbox, YouTube)
|
|
105
|
+
2. **Abstract** - Evocative, no literal meaning (Apple, Nike)
|
|
106
|
+
3. **Founder/Origin** - Personal name (Tesla, Disney)
|
|
107
|
+
4. **Compound** - Combined words (Facebook, Snapchat)
|
|
108
|
+
5. **Invented** - Made up (Kodak, Xerox)
|
|
109
|
+
|
|
110
|
+
**Facilitation approach:**
|
|
111
|
+
|
|
112
|
+
Generate candidates in each category, then filter:
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
# Candidate generation
|
|
116
|
+
a) Descriptive: BrandSync, AssetHub
|
|
117
|
+
b) Abstract: Beacon, Prism
|
|
118
|
+
c) Compound: BrandBox, AssetFlow
|
|
119
|
+
|
|
120
|
+
# Filtering criteria
|
|
121
|
+
- Domain available?
|
|
122
|
+
- Easy to spell/pronounce?
|
|
123
|
+
- Unique enough to trademark?
|
|
124
|
+
- Fits the personality?
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Output: Confirmed Name**
|
|
128
|
+
|
|
129
|
+
The confirmed name goes into `meta.name`. The rationale is recorded in `_workshop/decisions.yml` (not in `core` or `meta`). If you want to preserve it in the final brand.yaml, use `extensions.naming.rationale`.
|
|
130
|
+
|
|
131
|
+
```yaml
|
|
132
|
+
# meta.name — the only required field in brandspec
|
|
133
|
+
meta:
|
|
134
|
+
name: "Prism"
|
|
135
|
+
|
|
136
|
+
# rationale recorded in decisions.yml, or optionally:
|
|
137
|
+
extensions:
|
|
138
|
+
naming:
|
|
139
|
+
rationale: "Evokes clarity, multiple facets of brand, light/modern feel"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### 2.4 Tagline
|
|
145
|
+
|
|
146
|
+
**Questions to answer:**
|
|
147
|
+
|
|
148
|
+
- What's the one-liner that captures the brand promise?
|
|
149
|
+
- Is it memorable? Does it differentiate?
|
|
150
|
+
|
|
151
|
+
**Approaches:**
|
|
152
|
+
|
|
153
|
+
1. **Benefit-focused** - "Think different"
|
|
154
|
+
2. **Emotional** - "Just do it"
|
|
155
|
+
3. **Descriptive** - "The ultimate driving machine"
|
|
156
|
+
4. **Provocative** - "Have it your way"
|
|
157
|
+
|
|
158
|
+
**Facilitation approach:**
|
|
159
|
+
|
|
160
|
+
Generate 5-10 candidates, narrow to 3, user picks:
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Candidates:
|
|
164
|
+
a) "Brand clarity, delivered"
|
|
165
|
+
b) "Your brand, everywhere"
|
|
166
|
+
c) "One source of truth"
|
|
167
|
+
|
|
168
|
+
Which resonates most?
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**Output: Tagline**
|
|
172
|
+
|
|
173
|
+
```yaml
|
|
174
|
+
# Example
|
|
175
|
+
tagline: "Brand clarity, delivered"
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Phase Complete Checklist
|
|
181
|
+
|
|
182
|
+
- [ ] 3-5 personality traits selected
|
|
183
|
+
- [ ] Voice tone and principles defined
|
|
184
|
+
- [ ] Name confirmed (or skipped if pre-existing)
|
|
185
|
+
- [ ] Tagline selected
|
|
186
|
+
- [ ] All recorded in `decisions.yml`
|
|
187
|
+
|
|
188
|
+
## Transition to Phase 3
|
|
189
|
+
|
|
190
|
+
When all items are checked:
|
|
191
|
+
|
|
192
|
+
```yaml
|
|
193
|
+
# Update position.yml
|
|
194
|
+
phase: 3
|
|
195
|
+
step: "mood"
|
|
196
|
+
mode: "facilitation"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Example Session
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
AI: Now let's define personality. I'll show you some spectrums.
|
|
203
|
+
Where does your brand fall?
|
|
204
|
+
|
|
205
|
+
Formal ←───●───→ Casual
|
|
206
|
+
|
|
207
|
+
(1=very formal, 5=very casual)
|
|
208
|
+
|
|
209
|
+
User: 4 - pretty casual but not sloppy
|
|
210
|
+
|
|
211
|
+
AI: Got it. How about:
|
|
212
|
+
|
|
213
|
+
Serious ←───●───→ Playful
|
|
214
|
+
|
|
215
|
+
User: 3 - balanced, we want to be taken seriously but not boring
|
|
216
|
+
|
|
217
|
+
AI: Based on this, here are personality trait candidates:
|
|
218
|
+
|
|
219
|
+
a) Professional, reliable, calm
|
|
220
|
+
b) Approachable, confident, modern
|
|
221
|
+
c) Bold, innovative, energetic
|
|
222
|
+
|
|
223
|
+
Which set feels closest?
|
|
224
|
+
|
|
225
|
+
User: b, but add a touch of playful from c
|
|
226
|
+
|
|
227
|
+
AI: How about:
|
|
228
|
+
- Approachable
|
|
229
|
+
- Confident
|
|
230
|
+
- Modern
|
|
231
|
+
- Playful (subtle)
|
|
232
|
+
|
|
233
|
+
[Records to decisions.yml]
|
|
234
|
+
```
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# Phase 3: Visual Identity
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Define the visual language: colors, typography, and logo direction.
|
|
6
|
+
|
|
7
|
+
**Spec reference:** Read `../../schema/spec/tokens.md` for token format, color system, and naming conventions. Read `../../schema/spec/assets.md` for logo system patterns and asset structure.
|
|
8
|
+
|
|
9
|
+
## Steps
|
|
10
|
+
|
|
11
|
+
### 3.1 Mood
|
|
12
|
+
|
|
13
|
+
**Questions to answer:**
|
|
14
|
+
|
|
15
|
+
- What's the visual feeling we're going for?
|
|
16
|
+
- What existing brands/designs inspire us?
|
|
17
|
+
- What visual territory should we own?
|
|
18
|
+
|
|
19
|
+
**Facilitation approach:**
|
|
20
|
+
|
|
21
|
+
Describe visual directions based on personality:
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
Based on your personality (approachable, confident, modern, playful),
|
|
25
|
+
here are visual directions:
|
|
26
|
+
|
|
27
|
+
a) Clean & Minimal - Lots of white space, subtle colors, geometric
|
|
28
|
+
b) Warm & Friendly - Rounded shapes, warm palette, illustrations
|
|
29
|
+
c) Bold & Dynamic - Strong colors, sharp contrasts, movement
|
|
30
|
+
|
|
31
|
+
Which direction appeals?
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Output: Mood Direction**
|
|
35
|
+
|
|
36
|
+
```yaml
|
|
37
|
+
# Example
|
|
38
|
+
mood:
|
|
39
|
+
direction: "Clean & Minimal with warm touches"
|
|
40
|
+
references:
|
|
41
|
+
- "Linear (the app)"
|
|
42
|
+
- "Notion"
|
|
43
|
+
- "Stripe"
|
|
44
|
+
characteristics:
|
|
45
|
+
- "Generous white space"
|
|
46
|
+
- "Subtle, purposeful color"
|
|
47
|
+
- "Modern but not cold"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### 3.2 Colors
|
|
53
|
+
|
|
54
|
+
**Spec reference:** See `../../schema/spec/tokens.md` §Colors for the complete color specification including variant naming, required/recommended tokens, dark mode, and palette generation guidelines.
|
|
55
|
+
|
|
56
|
+
**Subsection overview:**
|
|
57
|
+
|
|
58
|
+
| Item | Classification | Notes |
|
|
59
|
+
|------|---------------|-------|
|
|
60
|
+
| primary + foreground, secondary + foreground | Required | Minimum brand colors |
|
|
61
|
+
| background / foreground / muted | Required | UI surfaces |
|
|
62
|
+
| destructive | Required | Error states |
|
|
63
|
+
| success / warning / info | Recommended | AI generates defaults from primary hue, user adjusts |
|
|
64
|
+
| dark mode | Optional | Ask explicitly: "Does your product need dark mode?" |
|
|
65
|
+
| brand-scale 50–900 | Optional | Advanced use only |
|
|
66
|
+
| $extensions.compat | Optional | Only when legacy tool support is needed |
|
|
67
|
+
|
|
68
|
+
#### Progressive shortcut (recommended flow)
|
|
69
|
+
|
|
70
|
+
The full color system can feel overwhelming. Use this progressive approach:
|
|
71
|
+
|
|
72
|
+
1. **User decides**: primary color direction (from personality/mood)
|
|
73
|
+
2. **User decides**: secondary/accent color
|
|
74
|
+
3. **AI generates**: all remaining colors (surfaces, semantics, destructive) using the palette generation guidelines in spec/tokens.md
|
|
75
|
+
4. **User confirms**: "Does this palette feel right?" — adjust any that don't work
|
|
76
|
+
|
|
77
|
+
This keeps user decisions to 2-3 choices while producing a complete, harmonious palette.
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
Facilitation shortcut:
|
|
81
|
+
|
|
82
|
+
AI: "You chose teal as your primary. Here's the complete palette
|
|
83
|
+
I've derived from it:
|
|
84
|
+
|
|
85
|
+
Brand: primary oklch(0.65 0.15 190) / secondary oklch(0.70 0.10 100)
|
|
86
|
+
Surfaces: background, foreground, muted (neutral with teal undertone)
|
|
87
|
+
Status: success (green), warning (amber), info (blue), destructive (red)
|
|
88
|
+
|
|
89
|
+
[Shows full palette]
|
|
90
|
+
|
|
91
|
+
This all works together. Want to adjust anything, or shall we move on?"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### Full control path
|
|
95
|
+
|
|
96
|
+
For users who want to define each color individually, walk through the token categories defined in spec/tokens.md (required → recommended → optional).
|
|
97
|
+
|
|
98
|
+
**Color psychology reference:**
|
|
99
|
+
|
|
100
|
+
| Color | Associations |
|
|
101
|
+
|-------|-------------|
|
|
102
|
+
| Blue | Trust, stability, technology |
|
|
103
|
+
| Green | Growth, nature, health |
|
|
104
|
+
| Purple | Creativity, luxury, wisdom |
|
|
105
|
+
| Orange | Energy, warmth, friendliness |
|
|
106
|
+
| Red | Passion, urgency, power |
|
|
107
|
+
| Yellow | Optimism, clarity, warmth |
|
|
108
|
+
|
|
109
|
+
**Facilitation approach:**
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
Given your personality (modern, approachable), consider:
|
|
113
|
+
|
|
114
|
+
a) Blue-based: Trust + professionalism
|
|
115
|
+
Primary: oklch(0.65 0.18 250)
|
|
116
|
+
|
|
117
|
+
b) Teal-based: Modern + fresh
|
|
118
|
+
Primary: oklch(0.65 0.15 190)
|
|
119
|
+
|
|
120
|
+
c) Purple-based: Creative + premium
|
|
121
|
+
Primary: oklch(0.60 0.20 300)
|
|
122
|
+
|
|
123
|
+
Which family feels right?
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
#### Dark mode [Optional — ask explicitly]
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
Does your product need dark mode?
|
|
130
|
+
|
|
131
|
+
a) Yes — let's define dark variants for your core colors
|
|
132
|
+
b) No — skip for now (can be added later)
|
|
133
|
+
c) Not sure — let's skip it and revisit when needed
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
If yes, generate `$extensions.dark` values as specified in spec/tokens.md §Dark Mode.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
### 3.3 Typography
|
|
141
|
+
|
|
142
|
+
**Spec reference:** See `../../schema/spec/tokens.md` §Typography for token format and font pairing strategies.
|
|
143
|
+
|
|
144
|
+
**Questions to answer:**
|
|
145
|
+
|
|
146
|
+
- What font for headings?
|
|
147
|
+
- What font for body text?
|
|
148
|
+
- What about code/monospace?
|
|
149
|
+
|
|
150
|
+
**Facilitation approach:**
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
Typography options:
|
|
154
|
+
|
|
155
|
+
a) Modern & Clean
|
|
156
|
+
Heading: Inter (bold)
|
|
157
|
+
Body: Inter (regular)
|
|
158
|
+
|
|
159
|
+
b) Distinctive Headlines
|
|
160
|
+
Heading: Space Grotesk
|
|
161
|
+
Body: Inter
|
|
162
|
+
|
|
163
|
+
c) Editorial Feel
|
|
164
|
+
Heading: Fraunces (serif)
|
|
165
|
+
Body: Inter
|
|
166
|
+
|
|
167
|
+
Which direction?
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### 3.4 Logo System
|
|
173
|
+
|
|
174
|
+
**Spec reference:** See `../../schema/spec/assets.md` §Logo System Patterns for pattern definitions, required assets per pattern, and recommended variants.
|
|
175
|
+
|
|
176
|
+
**Note:** This step produces a **logo system brief** — the pattern, required assets, and usage guidance. Actual logo creation may be done externally.
|
|
177
|
+
|
|
178
|
+
**Facilitation approach:**
|
|
179
|
+
|
|
180
|
+
Present patterns based on brand personality and practical needs:
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
Your brand identity so far:
|
|
184
|
+
- Name: [from Phase 2]
|
|
185
|
+
- Personality: [from Phase 2]
|
|
186
|
+
- Mood: [from 3.1]
|
|
187
|
+
|
|
188
|
+
Logo system patterns:
|
|
189
|
+
|
|
190
|
+
a) Wordmark
|
|
191
|
+
Your name as the identity. Clean, typographic.
|
|
192
|
+
Simplest to manage.
|
|
193
|
+
|
|
194
|
+
b) Symbol + Wordmark
|
|
195
|
+
A mark that can stand on its own + your name.
|
|
196
|
+
Most flexible. Best if you need an app icon.
|
|
197
|
+
|
|
198
|
+
c) Combination Mark
|
|
199
|
+
An integrated logo — symbol and name as one unit.
|
|
200
|
+
Consistent, easier to manage than (b).
|
|
201
|
+
|
|
202
|
+
d) Emblem
|
|
203
|
+
Name enclosed in a shape. Heritage, authority feel.
|
|
204
|
+
|
|
205
|
+
Which pattern fits your brand?
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
After pattern selection, confirm the asset checklist from spec/assets.md:
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
You chose: Symbol + Wordmark
|
|
212
|
+
|
|
213
|
+
Assets you'll need:
|
|
214
|
+
✓ symbol (primary, inverse, monochrome)
|
|
215
|
+
✓ wordmark (primary, inverse, monochrome)
|
|
216
|
+
○ logo-horizontal (recommended, combined layout)
|
|
217
|
+
○ logo-vertical (recommended, combined layout)
|
|
218
|
+
|
|
219
|
+
Plus for digital use:
|
|
220
|
+
✓ favicon derived from symbol
|
|
221
|
+
○ app icon (if applicable)
|
|
222
|
+
○ OG image for social sharing
|
|
223
|
+
|
|
224
|
+
Shall I record this, or adjust anything?
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Then explore the visual concept:
|
|
228
|
+
|
|
229
|
+
**Output: Logo System Brief**
|
|
230
|
+
|
|
231
|
+
```yaml
|
|
232
|
+
logo:
|
|
233
|
+
pattern: "symbol_wordmark"
|
|
234
|
+
concept: "Abstract prism shape suggesting clarity and multiple perspectives"
|
|
235
|
+
required_assets:
|
|
236
|
+
- role: symbol
|
|
237
|
+
variants: [primary, inverse, monochrome]
|
|
238
|
+
- role: wordmark
|
|
239
|
+
variants: [primary, inverse, monochrome]
|
|
240
|
+
optional_assets:
|
|
241
|
+
- role: logo
|
|
242
|
+
variants: [horizontal, vertical]
|
|
243
|
+
- role: favicon
|
|
244
|
+
note: "Derived from symbol"
|
|
245
|
+
requirements:
|
|
246
|
+
- "Symbol works at 16px (favicon)"
|
|
247
|
+
- "Single color version for sponsorship contexts"
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Phase Complete Checklist
|
|
253
|
+
|
|
254
|
+
- [ ] Visual mood/direction defined
|
|
255
|
+
- [ ] Color palette complete (all required tokens from spec/tokens.md)
|
|
256
|
+
- [ ] Typography selected (heading, body, optionally mono)
|
|
257
|
+
- [ ] Logo system pattern selected
|
|
258
|
+
- [ ] Required and optional assets identified
|
|
259
|
+
- [ ] Logo concept/brief documented
|
|
260
|
+
- [ ] All recorded in `decisions.yml`
|
|
261
|
+
|
|
262
|
+
## Transition to Phase 4
|
|
263
|
+
|
|
264
|
+
When all items are checked:
|
|
265
|
+
|
|
266
|
+
```yaml
|
|
267
|
+
# Update position.yml
|
|
268
|
+
phase: 4
|
|
269
|
+
step: "defaults"
|
|
270
|
+
mode: "facilitation"
|
|
271
|
+
```
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# Phase 4: Documentation
|
|
2
|
+
|
|
3
|
+
## Goal
|
|
4
|
+
|
|
5
|
+
Generate `brand.yaml` and finalize the brandspec directory.
|
|
6
|
+
|
|
7
|
+
**Spec reference:** See `../../schema/spec/tokens.md` §Spacing, §Radius. See `../../schema/spec/assets.md` for asset registration. See `../../schema/spec/core.md` for core field structure.
|
|
8
|
+
|
|
9
|
+
## Steps
|
|
10
|
+
|
|
11
|
+
### 4.1 Defaults Confirmation
|
|
12
|
+
|
|
13
|
+
Confirm standard spacing and radius tokens before generating `brand.yaml`.
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Almost done. Standard spacing and radius will be included
|
|
17
|
+
(compatible with shadcn/ui + Tailwind v4):
|
|
18
|
+
|
|
19
|
+
Spacing: xs 0.25rem / sm 0.5rem / md 1rem / lg 1.5rem / xl 2rem
|
|
20
|
+
Radius: sm 0.25rem / md 0.5rem / lg 1rem
|
|
21
|
+
|
|
22
|
+
OK with these defaults?
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
If the user wants to customize, adjust. Otherwise record as confirmed and move on.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
### 4.2 brand.yaml Generation
|
|
30
|
+
|
|
31
|
+
Generate `brand.yaml` from all decisions (using latest non-superseded decisions).
|
|
32
|
+
|
|
33
|
+
**Process:**
|
|
34
|
+
|
|
35
|
+
1. Gather all decisions from `decisions.yml` (latest non-superseded for each key)
|
|
36
|
+
2. Structure into brandspec format following the spec files (core.md, tokens.md, assets.md, guidelines.md)
|
|
37
|
+
3. Write to `brand.yaml`
|
|
38
|
+
4. If assets exist from Phase 3 logo work or user-provided files, register them in the `assets` section using the structure defined in spec/assets.md. If none exist, leave `assets: []`
|
|
39
|
+
5. If dark mode was defined, add `$extensions.dark` to surface and brand color tokens
|
|
40
|
+
6. Validate against schema:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npx brandspec validate brand.yaml
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
If validation fails, fix and re-validate.
|
|
47
|
+
|
|
48
|
+
**Output:** `brand.yaml` (brandspec directory root)
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
### 4.3 Final Review
|
|
53
|
+
|
|
54
|
+
Present the completed brandspec directory to the user for approval.
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Here's your brandspec:
|
|
58
|
+
|
|
59
|
+
brandspec/
|
|
60
|
+
├── brand.yaml — source of truth
|
|
61
|
+
├── assets/ — brand assets (if any)
|
|
62
|
+
└── _workshop/ — process records
|
|
63
|
+
└── decisions.yml
|
|
64
|
+
|
|
65
|
+
Review:
|
|
66
|
+
1. Does the essence capture your brand?
|
|
67
|
+
2. Are the colors right?
|
|
68
|
+
3. Anything to adjust?
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
If the user requests changes, go back and fix. Otherwise, mark complete.
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Phase Complete Checklist
|
|
76
|
+
|
|
77
|
+
- [ ] Spacing/radius confirmed
|
|
78
|
+
- [ ] `brand.yaml` generated and valid
|
|
79
|
+
- [ ] Assets registered (or noted as next action)
|
|
80
|
+
- [ ] User has reviewed and approved
|
|
81
|
+
|
|
82
|
+
## Workshop Complete
|
|
83
|
+
|
|
84
|
+
When approved:
|
|
85
|
+
|
|
86
|
+
```yaml
|
|
87
|
+
# Update position.yml
|
|
88
|
+
phase: 4
|
|
89
|
+
step: "complete"
|
|
90
|
+
mode: "execution"
|
|
91
|
+
completed_at: "2026-02-23"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Next steps to suggest:**
|
|
95
|
+
|
|
96
|
+
1. Create logo based on the brief (Phase 3) and register in `assets/`
|
|
97
|
+
2. Generate token files: `npx brandspec generate --format all`
|
|
98
|
+
3. Use `npx brandspec consult` for brand-aligned AI consultation
|
|
99
|
+
4. Host on brandspec.tools for team distribution
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Workshop decisions - append-only log
|
|
2
|
+
# Each decision is permanent and timestamped
|
|
3
|
+
# When overriding a previous decision, use `supersedes` to reference its ID
|
|
4
|
+
|
|
5
|
+
decisions: []
|
|
6
|
+
|
|
7
|
+
# Decision schema:
|
|
8
|
+
# - id: "d001" # Unique ID (auto-increment)
|
|
9
|
+
# timestamp: "ISO 8601"
|
|
10
|
+
# phase: 1
|
|
11
|
+
# step: "product"
|
|
12
|
+
# key: "product_essence"
|
|
13
|
+
# value: "..."
|
|
14
|
+
# rationale: "..."
|
|
15
|
+
# supersedes: null # or "d00X" if overriding a previous decision
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Working Memo
|
|
2
|
+
|
|
3
|
+
This file is for working notes during the workshop.
|
|
4
|
+
It can be overwritten freely - nothing here is permanent.
|
|
5
|
+
|
|
6
|
+
Use this for:
|
|
7
|
+
- Brainstorming candidates
|
|
8
|
+
- Exploring options
|
|
9
|
+
- Draft content before finalizing
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Current Focus
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Candidates / Options
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## Notes
|
|
22
|
+
|
|
23
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Session Handoff
|
|
2
|
+
|
|
3
|
+
This file captures context for resuming the workshop.
|
|
4
|
+
Updated at the end of each session.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Last Session
|
|
9
|
+
|
|
10
|
+
Updated: <!-- ISO timestamp -->
|
|
11
|
+
|
|
12
|
+
## Current State
|
|
13
|
+
|
|
14
|
+
- Phase:
|
|
15
|
+
- Step:
|
|
16
|
+
- Mode:
|
|
17
|
+
|
|
18
|
+
## Key Decisions Made
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## Next Actions
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## Open Questions
|
|
27
|
+
|
|
28
|
+
|