@synap-core/workspace-templates 0.6.0 → 0.6.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.
package/src/templates.ts CHANGED
@@ -2347,6 +2347,7 @@ const DATA = {
2347
2347
  "viewName": "Agent Fleet Home",
2348
2348
  "blocks": [
2349
2349
  {
2350
+ "kind": "widget",
2350
2351
  "widgetType": "welcome-header",
2351
2352
  "pos": {
2352
2353
  "x": 0,
@@ -2360,6 +2361,7 @@ const DATA = {
2360
2361
  }
2361
2362
  },
2362
2363
  {
2364
+ "kind": "widget",
2363
2365
  "widgetType": "entity-count",
2364
2366
  "pos": {
2365
2367
  "x": 0,
@@ -2374,6 +2376,7 @@ const DATA = {
2374
2376
  }
2375
2377
  },
2376
2378
  {
2379
+ "kind": "widget",
2377
2380
  "widgetType": "entity-count",
2378
2381
  "pos": {
2379
2382
  "x": 3,
@@ -2388,6 +2391,7 @@ const DATA = {
2388
2391
  }
2389
2392
  },
2390
2393
  {
2394
+ "kind": "widget",
2391
2395
  "widgetType": "entity-count",
2392
2396
  "pos": {
2393
2397
  "x": 6,
@@ -2402,6 +2406,7 @@ const DATA = {
2402
2406
  }
2403
2407
  },
2404
2408
  {
2409
+ "kind": "widget",
2405
2410
  "widgetType": "entity-count",
2406
2411
  "pos": {
2407
2412
  "x": 9,
@@ -2416,6 +2421,7 @@ const DATA = {
2416
2421
  }
2417
2422
  },
2418
2423
  {
2424
+ "kind": "widget",
2419
2425
  "widgetType": "entity-spotlight",
2420
2426
  "pos": {
2421
2427
  "x": 0,
@@ -2432,6 +2438,7 @@ const DATA = {
2432
2438
  }
2433
2439
  },
2434
2440
  {
2441
+ "kind": "widget",
2435
2442
  "widgetType": "entity-list",
2436
2443
  "pos": {
2437
2444
  "x": 4,
@@ -2447,6 +2454,7 @@ const DATA = {
2447
2454
  }
2448
2455
  },
2449
2456
  {
2457
+ "kind": "widget",
2450
2458
  "widgetType": "entity-list",
2451
2459
  "pos": {
2452
2460
  "x": 8,
@@ -6753,7 +6761,7 @@ const DATA = {
6753
6761
  "narrative.positioning"
6754
6762
  ],
6755
6763
  "sourceRoles": {
6756
- "brand": "provider",
6764
+ "brand": "consumer",
6757
6765
  "narrative": "provider"
6758
6766
  }
6759
6767
  },
@@ -7829,762 +7837,1123 @@ const DATA = {
7829
7837
  ]
7830
7838
  }
7831
7839
  },
7832
- "content-studio": {
7840
+ "content-os": {
7833
7841
  "meta": {
7834
- "slug": "content-studio",
7835
- "name": "Content Studio",
7836
- "description": "HyperFrames + Remotion video pipeline — script, design, compose, render, publish.",
7837
- "icon": "clapperboard",
7838
- "color": "violet",
7842
+ "slug": "content-os",
7843
+ "name": "Content OS",
7844
+ "description": "Your editorial operating system — pillars, posts, platforms, and newsletters. Turn raw thinking into a published content engine, all connected to your campaigns and brand voice.",
7845
+ "icon": "pen-tool",
7846
+ "color": "#6366F1",
7839
7847
  "tags": [
7840
7848
  "content",
7841
- "video",
7842
- "creation",
7843
- "pipeline"
7849
+ "editorial",
7850
+ "publishing",
7851
+ "creator",
7852
+ "newsletter"
7844
7853
  ],
7845
7854
  "isPublic": true
7846
7855
  },
7856
+ "dependencies": [
7857
+ {
7858
+ "slug": "foundation",
7859
+ "kind": "workspace",
7860
+ "relation": "require",
7861
+ "reason": "Provides the pod-wide sponsor role vocabulary this workspace's posts/newsletters reference."
7862
+ },
7863
+ {
7864
+ "slug": "marketing-campaign",
7865
+ "kind": "workspace",
7866
+ "relation": "require",
7867
+ "reason": "Provides the campaign kind (and its SSOT property body) this workspace's posts/newsletters link to."
7868
+ }
7869
+ ],
7847
7870
  "workspace": {
7848
- "name": "Content Studio",
7849
- "description": "Content creation pipeline — HyperFrames for rapid design, Remotion for production rendering. Create videos, carousels, reels, and social content from one workspace.\n",
7850
- "proposalId": "content-studio-v1",
7851
- "subtype": "content-studio",
7871
+ "name": "Content OS",
7872
+ "description": "The editorial operating system — a view-driven workspace over your content model. Organize by pillar, track every post from Idea to Published, run your platforms and newsletters, and keep it all wired to the campaigns and brand voice that give it context.\n",
7873
+ "proposalId": "content-os-v1",
7874
+ "subtype": "content-os",
7852
7875
  "visibility": "pod_visible",
7853
7876
  "capabilities": [
7854
- "content.pipeline",
7855
- "content.compose",
7856
- "content.render",
7857
- "content.assets",
7858
- "content.templates"
7877
+ "content.editorial",
7878
+ "content.pillars",
7879
+ "content.calendar",
7880
+ "content.newsletter"
7859
7881
  ],
7860
7882
  "sourceRoles": {
7861
7883
  "brand": "consumer",
7884
+ "marketing": "consumer",
7862
7885
  "content": "provider"
7863
7886
  }
7864
7887
  },
7865
7888
  "profiles": [
7866
7889
  {
7867
- "slug": "content-pipeline",
7868
- "displayName": "Pipeline",
7869
- "icon": "workflow",
7870
- "color": "violet",
7871
- "description": "A content creation pipeline: script → design → compose → render.",
7872
- "semanticSlug": "content.pipeline",
7890
+ "slug": "post",
7891
+ "displayName": "Post",
7892
+ "icon": "file-edit",
7893
+ "color": "#6366F1",
7894
+ "description": "Your atomic content unit. One idea, multiple platform formats — tracked from spark to publication.",
7895
+ "scope": "WORKSPACE",
7873
7896
  "properties": [
7874
7897
  {
7875
- "slug": "pipeline-kind",
7876
- "label": "Kind",
7898
+ "slug": "post-status",
7899
+ "label": "Status",
7877
7900
  "valueType": "string",
7878
7901
  "inputType": "select",
7879
7902
  "enumValues": [
7880
- "reel",
7881
- "carousel",
7882
- "demo",
7883
- "explainer",
7884
- "custom"
7885
- ],
7886
- "constraints": {
7887
- "defaultValue": "reel"
7888
- }
7903
+ "Idea",
7904
+ "Briefed",
7905
+ "In Draft",
7906
+ "Review",
7907
+ "Scheduled",
7908
+ "Published",
7909
+ "Archived"
7910
+ ]
7889
7911
  },
7890
7912
  {
7891
- "slug": "pipeline-platform",
7892
- "label": "Platform",
7913
+ "slug": "post-format",
7914
+ "label": "Format",
7893
7915
  "valueType": "string",
7894
7916
  "inputType": "select",
7895
7917
  "enumValues": [
7896
- "instagram",
7897
- "tiktok",
7898
- "youtube",
7899
- "linkedin",
7900
- "x",
7901
- "all"
7902
- ],
7903
- "constraints": {
7904
- "defaultValue": "instagram"
7905
- }
7918
+ "Article",
7919
+ "Thread",
7920
+ "Short Video",
7921
+ "Long Video",
7922
+ "Carousel",
7923
+ "Image Post",
7924
+ "Story",
7925
+ "Newsletter Section",
7926
+ "Podcast Episode",
7927
+ "Other"
7928
+ ]
7906
7929
  },
7907
7930
  {
7908
- "slug": "pipeline-mode",
7909
- "label": "Mode",
7931
+ "slug": "post-platform",
7932
+ "label": "Platform",
7910
7933
  "valueType": "string",
7911
7934
  "inputType": "select",
7912
7935
  "enumValues": [
7913
- "fast",
7914
- "quality",
7915
- "data"
7916
- ],
7917
- "constraints": {
7918
- "defaultValue": "quality"
7919
- }
7936
+ "LinkedIn",
7937
+ "Instagram",
7938
+ "TikTok",
7939
+ "YouTube",
7940
+ "Twitter / X",
7941
+ "Threads",
7942
+ "Bluesky",
7943
+ "Newsletter",
7944
+ "Podcast",
7945
+ "Blog",
7946
+ "Other"
7947
+ ]
7920
7948
  },
7921
7949
  {
7922
- "slug": "pipeline-script",
7923
- "label": "Script",
7924
- "valueType": "string",
7925
- "inputType": "textarea"
7950
+ "slug": "post-pillar",
7951
+ "label": "Pillar",
7952
+ "valueType": "entity_id",
7953
+ "targetProfileSlug": "pillar",
7954
+ "inputType": "entity_select"
7926
7955
  },
7927
7956
  {
7928
- "slug": "pipeline-stages",
7929
- "label": "Stages",
7930
- "valueType": "string",
7931
- "inputType": "textarea"
7932
- }
7933
- ]
7934
- },
7935
- {
7936
- "slug": "content-composition",
7937
- "displayName": "Composition",
7938
- "icon": "clapperboard",
7939
- "color": "blue",
7940
- "description": "A Remotion composition or HyperFrames sequence ready for rendering.",
7941
- "semanticSlug": "content.composition",
7942
- "properties": [
7957
+ "slug": "post-campaign",
7958
+ "label": "Campaign",
7959
+ "valueType": "entity_id",
7960
+ "targetProfileSlug": "campaign",
7961
+ "inputType": "entity_select"
7962
+ },
7943
7963
  {
7944
- "slug": "composition-id",
7945
- "label": "Composition ID",
7964
+ "slug": "post-sponsor",
7965
+ "label": "Sponsor",
7966
+ "valueType": "entity_id",
7967
+ "targetProfileSlug": "sponsor",
7968
+ "inputType": "entity_select"
7969
+ },
7970
+ {
7971
+ "slug": "publish-date",
7972
+ "label": "Publish Date",
7973
+ "valueType": "date"
7974
+ },
7975
+ {
7976
+ "slug": "post-hook",
7977
+ "label": "Hook / Headline",
7946
7978
  "valueType": "string",
7947
- "inputType": "text"
7979
+ "inputType": "text",
7980
+ "placeholder": "Opening line or headline that stops the scroll"
7948
7981
  },
7949
7982
  {
7950
- "slug": "aspect-ratio",
7951
- "label": "Aspect Ratio",
7983
+ "slug": "post-cta",
7984
+ "label": "CTA",
7952
7985
  "valueType": "string",
7953
- "inputType": "select",
7954
- "enumValues": [
7955
- "9:16",
7956
- "16:9",
7957
- "1:1",
7958
- "4:5"
7959
- ],
7960
- "constraints": {
7961
- "defaultValue": "16:9"
7962
- }
7986
+ "inputType": "text",
7987
+ "placeholder": "What should the audience do?"
7963
7988
  },
7964
7989
  {
7965
- "slug": "duration-seconds",
7966
- "label": "Duration (seconds)",
7990
+ "slug": "post-tags",
7991
+ "label": "Tags",
7992
+ "valueType": "array"
7993
+ },
7994
+ {
7995
+ "slug": "engagement-score",
7996
+ "label": "Engagement Score",
7967
7997
  "valueType": "number",
7968
- "inputType": "number"
7998
+ "inputType": "number",
7999
+ "placeholder": "Numeric performance metric (likes + comments + shares)"
7969
8000
  },
7970
8001
  {
7971
- "slug": "hyperframes-meta",
7972
- "label": "HyperFrames JSON",
7973
- "valueType": "string",
7974
- "inputType": "textarea"
8002
+ "slug": "post-reach",
8003
+ "label": "Reach / Views",
8004
+ "valueType": "number",
8005
+ "inputType": "number"
7975
8006
  },
7976
8007
  {
7977
- "slug": "template-id",
7978
- "label": "Template",
8008
+ "slug": "repurposed-from",
8009
+ "label": "Repurposed From",
7979
8010
  "valueType": "string",
7980
- "inputType": "text"
8011
+ "inputType": "text",
8012
+ "placeholder": "Source post or content this was adapted from"
7981
8013
  },
7982
8014
  {
7983
- "slug": "pipeline-ref",
7984
- "label": "Pipeline",
8015
+ "slug": "post-url",
8016
+ "label": "Published URL",
7985
8017
  "valueType": "string",
7986
- "inputType": "text"
8018
+ "inputType": "text",
8019
+ "placeholder": "https://...",
8020
+ "constraints": {
8021
+ "format": "url"
8022
+ }
7987
8023
  }
7988
8024
  ]
7989
8025
  },
7990
8026
  {
7991
- "slug": "content-asset",
7992
- "displayName": "Asset",
7993
- "icon": "image",
7994
- "color": "green",
7995
- "description": "Media asset: image, video clip, audio track, font, or script.",
7996
- "semanticSlug": "content.asset",
8027
+ "slug": "pillar",
8028
+ "displayName": "Pillar",
8029
+ "icon": "columns",
8030
+ "color": "#8B5CF6",
8031
+ "description": "A recurring content theme — the lens through which your audience knows you. The organizing principle of your brand.",
8032
+ "scope": "WORKSPACE",
7997
8033
  "properties": [
7998
8034
  {
7999
- "slug": "asset-kind",
8000
- "label": "Kind",
8035
+ "slug": "pillar-status",
8036
+ "label": "Status",
8001
8037
  "valueType": "string",
8002
8038
  "inputType": "select",
8003
8039
  "enumValues": [
8004
- "image",
8005
- "video",
8006
- "audio",
8007
- "font",
8008
- "script",
8009
- "other"
8040
+ "Active",
8041
+ "Developing",
8042
+ "Paused",
8043
+ "Retired"
8010
8044
  ]
8011
8045
  },
8012
8046
  {
8013
- "slug": "source-kind",
8014
- "label": "Source",
8047
+ "slug": "pillar-audience",
8048
+ "label": "Audience Segment",
8015
8049
  "valueType": "string",
8016
- "inputType": "select",
8017
- "enumValues": [
8018
- "uploaded",
8019
- "brand",
8020
- "generated"
8021
- ],
8022
- "constraints": {
8023
- "defaultValue": "uploaded"
8024
- }
8050
+ "inputType": "text",
8051
+ "placeholder": "Who does this pillar speak to?"
8025
8052
  },
8026
8053
  {
8027
- "slug": "source-url",
8028
- "label": "URL",
8054
+ "slug": "pillar-goal",
8055
+ "label": "Audience Goal",
8029
8056
  "valueType": "string",
8030
- "inputType": "url"
8057
+ "inputType": "text",
8058
+ "placeholder": "What should the audience think, feel, or do after consuming this pillar?"
8031
8059
  },
8032
8060
  {
8033
- "slug": "brand-asset-ref",
8034
- "label": "Brand Asset Ref",
8061
+ "slug": "pillar-formats",
8062
+ "label": "Primary Formats",
8035
8063
  "valueType": "string",
8036
- "inputType": "text"
8064
+ "inputType": "select",
8065
+ "enumValues": [
8066
+ "Articles + Threads",
8067
+ "Short Video",
8068
+ "Long Video",
8069
+ "Newsletter",
8070
+ "Podcast",
8071
+ "Carousel",
8072
+ "Mixed"
8073
+ ]
8037
8074
  },
8038
8075
  {
8039
- "slug": "file-id",
8040
- "label": "File ID",
8076
+ "slug": "post-count-pillar",
8077
+ "label": "Total Posts Published",
8078
+ "valueType": "number",
8079
+ "inputType": "number"
8080
+ },
8081
+ {
8082
+ "slug": "avg-engagement",
8083
+ "label": "Avg Engagement Score",
8084
+ "valueType": "number",
8085
+ "inputType": "number"
8086
+ },
8087
+ {
8088
+ "slug": "top-post",
8089
+ "label": "Top Performing Post",
8041
8090
  "valueType": "string",
8042
- "inputType": "text"
8091
+ "inputType": "text",
8092
+ "placeholder": "Title of best performing post in this pillar"
8043
8093
  },
8044
8094
  {
8045
- "slug": "document-id",
8046
- "label": "Document ID",
8095
+ "slug": "posting-frequency",
8096
+ "label": "Target Frequency",
8047
8097
  "valueType": "string",
8048
- "inputType": "text"
8098
+ "inputType": "select",
8099
+ "enumValues": [
8100
+ "Daily",
8101
+ "3x / week",
8102
+ "2x / week",
8103
+ "Weekly",
8104
+ "Bi-weekly",
8105
+ "Monthly",
8106
+ "Ad hoc"
8107
+ ]
8108
+ },
8109
+ {
8110
+ "slug": "pillar-tags",
8111
+ "label": "Tags",
8112
+ "valueType": "array"
8049
8113
  }
8050
8114
  ]
8051
8115
  },
8052
8116
  {
8053
- "slug": "render-job",
8054
- "displayName": "Render Job",
8055
- "icon": "play",
8056
- "color": "amber",
8057
- "description": "A render execution — queued, rendering, done, or failed.",
8058
- "semanticSlug": "content.render",
8117
+ "slug": "platform",
8118
+ "displayName": "Platform",
8119
+ "icon": "share-2",
8120
+ "color": "#06B6D4",
8121
+ "description": "A social account, newsletter publication, or podcast channel. Each platform has its own audience metrics and publishing rhythm.",
8122
+ "scope": "WORKSPACE",
8059
8123
  "properties": [
8060
8124
  {
8061
- "slug": "job-status",
8062
- "label": "Status",
8125
+ "slug": "platform-type",
8126
+ "label": "Type",
8063
8127
  "valueType": "string",
8064
8128
  "inputType": "select",
8065
8129
  "enumValues": [
8066
- "queued",
8067
- "rendering",
8068
- "done",
8069
- "failed"
8070
- ],
8071
- "constraints": {
8072
- "defaultValue": "queued"
8073
- }
8130
+ "LinkedIn",
8131
+ "Instagram",
8132
+ "TikTok",
8133
+ "YouTube",
8134
+ "Twitter / X",
8135
+ "Threads",
8136
+ "Bluesky",
8137
+ "Newsletter",
8138
+ "Podcast",
8139
+ "Blog / Website",
8140
+ "Other"
8141
+ ]
8074
8142
  },
8075
8143
  {
8076
- "slug": "output-format",
8077
- "label": "Format",
8144
+ "slug": "platform-status",
8145
+ "label": "Status",
8078
8146
  "valueType": "string",
8079
8147
  "inputType": "select",
8080
8148
  "enumValues": [
8081
- "mp4",
8082
- "gif",
8083
- "webm",
8084
- "mp3"
8085
- ],
8086
- "constraints": {
8087
- "defaultValue": "mp4"
8088
- }
8149
+ "Active",
8150
+ "Building",
8151
+ "Maintenance Mode",
8152
+ "Inactive"
8153
+ ]
8089
8154
  },
8090
8155
  {
8091
- "slug": "output-url",
8092
- "label": "Output URL",
8156
+ "slug": "platform-url",
8157
+ "label": "Profile URL",
8093
8158
  "valueType": "string",
8094
- "inputType": "url"
8159
+ "inputType": "text",
8160
+ "placeholder": "https://...",
8161
+ "constraints": {
8162
+ "format": "url"
8163
+ }
8095
8164
  },
8096
8165
  {
8097
- "slug": "render-duration-ms",
8098
- "label": "Render Duration (ms)",
8166
+ "slug": "follower-count",
8167
+ "label": "Follower / Subscriber Count",
8099
8168
  "valueType": "number",
8100
8169
  "inputType": "number"
8101
8170
  },
8102
8171
  {
8103
- "slug": "error-message",
8104
- "label": "Error",
8105
- "valueType": "string",
8106
- "inputType": "textarea"
8172
+ "slug": "follower-target",
8173
+ "label": "Target Count",
8174
+ "valueType": "number",
8175
+ "inputType": "number"
8107
8176
  },
8108
8177
  {
8109
- "slug": "composition-ref",
8110
- "label": "Composition",
8111
- "valueType": "string",
8112
- "inputType": "text"
8113
- }
8114
- ]
8115
- },
8116
- {
8117
- "slug": "content-template",
8118
- "displayName": "Template",
8119
- "icon": "layout-template",
8120
- "color": "pink",
8121
- "description": "Reusable video template — HyperFrames, Remotion, or hybrid.",
8122
- "semanticSlug": "content.template",
8123
- "properties": [
8178
+ "slug": "avg-engagement-rate",
8179
+ "label": "Avg Engagement Rate (%)",
8180
+ "valueType": "number",
8181
+ "inputType": "number"
8182
+ },
8124
8183
  {
8125
- "slug": "template-kind",
8126
- "label": "Kind",
8184
+ "slug": "platform-posting-freq",
8185
+ "label": "Posting Frequency",
8127
8186
  "valueType": "string",
8128
8187
  "inputType": "select",
8129
8188
  "enumValues": [
8130
- "hyperframes",
8131
- "remotion",
8132
- "hybrid"
8133
- ],
8134
- "constraints": {
8135
- "defaultValue": "hyperframes"
8136
- }
8189
+ "Daily",
8190
+ "3x / week",
8191
+ "2x / week",
8192
+ "Weekly",
8193
+ "Bi-weekly",
8194
+ "Monthly",
8195
+ "As Needed"
8196
+ ]
8137
8197
  },
8138
8198
  {
8139
- "slug": "aspect-ratio",
8140
- "label": "Aspect Ratio",
8141
- "valueType": "string",
8142
- "inputType": "select",
8143
- "enumValues": [
8144
- "9:16",
8145
- "16:9",
8146
- "1:1",
8147
- "4:5"
8148
- ],
8149
- "constraints": {
8150
- "defaultValue": "16:9"
8151
- }
8199
+ "slug": "last-post-date",
8200
+ "label": "Last Post Date",
8201
+ "valueType": "date"
8152
8202
  },
8153
8203
  {
8154
- "slug": "template-status",
8155
- "label": "Status",
8204
+ "slug": "platform-notes",
8205
+ "label": "Notes",
8156
8206
  "valueType": "string",
8157
- "inputType": "select",
8158
- "enumValues": [
8159
- "draft",
8160
- "approved",
8161
- "deprecated"
8162
- ],
8163
- "constraints": {
8164
- "defaultValue": "approved"
8165
- }
8207
+ "inputType": "text",
8208
+ "placeholder": "What works here? Tone, format, best times..."
8166
8209
  },
8167
8210
  {
8168
- "slug": "template-config",
8169
- "label": "Config JSON",
8170
- "valueType": "string",
8171
- "inputType": "textarea"
8211
+ "slug": "platform-tags",
8212
+ "label": "Tags",
8213
+ "valueType": "array"
8172
8214
  }
8173
8215
  ]
8174
8216
  },
8175
8217
  {
8176
- "slug": "post",
8177
- "displayName": "Post",
8178
- "icon": "file-edit",
8179
- "color": "#6366F1",
8180
- "description": "Your atomic content unit. One idea, multiple platform formats — tracked from spark to publication.",
8218
+ "slug": "newsletter",
8219
+ "displayName": "Newsletter",
8220
+ "icon": "mail",
8221
+ "color": "#10B981",
8222
+ "description": "A newsletter issue — your direct channel to an owned audience. No algorithm, no platform fee, no intermediary.",
8181
8223
  "scope": "WORKSPACE",
8182
8224
  "properties": [
8183
8225
  {
8184
- "slug": "post-status",
8226
+ "slug": "newsletter-status",
8185
8227
  "label": "Status",
8186
8228
  "valueType": "string",
8187
8229
  "inputType": "select",
8188
8230
  "enumValues": [
8189
8231
  "Idea",
8190
- "Briefed",
8191
- "In Draft",
8192
- "Review",
8232
+ "Drafting",
8233
+ "Editing",
8193
8234
  "Scheduled",
8194
- "Published",
8235
+ "Sent",
8195
8236
  "Archived"
8196
8237
  ]
8197
8238
  },
8198
8239
  {
8199
- "slug": "post-format",
8200
- "label": "Format",
8240
+ "slug": "newsletter-series",
8241
+ "label": "Series",
8201
8242
  "valueType": "string",
8202
- "inputType": "select",
8203
- "enumValues": [
8204
- "Article",
8205
- "Thread",
8206
- "Short Video",
8207
- "Long Video",
8208
- "Carousel",
8209
- "Image Post",
8210
- "Story",
8211
- "Newsletter Section",
8212
- "Podcast Episode",
8213
- "Other"
8214
- ]
8215
- },
8216
- {
8217
- "slug": "post-platform",
8218
- "label": "Platform",
8219
- "valueType": "string",
8220
- "inputType": "select",
8221
- "enumValues": [
8222
- "LinkedIn",
8223
- "Instagram",
8224
- "TikTok",
8225
- "YouTube",
8226
- "Twitter / X",
8227
- "Threads",
8228
- "Bluesky",
8229
- "Newsletter",
8230
- "Podcast",
8231
- "Blog",
8232
- "Other"
8233
- ]
8234
- },
8235
- {
8236
- "slug": "post-pillar",
8237
- "label": "Pillar",
8238
- "valueType": "entity_id"
8239
- },
8240
- {
8241
- "slug": "post-campaign",
8242
- "label": "Campaign",
8243
- "valueType": "entity_id"
8244
- },
8245
- {
8246
- "slug": "post-sponsor",
8247
- "label": "Sponsor",
8248
- "valueType": "entity_id"
8243
+ "inputType": "text",
8244
+ "placeholder": "Which newsletter series is this issue part of?"
8249
8245
  },
8250
8246
  {
8251
- "slug": "publish-date",
8252
- "label": "Publish Date",
8253
- "valueType": "date"
8247
+ "slug": "issue-number",
8248
+ "label": "Issue Number",
8249
+ "valueType": "number",
8250
+ "inputType": "number"
8254
8251
  },
8255
8252
  {
8256
- "slug": "post-hook",
8257
- "label": "Hook / Headline",
8253
+ "slug": "subject-line",
8254
+ "label": "Subject Line",
8258
8255
  "valueType": "string",
8259
8256
  "inputType": "text",
8260
- "placeholder": "Opening line or headline that stops the scroll"
8257
+ "placeholder": "The subject line — your most important copy"
8261
8258
  },
8262
8259
  {
8263
- "slug": "post-cta",
8264
- "label": "CTA",
8260
+ "slug": "preview-text",
8261
+ "label": "Preview Text",
8265
8262
  "valueType": "string",
8266
8263
  "inputType": "text",
8267
- "placeholder": "What should the audience do?"
8264
+ "placeholder": "45-character preview shown in inbox (after subject)"
8268
8265
  },
8269
8266
  {
8270
- "slug": "post-tags",
8271
- "label": "Tags",
8272
- "valueType": "array"
8267
+ "slug": "send-date",
8268
+ "label": "Send Date",
8269
+ "valueType": "date"
8273
8270
  },
8274
8271
  {
8275
- "slug": "engagement-score",
8276
- "label": "Engagement Score",
8272
+ "slug": "subscriber-count",
8273
+ "label": "Subscriber Count at Send",
8277
8274
  "valueType": "number",
8278
- "inputType": "number",
8279
- "placeholder": "Numeric performance metric (likes + comments + shares)"
8275
+ "inputType": "number"
8280
8276
  },
8281
8277
  {
8282
- "slug": "post-reach",
8283
- "label": "Reach / Views",
8278
+ "slug": "open-rate",
8279
+ "label": "Open Rate (%)",
8284
8280
  "valueType": "number",
8285
8281
  "inputType": "number"
8286
8282
  },
8287
8283
  {
8288
- "slug": "repurposed-from",
8289
- "label": "Repurposed From",
8290
- "valueType": "string",
8291
- "inputType": "text",
8292
- "placeholder": "Source post or content this was adapted from"
8284
+ "slug": "click-rate",
8285
+ "label": "Click Rate (%)",
8286
+ "valueType": "number",
8287
+ "inputType": "number"
8293
8288
  },
8294
8289
  {
8295
- "slug": "post-url",
8296
- "label": "Published URL",
8297
- "valueType": "string",
8298
- "inputType": "text",
8299
- "placeholder": "https://...",
8300
- "constraints": {
8301
- "format": "url"
8302
- }
8290
+ "slug": "newsletter-sponsor",
8291
+ "label": "Sponsor",
8292
+ "valueType": "entity_id",
8293
+ "targetProfileSlug": "sponsor",
8294
+ "inputType": "entity_select"
8295
+ },
8296
+ {
8297
+ "slug": "newsletter-campaign",
8298
+ "label": "Campaign",
8299
+ "valueType": "entity_id",
8300
+ "targetProfileSlug": "campaign",
8301
+ "inputType": "entity_select"
8302
+ },
8303
+ {
8304
+ "slug": "newsletter-pillar",
8305
+ "label": "Primary Pillar",
8306
+ "valueType": "entity_id",
8307
+ "targetProfileSlug": "pillar",
8308
+ "inputType": "entity_select"
8309
+ },
8310
+ {
8311
+ "slug": "newsletter-tags",
8312
+ "label": "Tags",
8313
+ "valueType": "array"
8303
8314
  }
8304
8315
  ]
8305
8316
  },
8306
8317
  {
8307
- "slug": "pillar",
8308
- "displayName": "Pillar",
8309
- "icon": "columns",
8310
- "color": "#8B5CF6",
8311
- "description": "A recurring content theme — the lens through which your audience knows you. The organizing principle of your brand.",
8312
- "scope": "WORKSPACE",
8318
+ "slug": "campaign",
8319
+ "displayName": "Campaign",
8320
+ "icon": "megaphone",
8321
+ "color": "pink",
8322
+ "description": "A marketing campaign — email, social, event, content, or partnership",
8323
+ "semanticSlug": "marketing.campaign",
8313
8324
  "properties": [
8314
8325
  {
8315
- "slug": "pillar-status",
8326
+ "slug": "campaign-status",
8316
8327
  "label": "Status",
8317
8328
  "valueType": "string",
8318
8329
  "inputType": "select",
8319
8330
  "enumValues": [
8320
- "Active",
8321
- "Developing",
8322
- "Paused",
8323
- "Retired"
8324
- ]
8331
+ "planning",
8332
+ "active",
8333
+ "paused",
8334
+ "completed",
8335
+ "cancelled"
8336
+ ],
8337
+ "constraints": {
8338
+ "defaultValue": "planning"
8339
+ }
8325
8340
  },
8326
8341
  {
8327
- "slug": "pillar-audience",
8328
- "label": "Audience Segment",
8342
+ "slug": "campaign-channel",
8343
+ "label": "Channel",
8329
8344
  "valueType": "string",
8330
- "inputType": "text",
8331
- "placeholder": "Who does this pillar speak to?"
8345
+ "inputType": "select",
8346
+ "enumValues": [
8347
+ "email",
8348
+ "social",
8349
+ "event",
8350
+ "content",
8351
+ "partnership",
8352
+ "paid",
8353
+ "organic",
8354
+ "other"
8355
+ ]
8332
8356
  },
8333
8357
  {
8334
- "slug": "pillar-goal",
8335
- "label": "Audience Goal",
8358
+ "slug": "campaign-goal",
8359
+ "label": "Goal",
8336
8360
  "valueType": "string",
8337
- "inputType": "text",
8338
- "placeholder": "What should the audience think, feel, or do after consuming this pillar?"
8361
+ "inputType": "textarea"
8339
8362
  },
8340
8363
  {
8341
- "slug": "pillar-formats",
8342
- "label": "Primary Formats",
8364
+ "slug": "campaign-target-audience",
8365
+ "label": "Target Audience",
8343
8366
  "valueType": "string",
8344
- "inputType": "select",
8345
- "enumValues": [
8346
- "Articles + Threads",
8347
- "Short Video",
8348
- "Long Video",
8349
- "Newsletter",
8350
- "Podcast",
8351
- "Carousel",
8352
- "Mixed"
8353
- ]
8367
+ "inputType": "textarea"
8354
8368
  },
8355
8369
  {
8356
- "slug": "post-count-pillar",
8357
- "label": "Total Posts Published",
8370
+ "slug": "campaign-start-date",
8371
+ "label": "Start Date",
8372
+ "valueType": "date",
8373
+ "inputType": "date"
8374
+ },
8375
+ {
8376
+ "slug": "campaign-end-date",
8377
+ "label": "End Date",
8378
+ "valueType": "date",
8379
+ "inputType": "date"
8380
+ },
8381
+ {
8382
+ "slug": "campaign-budget",
8383
+ "label": "Budget",
8358
8384
  "valueType": "number",
8359
8385
  "inputType": "number"
8360
8386
  },
8361
8387
  {
8362
- "slug": "avg-engagement",
8363
- "label": "Avg Engagement Score",
8388
+ "slug": "campaign-lead-count",
8389
+ "label": "Lead Count",
8364
8390
  "valueType": "number",
8365
8391
  "inputType": "number"
8366
8392
  },
8367
8393
  {
8368
- "slug": "top-post",
8369
- "label": "Top Performing Post",
8370
- "valueType": "string",
8371
- "inputType": "text",
8372
- "placeholder": "Title of best performing post in this pillar"
8394
+ "slug": "campaign-conversion-rate",
8395
+ "label": "Conversion Rate (%)",
8396
+ "valueType": "number",
8397
+ "inputType": "number"
8373
8398
  },
8374
8399
  {
8375
- "slug": "posting-frequency",
8376
- "label": "Target Frequency",
8400
+ "slug": "campaign-notes",
8401
+ "label": "Notes",
8377
8402
  "valueType": "string",
8378
- "inputType": "select",
8379
- "enumValues": [
8380
- "Daily",
8381
- "3x / week",
8382
- "2x / week",
8383
- "Weekly",
8384
- "Bi-weekly",
8385
- "Monthly",
8386
- "Ad hoc"
8387
- ]
8388
- },
8389
- {
8390
- "slug": "pillar-tags",
8391
- "label": "Tags",
8392
- "valueType": "array"
8403
+ "inputType": "textarea"
8393
8404
  }
8394
8405
  ]
8395
8406
  },
8396
8407
  {
8397
- "slug": "platform",
8398
- "displayName": "Platform",
8399
- "icon": "share-2",
8400
- "color": "#06B6D4",
8401
- "description": "A social account, newsletter publication, or podcast channel. Each platform has its own audience metrics and publishing rhythm.",
8402
- "scope": "WORKSPACE",
8408
+ "slug": "sponsor",
8409
+ "displayName": "Sponsor",
8410
+ "icon": "hand-coins",
8411
+ "color": "amber",
8412
+ "description": "A backer or sponsor of a program, round, or event.",
8413
+ "scope": "shared",
8414
+ "profileKind": "role",
8415
+ "applicableKinds": [
8416
+ "person",
8417
+ "company"
8418
+ ],
8403
8419
  "properties": [
8404
8420
  {
8405
- "slug": "platform-type",
8406
- "label": "Type",
8421
+ "slug": "sponsorStatus",
8422
+ "label": "Status",
8407
8423
  "valueType": "string",
8408
8424
  "inputType": "select",
8409
8425
  "enumValues": [
8410
- "LinkedIn",
8411
- "Instagram",
8412
- "TikTok",
8413
- "YouTube",
8414
- "Twitter / X",
8415
- "Threads",
8416
- "Bluesky",
8417
- "Newsletter",
8418
- "Podcast",
8419
- "Blog / Website",
8420
- "Other"
8426
+ "prospect",
8427
+ "active",
8428
+ "paused"
8421
8429
  ]
8422
8430
  },
8423
8431
  {
8424
- "slug": "platform-status",
8425
- "label": "Status",
8432
+ "slug": "sponsorType",
8433
+ "label": "Sponsor Type",
8434
+ "valueType": "string",
8435
+ "inputType": "text"
8436
+ },
8437
+ {
8438
+ "slug": "notes",
8439
+ "label": "Notes",
8440
+ "valueType": "string",
8441
+ "inputType": "textarea"
8442
+ }
8443
+ ]
8444
+ }
8445
+ ],
8446
+ "views": [
8447
+ {
8448
+ "name": "Posts",
8449
+ "slug": "content-posts",
8450
+ "type": "kanban",
8451
+ "scopeProfileSlug": "post",
8452
+ "groupBy": "post-status",
8453
+ "description": "Content posts by status."
8454
+ },
8455
+ {
8456
+ "name": "Pillars",
8457
+ "slug": "content-pillars",
8458
+ "type": "list",
8459
+ "scopeProfileSlug": "pillar",
8460
+ "description": "Content pillars — the recurring themes."
8461
+ },
8462
+ {
8463
+ "name": "Platforms",
8464
+ "slug": "content-platforms",
8465
+ "type": "table",
8466
+ "scopeProfileSlug": "platform",
8467
+ "description": "Channels and their audience metrics."
8468
+ },
8469
+ {
8470
+ "name": "Newsletters",
8471
+ "slug": "content-newsletters",
8472
+ "type": "kanban",
8473
+ "scopeProfileSlug": "newsletter",
8474
+ "groupBy": "newsletter-status",
8475
+ "description": "Newsletter issues by status."
8476
+ }
8477
+ ],
8478
+ "app": {
8479
+ "kind": "stored",
8480
+ "cellKey": "entity-detail"
8481
+ },
8482
+ "layout": {
8483
+ "pinnedApps": [
8484
+ "dashboard",
8485
+ "data"
8486
+ ],
8487
+ "defaultView": "Posts",
8488
+ "defaultApp": null,
8489
+ "sidebarItems": [
8490
+ {
8491
+ "kind": "view",
8492
+ "viewName": "Posts",
8493
+ "label": "Posts",
8494
+ "icon": "file-edit"
8495
+ },
8496
+ {
8497
+ "kind": "view",
8498
+ "viewName": "Pillars",
8499
+ "label": "Pillars",
8500
+ "icon": "columns"
8501
+ },
8502
+ {
8503
+ "kind": "view",
8504
+ "viewName": "Platforms",
8505
+ "label": "Platforms",
8506
+ "icon": "share-2"
8507
+ },
8508
+ {
8509
+ "kind": "view",
8510
+ "viewName": "Newsletters",
8511
+ "label": "Newsletters",
8512
+ "icon": "mail"
8513
+ }
8514
+ ]
8515
+ },
8516
+ "bento": {
8517
+ "viewName": "Posts",
8518
+ "blocks": [
8519
+ {
8520
+ "kind": "view",
8521
+ "viewName": "Pillars",
8522
+ "pos": {
8523
+ "x": 0,
8524
+ "y": 0,
8525
+ "w": 6,
8526
+ "h": 5
8527
+ }
8528
+ },
8529
+ {
8530
+ "kind": "view",
8531
+ "viewName": "Newsletters",
8532
+ "pos": {
8533
+ "x": 6,
8534
+ "y": 0,
8535
+ "w": 6,
8536
+ "h": 5
8537
+ }
8538
+ }
8539
+ ]
8540
+ },
8541
+ "entityLinks": [
8542
+ {
8543
+ "sourceProfileSlug": "post",
8544
+ "targetProfileSlug": "campaign",
8545
+ "type": "part_of_campaign",
8546
+ "label": "Campaign"
8547
+ },
8548
+ {
8549
+ "sourceProfileSlug": "post",
8550
+ "targetProfileSlug": "pillar",
8551
+ "type": "belongs_to_pillar",
8552
+ "label": "Pillar"
8553
+ },
8554
+ {
8555
+ "sourceProfileSlug": "post",
8556
+ "targetProfileSlug": "sponsor",
8557
+ "type": "sponsored_by",
8558
+ "label": "Sponsor"
8559
+ }
8560
+ ],
8561
+ "onboarding": {
8562
+ "goal": "Stand up the editorial engine — the pillars you're known for, the platforms you publish on, the cadence you can actually sustain, and a first post placed in the system — so the workspace mirrors how you turn thinking into published content, not a blank calendar.\n",
8563
+ "framing": "THE EDITOR-IN-CHIEF: Act as a seasoned content strategist who has grown owned audiences from zero. Anchor everything on PILLARS — the two-to-four recurring themes an audience comes to you for — because pillars are what make a content engine compound instead of drift. Pull voice and identity from Brand and the target audience from Foundation so every piece lands on-strategy. Push for a cadence they can hold for a year, not a heroic month. Be concrete: real platforms, real formats, a real first post — a fuzzy \"I'll post more\" helps no one.\n",
8564
+ "expertise": {
8565
+ "starters": [
8566
+ "Pillars before posts. A creator known for 2–4 clear themes compounds; one posting about everything stays noise. Propose naming the pillars FIRST — each with the audience it speaks to and the transformation it delivers — then hang every post off one of them.\n",
8567
+ "Cadence you can sustain beats cadence that impresses. A weekly post held for a year outperforms daily-for-three-weeks-then-silence. Propose a realistic per-platform frequency and let the calendar enforce it, rather than an ambitious number that collapses.\n",
8568
+ "One idea, many formats — design for repurposing from the start. A single strong thought becomes a thread, a short video, a newsletter section, and a carousel. Propose the repurpose chain up front so one capture yields a week of output, tracked via `repurposed-from`.\n"
8569
+ ],
8570
+ "blindSpots": [
8571
+ "No pillars = brand drift. If they list a dozen post ideas but can't name the 2–4 themes underneath, that's the gap — surface it before filling the calendar, because unpillared posting never builds an identity.\n",
8572
+ "The owned-audience channel is the one most creators under-invest in. If they're all-in on algorithmic platforms with no newsletter or list, name it: the newsletter is the audience they actually own when a platform changes the rules.\n",
8573
+ "Chasing every platform at once guarantees all of them stay shallow. If they name five channels, push back: which ONE or two get real cadence and attention now, and which are experiments?\n"
8574
+ ],
8575
+ "bar": "The workspace reads like a running publication: a handful of named pillars each tied to an audience, the platforms actually committed to with a sustainable cadence, an owned newsletter channel, and a first post placed in a pillar — so a strategist could see at a glance what the brand is about, where it publishes, and what ships next.\n"
8576
+ },
8577
+ "collect": [
8578
+ {
8579
+ "profileSlug": "pillar",
8580
+ "what": "The recurring themes you're known for — the 2–4 lenses your audience comes to you for, each with the segment it speaks to and the goal it serves.",
8581
+ "cardinality": "few",
8582
+ "keyFields": [
8583
+ "pillar-status",
8584
+ "pillar-audience",
8585
+ "pillar-formats"
8586
+ ]
8587
+ },
8588
+ {
8589
+ "profileSlug": "platform",
8590
+ "what": "The channels you actually publish on — the social accounts, newsletter, or podcast — with their status and the cadence you can hold.",
8591
+ "cardinality": "several",
8592
+ "keyFields": [
8593
+ "platform-type",
8594
+ "platform-status",
8595
+ "platform-posting-freq"
8596
+ ]
8597
+ },
8598
+ {
8599
+ "profileSlug": "post",
8600
+ "what": "A first post or two already in motion, each placed on a pillar and a platform at its true status (Idea through Published).",
8601
+ "cardinality": "few",
8602
+ "keyFields": [
8603
+ "post-status",
8604
+ "post-format",
8605
+ "post-platform"
8606
+ ]
8607
+ }
8608
+ ],
8609
+ "openingQuestions": [
8610
+ "What are the 2–4 themes your audience comes to you for — the pillars everything you make ties back to?",
8611
+ "Which platforms do you actually publish on, and what cadence can you genuinely sustain on each?",
8612
+ "Do you run (or want) a newsletter — the audience you own outright — and what's the first post you'd place in the system?"
8613
+ ],
8614
+ "doneWhen": "at least one pillar + one platform with a cadence + a first post placed on a pillar."
8615
+ }
8616
+ },
8617
+ "content-studio": {
8618
+ "meta": {
8619
+ "slug": "content-studio",
8620
+ "name": "Content Studio",
8621
+ "description": "HyperFrames + Remotion video pipeline — script, design, compose, render, publish.",
8622
+ "icon": "clapperboard",
8623
+ "color": "violet",
8624
+ "tags": [
8625
+ "content",
8626
+ "video",
8627
+ "creation",
8628
+ "pipeline"
8629
+ ],
8630
+ "isPublic": true
8631
+ },
8632
+ "workspace": {
8633
+ "name": "Content Studio",
8634
+ "description": "Content creation pipeline — HyperFrames for rapid design, Remotion for production rendering. Create videos, carousels, reels, and social content from one workspace.\n",
8635
+ "proposalId": "content-studio-v1",
8636
+ "subtype": "content-studio",
8637
+ "visibility": "pod_visible",
8638
+ "capabilities": [
8639
+ "content.pipeline",
8640
+ "content.compose",
8641
+ "content.render",
8642
+ "content.assets",
8643
+ "content.templates"
8644
+ ],
8645
+ "sourceRoles": {
8646
+ "brand": "consumer",
8647
+ "content": "provider"
8648
+ }
8649
+ },
8650
+ "profiles": [
8651
+ {
8652
+ "slug": "content-pipeline",
8653
+ "displayName": "Pipeline",
8654
+ "icon": "workflow",
8655
+ "color": "violet",
8656
+ "description": "A content creation pipeline: script → design → compose → render.",
8657
+ "semanticSlug": "content.pipeline",
8658
+ "properties": [
8659
+ {
8660
+ "slug": "pipeline-kind",
8661
+ "label": "Kind",
8426
8662
  "valueType": "string",
8427
8663
  "inputType": "select",
8428
8664
  "enumValues": [
8429
- "Active",
8430
- "Building",
8431
- "Maintenance Mode",
8432
- "Inactive"
8433
- ]
8665
+ "reel",
8666
+ "carousel",
8667
+ "demo",
8668
+ "explainer",
8669
+ "custom"
8670
+ ],
8671
+ "constraints": {
8672
+ "defaultValue": "reel"
8673
+ }
8434
8674
  },
8435
8675
  {
8436
- "slug": "platform-url",
8437
- "label": "Profile URL",
8676
+ "slug": "pipeline-platform",
8677
+ "label": "Platform",
8438
8678
  "valueType": "string",
8439
- "inputType": "text",
8440
- "placeholder": "https://...",
8679
+ "inputType": "select",
8680
+ "enumValues": [
8681
+ "instagram",
8682
+ "tiktok",
8683
+ "youtube",
8684
+ "linkedin",
8685
+ "x",
8686
+ "all"
8687
+ ],
8441
8688
  "constraints": {
8442
- "format": "url"
8689
+ "defaultValue": "instagram"
8443
8690
  }
8444
8691
  },
8445
8692
  {
8446
- "slug": "follower-count",
8447
- "label": "Follower / Subscriber Count",
8448
- "valueType": "number",
8449
- "inputType": "number"
8693
+ "slug": "pipeline-mode",
8694
+ "label": "Mode",
8695
+ "valueType": "string",
8696
+ "inputType": "select",
8697
+ "enumValues": [
8698
+ "fast",
8699
+ "quality",
8700
+ "data"
8701
+ ],
8702
+ "constraints": {
8703
+ "defaultValue": "quality"
8704
+ }
8450
8705
  },
8451
8706
  {
8452
- "slug": "follower-target",
8453
- "label": "Target Count",
8454
- "valueType": "number",
8455
- "inputType": "number"
8707
+ "slug": "pipeline-script",
8708
+ "label": "Script",
8709
+ "valueType": "string",
8710
+ "inputType": "textarea"
8456
8711
  },
8457
8712
  {
8458
- "slug": "avg-engagement-rate",
8459
- "label": "Avg Engagement Rate (%)",
8713
+ "slug": "pipeline-stages",
8714
+ "label": "Stages",
8715
+ "valueType": "string",
8716
+ "inputType": "textarea"
8717
+ }
8718
+ ]
8719
+ },
8720
+ {
8721
+ "slug": "content-composition",
8722
+ "displayName": "Composition",
8723
+ "icon": "clapperboard",
8724
+ "color": "blue",
8725
+ "description": "A Remotion composition or HyperFrames sequence ready for rendering.",
8726
+ "semanticSlug": "content.composition",
8727
+ "properties": [
8728
+ {
8729
+ "slug": "composition-id",
8730
+ "label": "Composition ID",
8731
+ "valueType": "string",
8732
+ "inputType": "text"
8733
+ },
8734
+ {
8735
+ "slug": "aspect-ratio",
8736
+ "label": "Aspect Ratio",
8737
+ "valueType": "string",
8738
+ "inputType": "select",
8739
+ "enumValues": [
8740
+ "9:16",
8741
+ "16:9",
8742
+ "1:1",
8743
+ "4:5"
8744
+ ],
8745
+ "constraints": {
8746
+ "defaultValue": "16:9"
8747
+ }
8748
+ },
8749
+ {
8750
+ "slug": "duration-seconds",
8751
+ "label": "Duration (seconds)",
8460
8752
  "valueType": "number",
8461
8753
  "inputType": "number"
8462
8754
  },
8463
8755
  {
8464
- "slug": "platform-posting-freq",
8465
- "label": "Posting Frequency",
8756
+ "slug": "hyperframes-meta",
8757
+ "label": "HyperFrames JSON",
8758
+ "valueType": "string",
8759
+ "inputType": "textarea"
8760
+ },
8761
+ {
8762
+ "slug": "template-id",
8763
+ "label": "Template",
8764
+ "valueType": "string",
8765
+ "inputType": "text"
8766
+ },
8767
+ {
8768
+ "slug": "pipeline-ref",
8769
+ "label": "Pipeline",
8770
+ "valueType": "string",
8771
+ "inputType": "text"
8772
+ }
8773
+ ]
8774
+ },
8775
+ {
8776
+ "slug": "content-asset",
8777
+ "displayName": "Asset",
8778
+ "icon": "image",
8779
+ "color": "green",
8780
+ "description": "Media asset: image, video clip, audio track, font, or script.",
8781
+ "semanticSlug": "content.asset",
8782
+ "properties": [
8783
+ {
8784
+ "slug": "asset-kind",
8785
+ "label": "Kind",
8786
+ "valueType": "string",
8787
+ "inputType": "select",
8788
+ "enumValues": [
8789
+ "image",
8790
+ "video",
8791
+ "audio",
8792
+ "font",
8793
+ "script",
8794
+ "other"
8795
+ ]
8796
+ },
8797
+ {
8798
+ "slug": "source-kind",
8799
+ "label": "Source",
8466
8800
  "valueType": "string",
8467
8801
  "inputType": "select",
8468
8802
  "enumValues": [
8469
- "Daily",
8470
- "3x / week",
8471
- "2x / week",
8472
- "Weekly",
8473
- "Bi-weekly",
8474
- "Monthly",
8475
- "As Needed"
8476
- ]
8803
+ "uploaded",
8804
+ "brand",
8805
+ "generated"
8806
+ ],
8807
+ "constraints": {
8808
+ "defaultValue": "uploaded"
8809
+ }
8477
8810
  },
8478
8811
  {
8479
- "slug": "last-post-date",
8480
- "label": "Last Post Date",
8481
- "valueType": "date"
8812
+ "slug": "source-url",
8813
+ "label": "URL",
8814
+ "valueType": "string",
8815
+ "inputType": "url"
8482
8816
  },
8483
8817
  {
8484
- "slug": "platform-notes",
8485
- "label": "Notes",
8818
+ "slug": "brand-asset-ref",
8819
+ "label": "Brand Asset Ref",
8486
8820
  "valueType": "string",
8487
- "inputType": "text",
8488
- "placeholder": "What works here? Tone, format, best times..."
8821
+ "inputType": "text"
8489
8822
  },
8490
8823
  {
8491
- "slug": "platform-tags",
8492
- "label": "Tags",
8493
- "valueType": "array"
8824
+ "slug": "file-id",
8825
+ "label": "File ID",
8826
+ "valueType": "string",
8827
+ "inputType": "text"
8828
+ },
8829
+ {
8830
+ "slug": "document-id",
8831
+ "label": "Document ID",
8832
+ "valueType": "string",
8833
+ "inputType": "text"
8494
8834
  }
8495
8835
  ]
8496
8836
  },
