@synap-core/workspace-templates 0.2.1

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,1424 @@
1
+ # Content OS workspace template
2
+ # Creator Operations / publishing hub — campaigns, posts, pillars, platforms,
3
+ # newsletters, and brand deals in one relational workspace.
4
+ # Distinct from content-studio.yaml (video render pipeline) — both are kept.
5
+ # AI-generation-friendly YAML. Validated against types.ts at build time.
6
+
7
+ meta:
8
+ slug: content-os
9
+ name: Content OS
10
+ description: "A sovereign content operating system. Plan campaigns, manage posts across platforms, track brand deals, and own your newsletter audience — all in one relational workspace you control forever."
11
+ icon: file-edit
12
+ color: "#6366F1"
13
+ tags: [content, creator, social-media, newsletter, campaigns]
14
+ isPublic: true
15
+
16
+ workspace:
17
+ name: "Content OS — Creator Operations Hub"
18
+ description: "A sovereign content operating system. Plan campaigns, manage posts across platforms, track brand deals, and own your newsletter audience — all in one relational workspace you control forever."
19
+ proposalId: content-os-v1
20
+ subtype: content-studio
21
+ visibility: members
22
+
23
+ profiles:
24
+ - slug: post
25
+ displayName: Post
26
+ icon: file-edit
27
+ color: "#6366F1"
28
+ description: "Your atomic content unit. One idea, multiple platform formats — tracked from spark to publication."
29
+ scope: WORKSPACE
30
+ properties:
31
+ - slug: post-status
32
+ label: Status
33
+ valueType: string
34
+ inputType: select
35
+ enumValues: ["Idea", "Briefed", "In Draft", "Review", "Scheduled", "Published", "Archived"]
36
+ - slug: post-format
37
+ label: Format
38
+ valueType: string
39
+ inputType: select
40
+ enumValues: ["Article", "Thread", "Short Video", "Long Video", "Carousel", "Image Post", "Story", "Newsletter Section", "Podcast Episode", "Other"]
41
+ - slug: post-platform
42
+ label: Platform
43
+ valueType: string
44
+ inputType: select
45
+ enumValues: ["LinkedIn", "Instagram", "TikTok", "YouTube", "Twitter / X", "Threads", "Bluesky", "Newsletter", "Podcast", "Blog", "Other"]
46
+ - slug: post-pillar
47
+ label: Pillar
48
+ valueType: entity_id
49
+ - slug: post-campaign
50
+ label: Campaign
51
+ valueType: entity_id
52
+ - slug: post-sponsor
53
+ label: Sponsor
54
+ valueType: entity_id
55
+ - slug: publish-date
56
+ label: Publish Date
57
+ valueType: date
58
+ - slug: post-hook
59
+ label: "Hook / Headline"
60
+ valueType: string
61
+ inputType: text
62
+ placeholder: "Opening line or headline that stops the scroll"
63
+ - slug: post-cta
64
+ label: CTA
65
+ valueType: string
66
+ inputType: text
67
+ placeholder: "What should the audience do?"
68
+ - slug: post-tags
69
+ label: Tags
70
+ valueType: array
71
+ - slug: engagement-score
72
+ label: Engagement Score
73
+ valueType: number
74
+ inputType: number
75
+ placeholder: "Numeric performance metric (likes + comments + shares)"
76
+ - slug: post-reach
77
+ label: "Reach / Views"
78
+ valueType: number
79
+ inputType: number
80
+ - slug: repurposed-from
81
+ label: Repurposed From
82
+ valueType: string
83
+ inputType: text
84
+ placeholder: "Source post or content this was adapted from"
85
+ - slug: post-url
86
+ label: Published URL
87
+ valueType: string
88
+ inputType: text
89
+ placeholder: "https://..."
90
+ constraints: { format: url }
91
+
92
+ - slug: campaign
93
+ displayName: Campaign
94
+ icon: target
95
+ color: "#F59E0B"
96
+ description: "A grouped content initiative — product launch, editorial series, seasonal push, or challenge."
97
+ scope: WORKSPACE
98
+ properties:
99
+ - slug: campaign-status
100
+ label: Status
101
+ valueType: string
102
+ inputType: select
103
+ enumValues: ["Planned", "Active", "Completed", "Paused", "Cancelled"]
104
+ - slug: campaign-type
105
+ label: Type
106
+ valueType: string
107
+ inputType: select
108
+ enumValues: ["Product Launch", "Editorial Series", "Seasonal", "Brand Partnership", "Challenge", "Evergreen", "Awareness", "Other"]
109
+ - slug: campaign-pillar
110
+ label: Primary Pillar
111
+ valueType: entity_id
112
+ - slug: campaign-start
113
+ label: Start Date
114
+ valueType: date
115
+ - slug: campaign-end
116
+ label: End Date
117
+ valueType: date
118
+ - slug: campaign-goal
119
+ label: Goal
120
+ valueType: string
121
+ inputType: text
122
+ placeholder: "What does success look like? Followers, sign-ups, revenue..."
123
+ - slug: campaign-kpi
124
+ label: Primary KPI
125
+ valueType: string
126
+ inputType: select
127
+ enumValues: ["Follower Growth", "Newsletter Sign-ups", "Engagement Rate", "Revenue", "Reach", "Brand Deals Closed", "Link Clicks", "Other"]
128
+ - slug: kpi-target
129
+ label: KPI Target
130
+ valueType: number
131
+ inputType: number
132
+ placeholder: "Numeric target for the primary KPI"
133
+ - slug: kpi-result
134
+ label: KPI Result
135
+ valueType: number
136
+ inputType: number
137
+ placeholder: "Fill when complete"
138
+ - slug: campaign-budget
139
+ label: "Budget (€)"
140
+ valueType: number
141
+ inputType: number
142
+ - slug: post-count
143
+ label: Post Count
144
+ valueType: number
145
+ inputType: number
146
+ - slug: campaign-tags
147
+ label: Tags
148
+ valueType: array
149
+
150
+ - slug: pillar
151
+ displayName: Pillar
152
+ icon: columns
153
+ color: "#8B5CF6"
154
+ description: "A recurring content theme — the lens through which your audience knows you. The organizing principle of your brand."
155
+ scope: WORKSPACE
156
+ properties:
157
+ - slug: pillar-status
158
+ label: Status
159
+ valueType: string
160
+ inputType: select
161
+ enumValues: ["Active", "Developing", "Paused", "Retired"]
162
+ - slug: pillar-audience
163
+ label: Audience Segment
164
+ valueType: string
165
+ inputType: text
166
+ placeholder: "Who does this pillar speak to?"
167
+ - slug: pillar-goal
168
+ label: Audience Goal
169
+ valueType: string
170
+ inputType: text
171
+ placeholder: "What should the audience think, feel, or do after consuming this pillar?"
172
+ - slug: pillar-formats
173
+ label: Primary Formats
174
+ valueType: string
175
+ inputType: select
176
+ enumValues: ["Articles + Threads", "Short Video", "Long Video", "Newsletter", "Podcast", "Carousel", "Mixed"]
177
+ - slug: post-count-pillar
178
+ label: Total Posts Published
179
+ valueType: number
180
+ inputType: number
181
+ - slug: avg-engagement
182
+ label: Avg Engagement Score
183
+ valueType: number
184
+ inputType: number
185
+ - slug: top-post
186
+ label: Top Performing Post
187
+ valueType: string
188
+ inputType: text
189
+ placeholder: "Title of best performing post in this pillar"
190
+ - slug: posting-frequency
191
+ label: Target Frequency
192
+ valueType: string
193
+ inputType: select
194
+ enumValues: ["Daily", "3x / week", "2x / week", "Weekly", "Bi-weekly", "Monthly", "Ad hoc"]
195
+ - slug: pillar-tags
196
+ label: Tags
197
+ valueType: array
198
+
199
+ - slug: platform
200
+ displayName: Platform
201
+ icon: share-2
202
+ color: "#06B6D4"
203
+ description: "A social account, newsletter publication, or podcast channel. Each platform has its own audience metrics and publishing rhythm."
204
+ scope: WORKSPACE
205
+ properties:
206
+ - slug: platform-type
207
+ label: Type
208
+ valueType: string
209
+ inputType: select
210
+ enumValues: ["LinkedIn", "Instagram", "TikTok", "YouTube", "Twitter / X", "Threads", "Bluesky", "Newsletter", "Podcast", "Blog / Website", "Other"]
211
+ - slug: platform-status
212
+ label: Status
213
+ valueType: string
214
+ inputType: select
215
+ enumValues: ["Active", "Building", "Maintenance Mode", "Inactive"]
216
+ - slug: platform-url
217
+ label: Profile URL
218
+ valueType: string
219
+ inputType: text
220
+ placeholder: "https://..."
221
+ constraints: { format: url }
222
+ - slug: follower-count
223
+ label: "Follower / Subscriber Count"
224
+ valueType: number
225
+ inputType: number
226
+ - slug: follower-target
227
+ label: Target Count
228
+ valueType: number
229
+ inputType: number
230
+ - slug: avg-engagement-rate
231
+ label: "Avg Engagement Rate (%)"
232
+ valueType: number
233
+ inputType: number
234
+ - slug: platform-posting-freq
235
+ label: Posting Frequency
236
+ valueType: string
237
+ inputType: select
238
+ enumValues: ["Daily", "3x / week", "2x / week", "Weekly", "Bi-weekly", "Monthly", "As Needed"]
239
+ - slug: last-post-date
240
+ label: Last Post Date
241
+ valueType: date
242
+ - slug: platform-notes
243
+ label: Notes
244
+ valueType: string
245
+ inputType: text
246
+ placeholder: "What works here? Tone, format, best times..."
247
+ - slug: platform-tags
248
+ label: Tags
249
+ valueType: array
250
+
251
+ - slug: newsletter
252
+ displayName: Newsletter
253
+ icon: mail
254
+ color: "#10B981"
255
+ description: "A newsletter issue — your direct channel to an owned audience. No algorithm, no platform fee, no intermediary."
256
+ scope: WORKSPACE
257
+ properties:
258
+ - slug: newsletter-status
259
+ label: Status
260
+ valueType: string
261
+ inputType: select
262
+ enumValues: ["Idea", "Drafting", "Editing", "Scheduled", "Sent", "Archived"]
263
+ - slug: newsletter-series
264
+ label: Series
265
+ valueType: string
266
+ inputType: text
267
+ placeholder: "Which newsletter series is this issue part of?"
268
+ - slug: issue-number
269
+ label: Issue Number
270
+ valueType: number
271
+ inputType: number
272
+ - slug: subject-line
273
+ label: Subject Line
274
+ valueType: string
275
+ inputType: text
276
+ placeholder: "The subject line — your most important copy"
277
+ - slug: preview-text
278
+ label: Preview Text
279
+ valueType: string
280
+ inputType: text
281
+ placeholder: "45-character preview shown in inbox (after subject)"
282
+ - slug: send-date
283
+ label: Send Date
284
+ valueType: date
285
+ - slug: subscriber-count
286
+ label: Subscriber Count at Send
287
+ valueType: number
288
+ inputType: number
289
+ - slug: open-rate
290
+ label: "Open Rate (%)"
291
+ valueType: number
292
+ inputType: number
293
+ - slug: click-rate
294
+ label: "Click Rate (%)"
295
+ valueType: number
296
+ inputType: number
297
+ - slug: newsletter-sponsor
298
+ label: Sponsor
299
+ valueType: entity_id
300
+ - slug: newsletter-campaign
301
+ label: Campaign
302
+ valueType: entity_id
303
+ - slug: newsletter-pillar
304
+ label: Primary Pillar
305
+ valueType: entity_id
306
+ - slug: newsletter-tags
307
+ label: Tags
308
+ valueType: array
309
+
310
+ - slug: sponsor
311
+ displayName: Sponsor
312
+ icon: briefcase
313
+ color: "#F43F5E"
314
+ description: "A brand deal or sponsorship — from first contact to final payment. Track deliverables, deadlines, and performance in one place."
315
+ scope: WORKSPACE
316
+ properties:
317
+ - slug: deal-status
318
+ label: Deal Status
319
+ valueType: string
320
+ inputType: select
321
+ enumValues: ["Prospecting", "Outreach Sent", "In Negotiation", "Contract Signed", "Active", "Deliverables Pending", "Completed", "Invoiced", "Paid", "Declined"]
322
+ - slug: sponsor-type
323
+ label: Deal Type
324
+ valueType: string
325
+ inputType: select
326
+ enumValues: ["Newsletter Sponsorship", "Social Post", "Podcast Ad", "Video Integration", "Affiliate", "Product Review", "Ambassador", "Event", "Other"]
327
+ - slug: contact-name
328
+ label: Contact Name
329
+ valueType: string
330
+ inputType: text
331
+ placeholder: "Brand contact / campaign manager"
332
+ - slug: contact-email
333
+ label: Contact Email
334
+ valueType: string
335
+ inputType: text
336
+ placeholder: "contact@brand.com"
337
+ constraints: { format: email }
338
+ - slug: deal-value
339
+ label: "Deal Value (€)"
340
+ valueType: number
341
+ inputType: number
342
+ - slug: payment-status
343
+ label: Payment Status
344
+ valueType: string
345
+ inputType: select
346
+ enumValues: ["Not Yet Due", "Invoice Sent", "Paid", "Overdue", "Disputed"]
347
+ - slug: contract-date
348
+ label: Contract Date
349
+ valueType: date
350
+ - slug: deliverable-deadline
351
+ label: Deliverable Deadline
352
+ valueType: date
353
+ - slug: exclusivity-end
354
+ label: Exclusivity End Date
355
+ valueType: date
356
+ - slug: deliverables
357
+ label: Deliverables
358
+ valueType: string
359
+ inputType: text
360
+ placeholder: "What exactly was promised? (2 posts, 1 newsletter mention, story, etc.)"
361
+ - slug: talking-points
362
+ label: Key Talking Points
363
+ valueType: string
364
+ inputType: text
365
+ placeholder: "Brand messages, required mentions, do-not-say list"
366
+ - slug: performance-notes
367
+ label: Performance Notes
368
+ valueType: string
369
+ inputType: text
370
+ placeholder: "What results did you report to the brand?"
371
+ - slug: sponsor-tags
372
+ label: Tags
373
+ valueType: array
374
+
375
+ views:
376
+ - name: Content Calendar
377
+ type: calendar
378
+ scopeProfileSlug: post
379
+ config:
380
+ dateField: publish-date
381
+ colorField: post-platform
382
+ - name: Post Pipeline
383
+ type: kanban
384
+ scopeProfileSlug: post
385
+ config:
386
+ groupByField: post-status
387
+ cardFields: [post-format, post-platform, post-pillar, publish-date]
388
+ - name: All Posts
389
+ type: table
390
+ scopeProfileSlug: post
391
+ config:
392
+ visibleColumns: [post-status, post-format, post-platform, post-pillar, publish-date, engagement-score, post-reach]
393
+ defaultSort: { field: publish-date, direction: desc }
394
+ rowHeight: default
395
+ - name: Ideas Inbox
396
+ type: kanban
397
+ scopeProfileSlug: post
398
+ config:
399
+ groupByField: post-format
400
+ cardFields: [post-format, post-status, post-hook, post-tags]
401
+ - name: Repurposing Queue
402
+ type: table
403
+ scopeProfileSlug: post
404
+ config:
405
+ visibleColumns: [post-status, post-format, post-platform, post-pillar, repurposed-from, publish-date]
406
+ defaultSort: { field: post-platform, direction: asc }
407
+ rowHeight: default
408
+ - name: Content Graph
409
+ type: graph
410
+ scopeProfileSlugs: [post, campaign, pillar, newsletter, sponsor]
411
+ config:
412
+ layout: force
413
+ showRelations: true
414
+ - name: Campaigns
415
+ type: kanban
416
+ scopeProfileSlug: campaign
417
+ config:
418
+ groupByField: campaign-status
419
+ cardFields: [campaign-type, campaign-pillar, campaign-start, campaign-end, campaign-kpi]
420
+ - name: Campaign Timeline
421
+ type: timeline
422
+ scopeProfileSlug: campaign
423
+ config:
424
+ timeField: campaign-end
425
+ groupByField: campaign-status
426
+ - name: Pillars
427
+ type: table
428
+ scopeProfileSlug: pillar
429
+ config:
430
+ visibleColumns: [pillar-status, pillar-audience, pillar-goal, pillar-formats, posting-frequency, post-count-pillar, avg-engagement]
431
+ defaultSort: { field: pillar-status, direction: asc }
432
+ rowHeight: default
433
+ - name: Platforms
434
+ type: table
435
+ scopeProfileSlug: platform
436
+ config:
437
+ visibleColumns: [platform-type, platform-status, follower-count, follower-target, avg-engagement-rate, platform-posting-freq, last-post-date]
438
+ defaultSort: { field: follower-count, direction: desc }
439
+ rowHeight: default
440
+ - name: Newsletter Issues
441
+ type: table
442
+ scopeProfileSlug: newsletter
443
+ config:
444
+ visibleColumns: [newsletter-status, newsletter-series, issue-number, subject-line, send-date, subscriber-count, open-rate, click-rate, newsletter-sponsor]
445
+ defaultSort: { field: send-date, direction: desc }
446
+ rowHeight: default
447
+ - name: Newsletter Pipeline
448
+ type: kanban
449
+ scopeProfileSlug: newsletter
450
+ config:
451
+ groupByField: newsletter-status
452
+ cardFields: [newsletter-series, issue-number, subject-line, send-date, newsletter-sponsor]
453
+ - name: Newsletter Calendar
454
+ type: calendar
455
+ scopeProfileSlug: newsletter
456
+ config:
457
+ dateField: send-date
458
+ colorField: newsletter-status
459
+ - name: Sponsor Tracker
460
+ type: kanban
461
+ scopeProfileSlug: sponsor
462
+ config:
463
+ groupByField: deal-status
464
+ cardFields: [sponsor-type, deal-value, deliverable-deadline, payment-status]
465
+ - name: Sponsors Table
466
+ type: table
467
+ scopeProfileSlug: sponsor
468
+ config:
469
+ visibleColumns: [deal-status, sponsor-type, contact-name, deal-value, payment-status, deliverable-deadline, exclusivity-end]
470
+ defaultSort: { field: deliverable-deadline, direction: asc }
471
+ rowHeight: default
472
+ - name: Sponsor Deadlines
473
+ type: calendar
474
+ scopeProfileSlug: sponsor
475
+ config:
476
+ dateField: deliverable-deadline
477
+ colorField: payment-status
478
+ - name: Post
479
+ type: bento
480
+ scopeProfileSlug: post
481
+ config:
482
+ layout: bento
483
+ blocks:
484
+ - id: post-header
485
+ kind: widget
486
+ widgetType: section-header
487
+ pos: { x: 0, y: 0, w: 12, h: 2 }
488
+ config: { title: Posts, icon: FileEdit, color: "#6366F1", profileSlug: post }
489
+ - id: post-count
490
+ kind: widget
491
+ widgetType: stat-card
492
+ pos: { x: 0, y: 2, w: 3, h: 3 }
493
+ config: { label: Total Posts, aggregation: count, profileSlug: post, color: "#6366F1" }
494
+ - id: post-pipeline
495
+ kind: view
496
+ viewName: Post Pipeline
497
+ pos: { x: 0, y: 9, w: 12, h: 8 }
498
+ - id: post-cal
499
+ kind: view
500
+ viewName: Content Calendar
501
+ pos: { x: 0, y: 19, w: 12, h: 8 }
502
+ - id: post-published
503
+ kind: widget
504
+ widgetType: entity-count
505
+ pos: { x: 3, y: 2, w: 3, h: 3 }
506
+ config: { profileSlug: post, label: Published, icon: Globe, filter: { status: published }, color: "#10B981" }
507
+ - id: post-drafts
508
+ kind: widget
509
+ widgetType: entity-count
510
+ pos: { x: 6, y: 2, w: 3, h: 3 }
511
+ config: { profileSlug: post, label: Drafts, icon: FileEdit, filter: { status: draft }, color: "#6B7280" }
512
+ - id: post-scheduled
513
+ kind: widget
514
+ widgetType: entity-count
515
+ pos: { x: 9, y: 2, w: 3, h: 3 }
516
+ config: { profileSlug: post, label: Scheduled, icon: Clock, filter: { status: scheduled }, color: "#F59E0B" }
517
+ - id: post-spotlight
518
+ kind: widget
519
+ widgetType: entity-spotlight
520
+ pos: { x: 0, y: 5, w: 5, h: 4 }
521
+ config: { profileSlug: post, seed: daily, layout: detail, subtitleField: platform, color: "#EC4899" }
522
+ - id: post-gallery
523
+ kind: widget
524
+ widgetType: entity-gallery
525
+ pos: { x: 5, y: 5, w: 7, h: 4 }
526
+ config: { profileSlug: post, coverField: thumbnail-url, title: Recent Posts, limit: 6 }
527
+ breakpoints:
528
+ lg: { cols: 12, rowHeight: 60, gap: 12 }
529
+ md: { cols: 10, rowHeight: 60, gap: 12 }
530
+ sm: { cols: 6, rowHeight: 60, gap: 12 }
531
+ xs: { cols: 4, rowHeight: 60, gap: 12 }
532
+ xxs: { cols: 2, rowHeight: 60, gap: 12 }
533
+ - name: Campaign
534
+ type: bento
535
+ scopeProfileSlug: campaign
536
+ config:
537
+ layout: bento
538
+ blocks:
539
+ - id: campaign-header
540
+ kind: widget
541
+ widgetType: section-header
542
+ pos: { x: 0, y: 0, w: 12, h: 2 }
543
+ config: { title: Campaigns, icon: Target, color: "#F59E0B", profileSlug: campaign }
544
+ - id: campaign-count
545
+ kind: widget
546
+ widgetType: stat-card
547
+ pos: { x: 0, y: 2, w: 3, h: 3 }
548
+ config: { label: Total Campaigns, aggregation: count, profileSlug: campaign, color: "#F59E0B" }
549
+ - id: campaign-board
550
+ kind: view
551
+ viewName: Campaigns
552
+ pos: { x: 0, y: 9, w: 12, h: 8 }
553
+ - id: campaign-timeline
554
+ kind: view
555
+ viewName: Campaign Timeline
556
+ pos: { x: 0, y: 19, w: 12, h: 8 }
557
+ - id: campaign-active
558
+ kind: widget
559
+ widgetType: entity-count
560
+ pos: { x: 3, y: 2, w: 3, h: 3 }
561
+ config: { profileSlug: campaign, label: Active, icon: Play, filter: { status: active }, color: "#10B981" }
562
+ - id: campaign-posts
563
+ kind: widget
564
+ widgetType: entity-count
565
+ pos: { x: 6, y: 2, w: 3, h: 3 }
566
+ config: { profileSlug: post, label: Campaign Posts, icon: FileText, color: "#EC4899" }
567
+ - id: campaign-spotlight
568
+ kind: widget
569
+ widgetType: entity-spotlight
570
+ pos: { x: 0, y: 5, w: 5, h: 4 }
571
+ config: { profileSlug: campaign, seed: daily, layout: detail, subtitleField: status, color: "#8B5CF6" }
572
+ - id: campaign-post-list
573
+ kind: widget
574
+ widgetType: entity-list
575
+ pos: { x: 5, y: 5, w: 7, h: 4 }
576
+ config: { profileSlug: post, title: Campaign Posts, limit: 6, variant: compact }
577
+ breakpoints:
578
+ lg: { cols: 12, rowHeight: 60, gap: 12 }
579
+ md: { cols: 10, rowHeight: 60, gap: 12 }
580
+ sm: { cols: 6, rowHeight: 60, gap: 12 }
581
+ xs: { cols: 4, rowHeight: 60, gap: 12 }
582
+ xxs: { cols: 2, rowHeight: 60, gap: 12 }
583
+ - name: Newsletter
584
+ type: bento
585
+ scopeProfileSlug: newsletter
586
+ config:
587
+ layout: bento
588
+ blocks:
589
+ - id: nl-header
590
+ kind: widget
591
+ widgetType: section-header
592
+ pos: { x: 0, y: 0, w: 12, h: 2 }
593
+ config: { title: Newsletters, icon: Mail, color: "#10B981", profileSlug: newsletter }
594
+ - id: nl-count
595
+ kind: widget
596
+ widgetType: stat-card
597
+ pos: { x: 0, y: 2, w: 3, h: 3 }
598
+ config: { label: Total Issues, aggregation: count, profileSlug: newsletter, color: "#10B981" }
599
+ - id: nl-pipeline
600
+ kind: view
601
+ viewName: Newsletter Pipeline
602
+ pos: { x: 0, y: 5, w: 12, h: 10 }
603
+ - id: nl-table
604
+ kind: view
605
+ viewName: Newsletter Issues
606
+ pos: { x: 0, y: 15, w: 12, h: 8 }
607
+ breakpoints:
608
+ lg: { cols: 12, rowHeight: 60, gap: 12 }
609
+ md: { cols: 10, rowHeight: 60, gap: 12 }
610
+ sm: { cols: 6, rowHeight: 60, gap: 12 }
611
+ xs: { cols: 4, rowHeight: 60, gap: 12 }
612
+ xxs: { cols: 2, rowHeight: 60, gap: 12 }
613
+ - name: Pillar
614
+ type: bento
615
+ scopeProfileSlug: pillar
616
+ config:
617
+ layout: bento
618
+ blocks:
619
+ - id: pillar-header
620
+ kind: widget
621
+ widgetType: section-header
622
+ pos: { x: 0, y: 0, w: 12, h: 2 }
623
+ config: { title: Content Pillars, icon: Layers, color: "#3B82F6", profileSlug: pillar }
624
+ - id: pillar-count
625
+ kind: widget
626
+ widgetType: stat-card
627
+ pos: { x: 0, y: 2, w: 3, h: 3 }
628
+ config: { label: Pillars, aggregation: count, profileSlug: pillar, color: "#3B82F6", icon: Layers }
629
+ - id: pillar-posts-count
630
+ kind: widget
631
+ widgetType: entity-count
632
+ pos: { x: 3, y: 2, w: 3, h: 3 }
633
+ config: { profileSlug: post, label: Posts in Pillar, icon: FileText, color: "#EC4899" }
634
+ - id: pillar-campaigns
635
+ kind: widget
636
+ widgetType: entity-count
637
+ pos: { x: 6, y: 2, w: 3, h: 3 }
638
+ config: { profileSlug: campaign, label: Campaigns, icon: Target, color: "#8B5CF6" }
639
+ - id: pillar-spotlight
640
+ kind: widget
641
+ widgetType: entity-spotlight
642
+ pos: { x: 0, y: 5, w: 6, h: 4 }
643
+ config: { profileSlug: pillar, seed: daily, layout: detail, color: "#3B82F6" }
644
+ - id: pillar-post-list
645
+ kind: widget
646
+ widgetType: entity-list
647
+ pos: { x: 6, y: 5, w: 6, h: 4 }
648
+ config: { profileSlug: post, title: Posts in this Pillar, limit: 6, variant: compact }
649
+ - id: pillar-table
650
+ kind: view
651
+ viewName: Pillars
652
+ pos: { x: 0, y: 9, w: 12, h: 8 }
653
+
654
+ entityLinks:
655
+ - sourceProfileSlug: post
656
+ targetProfileSlug: pillar
657
+ type: under
658
+ - sourceProfileSlug: post
659
+ targetProfileSlug: campaign
660
+ type: part_of
661
+ - sourceProfileSlug: post
662
+ targetProfileSlug: sponsor
663
+ type: sponsored_by
664
+ - sourceProfileSlug: campaign
665
+ targetProfileSlug: pillar
666
+ type: under
667
+ - sourceProfileSlug: newsletter
668
+ targetProfileSlug: campaign
669
+ type: part_of
670
+ - sourceProfileSlug: newsletter
671
+ targetProfileSlug: pillar
672
+ type: under
673
+ - sourceProfileSlug: newsletter
674
+ targetProfileSlug: sponsor
675
+ type: sponsored_by
676
+ - sourceProfileSlug: platform
677
+ targetProfileSlug: post
678
+ type: publishes
679
+
680
+ seedEntities:
681
+ - profileSlug: pillar
682
+ title: Data Sovereignty
683
+ properties:
684
+ pillar-status: Active
685
+ pillar-audience: "Founders, developers, and privacy-conscious professionals"
686
+ pillar-goal: "Position Synap as the infrastructure layer for personal data ownership — make the audience feel that sovereignty is not technical, it is a right"
687
+ pillar-formats: "Articles + Threads"
688
+ post-count-pillar: 12
689
+ avg-engagement: 340
690
+ top-post: "Why your data is not yours — and how to fix that"
691
+ posting-frequency: "2x / week"
692
+ pillar-tags: [sovereignty, synap, infrastructure]
693
+ - profileSlug: pillar
694
+ title: Product Building
695
+ properties:
696
+ pillar-status: Active
697
+ pillar-audience: "Indie hackers, founders, and early-stage builders"
698
+ pillar-goal: "Share the authentic journey of building Synap — decisions, mistakes, architecture choices — building trust through transparency"
699
+ pillar-formats: "Articles + Threads"
700
+ post-count-pillar: 8
701
+ avg-engagement: 210
702
+ top-post: "How we designed Synap's entity model from scratch"
703
+ posting-frequency: Weekly
704
+ pillar-tags: [building-in-public, synap, product]
705
+ - profileSlug: pillar
706
+ title: Creator Economy
707
+ properties:
708
+ pillar-status: Developing
709
+ pillar-audience: "Creators, solopreneurs, and content entrepreneurs"
710
+ pillar-goal: "Establish Synap's authority in the creator tools space — explain why the current tool stack is broken and what a sovereign alternative looks like"
711
+ pillar-formats: "Articles + Threads"
712
+ post-count-pillar: 4
713
+ avg-engagement: 180
714
+ posting-frequency: Weekly
715
+ pillar-tags: [creator-economy, content-os, tools]
716
+ - profileSlug: platform
717
+ title: LinkedIn
718
+ properties:
719
+ platform-status: Active
720
+ platform-url: "https://linkedin.com/in/your-handle"
721
+ follower-count: 3200
722
+ follower-target: 10000
723
+ avg-engagement-rate: 4.2
724
+ platform-posting-freq: "3x / week"
725
+ last-post-date: "2026-02-23"
726
+ platform-notes: "Long-form articles perform 3x better than short posts. Best engagement on Monday 8am and Thursday 6pm. CET. Professional tone, avoid jargon."
727
+ platform-tags: [linkedin, b2b, professional]
728
+ - profileSlug: platform
729
+ title: "Twitter / X"
730
+ properties:
731
+ platform-status: Active
732
+ platform-url: "https://x.com/your-handle"
733
+ follower-count: 1800
734
+ follower-target: 5000
735
+ avg-engagement-rate: 2.1
736
+ platform-posting-freq: Daily
737
+ last-post-date: "2026-02-23"
738
+ platform-notes: "Threads outperform single tweets 4:1. Tech and sovereignty threads go viral occasionally. Engage before posting — reply to 5 accounts before publishing."
739
+ platform-tags: [twitter, threads, tech]
740
+ - profileSlug: platform
741
+ title: Synap Newsletter
742
+ properties:
743
+ platform-type: Newsletter
744
+ platform-status: Building
745
+ follower-count: 420
746
+ follower-target: 2000
747
+ avg-engagement-rate: 38
748
+ platform-posting-freq: Weekly
749
+ last-post-date: "2026-02-17"
750
+ platform-notes: "35-40% open rate. Audience is tech-adjacent, values depth over brevity. Tuesdays at 7am CET performs best. Personal voice + one tactical insight + one product update."
751
+ platform-tags: [newsletter, owned, sovereign]
752
+ - profileSlug: campaign
753
+ title: "Synap Template Launch — Q1 2026"
754
+ properties:
755
+ campaign-status: Active
756
+ campaign-type: Product Launch
757
+ campaign-pillar: "ref:pillar:Product Building"
758
+ campaign-start: "2026-02-01"
759
+ campaign-end: "2026-03-31"
760
+ campaign-goal: "Drive 500 new workspace template activations and grow newsletter to 1,000 subscribers"
761
+ campaign-kpi: "Newsletter Sign-ups"
762
+ kpi-target: 500
763
+ post-count: 12
764
+ campaign-tags: [launch, templates, q1-2026]
765
+ content: |-
766
+ # Campaign Brief: Synap Template Launch — Q1 2026
767
+
768
+ ## Objective
769
+
770
+ Drive 500 template activations and 1,000 new newsletter subscribers by March 31, 2026. This is Synap's first public-facing product moment — the goal is not just installs but proof that the entity-first model resonates with creators who think in systems.
771
+
772
+ ## Target audience
773
+
774
+ Content creators and founder-creators managing multi-channel presence across 2+ platforms. They've tried Notion templates. They've paid for Buffer and Later. They feel the friction. They're ready for something built differently.
775
+
776
+ ## Content plan
777
+
778
+ 12 posts across LinkedIn and Twitter/X over 8 weeks:
779
+
780
+ - **Week 1-2**: Problem framing — the creator stack is broken, context-switching cost, no unified operating record
781
+ - **Week 3-4**: Solution reveal — what a Content OS actually looks like, entity model walkthrough
782
+ - **Week 5-6**: Template demo — what's included, how seed data works, the graph view
783
+ - **Week 7-8**: Social proof + launch push — install CTA, newsletter integration, community feedback
784
+
785
+ ## KPIs
786
+
787
+ | Metric | Target |
788
+ |--------|--------|
789
+ | Template activations | 500 |
790
+ | Newsletter subs added | 1,000 |
791
+ | LinkedIn post avg reach | 8,000+ |
792
+ | Twitter thread avg impressions | 15,000+ |
793
+
794
+ ## Budget
795
+
796
+ €0 paid. Organic only. Brand deals (Mintlify, Anytype) offset production time.
797
+
798
+ ## Dependencies
799
+
800
+ - Template JSON validated and live in install flow
801
+ - Synap Newsletter Issue 13 dedicated to template walkthrough
802
+ - Mintlify sponsorship confirmed for Issue 12
803
+ - profileSlug: campaign
804
+ title: Data Sovereignty Series
805
+ properties:
806
+ campaign-status: Active
807
+ campaign-type: Editorial Series
808
+ campaign-pillar: "ref:pillar:Data Sovereignty"
809
+ campaign-start: "2026-01-15"
810
+ campaign-end: "2026-04-30"
811
+ campaign-goal: "Establish Synap's thought leadership in the sovereignty space — 10 long-form posts that define the narrative"
812
+ campaign-kpi: "Follower Growth"
813
+ kpi-target: 1000
814
+ post-count: 6
815
+ campaign-tags: [sovereignty, series, thought-leadership]
816
+ - profileSlug: post
817
+ title: "Why your subscriber list is not yours — and what to do about it"
818
+ properties:
819
+ post-status: Published
820
+ post-format: Article
821
+ post-platform: LinkedIn
822
+ post-pillar: "ref:pillar:Data Sovereignty"
823
+ post-campaign: "ref:campaign:Data Sovereignty Series"
824
+ publish-date: "2026-02-10"
825
+ post-hook: "You have 3,000 newsletter subscribers. If Substack disappears tomorrow, how many of them can you reach?"
826
+ post-cta: "Download our free guide to migrating your subscriber list to sovereign infrastructure"
827
+ post-tags: [sovereignty, newsletter, substack]
828
+ engagement-score: 520
829
+ post-reach: 12400
830
+ content: |-
831
+ # Why Your Subscriber List Is Not Yours — And What to Do About It
832
+
833
+ ## Core argument
834
+
835
+ When you build an audience on Substack, Mailchimp, or Beehiiv, you don't own the relationship. The platform does. They store the emails. They control deliverability. They set the terms of export. And if they change their pricing, get acquired, or shut down — your list goes with them.
836
+
837
+ This is not a hypothetical risk. It is the default architecture of every major newsletter platform.
838
+
839
+ ## What ownership actually means
840
+
841
+ Owning your subscriber list means three things:
842
+
843
+ 1. **You hold the data.** The email addresses, open history, click behavior, and preferences live in infrastructure you control — not on a vendor's server.
844
+ 2. **You choose the delivery layer.** You can switch from Mailchimp to Postmark to SES without asking permission and without migration friction.
845
+ 3. **You set the rules.** GDPR compliance, data retention, deletion requests — you handle them directly, not through a third-party dashboard.
846
+
847
+ ## The sovereignty architecture
848
+
849
+ The alternative is treating your subscriber database as a first-class entity in your own data infrastructure. A record per subscriber. Properties for consent date, source, segment, engagement history. Relationships to the newsletter issues they opened, the posts that drove the sign-up.
850
+
851
+ This is what Synap enables with the Newsletter profile — your subscriber data lives in your pod, queryable by you, portable to any email provider, never held hostage.
852
+
853
+ ## The ask
854
+
855
+ Follow if you believe your audience relationship is a business asset — not a vendor dependency.
856
+
857
+ ---
858
+ *Published: LinkedIn · Data Sovereignty pillar · Data Sovereignty Series campaign*
859
+ - profileSlug: post
860
+ title: "Synap's entity model: why we ditched the database-first approach"
861
+ properties:
862
+ post-status: In Draft
863
+ post-format: Article
864
+ post-platform: LinkedIn
865
+ post-pillar: "ref:pillar:Product Building"
866
+ post-campaign: "ref:campaign:Synap Template Launch — Q1 2026"
867
+ publish-date: "2026-03-03"
868
+ post-hook: "Every other tool gives you a database. We built a network of entities — and the difference is everything."
869
+ post-cta: "Try the Second Brain template in Synap — free"
870
+ post-tags: [product, synap, architecture]
871
+ - profileSlug: post
872
+ title: "Thread: The creator tool stack is broken — here is why"
873
+ properties:
874
+ post-status: Scheduled
875
+ post-format: Thread
876
+ post-platform: "Twitter / X"
877
+ post-pillar: "ref:pillar:Creator Economy"
878
+ post-campaign: "ref:campaign:Synap Template Launch — Q1 2026"
879
+ publish-date: "2026-02-25"
880
+ post-hook: "I talked to 40 creators this month. Every single one uses 5+ tools that don't talk to each other. Here's what they all want:"
881
+ post-cta: "Follow for the full Creator Economy report"
882
+ post-tags: [creator-economy, tools, research]
883
+ - profileSlug: post
884
+ title: "Content OS template — what's included and why we built it"
885
+ properties:
886
+ post-status: Idea
887
+ post-format: Short Video
888
+ post-platform: LinkedIn
889
+ post-pillar: "ref:pillar:Product Building"
890
+ post-campaign: "ref:campaign:Synap Template Launch — Q1 2026"
891
+ post-hook: "We spent 3 weeks researching 8 creator tools before building Synap's Content OS template. Here is what we found."
892
+ post-tags: [content-os, templates, synap, research]
893
+ - profileSlug: post
894
+ title: "Data sovereignty is not a technical concept — it is a political one"
895
+ properties:
896
+ post-status: Idea
897
+ post-format: Article
898
+ post-platform: LinkedIn
899
+ post-pillar: "ref:pillar:Data Sovereignty"
900
+ post-campaign: "ref:campaign:Data Sovereignty Series"
901
+ post-hook: "The Sovereign Individual was published in 1997. It predicted exactly what is happening right now with AI and personal data."
902
+ post-tags: [sovereignty, philosophy, ai]
903
+ - profileSlug: post
904
+ title: "How Synap templates are seeded: the JSON-first approach"
905
+ properties:
906
+ post-status: Review
907
+ post-format: Article
908
+ post-platform: LinkedIn
909
+ post-pillar: "ref:pillar:Product Building"
910
+ post-campaign: "ref:campaign:Synap Template Launch — Q1 2026"
911
+ publish-date: "2026-03-10"
912
+ post-hook: "Most SaaS products show you an empty database on day one. Synap shows you a fully functional workspace. Here is how we do it."
913
+ post-cta: "Read the full technical deep-dive on our blog"
914
+ post-tags: [engineering, synap, templates, onboarding]
915
+ - profileSlug: newsletter
916
+ title: "The Sovereign Stack — Issue 12"
917
+ properties:
918
+ newsletter-status: Sent
919
+ newsletter-series: The Sovereign Stack
920
+ issue-number: 12
921
+ subject-line: "The 3 databases that own your content career (and how to escape)"
922
+ preview-text: "Your Substack list, your Buffer posts, your Notion brain..."
923
+ send-date: "2026-02-17"
924
+ subscriber-count: 390
925
+ open-rate: 39.2
926
+ click-rate: 6.8
927
+ newsletter-sponsor: "ref:sponsor:Mintlify"
928
+ newsletter-campaign: "ref:campaign:Data Sovereignty Series"
929
+ newsletter-pillar: "ref:pillar:Data Sovereignty"
930
+ newsletter-tags: [sovereignty, creator-tools, newsletter]
931
+ - profileSlug: newsletter
932
+ title: "The Sovereign Stack — Issue 13"
933
+ properties:
934
+ newsletter-status: Scheduled
935
+ newsletter-series: The Sovereign Stack
936
+ issue-number: 13
937
+ subject-line: "Inside Synap's Content OS template — what we built and why"
938
+ preview-text: "6 profiles, 16 views, 1 relational graph you own forever"
939
+ send-date: "2026-02-24"
940
+ newsletter-campaign: "ref:campaign:Synap Template Launch — Q1 2026"
941
+ newsletter-pillar: "ref:pillar:Product Building"
942
+ newsletter-tags: [content-os, templates, synap]
943
+ - profileSlug: newsletter
944
+ title: "The Sovereign Stack — Issue 14"
945
+ properties:
946
+ newsletter-status: Drafting
947
+ newsletter-series: The Sovereign Stack
948
+ issue-number: 14
949
+ subject-line: "Why we picked Ghost over Substack (and what it cost us)"
950
+ preview-text: "Honest numbers: subscriber growth, open rates, and the SEO truth"
951
+ send-date: "2026-03-03"
952
+ newsletter-pillar: "ref:pillar:Data Sovereignty"
953
+ newsletter-tags: [ghost, substack, sovereignty, newsletter]
954
+ newsletter-campaign: "ref:campaign:Data Sovereignty Series"
955
+ - profileSlug: sponsor
956
+ title: Mintlify
957
+ properties:
958
+ deal-status: Active
959
+ sponsor-type: Newsletter Sponsorship
960
+ contact-name: Alex Chen
961
+ contact-email: "alex@mintlify.com"
962
+ deal-value: 800
963
+ payment-status: Invoice Sent
964
+ contract-date: "2026-02-10"
965
+ deliverable-deadline: "2026-02-28"
966
+ exclusivity-end: "2026-03-15"
967
+ deliverables: "1 newsletter mention in Issue 12 (primary placement, 80–100 words). 1 LinkedIn post tagging Mintlify. Approved copy to be provided by sponsor."
968
+ talking-points: "Mintlify writes beautiful docs from your codebase. For developer-facing teams. Mention the GitHub integration."
969
+ performance-notes: "Issue 12: 39.2% open rate, 6.8% click rate. Sponsor link received 47 clicks. Will share screenshot report."
970
+ sponsor-tags: [developer-tools, newsletter, q1-2026]
971
+ content: |-
972
+ # Sponsor Brief: Mintlify — Issue 12
973
+
974
+ ## Deal summary
975
+
976
+ - **Format**: Primary newsletter placement, Issue 12 (The Sovereign Stack)
977
+ - **Value**: €800
978
+ - **Deliverables**: 1 newsletter mention (80-100 words, primary placement) + 1 LinkedIn post tagging Mintlify
979
+ - **Exclusivity**: No competing dev-tool sponsors until March 15, 2026
980
+ - **Payment**: Invoice sent Feb 17 — awaiting transfer
981
+
982
+ ## Approved copy (newsletter)
983
+
984
+ Mintlify builds documentation that actually gets read. If you're a developer or building developer-facing tools, Mintlify generates beautiful docs directly from your codebase — with GitHub integration, versioning, and AI-powered search. Worth 10 minutes to see what your docs could look like.
985
+
986
+ ## Performance report (to send)
987
+
988
+ Issue 12 stats to share with Alex:
989
+ - Open rate: 39.2% (industry avg ~22%)
990
+ - Click rate: 6.8%
991
+ - Sponsor link clicks: 47
992
+ - Screenshot attached in follow-up email
993
+
994
+ ## Notes
995
+
996
+ Alex Chen is responsive on email. They're considering a Q2 campaign (3 issues). Keep performance data clean and send within 48h of issue send. Relationship worth nurturing — philosophically aligned audience.
997
+ - profileSlug: sponsor
998
+ title: Anytype
999
+ properties:
1000
+ deal-status: Prospecting
1001
+ sponsor-type: Social Post
1002
+ contact-name: Pavel K.
1003
+ deal-value: 600
1004
+ payment-status: Not Yet Due
1005
+ deliverables: "1 LinkedIn post (honest review format). 1 Twitter thread. Not exclusive."
1006
+ talking-points: "Anytype is open-source, local-first, object-based PKM. Philosophically aligned with Synap audience."
1007
+ sponsor-tags: [pkm, local-first, sovereignty]
1008
+
1009
+ suggestedRelations:
1010
+ - sourceRef: "post:Why your subscriber list is not yours — and what to do about it"
1011
+ targetRef: "campaign:Data Sovereignty Series"
1012
+ type: belongs_to_project
1013
+ - sourceRef: "post:Synap's entity model: why we ditched the database-first approach"
1014
+ targetRef: "campaign:Synap Template Launch — Q1 2026"
1015
+ type: belongs_to_project
1016
+ - sourceRef: "post:Thread: The creator tool stack is broken — here is why"
1017
+ targetRef: "campaign:Synap Template Launch — Q1 2026"
1018
+ type: belongs_to_project
1019
+ - sourceRef: "post:Content OS template — what's included and why we built it"
1020
+ targetRef: "campaign:Synap Template Launch — Q1 2026"
1021
+ type: belongs_to_project
1022
+ - sourceRef: "post:Data sovereignty is not a technical concept — it is a political one"
1023
+ targetRef: "campaign:Data Sovereignty Series"
1024
+ type: belongs_to_project
1025
+ - sourceRef: "post:How Synap templates are seeded: the JSON-first approach"
1026
+ targetRef: "campaign:Synap Template Launch — Q1 2026"
1027
+ type: belongs_to_project
1028
+ - sourceRef: "post:Why your subscriber list is not yours — and what to do about it"
1029
+ targetRef: "pillar:Data Sovereignty"
1030
+ type: relates_to
1031
+ - sourceRef: "post:Synap's entity model: why we ditched the database-first approach"
1032
+ targetRef: "pillar:Product Building"
1033
+ type: relates_to
1034
+ - sourceRef: "post:Thread: The creator tool stack is broken — here is why"
1035
+ targetRef: "pillar:Creator Economy"
1036
+ type: relates_to
1037
+ - sourceRef: "post:Content OS template — what's included and why we built it"
1038
+ targetRef: "pillar:Product Building"
1039
+ type: relates_to
1040
+ - sourceRef: "post:Data sovereignty is not a technical concept — it is a political one"
1041
+ targetRef: "pillar:Data Sovereignty"
1042
+ type: relates_to
1043
+ - sourceRef: "post:How Synap templates are seeded: the JSON-first approach"
1044
+ targetRef: "pillar:Product Building"
1045
+ type: relates_to
1046
+ - sourceRef: "newsletter:The Sovereign Stack — Issue 12"
1047
+ targetRef: "campaign:Data Sovereignty Series"
1048
+ type: belongs_to_project
1049
+ - sourceRef: "newsletter:The Sovereign Stack — Issue 13"
1050
+ targetRef: "campaign:Synap Template Launch — Q1 2026"
1051
+ type: belongs_to_project
1052
+ - sourceRef: "newsletter:The Sovereign Stack — Issue 12"
1053
+ targetRef: "pillar:Data Sovereignty"
1054
+ type: relates_to
1055
+ - sourceRef: "newsletter:The Sovereign Stack — Issue 13"
1056
+ targetRef: "pillar:Product Building"
1057
+ type: relates_to
1058
+ - sourceRef: "newsletter:The Sovereign Stack — Issue 14"
1059
+ targetRef: "pillar:Data Sovereignty"
1060
+ type: relates_to
1061
+ - sourceRef: "newsletter:The Sovereign Stack — Issue 12"
1062
+ targetRef: "sponsor:Mintlify"
1063
+ type: relates_to
1064
+ - sourceRef: "campaign:Data Sovereignty Series"
1065
+ targetRef: "pillar:Data Sovereignty"
1066
+ type: relates_to
1067
+ - sourceRef: "campaign:Synap Template Launch — Q1 2026"
1068
+ targetRef: "pillar:Product Building"
1069
+ type: relates_to
1070
+
1071
+ displayTemplates:
1072
+ - name: Post Card
1073
+ description: "Content unit with status, format, platform, and performance metrics"
1074
+ entityType: post
1075
+ targetType: entity
1076
+ isDefault: true
1077
+ config:
1078
+ layout:
1079
+ structure:
1080
+ header:
1081
+ enabled: true
1082
+ slots: [post-status, post-format, post-platform]
1083
+ layout: horizontal
1084
+ align: left
1085
+ sidebar:
1086
+ enabled: true
1087
+ slots: [post-pillar, post-campaign, post-sponsor, publish-date]
1088
+ position: right
1089
+ width: 260px
1090
+ layout: vertical
1091
+ content:
1092
+ enabled: true
1093
+ slots: [post-hook, post-cta, engagement-score, post-reach]
1094
+ layout: vertical
1095
+ fieldMapping:
1096
+ post-status:
1097
+ slot: post-status
1098
+ renderer: { type: badge, size: md }
1099
+ showLabel: false
1100
+ order: 1
1101
+ post-format:
1102
+ slot: post-format
1103
+ renderer: { type: badge, variant: muted, size: sm }
1104
+ showLabel: false
1105
+ order: 2
1106
+ post-platform:
1107
+ slot: post-platform
1108
+ renderer: { type: badge, variant: muted, size: sm }
1109
+ showLabel: false
1110
+ order: 3
1111
+ engagement-score:
1112
+ slot: engagement-score
1113
+ renderer: { type: number, size: md }
1114
+ label: Engagement
1115
+ showLabel: true
1116
+ order: 4
1117
+ post-reach:
1118
+ slot: post-reach
1119
+ renderer: { type: number, size: md }
1120
+ label: Reach
1121
+ showLabel: true
1122
+ order: 5
1123
+ publish-date:
1124
+ slot: publish-date
1125
+ renderer: { type: date, format: relative }
1126
+ order: 6
1127
+ colors: { accent: "#8B5CF6" }
1128
+ styling: { borderRadius: 10px }
1129
+ - name: Sponsor Deal
1130
+ description: "Brand deal with status, financials, and deliverable tracking"
1131
+ entityType: sponsor
1132
+ targetType: entity
1133
+ isDefault: true
1134
+ config:
1135
+ layout:
1136
+ structure:
1137
+ header:
1138
+ enabled: true
1139
+ slots: [deal-status, deal-value]
1140
+ layout: horizontal
1141
+ sidebar:
1142
+ enabled: true
1143
+ slots: [payment-status, deliverable-deadline, exclusivity-end, contact-name, contact-email]
1144
+ position: right
1145
+ width: 280px
1146
+ layout: vertical
1147
+ content:
1148
+ enabled: true
1149
+ slots: [deliverables, talking-points, performance-notes]
1150
+ layout: vertical
1151
+ fieldMapping:
1152
+ deal-status:
1153
+ slot: deal-status
1154
+ renderer: { type: badge, size: md }
1155
+ showLabel: false
1156
+ order: 1
1157
+ deal-value:
1158
+ slot: deal-value
1159
+ renderer: { type: number, format: currency, size: lg }
1160
+ label: Deal Value
1161
+ order: 2
1162
+ payment-status:
1163
+ slot: payment-status
1164
+ renderer: { type: badge, variant: muted, size: sm }
1165
+ showLabel: true
1166
+ order: 3
1167
+ deliverable-deadline:
1168
+ slot: deliverable-deadline
1169
+ renderer: { type: date, format: relative }
1170
+ label: Deadline
1171
+ showLabel: true
1172
+ order: 4
1173
+ colors: { accent: "#F59E0B" }
1174
+ styling: { borderRadius: 10px }
1175
+ - name: Campaign Brief
1176
+ description: "Campaign with timeline, KPI progress, and linked content"
1177
+ entityType: campaign
1178
+ targetType: entity
1179
+ isDefault: true
1180
+ config:
1181
+ layout:
1182
+ structure:
1183
+ header:
1184
+ enabled: true
1185
+ slots: [campaign-status, campaign-type]
1186
+ layout: horizontal
1187
+ sidebar:
1188
+ enabled: true
1189
+ slots: [campaign-pillar, campaign-start, campaign-end, kpi-target, kpi-result, post-count]
1190
+ position: right
1191
+ width: 260px
1192
+ layout: vertical
1193
+ content:
1194
+ enabled: true
1195
+ slots: [campaign-goal, campaign-kpi, campaign-budget]
1196
+ layout: vertical
1197
+ fieldMapping:
1198
+ campaign-status:
1199
+ slot: campaign-status
1200
+ renderer: { type: badge, size: md }
1201
+ showLabel: false
1202
+ order: 1
1203
+ campaign-type:
1204
+ slot: campaign-type
1205
+ renderer: { type: badge, variant: muted, size: sm }
1206
+ showLabel: false
1207
+ order: 2
1208
+ kpi-target:
1209
+ slot: kpi-target
1210
+ renderer: { type: number, size: md }
1211
+ label: KPI Target
1212
+ showLabel: true
1213
+ order: 3
1214
+ kpi-result:
1215
+ slot: kpi-result
1216
+ renderer: { type: number, size: md }
1217
+ label: KPI Result
1218
+ showLabel: true
1219
+ order: 4
1220
+ campaign-start:
1221
+ slot: campaign-start
1222
+ renderer: { type: date, format: relative }
1223
+ label: Start
1224
+ showLabel: true
1225
+ order: 5
1226
+ campaign-end:
1227
+ slot: campaign-end
1228
+ renderer: { type: date, format: relative }
1229
+ label: End
1230
+ showLabel: true
1231
+ order: 6
1232
+ colors: { accent: "#EC4899" }
1233
+ styling: { borderRadius: 10px }
1234
+ - name: Newsletter Issue
1235
+ description: "Newsletter issue with open/click rates and sponsor linkage"
1236
+ entityType: newsletter
1237
+ targetType: entity
1238
+ isDefault: true
1239
+ config:
1240
+ layout:
1241
+ structure:
1242
+ header:
1243
+ enabled: true
1244
+ slots: [newsletter-status, issue-number]
1245
+ layout: horizontal
1246
+ sidebar:
1247
+ enabled: true
1248
+ slots: [newsletter-sponsor, newsletter-campaign, newsletter-pillar, send-date, subscriber-count]
1249
+ position: right
1250
+ width: 260px
1251
+ layout: vertical
1252
+ content:
1253
+ enabled: true
1254
+ slots: [subject-line, preview-text, open-rate, click-rate]
1255
+ layout: vertical
1256
+ fieldMapping:
1257
+ newsletter-status:
1258
+ slot: newsletter-status
1259
+ renderer: { type: badge, size: md }
1260
+ showLabel: false
1261
+ order: 1
1262
+ open-rate:
1263
+ slot: open-rate
1264
+ renderer: { type: number, format: percent, size: md }
1265
+ label: Open Rate
1266
+ showLabel: true
1267
+ order: 2
1268
+ click-rate:
1269
+ slot: click-rate
1270
+ renderer: { type: number, format: percent, size: md }
1271
+ label: Click Rate
1272
+ showLabel: true
1273
+ order: 3
1274
+ send-date:
1275
+ slot: send-date
1276
+ renderer: { type: date, format: relative }
1277
+ label: Sent
1278
+ showLabel: true
1279
+ order: 4
1280
+ colors: { accent: "#14B8A6" }
1281
+ styling: { borderRadius: 10px }
1282
+
1283
+ # Home dashboard bento (maps from source bentoLayout — all blocks are widgets)
1284
+ bento:
1285
+ blocks:
1286
+ - kind: widget
1287
+ widgetType: welcome-header
1288
+ pos: { x: 0, y: 0, w: 12, h: 2 }
1289
+ - kind: widget
1290
+ widgetType: entity-count
1291
+ pos: { x: 0, y: 2, w: 2, h: 2 }
1292
+ config: { profileSlug: post, label: Posts }
1293
+ - kind: widget
1294
+ widgetType: entity-count
1295
+ pos: { x: 2, y: 2, w: 2, h: 2 }
1296
+ config: { profileSlug: campaign, label: Campaigns }
1297
+ - kind: widget
1298
+ widgetType: entity-count
1299
+ pos: { x: 4, y: 2, w: 2, h: 2 }
1300
+ config: { profileSlug: pillar, label: Pillars }
1301
+ - kind: widget
1302
+ widgetType: entity-count
1303
+ pos: { x: 6, y: 2, w: 2, h: 2 }
1304
+ config: { profileSlug: newsletter, label: Newsletters }
1305
+ - kind: widget
1306
+ widgetType: entity-count
1307
+ pos: { x: 8, y: 2, w: 2, h: 2 }
1308
+ config: { profileSlug: platform, label: Platforms }
1309
+ - kind: widget
1310
+ widgetType: entity-count
1311
+ pos: { x: 10, y: 2, w: 2, h: 2 }
1312
+ config: { profileSlug: sponsor, label: Sponsors }
1313
+ - kind: widget
1314
+ widgetType: entity-list
1315
+ pos: { x: 0, y: 4, w: 5, h: 4 }
1316
+ config: { profileSlug: post, title: Post Pipeline, limit: 8, variant: compact }
1317
+ - kind: widget
1318
+ widgetType: entity-list
1319
+ pos: { x: 5, y: 4, w: 4, h: 4 }
1320
+ config: { profileSlug: campaign, title: Active Campaigns, limit: 5, variant: detailed }
1321
+ - kind: widget
1322
+ widgetType: entity-list
1323
+ pos: { x: 9, y: 4, w: 3, h: 4 }
1324
+ config: { profileSlug: sponsor, title: Sponsor Tracker, limit: 5, variant: compact }
1325
+ - kind: widget
1326
+ widgetType: calendar
1327
+ pos: { x: 0, y: 8, w: 5, h: 4 }
1328
+ - kind: widget
1329
+ widgetType: entity-list
1330
+ pos: { x: 5, y: 8, w: 4, h: 4 }
1331
+ config: { profileSlug: newsletter, title: Newsletter Issues, limit: 5, variant: compact }
1332
+ - kind: widget
1333
+ widgetType: feed
1334
+ pos: { x: 9, y: 8, w: 3, h: 4 }
1335
+
1336
+ # Per-profile entity detail bento layouts
1337
+ profileEntityBentoTemplates:
1338
+ post:
1339
+ blocks:
1340
+ - id: post-eb-header
1341
+ kind: widget
1342
+ widgetType: entity-header
1343
+ pos: { x: 0, y: 0, w: 12, h: 2 }
1344
+ - id: post-eb-props
1345
+ kind: widget
1346
+ widgetType: entity-properties
1347
+ pos: { x: 0, y: 2, w: 4, h: 8 }
1348
+ - id: post-eb-content
1349
+ kind: widget
1350
+ widgetType: entity-content
1351
+ pos: { x: 4, y: 2, w: 8, h: 4 }
1352
+ - id: post-eb-similar
1353
+ kind: widget
1354
+ widgetType: entity-list
1355
+ pos: { x: 4, y: 6, w: 8, h: 4 }
1356
+ config: { profileSlug: post, title: Similar Posts, limit: 6, variant: compact }
1357
+ campaign:
1358
+ blocks:
1359
+ - id: camp-eb-header
1360
+ kind: widget
1361
+ widgetType: entity-header
1362
+ pos: { x: 0, y: 0, w: 12, h: 2 }
1363
+ - id: camp-eb-props
1364
+ kind: widget
1365
+ widgetType: entity-properties
1366
+ pos: { x: 0, y: 2, w: 4, h: 8 }
1367
+ - id: camp-eb-posts
1368
+ kind: widget
1369
+ widgetType: entity-list
1370
+ pos: { x: 4, y: 2, w: 8, h: 4 }
1371
+ config: { profileSlug: post, title: Campaign Posts, limit: 8, variant: compact }
1372
+ - id: camp-eb-content
1373
+ kind: widget
1374
+ widgetType: entity-content
1375
+ pos: { x: 4, y: 6, w: 8, h: 4 }
1376
+ pillar:
1377
+ blocks:
1378
+ - id: pillar-eb-header
1379
+ kind: widget
1380
+ widgetType: entity-header
1381
+ pos: { x: 0, y: 0, w: 12, h: 2 }
1382
+ - id: pillar-eb-props
1383
+ kind: widget
1384
+ widgetType: entity-properties
1385
+ pos: { x: 0, y: 2, w: 4, h: 8 }
1386
+ - id: pillar-eb-posts
1387
+ kind: widget
1388
+ widgetType: entity-list
1389
+ pos: { x: 4, y: 2, w: 8, h: 8 }
1390
+ config: { profileSlug: post, title: Posts in Pillar, limit: 10, variant: compact }
1391
+
1392
+ # Capability templates to install on provisioning
1393
+ integrations:
1394
+ - templateKey: nango-google
1395
+
1396
+ # Session-template playbooks (none in source)
1397
+ playbooks: []
1398
+
1399
+ # Per-workspace adaptive onboarding context — the "seasoned content strategist" framing
1400
+ onboarding:
1401
+ goal: "Capture the user's brand voice, audience, content pillars, and publishing rhythm across channels — so the workspace reflects how they actually create and distribute content, not a generic calendar."
1402
+ framing: "Act as a seasoned content strategist. Tease out their voice and positioning, who they're talking to, the recurring themes they own, the channels they publish on, and how often. Translate that into pillars, platforms, and a seeded content calendar."
1403
+ collect:
1404
+ - profileSlug: pillar
1405
+ what: "Their recurring content themes / brand voice — the lenses their audience knows them for, and who each speaks to"
1406
+ cardinality: few
1407
+ keyFields: [title, pillar-audience, pillar-goal, posting-frequency]
1408
+ - profileSlug: platform
1409
+ what: "The channels they publish on and the rhythm of each"
1410
+ cardinality: several
1411
+ keyFields: [title, platform-type, platform-posting-freq, follower-count]
1412
+ - profileSlug: post
1413
+ what: "A few real or upcoming pieces to seed the content calendar"
1414
+ cardinality: few
1415
+ keyFields: [title, post-platform, post-pillar, publish-date]
1416
+ - profileSlug: campaign
1417
+ what: "Any active initiative or launch the content ladders up to"
1418
+ cardinality: one
1419
+ keyFields: [title, campaign-type, campaign-kpi]
1420
+ openingQuestions:
1421
+ - "How would you describe your voice, and who are you really creating for?"
1422
+ - "What are the 3-4 themes you keep coming back to — the things your audience knows you for?"
1423
+ - "Which channels do you publish on, and how often on each?"
1424
+ doneWhen: "Their pillars and primary platforms exist with a realistic cadence, and a handful of posts sit on the content calendar."