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.
@@ -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,9 @@
1
+ # Workshop position - tracks current progress
2
+ # Updated by AI after each step completion
3
+
4
+ phase: 1
5
+ step: "product"
6
+ mode: "facilitation"
7
+ revision: 1 # +1 when backtracking
8
+ updated: ""
9
+ completed_at: null # ISO date when workshop finishes
@@ -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
+