8497
8837
  {
8498
- "slug": "newsletter",
8499
- "displayName": "Newsletter",
8500
- "icon": "mail",
8501
- "color": "#10B981",
8502
- "description": "A newsletter issue — your direct channel to an owned audience. No algorithm, no platform fee, no intermediary.",
8503
- "scope": "WORKSPACE",
8838
+ "slug": "render-job",
8839
+ "displayName": "Render Job",
8840
+ "icon": "play",
8841
+ "color": "amber",
8842
+ "description": "A render execution — queued, rendering, done, or failed.",
8843
+ "semanticSlug": "content.render",
8504
8844
  "properties": [
8505
8845
  {
8506
- "slug": "newsletter-status",
8846
+ "slug": "job-status",
8507
8847
  "label": "Status",
8508
8848
  "valueType": "string",
8509
8849
  "inputType": "select",
8510
8850
  "enumValues": [
8511
- "Idea",
8512
- "Drafting",
8513
- "Editing",
8514
- "Scheduled",
8515
- "Sent",
8516
- "Archived"
8517
- ]
8518
- },
8519
- {
8520
- "slug": "newsletter-series",
8521
- "label": "Series",
8522
- "valueType": "string",
8523
- "inputType": "text",
8524
- "placeholder": "Which newsletter series is this issue part of?"
8525
- },
8526
- {
8527
- "slug": "issue-number",
8528
- "label": "Issue Number",
8529
- "valueType": "number",
8530
- "inputType": "number"
8851
+ "queued",
8852
+ "rendering",
8853
+ "done",
8854
+ "failed"
8855
+ ],
8856
+ "constraints": {
8857
+ "defaultValue": "queued"
8858
+ }
8531
8859
  },
8532
8860
  {
8533
- "slug": "subject-line",
8534
- "label": "Subject Line",
8861
+ "slug": "output-format",
8862
+ "label": "Format",
8535
8863
  "valueType": "string",
8536
- "inputType": "text",
8537
- "placeholder": "The subject line — your most important copy"
8864
+ "inputType": "select",
8865
+ "enumValues": [
8866
+ "mp4",
8867
+ "gif",
8868
+ "webm",
8869
+ "mp3"
8870
+ ],
8871
+ "constraints": {
8872
+ "defaultValue": "mp4"
8873
+ }
8538
8874
  },
8539
8875
  {
8540
- "slug": "preview-text",
8541
- "label": "Preview Text",
8876
+ "slug": "output-url",
8877
+ "label": "Output URL",
8542
8878
  "valueType": "string",
8543
- "inputType": "text",
8544
- "placeholder": "45-character preview shown in inbox (after subject)"
8545
- },
8546
- {
8547
- "slug": "send-date",
8548
- "label": "Send Date",
8549
- "valueType": "date"
8879
+ "inputType": "url"
8550
8880
  },
8551
8881
  {
8552
- "slug": "subscriber-count",
8553
- "label": "Subscriber Count at Send",
8882
+ "slug": "render-duration-ms",
8883
+ "label": "Render Duration (ms)",
8554
8884
  "valueType": "number",
8555
8885
  "inputType": "number"
8556
8886
  },
8557
8887
  {
8558
- "slug": "open-rate",
8559
- "label": "Open Rate (%)",
8560
- "valueType": "number",
8561
- "inputType": "number"
8888
+ "slug": "error-message",
8889
+ "label": "Error",
8890
+ "valueType": "string",
8891
+ "inputType": "textarea"
8562
8892
  },
8563
8893
  {
8564
- "slug": "click-rate",
8565
- "label": "Click Rate (%)",
8566
- "valueType": "number",
8567
- "inputType": "number"
8568
- },
8894
+ "slug": "composition-ref",
8895
+ "label": "Composition",
8896
+ "valueType": "string",
8897
+ "inputType": "text"
8898
+ }
8899
+ ]
8900
+ },
8901
+ {
8902
+ "slug": "content-template",
8903
+ "displayName": "Template",
8904
+ "icon": "layout-template",
8905
+ "color": "pink",
8906
+ "description": "Reusable video template — HyperFrames, Remotion, or hybrid.",
8907
+ "semanticSlug": "content.template",
8908
+ "properties": [
8569
8909
  {
8570
- "slug": "newsletter-sponsor",
8571
- "label": "Sponsor",
8572
- "valueType": "entity_id"
8910
+ "slug": "template-kind",
8911
+ "label": "Kind",
8912
+ "valueType": "string",
8913
+ "inputType": "select",
8914
+ "enumValues": [
8915
+ "hyperframes",
8916
+ "remotion",
8917
+ "hybrid"
8918
+ ],
8919
+ "constraints": {
8920
+ "defaultValue": "hyperframes"
8921
+ }
8573
8922
  },
8574
8923
  {
8575
- "slug": "newsletter-campaign",
8576
- "label": "Campaign",
8577
- "valueType": "entity_id"
8924
+ "slug": "aspect-ratio",
8925
+ "label": "Aspect Ratio",
8926
+ "valueType": "string",
8927
+ "inputType": "select",
8928
+ "enumValues": [
8929
+ "9:16",
8930
+ "16:9",
8931
+ "1:1",
8932
+ "4:5"
8933
+ ],
8934
+ "constraints": {
8935
+ "defaultValue": "16:9"
8936
+ }
8578
8937
  },
8579
8938
  {
8580
- "slug": "newsletter-pillar",
8581
- "label": "Primary Pillar",
8582
- "valueType": "entity_id"
8939
+ "slug": "template-status",
8940
+ "label": "Status",
8941
+ "valueType": "string",
8942
+ "inputType": "select",
8943
+ "enumValues": [
8944
+ "draft",
8945
+ "approved",
8946
+ "deprecated"
8947
+ ],
8948
+ "constraints": {
8949
+ "defaultValue": "approved"
8950
+ }
8583
8951
  },
8584
8952
  {
8585
- "slug": "newsletter-tags",
8586
- "label": "Tags",
8587
- "valueType": "array"
8953
+ "slug": "template-config",
8954
+ "label": "Config JSON",
8955
+ "valueType": "string",
8956
+ "inputType": "textarea"
8588
8957
  }
8589
8958
  ]
8590
8959
  }
