@synap-core/workspace-templates 0.5.0 → 0.6.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/dist/index.d.ts +493 -19
- package/dist/index.js +23899 -20
- package/dist/index.js.map +1 -0
- package/package.json +6 -5
- package/src/blockchain-ecosystem.yaml +372 -0
- package/src/communication.yaml +662 -0
- package/src/content-studio.yaml +268 -0
- package/src/crm.yaml +101 -2187
- package/src/define.ts +25 -2
- package/src/dev-dashboard.yaml +3 -0
- package/src/ecosystem.yaml +478 -0
- package/src/foundation.yaml +226 -0
- package/src/grants.yaml +1096 -0
- package/src/hr.yaml +6 -0
- package/src/index.ts +6 -5
- package/src/internal-runbook.yaml +499 -0
- package/src/legal.yaml +6 -6
- package/src/marketing.yaml +36 -9
- package/src/operations.yaml +146 -420
- package/src/social.yaml +246 -0
- package/src/templates.ts +9130 -9598
- package/src/types.ts +55 -0
- package/dist/define.d.ts +0 -97
- package/dist/define.d.ts.map +0 -1
- package/dist/define.js +0 -91
- package/dist/index.d.ts.map +0 -1
- package/dist/templates.d.ts +0 -7
- package/dist/templates.d.ts.map +0 -1
- package/dist/templates.js +0 -24237
- package/dist/types.d.ts +0 -350
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -8
- package/src/content-os.yaml +0 -1064
- package/src/radar.yaml +0 -297
|
@@ -0,0 +1,662 @@
|
|
|
1
|
+
# Communication workspace template
|
|
2
|
+
# Enterprise-OS reference "Communication" domain (Wave 1).
|
|
3
|
+
# MERGES the Brand Library's brand kinds with the Foundation's narrative kinds:
|
|
4
|
+
# Communication OWNS the brand + narrative ARTIFACTS (identity, voice, rules,
|
|
5
|
+
# positioning, narrative, audience, differentiator) — the on-brand source every
|
|
6
|
+
# downstream domain (Content, Marketing, Social) reads from. It does NOT own
|
|
7
|
+
# company-DNA (mission/vision/values) nor relationship roles (client/partner).
|
|
8
|
+
|
|
9
|
+
meta:
|
|
10
|
+
slug: communication
|
|
11
|
+
name: Communication
|
|
12
|
+
description: "Owns brand identity, voice, and narrative/positioning — the on-brand source of truth every downstream domain (Content, Marketing, Social) reads from so everything ships on-brand and on-message."
|
|
13
|
+
icon: messages-square
|
|
14
|
+
color: "#7C3AED"
|
|
15
|
+
tags: [communication, brand, narrative, voice, positioning]
|
|
16
|
+
isPublic: true
|
|
17
|
+
|
|
18
|
+
workspace:
|
|
19
|
+
name: Communication
|
|
20
|
+
description: "Owns brand identity, voice, and narrative/positioning — the on-brand source of truth every downstream domain reads from."
|
|
21
|
+
subtype: communication
|
|
22
|
+
visibility: pod_visible
|
|
23
|
+
capabilities:
|
|
24
|
+
- brand.library
|
|
25
|
+
- brand.identity
|
|
26
|
+
- brand.voice
|
|
27
|
+
- brand.assets
|
|
28
|
+
- brand.templates
|
|
29
|
+
- brand.components
|
|
30
|
+
- narrative.positioning
|
|
31
|
+
sourceRoles:
|
|
32
|
+
brand: provider
|
|
33
|
+
narrative: provider
|
|
34
|
+
|
|
35
|
+
profiles:
|
|
36
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
37
|
+
# BRAND KINDS — verbatim from brand-library.yaml
|
|
38
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
39
|
+
- slug: brand-identity
|
|
40
|
+
displayName: Brand Identity
|
|
41
|
+
icon: fingerprint
|
|
42
|
+
color: amber
|
|
43
|
+
description: "Root brand context: positioning, audience, website, voice summary, and generation intent."
|
|
44
|
+
semanticSlug: brand.identity
|
|
45
|
+
properties:
|
|
46
|
+
- slug: brand-type
|
|
47
|
+
label: Brand type
|
|
48
|
+
valueType: string
|
|
49
|
+
inputType: select
|
|
50
|
+
enumValues: [product-digital, product-physical, agency, personal-brand, nonprofit, institutional, universal]
|
|
51
|
+
constraints: { defaultValue: universal }
|
|
52
|
+
- slug: brand-status
|
|
53
|
+
label: Status
|
|
54
|
+
valueType: string
|
|
55
|
+
inputType: select
|
|
56
|
+
enumValues: [draft, active, archived]
|
|
57
|
+
constraints: { defaultValue: active }
|
|
58
|
+
- slug: brand-tagline
|
|
59
|
+
label: Tagline
|
|
60
|
+
valueType: string
|
|
61
|
+
inputType: text
|
|
62
|
+
- slug: brand-website
|
|
63
|
+
label: Website
|
|
64
|
+
valueType: string
|
|
65
|
+
inputType: url
|
|
66
|
+
- slug: brand-industry
|
|
67
|
+
label: Industry
|
|
68
|
+
valueType: string
|
|
69
|
+
inputType: text
|
|
70
|
+
- slug: brand-positioning
|
|
71
|
+
label: Positioning
|
|
72
|
+
valueType: string
|
|
73
|
+
inputType: textarea
|
|
74
|
+
- slug: brand-audience-primary
|
|
75
|
+
label: Primary audience
|
|
76
|
+
valueType: string
|
|
77
|
+
inputType: textarea
|
|
78
|
+
- slug: brand-audience-secondary
|
|
79
|
+
label: Secondary audience
|
|
80
|
+
valueType: string
|
|
81
|
+
inputType: textarea
|
|
82
|
+
- slug: brand-voice-summary
|
|
83
|
+
label: Voice summary
|
|
84
|
+
valueType: string
|
|
85
|
+
inputType: textarea
|
|
86
|
+
- slug: brand-notes
|
|
87
|
+
label: Notes
|
|
88
|
+
valueType: string
|
|
89
|
+
inputType: textarea
|
|
90
|
+
|
|
91
|
+
- slug: brand-color
|
|
92
|
+
displayName: Brand Color
|
|
93
|
+
icon: swatch-book
|
|
94
|
+
color: violet
|
|
95
|
+
description: Approved palette entry with semantic role, usage notes, and print references.
|
|
96
|
+
semanticSlug: brand.color
|
|
97
|
+
properties:
|
|
98
|
+
- slug: color-role
|
|
99
|
+
label: Role
|
|
100
|
+
valueType: string
|
|
101
|
+
inputType: select
|
|
102
|
+
enumValues: [primary, secondary, accent, background, surface, surface-elevated, text, text-muted, border, success, warning, error, info, neutral, campaign, custom]
|
|
103
|
+
constraints: { defaultValue: custom }
|
|
104
|
+
- slug: color-group
|
|
105
|
+
label: Group
|
|
106
|
+
valueType: string
|
|
107
|
+
inputType: select
|
|
108
|
+
enumValues: [core, extended, semantic, neutral, seasonal, campaign]
|
|
109
|
+
constraints: { defaultValue: core }
|
|
110
|
+
- slug: color-hex
|
|
111
|
+
label: Hex
|
|
112
|
+
valueType: string
|
|
113
|
+
inputType: color
|
|
114
|
+
- slug: color-rgb
|
|
115
|
+
label: RGB
|
|
116
|
+
valueType: string
|
|
117
|
+
inputType: text
|
|
118
|
+
- slug: color-cmyk
|
|
119
|
+
label: CMYK
|
|
120
|
+
valueType: string
|
|
121
|
+
inputType: text
|
|
122
|
+
- slug: color-pantone
|
|
123
|
+
label: Pantone
|
|
124
|
+
valueType: string
|
|
125
|
+
inputType: text
|
|
126
|
+
- slug: color-ral
|
|
127
|
+
label: RAL
|
|
128
|
+
valueType: string
|
|
129
|
+
inputType: text
|
|
130
|
+
- slug: color-token-name
|
|
131
|
+
label: Token name
|
|
132
|
+
valueType: string
|
|
133
|
+
inputType: text
|
|
134
|
+
- slug: color-usage
|
|
135
|
+
label: Usage note
|
|
136
|
+
valueType: string
|
|
137
|
+
inputType: textarea
|
|
138
|
+
- slug: color-status
|
|
139
|
+
label: Status
|
|
140
|
+
valueType: string
|
|
141
|
+
inputType: select
|
|
142
|
+
enumValues: [draft, approved, deprecated]
|
|
143
|
+
constraints: { defaultValue: approved }
|
|
144
|
+
|
|
145
|
+
- slug: brand-font
|
|
146
|
+
displayName: Brand Typeface
|
|
147
|
+
icon: type
|
|
148
|
+
color: blue
|
|
149
|
+
description: Typeface with role, family, licensing, import URL, weights, and fallback stack.
|
|
150
|
+
semanticSlug: brand.font
|
|
151
|
+
properties:
|
|
152
|
+
- slug: font-role
|
|
153
|
+
label: Role
|
|
154
|
+
valueType: string
|
|
155
|
+
inputType: select
|
|
156
|
+
enumValues: [heading, body, display, mono, accent, ui, caption]
|
|
157
|
+
constraints: { defaultValue: body }
|
|
158
|
+
- slug: font-family
|
|
159
|
+
label: Family
|
|
160
|
+
valueType: string
|
|
161
|
+
inputType: text
|
|
162
|
+
- slug: font-foundry
|
|
163
|
+
label: Foundry
|
|
164
|
+
valueType: string
|
|
165
|
+
inputType: text
|
|
166
|
+
- slug: font-license
|
|
167
|
+
label: License
|
|
168
|
+
valueType: string
|
|
169
|
+
inputType: select
|
|
170
|
+
enumValues: [open-source, google-fonts, adobe-fonts, licensed, custom, system]
|
|
171
|
+
constraints: { defaultValue: google-fonts }
|
|
172
|
+
- slug: font-weights
|
|
173
|
+
label: Weights
|
|
174
|
+
valueType: string
|
|
175
|
+
inputType: text
|
|
176
|
+
- slug: font-fallback
|
|
177
|
+
label: Fallback stack
|
|
178
|
+
valueType: string
|
|
179
|
+
inputType: text
|
|
180
|
+
- slug: font-url
|
|
181
|
+
label: Import URL
|
|
182
|
+
valueType: string
|
|
183
|
+
inputType: url
|
|
184
|
+
- slug: font-document-id
|
|
185
|
+
label: Font document ID
|
|
186
|
+
valueType: string
|
|
187
|
+
inputType: text
|
|
188
|
+
- slug: font-status
|
|
189
|
+
label: Status
|
|
190
|
+
valueType: string
|
|
191
|
+
inputType: select
|
|
192
|
+
enumValues: [active, draft, deprecated]
|
|
193
|
+
constraints: { defaultValue: active }
|
|
194
|
+
|
|
195
|
+
- slug: brand-asset
|
|
196
|
+
displayName: Brand Asset
|
|
197
|
+
icon: image
|
|
198
|
+
color: green
|
|
199
|
+
description: "Document-backed or URL-backed reusable media: logos, imagery, icons, fonts, video, references, and documents."
|
|
200
|
+
semanticSlug: brand.asset
|
|
201
|
+
properties:
|
|
202
|
+
- slug: asset-kind
|
|
203
|
+
label: Kind
|
|
204
|
+
valueType: string
|
|
205
|
+
inputType: select
|
|
206
|
+
enumValues: [logo, wordmark, symbol, monogram, pattern, texture, icon-set, illustration, photo, video, document, font, 3d-model, print-ready, reference, other]
|
|
207
|
+
- slug: asset-variant
|
|
208
|
+
label: Variant
|
|
209
|
+
valueType: string
|
|
210
|
+
inputType: select
|
|
211
|
+
enumValues: [primary, secondary, horizontal, stacked, mono-dark, mono-light, white, reversed, favicon, social-avatar, og-image, other]
|
|
212
|
+
- slug: asset-status
|
|
213
|
+
label: Status
|
|
214
|
+
valueType: string
|
|
215
|
+
inputType: select
|
|
216
|
+
enumValues: [draft, approved, deprecated]
|
|
217
|
+
constraints: { defaultValue: approved }
|
|
218
|
+
- slug: asset-usage
|
|
219
|
+
label: Usage notes
|
|
220
|
+
valueType: string
|
|
221
|
+
inputType: textarea
|
|
222
|
+
- slug: asset-tags
|
|
223
|
+
label: Tags
|
|
224
|
+
valueType: string
|
|
225
|
+
inputType: text
|
|
226
|
+
- slug: asset-url
|
|
227
|
+
label: External URL
|
|
228
|
+
valueType: string
|
|
229
|
+
inputType: url
|
|
230
|
+
- slug: asset-document-id
|
|
231
|
+
label: Document ID
|
|
232
|
+
valueType: string
|
|
233
|
+
inputType: text
|
|
234
|
+
- slug: asset-file-id
|
|
235
|
+
label: Legacy file ID
|
|
236
|
+
valueType: string
|
|
237
|
+
inputType: text
|
|
238
|
+
- slug: asset-alt-text
|
|
239
|
+
label: Alt text
|
|
240
|
+
valueType: string
|
|
241
|
+
inputType: textarea
|
|
242
|
+
|
|
243
|
+
- slug: brand-reference
|
|
244
|
+
displayName: Brand Reference
|
|
245
|
+
icon: bookmark
|
|
246
|
+
color: teal
|
|
247
|
+
description: Website, competitor, campaign, moodboard, or example used as source context for generation.
|
|
248
|
+
semanticSlug: brand.reference
|
|
249
|
+
properties:
|
|
250
|
+
- slug: reference-kind
|
|
251
|
+
label: Kind
|
|
252
|
+
valueType: string
|
|
253
|
+
inputType: select
|
|
254
|
+
enumValues: [website, competitor, campaign, moodboard, copy-example, design-example, customer-example, other]
|
|
255
|
+
- slug: reference-url
|
|
256
|
+
label: URL
|
|
257
|
+
valueType: string
|
|
258
|
+
inputType: url
|
|
259
|
+
- slug: reference-notes
|
|
260
|
+
label: Notes
|
|
261
|
+
valueType: string
|
|
262
|
+
inputType: textarea
|
|
263
|
+
- slug: reference-status
|
|
264
|
+
label: Status
|
|
265
|
+
valueType: string
|
|
266
|
+
inputType: select
|
|
267
|
+
enumValues: [draft, approved, archived]
|
|
268
|
+
constraints: { defaultValue: approved }
|
|
269
|
+
|
|
270
|
+
- slug: brand-token-set
|
|
271
|
+
displayName: Token Set
|
|
272
|
+
icon: code-2
|
|
273
|
+
color: violet
|
|
274
|
+
description: Generated or curated design tokens for color, typography, spacing, radii, and exported CSS variables.
|
|
275
|
+
semanticSlug: brand.tokens
|
|
276
|
+
properties:
|
|
277
|
+
- slug: token-status
|
|
278
|
+
label: Status
|
|
279
|
+
valueType: string
|
|
280
|
+
inputType: select
|
|
281
|
+
enumValues: [draft, active, archived]
|
|
282
|
+
constraints: { defaultValue: active }
|
|
283
|
+
- slug: token-mode
|
|
284
|
+
label: Mode
|
|
285
|
+
valueType: string
|
|
286
|
+
inputType: select
|
|
287
|
+
enumValues: [base, light, dark, high-contrast, campaign, experimental]
|
|
288
|
+
constraints: { defaultValue: base }
|
|
289
|
+
- slug: token-source-ids
|
|
290
|
+
label: Source IDs
|
|
291
|
+
valueType: string
|
|
292
|
+
inputType: textarea
|
|
293
|
+
- slug: token-json
|
|
294
|
+
label: Tokens JSON
|
|
295
|
+
valueType: string
|
|
296
|
+
inputType: textarea
|
|
297
|
+
- slug: token-css
|
|
298
|
+
label: CSS variables
|
|
299
|
+
valueType: string
|
|
300
|
+
inputType: textarea
|
|
301
|
+
- slug: token-notes
|
|
302
|
+
label: Notes
|
|
303
|
+
valueType: string
|
|
304
|
+
inputType: textarea
|
|
305
|
+
|
|
306
|
+
- slug: brand-voice-guide
|
|
307
|
+
displayName: Voice Guide
|
|
308
|
+
icon: message-circle
|
|
309
|
+
color: orange
|
|
310
|
+
description: "Generated or curated voice guidance by context: traits, tone, vocabulary, and copy examples."
|
|
311
|
+
semanticSlug: brand.voice
|
|
312
|
+
properties:
|
|
313
|
+
- slug: voice-context
|
|
314
|
+
label: Context
|
|
315
|
+
valueType: string
|
|
316
|
+
inputType: select
|
|
317
|
+
enumValues: [general, marketing, product, support, social, legal, editorial, investor]
|
|
318
|
+
constraints: { defaultValue: general }
|
|
319
|
+
- slug: voice-status
|
|
320
|
+
label: Status
|
|
321
|
+
valueType: string
|
|
322
|
+
inputType: select
|
|
323
|
+
enumValues: [draft, approved, deprecated]
|
|
324
|
+
constraints: { defaultValue: approved }
|
|
325
|
+
- slug: voice-personality-traits
|
|
326
|
+
label: Personality
|
|
327
|
+
valueType: string
|
|
328
|
+
inputType: textarea
|
|
329
|
+
- slug: voice-tone-descriptors
|
|
330
|
+
label: Tone
|
|
331
|
+
valueType: string
|
|
332
|
+
inputType: text
|
|
333
|
+
- slug: voice-vocabulary
|
|
334
|
+
label: Vocabulary
|
|
335
|
+
valueType: string
|
|
336
|
+
inputType: textarea
|
|
337
|
+
- slug: voice-example-do
|
|
338
|
+
label: Do
|
|
339
|
+
valueType: string
|
|
340
|
+
inputType: textarea
|
|
341
|
+
- slug: voice-example-dont
|
|
342
|
+
label: Don't
|
|
343
|
+
valueType: string
|
|
344
|
+
inputType: textarea
|
|
345
|
+
- slug: voice-source-ids
|
|
346
|
+
label: Source IDs
|
|
347
|
+
valueType: string
|
|
348
|
+
inputType: textarea
|
|
349
|
+
|
|
350
|
+
- slug: brand-rule
|
|
351
|
+
displayName: Brand Rule
|
|
352
|
+
icon: shield-check
|
|
353
|
+
color: red
|
|
354
|
+
description: Usage constraints, accessibility requirements, do/don't examples, and generation guidance.
|
|
355
|
+
semanticSlug: brand.rule
|
|
356
|
+
properties:
|
|
357
|
+
- slug: rule-kind
|
|
358
|
+
label: Kind
|
|
359
|
+
valueType: string
|
|
360
|
+
inputType: select
|
|
361
|
+
enumValues: [visual, voice, legal, accessibility, sizing, clearance, color-usage, typography-usage, do, dont, generation, other]
|
|
362
|
+
- slug: rule-subject
|
|
363
|
+
label: Subject
|
|
364
|
+
valueType: string
|
|
365
|
+
inputType: select
|
|
366
|
+
enumValues: [logo, color, typography, pattern, asset, voice, general, digital, print, packaging]
|
|
367
|
+
- slug: rule-severity
|
|
368
|
+
label: Severity
|
|
369
|
+
valueType: string
|
|
370
|
+
inputType: select
|
|
371
|
+
enumValues: [guideline, important, mandatory]
|
|
372
|
+
constraints: { defaultValue: important }
|
|
373
|
+
- slug: rule-content
|
|
374
|
+
label: Rule
|
|
375
|
+
valueType: string
|
|
376
|
+
inputType: textarea
|
|
377
|
+
- slug: rule-example
|
|
378
|
+
label: Example
|
|
379
|
+
valueType: string
|
|
380
|
+
inputType: textarea
|
|
381
|
+
- slug: rule-source-ids
|
|
382
|
+
label: Source IDs
|
|
383
|
+
valueType: string
|
|
384
|
+
inputType: textarea
|
|
385
|
+
|
|
386
|
+
- slug: brand-template
|
|
387
|
+
displayName: Brand Template
|
|
388
|
+
icon: layout-template
|
|
389
|
+
color: pink
|
|
390
|
+
description: Reusable output template for artboards, decks, carousels, banners, documents, or generated HTML.
|
|
391
|
+
semanticSlug: brand.template
|
|
392
|
+
properties:
|
|
393
|
+
- slug: template-kind
|
|
394
|
+
label: Kind
|
|
395
|
+
valueType: string
|
|
396
|
+
inputType: select
|
|
397
|
+
enumValues: [artboard, deck, carousel, banner, document, html, social, other]
|
|
398
|
+
- slug: template-status
|
|
399
|
+
label: Status
|
|
400
|
+
valueType: string
|
|
401
|
+
inputType: select
|
|
402
|
+
enumValues: [draft, approved, deprecated]
|
|
403
|
+
constraints: { defaultValue: approved }
|
|
404
|
+
- slug: template-format
|
|
405
|
+
label: Format
|
|
406
|
+
valueType: string
|
|
407
|
+
inputType: select
|
|
408
|
+
enumValues: [tldraw, html, json, markdown, image, mixed]
|
|
409
|
+
- slug: template-config
|
|
410
|
+
label: Config JSON
|
|
411
|
+
valueType: string
|
|
412
|
+
inputType: textarea
|
|
413
|
+
- slug: template-usage
|
|
414
|
+
label: Usage notes
|
|
415
|
+
valueType: string
|
|
416
|
+
inputType: textarea
|
|
417
|
+
|
|
418
|
+
- slug: brand-component
|
|
419
|
+
displayName: Brand Component
|
|
420
|
+
icon: component
|
|
421
|
+
color: green
|
|
422
|
+
description: "Reusable branded UI or content component: hero, CTA, card, quote, banner, section, or HTML snippet."
|
|
423
|
+
semanticSlug: brand.component
|
|
424
|
+
properties:
|
|
425
|
+
- slug: component-kind
|
|
426
|
+
label: Kind
|
|
427
|
+
valueType: string
|
|
428
|
+
inputType: select
|
|
429
|
+
enumValues: [hero, card, cta, quote, banner, section, layout, html, other]
|
|
430
|
+
- slug: component-status
|
|
431
|
+
label: Status
|
|
432
|
+
valueType: string
|
|
433
|
+
inputType: select
|
|
434
|
+
enumValues: [draft, approved, deprecated]
|
|
435
|
+
constraints: { defaultValue: approved }
|
|
436
|
+
- slug: component-html
|
|
437
|
+
label: HTML
|
|
438
|
+
valueType: string
|
|
439
|
+
inputType: textarea
|
|
440
|
+
- slug: component-props
|
|
441
|
+
label: Props JSON
|
|
442
|
+
valueType: string
|
|
443
|
+
inputType: textarea
|
|
444
|
+
- slug: component-usage
|
|
445
|
+
label: Usage notes
|
|
446
|
+
valueType: string
|
|
447
|
+
inputType: textarea
|
|
448
|
+
|
|
449
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
450
|
+
# NARRATIVE KINDS — verbatim from foundation.yaml
|
|
451
|
+
# (Communication owns the narrative ARTIFACTS: positioning, story arc,
|
|
452
|
+
# audiences, and differentiators — NOT mission/vision/values.)
|
|
453
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
454
|
+
- slug: positioning
|
|
455
|
+
displayName: Positioning
|
|
456
|
+
icon: crosshair
|
|
457
|
+
color: cyan
|
|
458
|
+
description: "Market category, who we stand against, and why we win."
|
|
459
|
+
properties:
|
|
460
|
+
- slug: category
|
|
461
|
+
label: Category
|
|
462
|
+
valueType: string
|
|
463
|
+
inputType: text
|
|
464
|
+
- slug: against
|
|
465
|
+
label: Against
|
|
466
|
+
valueType: string
|
|
467
|
+
inputType: textarea
|
|
468
|
+
- slug: because
|
|
469
|
+
label: Because
|
|
470
|
+
valueType: string
|
|
471
|
+
inputType: textarea
|
|
472
|
+
|
|
473
|
+
- slug: narrative
|
|
474
|
+
displayName: Narrative
|
|
475
|
+
icon: book-open
|
|
476
|
+
color: amber
|
|
477
|
+
description: "The origin -> insight -> mission story arc."
|
|
478
|
+
properties:
|
|
479
|
+
- slug: arc
|
|
480
|
+
label: Story arc
|
|
481
|
+
valueType: string
|
|
482
|
+
inputType: textarea
|
|
483
|
+
- slug: status
|
|
484
|
+
label: Status
|
|
485
|
+
valueType: string
|
|
486
|
+
inputType: select
|
|
487
|
+
enumValues: [draft, active, archived]
|
|
488
|
+
constraints: { defaultValue: active }
|
|
489
|
+
|
|
490
|
+
- slug: audience
|
|
491
|
+
displayName: Audience
|
|
492
|
+
icon: users
|
|
493
|
+
color: blue
|
|
494
|
+
description: "An ideal customer profile — who we are built for."
|
|
495
|
+
properties:
|
|
496
|
+
- slug: segment
|
|
497
|
+
label: Segment
|
|
498
|
+
valueType: string
|
|
499
|
+
inputType: text
|
|
500
|
+
- slug: persona
|
|
501
|
+
label: Persona
|
|
502
|
+
valueType: string
|
|
503
|
+
inputType: textarea
|
|
504
|
+
- slug: jobs-to-be-done
|
|
505
|
+
label: Jobs to be done
|
|
506
|
+
valueType: string
|
|
507
|
+
inputType: textarea
|
|
508
|
+
- slug: traits
|
|
509
|
+
label: Traits
|
|
510
|
+
valueType: array
|
|
511
|
+
inputType: text
|
|
512
|
+
|
|
513
|
+
- slug: differentiator
|
|
514
|
+
displayName: Differentiator
|
|
515
|
+
icon: sparkles
|
|
516
|
+
color: green
|
|
517
|
+
description: "One thing only we do, believe, or refuse."
|
|
518
|
+
properties:
|
|
519
|
+
- slug: statement
|
|
520
|
+
label: Statement
|
|
521
|
+
valueType: string
|
|
522
|
+
inputType: textarea
|
|
523
|
+
- slug: proof
|
|
524
|
+
label: Proof
|
|
525
|
+
valueType: string
|
|
526
|
+
inputType: textarea
|
|
527
|
+
|
|
528
|
+
# CURATED views — not one per profile
|
|
529
|
+
views:
|
|
530
|
+
- name: Brand Identity
|
|
531
|
+
slug: brand-identities
|
|
532
|
+
type: table
|
|
533
|
+
scopeProfileSlug: brand-identity
|
|
534
|
+
description: Root brand context and active identities.
|
|
535
|
+
defaultView: true
|
|
536
|
+
- name: Voice & Rules
|
|
537
|
+
slug: voice-rules
|
|
538
|
+
type: list
|
|
539
|
+
scopeProfileSlug: brand-voice-guide
|
|
540
|
+
description: Voice guides — tone, personality, vocabulary, and do/don't examples per context.
|
|
541
|
+
- name: Assets
|
|
542
|
+
slug: brand-assets
|
|
543
|
+
type: grid
|
|
544
|
+
scopeProfileSlug: brand-asset
|
|
545
|
+
description: Logos, media, documents, and visual references.
|
|
546
|
+
- name: Narrative
|
|
547
|
+
slug: narrative
|
|
548
|
+
type: table
|
|
549
|
+
scopeProfileSlug: positioning
|
|
550
|
+
description: Positioning, audiences, and the differentiators that anchor the message.
|
|
551
|
+
|
|
552
|
+
onboarding:
|
|
553
|
+
goal: >
|
|
554
|
+
Capture the real brand and narrative — the visual + verbal identity, the
|
|
555
|
+
voice rules that keep everything on-brand, the sharp positioning, and who
|
|
556
|
+
it's aimed at — so every downstream domain (Content, Marketing, Social)
|
|
557
|
+
inherits one on-brand, on-message source of truth instead of guessing.
|
|
558
|
+
framing: >
|
|
559
|
+
THE BRAND & COMMS LEAD: Act as the person who owns how this company sounds and
|
|
560
|
+
what story it tells. You are protective of the voice and relentless about the
|
|
561
|
+
narrative. Push for a real, sharp positioning — a category and a wedge, not a
|
|
562
|
+
vague "we help companies with X" — and for documented voice rules (testable
|
|
563
|
+
do/don't pairs), never a pile of adjectives. Translate fuzzy vibes into
|
|
564
|
+
concrete voice guides, rules, and a positioning a stranger could repeat.
|
|
565
|
+
expertise:
|
|
566
|
+
starters:
|
|
567
|
+
- >
|
|
568
|
+
Adjectives don't define a voice — "friendly, bold, human" describes every
|
|
569
|
+
brand and constrains none. Propose voice as a small set of DO / DON'T pairs
|
|
570
|
+
instead ("say 'you', not 'users'"; "short declaratives, never hedged
|
|
571
|
+
qualifiers"). Pairs are testable; adjectives are decoration.
|
|
572
|
+
- >
|
|
573
|
+
Positioning is sharpest as ONE sentence — "the <X> for <who>" or "the only
|
|
574
|
+
<category> that <wedge>". If they give you a vague "we help companies with
|
|
575
|
+
Y", propose a crisp category+wedge framing from what they've told you and
|
|
576
|
+
let them sharpen it — never file the vague version.
|
|
577
|
+
- >
|
|
578
|
+
A voice guide is only real if it survives a sentence test. Take one actual
|
|
579
|
+
line from their site or a competitor's and rewrite it in the proposed voice
|
|
580
|
+
on the spot — if the rewrite looks identical to the original, the voice isn't
|
|
581
|
+
differentiated yet. Push until the two versions are visibly different.
|
|
582
|
+
blindSpots:
|
|
583
|
+
- >
|
|
584
|
+
"Brand = logo" is the classic trap. The logo is the least-used, most-argued
|
|
585
|
+
asset; the voice, the positioning, and the do/don't rules drive 90% of what
|
|
586
|
+
anyone actually ships. If they lead with the logo, redirect to how the brand
|
|
587
|
+
SOUNDS and what story it tells in a paragraph of copy.
|
|
588
|
+
- >
|
|
589
|
+
Rules with no severity are ignored. A pile of equally-weighted "guidelines"
|
|
590
|
+
gives an AI or a teammate nothing to obey — mark each as mandatory,
|
|
591
|
+
important, or guideline so the non-negotiables (forbidden words, contrast,
|
|
592
|
+
clearspace) actually hold under pressure.
|
|
593
|
+
- >
|
|
594
|
+
Positioning that's really a feature list isn't positioning. If "why we win"
|
|
595
|
+
is a bullet list of capabilities, name it — push for the ONE wedge a
|
|
596
|
+
competitor can't easily claim, tied to a specific audience.
|
|
597
|
+
bar: >
|
|
598
|
+
A stranger handed the voice pairs, the positioning sentence, and the audience
|
|
599
|
+
could write a new paragraph that reads unmistakably as THIS brand AND explain
|
|
600
|
+
who it's for and why it wins — every voice rule testable on a real sentence,
|
|
601
|
+
the positioning repeatable in one breath.
|
|
602
|
+
collect:
|
|
603
|
+
- profileSlug: brand-voice-guide
|
|
604
|
+
what: Voice guides — tone, personality traits, vocabulary, and do/don't examples per context.
|
|
605
|
+
cardinality: few
|
|
606
|
+
keyFields: [voice-personality-traits, voice-tone-descriptors, voice-example-do, voice-example-dont]
|
|
607
|
+
- profileSlug: brand-rule
|
|
608
|
+
what: Usage and voice rules (mandatory / important / guideline).
|
|
609
|
+
cardinality: several
|
|
610
|
+
keyFields: [rule-kind, rule-severity, rule-content]
|
|
611
|
+
- profileSlug: positioning
|
|
612
|
+
what: The market category, who we stand against, and why we win.
|
|
613
|
+
cardinality: few
|
|
614
|
+
keyFields: [category, against, because]
|
|
615
|
+
- profileSlug: audience
|
|
616
|
+
what: The ideal audiences the message is aimed at.
|
|
617
|
+
cardinality: several
|
|
618
|
+
keyFields: [segment, jobs-to-be-done]
|
|
619
|
+
openingQuestions:
|
|
620
|
+
- "In three words, how should the brand sound — and what's one thing it must never say?"
|
|
621
|
+
- "Who's the message aimed at — which audience does the brand talk to first?"
|
|
622
|
+
- "In one sentence — what category are you in, and why do you win it?"
|
|
623
|
+
doneWhen: at least one voice guide + one positioning + one audience captured.
|
|
624
|
+
|
|
625
|
+
# App reference — no custom app for communication
|
|
626
|
+
app:
|
|
627
|
+
kind: stored
|
|
628
|
+
cellKey: entity-detail
|
|
629
|
+
|
|
630
|
+
# Layout config for browser sidebar
|
|
631
|
+
layout:
|
|
632
|
+
pinnedApps: [dashboard, data]
|
|
633
|
+
defaultView: Brand Identity
|
|
634
|
+
defaultApp: null
|
|
635
|
+
sidebarItems:
|
|
636
|
+
- kind: view
|
|
637
|
+
viewName: Brand Identity
|
|
638
|
+
label: Brand Identity
|
|
639
|
+
icon: fingerprint
|
|
640
|
+
- kind: view
|
|
641
|
+
viewName: Voice & Rules
|
|
642
|
+
label: Voice & Rules
|
|
643
|
+
icon: message-circle
|
|
644
|
+
- kind: view
|
|
645
|
+
viewName: Assets
|
|
646
|
+
label: Assets
|
|
647
|
+
icon: image
|
|
648
|
+
- kind: view
|
|
649
|
+
viewName: Narrative
|
|
650
|
+
label: Narrative
|
|
651
|
+
icon: crosshair
|
|
652
|
+
|
|
653
|
+
# Bento dashboard
|
|
654
|
+
bento:
|
|
655
|
+
viewName: Brand Identity
|
|
656
|
+
blocks:
|
|
657
|
+
- kind: view
|
|
658
|
+
viewName: Voice & Rules
|
|
659
|
+
pos: { x: 0, y: 0, w: 6, h: 5 }
|
|
660
|
+
- kind: view
|
|
661
|
+
viewName: Narrative
|
|
662
|
+
pos: { x: 6, y: 0, w: 6, h: 5 }
|