@@ -8624,36 +8993,6 @@ const DATA = {
8624
8993
  "type": "grid",
8625
8994
  "scopeProfileSlug": "content-template",
8626
8995
  "description": "Reusable video templates."
8627
- },
8628
- {
8629
- "name": "Posts",
8630
- "slug": "content-posts",
8631
- "type": "kanban",
8632
- "scopeProfileSlug": "post",
8633
- "groupBy": "post-status",
8634
- "description": "Content posts by status."
8635
- },
8636
- {
8637
- "name": "Pillars",
8638
- "slug": "content-pillars",
8639
- "type": "list",
8640
- "scopeProfileSlug": "pillar",
8641
- "description": "Content pillars — the recurring themes."
8642
- },
8643
- {
8644
- "name": "Platforms",
8645
- "slug": "content-platforms",
8646
- "type": "table",
8647
- "scopeProfileSlug": "platform",
8648
- "description": "Channels and their audience metrics."
8649
- },
8650
- {
8651
- "name": "Newsletters",
8652
- "slug": "content-newsletters",
8653
- "type": "kanban",
8654
- "scopeProfileSlug": "newsletter",
8655
- "groupBy": "newsletter-status",
8656
- "description": "Newsletter issues by status."
8657
8996
  }
8658
8997
  ],
8659
8998
  "app": {
@@ -8704,40 +9043,16 @@ const DATA = {
8704
9043
  "icon": "image"
8705
9044
  },
8706
9045
  {
8707
- "kind": "view",
8708
- "viewName": "Render Jobs",
8709
- "label": "Renders",
8710
- "icon": "play"
8711
- },
8712
- {
8713
- "kind": "view",
8714
- "viewName": "Templates",
8715
- "label": "Templates",
8716
- "icon": "layout-template"
8717
- },
8718
- {
8719
- "kind": "view",
8720
- "viewName": "Posts",
8721
- "label": "Posts",
8722
- "icon": "file-edit"
8723
- },
8724
- {
8725
- "kind": "view",
8726
- "viewName": "Pillars",
8727
- "label": "Pillars",
8728
- "icon": "columns"
8729
- },
8730
- {
8731
- "kind": "view",
8732
- "viewName": "Platforms",
8733
- "label": "Platforms",
8734
- "icon": "share-2"
9046
+ "kind": "view",
9047
+ "viewName": "Render Jobs",
9048
+ "label": "Renders",
9049
+ "icon": "play"
8735
9050
  },
8736
9051
  {
8737
9052
  "kind": "view",
8738
- "viewName": "Newsletters",
8739
- "label": "Newsletters",
8740
- "icon": "mail"
9053
+ "viewName": "Templates",
9054
+ "label": "Templates",
9055
+ "icon": "layout-template"
8741
9056
  }
8742
9057
  ]
8743
9058
  },
@@ -9079,33 +9394,275 @@ const DATA = {
9079
9394
  "inputType": "number"
9080
9395
  },
9081
9396
  {
9082
- "slug": "closeDate",
9083
- "label": "Expected close date",
9397
+ "slug": "closeDate",
9398
+ "label": "Expected close date",
9399
+ "valueType": "date",
9400
+ "inputType": "date"
9401
+ },
9402
+ {
9403
+ "slug": "nextStep",
9404
+ "label": "Next step",
9405
+ "valueType": "string",
9406
+ "inputType": "textarea"
9407
+ },
9408
+ {
9409
+ "slug": "description",
9410
+ "label": "Notes",
9411
+ "valueType": "string",
9412
+ "inputType": "textarea"
9413
+ },
9414
+ {
9415
+ "slug": "handoffStatus",
9416
+ "label": "Handoff status",
9417
+ "valueType": "string",
9418
+ "inputType": "select",
9419
+ "enumValues": [
9420
+ "pending",
9421
+ "ready",
9422
+ "handed_off"
9423
+ ]
9424
+ }
9425
+ ]
9426
+ },
9427
+ {
9428
+ "slug": "client",
9429
+ "displayName": "Client",
9430
+ "icon": "briefcase",
9431
+ "color": "emerald",
9432
+ "description": "An active commercial relationship — created when a deal is won.",
9433
+ "scope": "shared",
9434
+ "profileKind": "role",
9435
+ "applicableKinds": [
9436
+ "company",
9437
+ "person"
9438
+ ],
9439
+ "properties": [
9440
+ {
9441
+ "slug": "clientStatus",
9442
+ "label": "Status",
9443
+ "valueType": "string",
9444
+ "inputType": "select",
9445
+ "enumValues": [
9446
+ "prospect",
9447
+ "active",
9448
+ "paused",
9449
+ "former",
9450
+ "churned"
9451
+ ]
9452
+ },
9453
+ {
9454
+ "slug": "accountManager",
9455
+ "label": "Account Manager",
9456
+ "valueType": "string",
9457
+ "inputType": "text"
9458
+ },
9459
+ {
9460
+ "slug": "engagementStartDate",
9461
+ "label": "Engagement Start",
9462
+ "valueType": "date",
9463
+ "inputType": "date"
9464
+ },
9465
+ {
9466
+ "slug": "satisfactionScore",
9467
+ "label": "Satisfaction",
9468
+ "valueType": "number",
9469
+ "inputType": "number"
9470
+ },
9471
+ {
9472
+ "slug": "lifetimeValue",
9473
+ "label": "Lifetime Value",
9474
+ "valueType": "number",
9475
+ "inputType": "number"
9476
+ },
9477
+ {
9478
+ "slug": "notes",
9479
+ "label": "Notes",
9480
+ "valueType": "string",
9481
+ "inputType": "textarea"
9482
+ },
9483
+ {
9484
+ "slug": "contractValue",
9485
+ "label": "Contract Value",
9486
+ "valueType": "number",
9487
+ "inputType": "number"
9488
+ },
9489
+ {
9490
+ "slug": "renewalDate",
9491
+ "label": "Renewal Date",
9492
+ "valueType": "date",
9493
+ "inputType": "date"
9494
+ },
9495
+ {
9496
+ "slug": "healthScore",
9497
+ "label": "Health",
9498
+ "valueType": "string",
9499
+ "inputType": "select",
9500
+ "enumValues": [
9501
+ "healthy",
9502
+ "at_risk",
9503
+ "critical"
9504
+ ]
9505
+ }
9506
+ ]
9507
+ },
9508
+ {
9509
+ "slug": "partner",
9510
+ "displayName": "Partner",
9511
+ "icon": "handshake",
9512
+ "color": "teal",
9513
+ "description": "A partner relationship — both a referral source and a co-delivery collaborator, distinguished by partner type.",
9514
+ "scope": "shared",
9515
+ "profileKind": "role",
9516
+ "applicableKinds": [
9517
+ "company",
9518
+ "person"
9519
+ ],
9520
+ "properties": [
9521
+ {
9522
+ "slug": "partnerStatus",
9523
+ "label": "Status",
9524
+ "valueType": "string",
9525
+ "inputType": "select",
9526
+ "enumValues": [
9527
+ "prospect",
9528
+ "active",
9529
+ "paused",
9530
+ "churned"
9531
+ ]
9532
+ },
9533
+ {
9534
+ "slug": "partnerType",
9535
+ "label": "Partner Type",
9536
+ "valueType": "string",
9537
+ "inputType": "select",
9538
+ "enumValues": [
9539
+ "referral",
9540
+ "co-delivery",
9541
+ "both"
9542
+ ]
9543
+ },
9544
+ {
9545
+ "slug": "accountManager",
9546
+ "label": "Account Manager",
9547
+ "valueType": "string",
9548
+ "inputType": "text"
9549
+ },
9550
+ {
9551
+ "slug": "engagementStartDate",
9552
+ "label": "Engagement Start",
9553
+ "valueType": "date",
9554
+ "inputType": "date"
9555
+ },
9556
+ {
9557
+ "slug": "satisfactionScore",
9558
+ "label": "Satisfaction",
9559
+ "valueType": "number",
9560
+ "inputType": "number"
9561
+ },
9562
+ {
9563
+ "slug": "lifetimeValue",
9564
+ "label": "Lifetime Value",
9565
+ "valueType": "number",
9566
+ "inputType": "number"
9567
+ },
9568
+ {
9569
+ "slug": "notes",
9570
+ "label": "Notes",
9571
+ "valueType": "string",
9572
+ "inputType": "textarea"
9573
+ },
9574
+ {
9575
+ "slug": "contractValue",
9576
+ "label": "Contract Value",
9577
+ "valueType": "number",
9578
+ "inputType": "number"
9579
+ },
9580
+ {
9581
+ "slug": "renewalDate",
9582
+ "label": "Renewal Date",
9583
+ "valueType": "date",
9584
+ "inputType": "date"
9585
+ },
9586
+ {
9587
+ "slug": "healthScore",
9588
+ "label": "Health",
9589
+ "valueType": "string",
9590
+ "inputType": "select",
9591
+ "enumValues": [
9592
+ "healthy",
9593
+ "at_risk",
9594
+ "critical"
9595
+ ]
9596
+ }
9597
+ ]
9598
+ },
9599
+ {
9600
+ "slug": "lead",
9601
+ "displayName": "Lead",
9602
+ "icon": "user-plus",
9603
+ "color": "yellow",
9604
+ "description": "An early-pipeline prospect — not yet a client, being qualified or nurtured.",
9605
+ "scope": "shared",
9606
+ "profileKind": "role",
9607
+ "applicableKinds": [
9608
+ "company",
9609
+ "person"
9610
+ ],
9611
+ "properties": [
9612
+ {
9613
+ "slug": "leadStage",
9614
+ "label": "Stage",
9615
+ "valueType": "string",
9616
+ "inputType": "select",
9617
+ "enumValues": [
9618
+ "prospect",
9619
+ "qualified",
9620
+ "nurturing",
9621
+ "converted",
9622
+ "lost"
9623
+ ],
9624
+ "constraints": {
9625
+ "defaultValue": "prospect"
9626
+ }
9627
+ },
9628
+ {
9629
+ "slug": "notes",
9630
+ "label": "Notes",
9631
+ "valueType": "string",
9632
+ "inputType": "textarea"
9633
+ }
9634
+ ]
9635
+ },
9636
+ {
9637
+ "slug": "churned",
9638
+ "displayName": "Churned",
9639
+ "icon": "user-x",
9640
+ "color": "gray",
9641
+ "description": "A relationship (client, partner, or otherwise) that was active and has since ended.",
9642
+ "scope": "shared",
9643
+ "profileKind": "role",
9644
+ "applicableKinds": [
9645
+ "company",
9646
+ "person"
9647
+ ],
9648
+ "properties": [
9649
+ {
9650
+ "slug": "churnedDate",
9651
+ "label": "Churned Date",
9084
9652
  "valueType": "date",
9085
9653
  "inputType": "date"
9086
9654
  },
9087
9655
  {
9088
- "slug": "nextStep",
9089
- "label": "Next step",
9656
+ "slug": "churnReason",
9657
+ "label": "Reason",
9090
9658
  "valueType": "string",
9091
9659
  "inputType": "textarea"
9092
9660
  },
9093
9661
  {
9094
- "slug": "description",
9662
+ "slug": "notes",
9095
9663
  "label": "Notes",
9096
9664
  "valueType": "string",
9097
9665
  "inputType": "textarea"
9098
- },
9099
- {
9100
- "slug": "handoffStatus",
9101
- "label": "Handoff status",
9102
- "valueType": "string",
9103
- "inputType": "select",
9104
- "enumValues": [
9105
- "pending",
9106
- "ready",
9107
- "handed_off"
9108
- ]
9109
9666
  }
9110
9667
  ]
9111
9668
  }
@@ -11362,70 +11919,322 @@ const DATA = {
11362
11919
  "label": "Shapes"
11363
11920
  },
11364
11921
  {
11365
- "sourceProfileSlug": "ecosystem-event",
11366
- "targetProfileSlug": "company",
11367
- "type": "involves",
11368
- "label": "Involves"
11922
+ "sourceProfileSlug": "ecosystem-event",
11923
+ "targetProfileSlug": "company",
11924
+ "type": "involves",
11925
+ "label": "Involves"
11926
+ }
11927
+ ],
11928
+ "onboarding": {
11929
+ "goal": "Map the real ecosystem — the key players (companies and people), who partners and competes with whom, and the segments and trends that matter — so strategy is grounded in the actual market, not a vague \"the market\".\n",
11930
+ "framing": "THE ECOSYSTEM LEAD: Act as a sharp ecosystem lead who maps the market\nlandscape AND the relationships inside it. Push for REAL named players — not\n\"the incumbents\", but the actual companies — and for the concrete edges\nbetween them: who partners with whom, who competes, who invested in whom.\nA map with no edges is just a list; the value is in the relationships.\n",
11931
+ "expertise": {
11932
+ "starters": [
11933
+ "Name the actors, then draw the edges. A list of logos tells strategy nothing; the market is a GRAPH. For every company you log, propose at least one real relationship — partners_with, competes_with, invested_in, integrates_with — because the edges are where the leverage and the threats live.\n",
11934
+ "Map the CATEGORY, not just named rivals. Buyers compare across tiers: direct competitors, adjacent tools that solve the same job differently, and the status quo (\"a spreadsheet\", \"do nothing\"). Attach the competitor role to real companies and place each one in the segment it competes in.\n",
11935
+ "Separate players from structure. Companies and people are the ACTORS; segments and trends are the STRUCTURE they move within. Anchor each trend to a direction and a \"so what for us\", and each segment to a rough size and ocean — an untimed \"AI is big\" tells strategy nothing.\n"
11936
+ ],
11937
+ "blindSpots": [
11938
+ "\"We have no competitors\" is a red flag, not a moat — it usually means the category is undefined or the buyer's real alternative (a manual workaround) hasn't been named. Push to name what a buyer does TODAY instead of buying.\n",
11939
+ "Founders over-watch the loud incumbent and miss the fast-moving insurgent one tier down, and they log companies with no relationships at all. Surface the insurgents, and force at least one real edge per key player.\n",
11940
+ "A trend or event with no stance is just a headline. Every trend needs a direction (rising/steady/fading) and a \"so what\"; every logged event needs an actor and an impact. Force the meaning, not just the mention.\n"
11941
+ ],
11942
+ "bar": "The map reads like a real ecosystem: named companies placed in their segments, real edges between them (who partners, competes, invested), and each trend carrying a direction and a \"so what\" — so a strategist can see the alliances, the threats, and the open lane, not just a pile of logos.\n"
11943
+ },
11944
+ "collect": [
11945
+ {
11946
+ "profileSlug": "company",
11947
+ "what": "The real companies in your ecosystem — the players you operate around.",
11948
+ "cardinality": "several",
11949
+ "keyFields": [
11950
+ "industry",
11951
+ "website"
11952
+ ]
11953
+ },
11954
+ {
11955
+ "profileSlug": "market-segment",
11956
+ "what": "The market slices you play in, with rough size and ocean.",
11957
+ "cardinality": "few",
11958
+ "keyFields": [
11959
+ "ocean",
11960
+ "tam"
11961
+ ]
11962
+ },
11963
+ {
11964
+ "profileSlug": "trend",
11965
+ "what": "Directional shifts in tech, market, or behavior that affect you.",
11966
+ "cardinality": "few",
11967
+ "keyFields": [
11968
+ "direction",
11969
+ "relevance"
11970
+ ]
11971
+ }
11972
+ ],
11973
+ "openingQuestions": [
11974
+ "Who are the key players in your space — the 3-5 companies that matter most?",
11975
+ "How do they relate — who partners with, competes with, or invested in whom?",
11976
+ "Which market segment matters most right now, and what trend is reshaping it?"
11977
+ ],
11978
+ "doneWhen": "A few companies captured, with at least one relationship edge between them, plus one market segment."
11979
+ },
11980
+ "app": {
11981
+ "kind": "stored",
11982
+ "cellKey": "entity-detail"
11983
+ },
11984
+ "layout": {
11985
+ "defaultView": "Ecosystem Map",
11986
+ "defaultApp": null,
11987
+ "pinnedApps": [
11988
+ "dashboard",
11989
+ "data"
11990
+ ],
11991
+ "sidebarItems": [
11992
+ {
11993
+ "kind": "view",
11994
+ "viewName": "Ecosystem Map",
11995
+ "label": "Ecosystem Map",
11996
+ "icon": "radar"
11997
+ },
11998
+ {
11999
+ "kind": "view",
12000
+ "viewName": "Segments",
12001
+ "label": "Segments",
12002
+ "icon": "pie-chart"
12003
+ },
12004
+ {
12005
+ "kind": "view",
12006
+ "viewName": "Trends",
12007
+ "label": "Trends",
12008
+ "icon": "trending-up"
12009
+ },
12010
+ {
12011
+ "kind": "view",
12012
+ "viewName": "Events",
12013
+ "label": "Events",
12014
+ "icon": "zap"
12015
+ },
12016
+ {
12017
+ "kind": "app",
12018
+ "appId": "data",
12019
+ "label": "Data",
12020
+ "icon": "database"
12021
+ }
12022
+ ]
12023
+ },
12024
+ "bento": {
12025
+ "viewName": "Ecosystem Map",
12026
+ "blocks": [
12027
+ {
12028
+ "kind": "view",
12029
+ "viewName": "Ecosystem Map",
12030
+ "pos": {
12031
+ "x": 0,
12032
+ "y": 0,
12033
+ "w": 8,
12034
+ "h": 6
12035
+ }
12036
+ },
12037
+ {
12038
+ "kind": "view",
12039
+ "viewName": "Segments",
12040
+ "pos": {
12041
+ "x": 8,
12042
+ "y": 0,
12043
+ "w": 4,
12044
+ "h": 3
12045
+ }
12046
+ },
12047
+ {
12048
+ "kind": "view",
12049
+ "viewName": "Trends",
12050
+ "pos": {
12051
+ "x": 8,
12052
+ "y": 3,
12053
+ "w": 4,
12054
+ "h": 3
12055
+ }
12056
+ }
12057
+ ]
12058
+ }
12059
+ },
12060
+ "enterprise-os": {
12061
+ "meta": {
12062
+ "slug": "enterprise-os",
12063
+ "name": "Enterprise OS",
12064
+ "description": "Stand up a company's public operating core in one install — strategy, market, operations, and pipeline — plus a command tower to track objectives across them.",
12065
+ "icon": "layout-dashboard",
12066
+ "color": "#4F46E5",
12067
+ "tags": [
12068
+ "suite",
12069
+ "enterprise",
12070
+ "os",
12071
+ "foundation",
12072
+ "crm",
12073
+ "operations",
12074
+ "ecosystem"
12075
+ ],
12076
+ "isPublic": true
12077
+ },
12078
+ "dependencies": [
12079
+ {
12080
+ "slug": "foundation",
12081
+ "kind": "workspace",
12082
+ "relation": "require",
12083
+ "reason": "Strategic DNA + the pod-wide role vocabulary (partner/client/lead) every other lens reuses. Must resolve first."
12084
+ },
12085
+ {
12086
+ "slug": "ecosystem",
12087
+ "kind": "workspace",
12088
+ "relation": "require",
12089
+ "reason": "The market graph — the players, segments, and trends the company operates around."
12090
+ },
12091
+ {
12092
+ "slug": "operations",
12093
+ "kind": "workspace",
12094
+ "relation": "require",
12095
+ "reason": "How the company runs — the operational lens."
12096
+ },
12097
+ {
12098
+ "slug": "crm",
12099
+ "kind": "workspace",
12100
+ "relation": "require",
12101
+ "reason": "The pipeline — contacts, leads, clients, and deals."
12102
+ }
12103
+ ],
12104
+ "workspace": {
12105
+ "name": "Enterprise OS",
12106
+ "description": "The command tower for the company operating system — track strategic objectives across the strategy, market, operations, and pipeline lenses this suite installs.",
12107
+ "subtype": "enterprise-os",
12108
+ "visibility": "pod_visible",
12109
+ "sourceRoles": {
12110
+ "strategy": "consumer"
12111
+ }
12112
+ },
12113
+ "profiles": [
12114
+ {
12115
+ "slug": "objective",
12116
+ "displayName": "Objective",
12117
+ "icon": "target",
12118
+ "color": "#4F46E5",
12119
+ "description": "A company objective the operating system is driving toward — the cross-cutting outcome the lenses serve.",
12120
+ "properties": [
12121
+ {
12122
+ "slug": "outcome",
12123
+ "label": "Outcome",
12124
+ "valueType": "string",
12125
+ "inputType": "textarea"
12126
+ },
12127
+ {
12128
+ "slug": "status",
12129
+ "label": "Status",
12130
+ "valueType": "string",
12131
+ "inputType": "select",
12132
+ "enumValues": [
12133
+ "on-track",
12134
+ "at-risk",
12135
+ "off-track",
12136
+ "achieved"
12137
+ ],
12138
+ "constraints": {
12139
+ "defaultValue": "on-track"
12140
+ }
12141
+ },
12142
+ {
12143
+ "slug": "horizon",
12144
+ "label": "Horizon",
12145
+ "valueType": "string",
12146
+ "inputType": "select",
12147
+ "enumValues": [
12148
+ "now",
12149
+ "next",
12150
+ "later"
12151
+ ],
12152
+ "constraints": {
12153
+ "defaultValue": "now"
12154
+ }
12155
+ },
12156
+ {
12157
+ "slug": "owner",
12158
+ "label": "Owner",
12159
+ "valueType": "string",
12160
+ "inputType": "text"
12161
+ },
12162
+ {
12163
+ "slug": "targetDate",
12164
+ "label": "Target Date",
12165
+ "valueType": "date",
12166
+ "inputType": "date"
12167
+ }
12168
+ ]
12169
+ }
12170
+ ],
12171
+ "views": [
12172
+ {
12173
+ "name": "Objectives",
12174
+ "slug": "objectives",
12175
+ "type": "table",
12176
+ "scopeProfileSlug": "objective",
12177
+ "description": "The company's strategic objectives across every lens, by horizon and status.",
12178
+ "defaultView": true,
12179
+ "config": {
12180
+ "columns": [
12181
+ "title",
12182
+ "status",
12183
+ "horizon",
12184
+ "owner",
12185
+ "targetDate"
12186
+ ]
12187
+ }
12188
+ },
12189
+ {
12190
+ "name": "Objective Board",
12191
+ "slug": "objective-board",
12192
+ "type": "kanban",
12193
+ "scopeProfileSlug": "objective",
12194
+ "description": "Objectives grouped by status — a running scoreboard for the operating system.",
12195
+ "config": {
12196
+ "groupBy": "status"
12197
+ }
11369
12198
  }
11370
12199
  ],
11371
12200
  "onboarding": {
11372
- "goal": "Map the real ecosystem — the key players (companies and people), who partners and competes with whom, and the segments and trends that matter — so strategy is grounded in the actual market, not a vague \"the market\".\n",
11373
- "framing": "THE ECOSYSTEM LEAD: Act as a sharp ecosystem lead who maps the market\nlandscape AND the relationships inside it. Push for REAL named players — not\n\"the incumbents\", but the actual companies — and for the concrete edges\nbetween them: who partners with whom, who competes, who invested in whom.\nA map with no edges is just a list; the value is in the relationships.\n",
12201
+ "goal": "Stand up the company's operating core and name the handful of strategic objectives it is driving — so strategy, market, operations, and pipeline are all in place and pointed at the same outcomes from day one.\n",
12202
+ "framing": "THE CHIEF OF STAFF: Act as a sharp chief of staff standing up the company OS.\nThe four lenses (foundation, ecosystem, operations, CRM) are already\ninstalled — your job is to name the 3-5 objectives that cut across them, so\nthe operating system has a scoreboard, not just structure.\n",
11374
12203
  "expertise": {
11375
12204
  "starters": [
11376
- "Name the actors, then draw the edges. A list of logos tells strategy nothing; the market is a GRAPH. For every company you log, propose at least one real relationship — partners_with, competes_with, invested_in, integrates_with — because the edges are where the leverage and the threats live.\n",
11377
- "Map the CATEGORY, not just named rivals. Buyers compare across tiers: direct competitors, adjacent tools that solve the same job differently, and the status quo (\"a spreadsheet\", \"do nothing\"). Attach the competitor role to real companies and place each one in the segment it competes in.\n",
11378
- "Separate players from structure. Companies and people are the ACTORS; segments and trends are the STRUCTURE they move within. Anchor each trend to a direction and a \"so what for us\", and each segment to a rough size and ocean — an untimed \"AI is big\" tells strategy nothing.\n"
12205
+ "Name few, real objectives. An operating system with 20 objectives has none; force the 3-5 that actually decide the year, each with an owner and a horizon (now / next / later).\n",
12206
+ "Tie each objective to a lens. A good objective names where it lives — pipeline growth (CRM), a market move (ecosystem), an operational fix (operations), or a positioning shift (foundation) — so the scoreboard maps to the structure underneath it.\n"
11379
12207
  ],
11380
12208
  "blindSpots": [
11381
- "\"We have no competitors\" is a red flag, not a moat — it usually means the category is undefined or the buyer's real alternative (a manual workaround) hasn't been named. Push to name what a buyer does TODAY instead of buying.\n",
11382
- "Founders over-watch the loud incumbent and miss the fast-moving insurgent one tier down, and they log companies with no relationships at all. Surface the insurgents, and force at least one real edge per key player.\n",
11383
- "A trend or event with no stance is just a headline. Every trend needs a direction (rising/steady/fading) and a \"so what\"; every logged event needs an actor and an impact. Force the meaning, not just the mention.\n"
12209
+ "Objectives with no owner and no date are wishes. Every one needs a single owner and a target date, or it will not move.\n",
12210
+ "\"Grow the business\" is not an objective — it is a category. Push for the specific outcome that would make this quarter a win.\n"
11384
12211
  ],
11385
- "bar": "The map reads like a real ecosystem: named companies placed in their segments, real edges between them (who partners, competes, invested), and each trend carrying a direction and a \"so what\" — so a strategist can see the alliances, the threats, and the open lane, not just a pile of logos.\n"
12212
+ "bar": "A short, honest scoreboard: 3-5 objectives, each owned, dated, placed on a horizon, and tied to the lens that serves it — sitting on top of a fully installed operating core.\n"
11386
12213
  },
11387
12214
  "collect": [
11388
12215
  {
11389
- "profileSlug": "company",
11390
- "what": "The real companies in your ecosystem — the players you operate around.",
11391
- "cardinality": "several",
11392
- "keyFields": [
11393
- "industry",
11394
- "website"
11395
- ]
11396
- },
11397
- {
11398
- "profileSlug": "market-segment",
11399
- "what": "The market slices you play in, with rough size and ocean.",
11400
- "cardinality": "few",
11401
- "keyFields": [
11402
- "ocean",
11403
- "tam"
11404
- ]
11405
- },
11406
- {
11407
- "profileSlug": "trend",
11408
- "what": "Directional shifts in tech, market, or behavior that affect you.",
12216
+ "profileSlug": "objective",
12217
+ "what": "The 3-5 strategic objectives the company is driving this horizon.",
11409
12218
  "cardinality": "few",
11410
12219
  "keyFields": [
11411
- "direction",
11412
- "relevance"
12220
+ "status",
12221
+ "horizon",
12222
+ "owner"
11413
12223
  ]
11414
12224
  }
11415
12225
  ],
11416
12226
  "openingQuestions": [
11417
- "Who are the key players in your space — the 3-5 companies that matter most?",
11418
- "How do they relate — who partners with, competes with, or invested in whom?",
11419
- "Which market segment matters most right now, and what trend is reshaping it?"
12227
+ "What are the 3-5 objectives that will decide this year for the company?",
12228
+ "Who owns each one, and is it a now, next, or later horizon?"
11420
12229
  ],
11421
- "doneWhen": "A few companies captured, with at least one relationship edge between them, plus one market segment."
12230
+ "doneWhen": "A few objectives captured, each with an owner and a horizon."
11422
12231
  },
11423
12232
  "app": {
11424
12233
  "kind": "stored",
11425
12234
  "cellKey": "entity-detail"
11426
12235
  },
11427
12236
  "layout": {
11428
- "defaultView": "Ecosystem Map",
12237
+ "defaultView": "Objectives",
11429
12238
  "defaultApp": null,
11430
12239
  "pinnedApps": [
11431
12240
  "dashboard",
@@ -11434,27 +12243,15 @@ const DATA = {
11434
12243
  "sidebarItems": [
11435
12244
  {
11436
12245
  "kind": "view",
11437
- "viewName": "Ecosystem Map",
11438
- "label": "Ecosystem Map",
11439
- "icon": "radar"
11440
- },
11441
- {
11442
- "kind": "view",
11443
- "viewName": "Segments",
11444
- "label": "Segments",
11445
- "icon": "pie-chart"
11446
- },
11447
- {
11448
- "kind": "view",
11449
- "viewName": "Trends",
11450
- "label": "Trends",
11451
- "icon": "trending-up"
12246
+ "viewName": "Objectives",
12247
+ "label": "Objectives",
12248
+ "icon": "target"
11452
12249
  },
11453
12250
  {
11454
12251
  "kind": "view",
11455
- "viewName": "Events",
11456
- "label": "Events",
11457
- "icon": "zap"
12252
+ "viewName": "Objective Board",
12253
+ "label": "Board",
12254
+ "icon": "kanban-square"
11458
12255
  },
11459
12256
  {
11460
12257
  "kind": "app",
@@ -11465,36 +12262,26 @@ const DATA = {
11465
12262
  ]
11466
12263
  },
11467
12264
  "bento": {
11468
- "viewName": "Ecosystem Map",
12265
+ "viewName": "Objectives",
11469
12266
  "blocks": [
11470
12267
  {
11471
12268
  "kind": "view",
11472
- "viewName": "Ecosystem Map",
12269
+ "viewName": "Objectives",
11473
12270
  "pos": {
11474
12271
  "x": 0,
11475
12272
  "y": 0,
11476
12273
  "w": 8,
11477
- "h": 6
12274
+ "h": 4
11478
12275
  }
11479
12276
  },
11480
12277
  {
11481
12278
  "kind": "view",
11482
- "viewName": "Segments",
12279
+ "viewName": "Objective Board",
11483
12280
  "pos": {
11484
12281
  "x": 8,
11485
12282
  "y": 0,
11486
12283
  "w": 4,
11487
- "h": 3
11488
- }
11489
- },
11490
- {
11491
- "kind": "view",
11492
- "viewName": "Trends",
11493
- "pos": {
11494
- "x": 8,
11495
- "y": 3,
11496
- "w": 4,
11497
- "h": 3
12284
+ "h": 4
11498
12285
  }
11499
12286
  }
11500
12287
  ]
@@ -20210,14 +20997,9 @@ const DATA = {
20210
20997
  "slug": "lead",
20211
20998
  "displayName": "Lead",
20212
20999
  "icon": "user-plus",
20213
- "color": "green",
20214
- "description": "A potential customer or partner contact in your pipeline",
20215
- "semanticSlug": "marketing.lead",
21000
+ "color": "yellow",
20216
21001
  "scope": "shared",
20217
21002
  "profileKind": "role",
20218
- "applicableKinds": [
20219
- "person"
20220
- ],
20221
21003
  "properties": [
20222
21004
  {
20223
21005
  "slug": "lead-source",
@@ -23758,6 +24540,234 @@ const DATA = {
23758
24540
  }
23759
24541
  ]
23760
24542
  }
24543
+ },
24544
+ "the-arch": {
24545
+ "meta": {
24546
+ "slug": "the-arch",
24547
+ "name": "The Arch",
24548
+ "description": "The complete private company brain — the whole Enterprise OS plus the grant pipeline, the web3 ecosystem overlay, and the dev dashboard.",
24549
+ "icon": "landmark",
24550
+ "color": "#7C3AED",
24551
+ "tags": [
24552
+ "suite",
24553
+ "private",
24554
+ "arch",
24555
+ "grants",
24556
+ "web3",
24557
+ "flagship"
24558
+ ],
24559
+ "isPublic": false
24560
+ },
24561
+ "dependencies": [
24562
+ {
24563
+ "slug": "enterprise-os",
24564
+ "kind": "workspace",
24565
+ "relation": "require",
24566
+ "reason": "The whole public operating core — strategy, market, operations, and pipeline — that the private flagships extend."
24567
+ },
24568
+ {
24569
+ "slug": "grants",
24570
+ "kind": "workspace",
24571
+ "relation": "require",
24572
+ "reason": "The grant-agency pipeline; composes its operations onto the Operations workspace the OS installs."
24573
+ },
24574
+ {
24575
+ "slug": "blockchain-ecosystem",
24576
+ "kind": "workspace",
24577
+ "relation": "require",
24578
+ "reason": "Web3 market actors + relations; composes onto the Ecosystem workspace the OS installs."
24579
+ },
24580
+ {
24581
+ "slug": "dev-dashboard",
24582
+ "kind": "workspace",
24583
+ "relation": "require",
24584
+ "reason": "The engineering / ops dashboard — the build-side view of the company."
24585
+ }
24586
+ ],
24587
+ "workspace": {
24588
+ "name": "The Arch",
24589
+ "description": "The private command layer over the full company brain — track the cross-workspace initiatives that span the operating system and its private flagships.",
24590
+ "subtype": "the-arch",
24591
+ "visibility": "private"
24592
+ },
24593
+ "profiles": [
24594
+ {
24595
+ "slug": "initiative",
24596
+ "displayName": "Initiative",
24597
+ "icon": "flag",
24598
+ "color": "#7C3AED",
24599
+ "description": "A cross-workspace initiative that spans the operating system and its private flagships.",
24600
+ "properties": [
24601
+ {
24602
+ "slug": "summary",
24603
+ "label": "Summary",
24604
+ "valueType": "string",
24605
+ "inputType": "textarea"
24606
+ },
24607
+ {
24608
+ "slug": "stage",
24609
+ "label": "Stage",
24610
+ "valueType": "string",
24611
+ "inputType": "select",
24612
+ "enumValues": [
24613
+ "shaping",
24614
+ "active",
24615
+ "blocked",
24616
+ "shipped",
24617
+ "archived"
24618
+ ],
24619
+ "constraints": {
24620
+ "defaultValue": "shaping"
24621
+ }
24622
+ },
24623
+ {
24624
+ "slug": "lead",
24625
+ "label": "Lead",
24626
+ "valueType": "string",
24627
+ "inputType": "text"
24628
+ },
24629
+ {
24630
+ "slug": "priority",
24631
+ "label": "Priority",
24632
+ "valueType": "string",
24633
+ "inputType": "select",
24634
+ "enumValues": [
24635
+ "low",
24636
+ "medium",
24637
+ "high",
24638
+ "critical"
24639
+ ],
24640
+ "constraints": {
24641
+ "defaultValue": "medium"
24642
+ }
24643
+ },
24644
+ {
24645
+ "slug": "dueDate",
24646
+ "label": "Due Date",
24647
+ "valueType": "date",
24648
+ "inputType": "date"
24649
+ }
24650
+ ]
24651
+ }
24652
+ ],
24653
+ "views": [
24654
+ {
24655
+ "name": "Initiatives",
24656
+ "slug": "initiatives",
24657
+ "type": "table",
24658
+ "scopeProfileSlug": "initiative",
24659
+ "description": "The cross-workspace initiatives spanning the full company brain, by stage and priority.",
24660
+ "defaultView": true,
24661
+ "config": {
24662
+ "columns": [
24663
+ "title",
24664
+ "stage",
24665
+ "priority",
24666
+ "lead",
24667
+ "dueDate"
24668
+ ]
24669
+ }
24670
+ },
24671
+ {
24672
+ "name": "Initiative Board",
24673
+ "slug": "initiative-board",
24674
+ "type": "kanban",
24675
+ "scopeProfileSlug": "initiative",
24676
+ "description": "Initiatives grouped by stage — the command view over everything in flight.",
24677
+ "config": {
24678
+ "groupBy": "stage"
24679
+ }
24680
+ }
24681
+ ],
24682
+ "onboarding": {
24683
+ "goal": "Name the cross-workspace initiatives that span the operating system and its private flagships — the few big things in flight that touch more than one lens — so The Arch is a real command layer, not just an aggregate of apps.\n",
24684
+ "framing": "THE FOUNDER'S COMMAND LAYER: Act from the seat above every lens. The whole\ncompany brain is installed — operating core plus the private grant, web3, and\ndev flagships. Your job is to surface the handful of initiatives that cut\nacross them and give each a stage, a lead, and a priority.\n",
24685
+ "expertise": {
24686
+ "starters": [
24687
+ "Name the cross-cutting few. An initiative earns a place here only if it spans more than one workspace — a grant round that pulls in operations, ecosystem, and dev. Single-lens work stays in its lens.\n",
24688
+ "Give each initiative a real stage and lead. Shaping / active / blocked / shipped is the honest status; a lead is who to ask. Without them the command layer is a wish list.\n"
24689
+ ],
24690
+ "blindSpots": [
24691
+ "Everything marked \"high priority\" is the same as nothing marked. Force the ranking — what is actually critical this week?\n",
24692
+ "A blocked initiative with no note about the blocker is invisible risk. Name what is stuck and on whom.\n"
24693
+ ],
24694
+ "bar": "A short command board: the few genuinely cross-workspace initiatives, each with a stage, a lead, and an honest priority — sitting over a fully installed company brain.\n"
24695
+ },
24696
+ "collect": [
24697
+ {
24698
+ "profileSlug": "initiative",
24699
+ "what": "The cross-workspace initiatives currently in flight.",
24700
+ "cardinality": "few",
24701
+ "keyFields": [
24702
+ "stage",
24703
+ "priority",
24704
+ "lead"
24705
+ ]
24706
+ }
24707
+ ],
24708
+ "openingQuestions": [
24709
+ "What are the few big initiatives in flight that span more than one part of the company?",
24710
+ "For each, what stage is it in and who is the lead?"
24711
+ ],
24712
+ "doneWhen": "A few cross-workspace initiatives captured, each with a stage and a lead."
24713
+ },
24714
+ "app": {
24715
+ "kind": "stored",
24716
+ "cellKey": "entity-detail"
24717
+ },
24718
+ "layout": {
24719
+ "defaultView": "Initiatives",
24720
+ "defaultApp": null,
24721
+ "pinnedApps": [
24722
+ "dashboard",
24723
+ "data"
24724
+ ],
24725
+ "sidebarItems": [
24726
+ {
24727
+ "kind": "view",
24728
+ "viewName": "Initiatives",
24729
+ "label": "Initiatives",
24730
+ "icon": "flag"
24731
+ },
24732
+ {
24733
+ "kind": "view",
24734
+ "viewName": "Initiative Board",
24735
+ "label": "Board",
24736
+ "icon": "kanban-square"
24737
+ },
24738
+ {
24739
+ "kind": "app",
24740
+ "appId": "data",
24741
+ "label": "Data",
24742
+ "icon": "database"
24743
+ }
24744
+ ]
24745
+ },
24746
+ "bento": {
24747
+ "viewName": "Initiatives",
24748
+ "blocks": [
24749
+ {
24750
+ "kind": "view",
24751
+ "viewName": "Initiatives",
24752
+ "pos": {
24753
+ "x": 0,
24754
+ "y": 0,
24755
+ "w": 8,
24756
+ "h": 4
24757
+ }
24758
+ },
24759
+ {
24760
+ "kind": "view",
24761
+ "viewName": "Initiative Board",
24762
+ "pos": {
24763
+ "x": 8,
24764
+ "y": 0,
24765
+ "w": 4,
24766
+ "h": 4
24767
+ }
24768
+ }
24769
+ ]
24770
+ }
23761
24771
  }
23762
24772
  } as unknown as Record<string, WorkspaceYaml>;
23763
24773
 
@@ -23773,6 +24783,16 @@ export function listWorkspaceTemplates(): WorkspaceYaml[] {
23773
24783
  return Object.values(WORKSPACE_TEMPLATES);
23774
24784
  }
23775
24785
 
24786
+ /**
24787
+ * Public templates only (`meta.isPublic !== false`). This is a CONVENIENCE
24788
+ * filter for the default picker — NOT a security boundary: the private YAML
24789
+ * still ships in the published tarball, so anything that must not leak cannot
24790
+ * rely on this. `listWorkspaceTemplates()` returns all of them (CLI, seeder,
24791
+ * tripwire need the full set). Publicity is also expressed per-entry as
24792
+ * `CatalogEntry.isPrivate` by `mergeCatalog()`, so a caller can pass ALL
24793
+ * templates and filter at the presentation layer instead of choosing a list
24794
+ * function up front — the merge door itself never filters (it stays pure).
24795
+ */
23776
24796
  export function listPublicTemplates(): WorkspaceYaml[] {
23777
24797
  return Object.values(WORKSPACE_TEMPLATES).filter(t => t.meta?.isPublic !== false);
23778
24798
  }