@synap-core/workspace-templates 0.7.4 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/templates.ts CHANGED
@@ -9601,6 +9601,13 @@ const DATA = {
9601
9601
  "description": "An organisation being qualified or sold to.",
9602
9602
  "scope": "WORKSPACE",
9603
9603
  "properties": [
9604
+ {
9605
+ "slug": "contextSummary",
9606
+ "label": "Context",
9607
+ "valueType": "string",
9608
+ "inputType": "textarea",
9609
+ "placeholder": "The AI-maintained one-paragraph summary of who this client is and where they stand."
9610
+ },
9604
9611
  {
9605
9612
  "slug": "website",
9606
9613
  "label": "Website",
@@ -22070,6 +22077,694 @@ const DATA = {
22070
22077
  ]
22071
22078
  }
22072
22079
  },
22080
+ "networking": {
22081
+ "meta": {
22082
+ "slug": "networking",
22083
+ "domain": "revenue",
22084
+ "name": "Networking",
22085
+ "description": "The BD-middleman layer over your CRM — capture client needs, keep a roster of solution providers, and broker the intros that connect demand to supply.",
22086
+ "icon": "waypoints",
22087
+ "color": "#6366F1",
22088
+ "tags": [
22089
+ "networking",
22090
+ "business-development",
22091
+ "matchmaking",
22092
+ "intros",
22093
+ "middleman"
22094
+ ],
22095
+ "isPublic": true
22096
+ },
22097
+ "dependencies": [
22098
+ {
22099
+ "slug": "crm",
22100
+ "kind": "workspace",
22101
+ "relation": "compose",
22102
+ "reason": "Adds a needs → intros brokerage workflow onto your CRM workspace."
22103
+ },
22104
+ {
22105
+ "slug": "foundation",
22106
+ "kind": "workspace",
22107
+ "relation": "require",
22108
+ "reason": "Provides the pod-wide client/partner role vocabulary the CRM base reuses."
22109
+ }
22110
+ ],
22111
+ "workspace": {
22112
+ "name": "Networking",
22113
+ "description": "A brokerage workspace layered on your CRM — client needs, a provider roster, and the intros that connect them.",
22114
+ "proposalId": "networking-v1",
22115
+ "subtype": "crm"
22116
+ },
22117
+ "profiles": [
22118
+ {
22119
+ "slug": "need",
22120
+ "displayName": "Need",
22121
+ "icon": "target",
22122
+ "color": "amber",
22123
+ "description": "A client's stated ask — the demand The Arch brokers a provider against.",
22124
+ "scope": "WORKSPACE",
22125
+ "properties": [
22126
+ {
22127
+ "slug": "needStatus",
22128
+ "label": "Status",
22129
+ "valueType": "string",
22130
+ "inputType": "select",
22131
+ "enumValues": [
22132
+ "open",
22133
+ "matching",
22134
+ "intro-made",
22135
+ "satisfied",
22136
+ "dropped"
22137
+ ],
22138
+ "constraints": {
22139
+ "defaultValue": "open"
22140
+ }
22141
+ },
22142
+ {
22143
+ "slug": "domain",
22144
+ "label": "Domain",
22145
+ "valueType": "string",
22146
+ "inputType": "text",
22147
+ "placeholder": "The area of the ask — e.g. market-making, audit, design."
22148
+ },
22149
+ {
22150
+ "slug": "urgency",
22151
+ "label": "Urgency",
22152
+ "valueType": "string",
22153
+ "inputType": "text"
22154
+ },
22155
+ {
22156
+ "slug": "budgetRange",
22157
+ "label": "Budget Range",
22158
+ "valueType": "string",
22159
+ "inputType": "text"
22160
+ },
22161
+ {
22162
+ "slug": "requesterCompanyId",
22163
+ "label": "Requester",
22164
+ "valueType": "entity_id",
22165
+ "inputType": "entity_select",
22166
+ "targetProfileSlug": "company"
22167
+ },
22168
+ {
22169
+ "slug": "confidentiality",
22170
+ "label": "Confidentiality",
22171
+ "valueType": "string",
22172
+ "inputType": "select",
22173
+ "enumValues": [
22174
+ "shareable",
22175
+ "confidential"
22176
+ ],
22177
+ "constraints": {
22178
+ "defaultValue": "confidential"
22179
+ }
22180
+ },
22181
+ {
22182
+ "slug": "evidenceQuote",
22183
+ "label": "Evidence Quote",
22184
+ "valueType": "string",
22185
+ "inputType": "textarea",
22186
+ "placeholder": "The client's own words that captured this need."
22187
+ },
22188
+ {
22189
+ "slug": "sourceMessageId",
22190
+ "label": "Source Message ID",
22191
+ "valueType": "string",
22192
+ "inputType": "text"
22193
+ },
22194
+ {
22195
+ "slug": "notes",
22196
+ "label": "Notes",
22197
+ "valueType": "string",
22198
+ "inputType": "textarea"
22199
+ }
22200
+ ]
22201
+ },
22202
+ {
22203
+ "slug": "intro",
22204
+ "displayName": "Intro",
22205
+ "icon": "waypoints",
22206
+ "color": "violet",
22207
+ "description": "The middleman brokerage artifact — connects a requester to a provider for a need, and bills the match as a deal.",
22208
+ "scope": "WORKSPACE",
22209
+ "properties": [
22210
+ {
22211
+ "slug": "introStage",
22212
+ "label": "Stage",
22213
+ "valueType": "string",
22214
+ "inputType": "select",
22215
+ "enumValues": [
22216
+ "identified",
22217
+ "proposed",
22218
+ "approved",
22219
+ "introduced",
22220
+ "in-discussion",
22221
+ "signed",
22222
+ "dead"
22223
+ ],
22224
+ "constraints": {
22225
+ "defaultValue": "identified"
22226
+ }
22227
+ },
22228
+ {
22229
+ "slug": "requesterCompanyId",
22230
+ "label": "Requester",
22231
+ "valueType": "entity_id",
22232
+ "inputType": "entity_select",
22233
+ "targetProfileSlug": "company"
22234
+ },
22235
+ {
22236
+ "slug": "providerCompanyId",
22237
+ "label": "Provider",
22238
+ "valueType": "entity_id",
22239
+ "inputType": "entity_select",
22240
+ "targetProfileSlug": "company"
22241
+ },
22242
+ {
22243
+ "slug": "needId",
22244
+ "label": "Need",
22245
+ "valueType": "entity_id",
22246
+ "inputType": "entity_select",
22247
+ "targetProfileSlug": "need"
22248
+ },
22249
+ {
22250
+ "slug": "synapFeeModel",
22251
+ "label": "Synap fee model",
22252
+ "valueType": "string",
22253
+ "inputType": "select",
22254
+ "enumValues": [
22255
+ "fixed",
22256
+ "success_fee"
22257
+ ]
22258
+ },
22259
+ {
22260
+ "slug": "synapSuccessFeeRate",
22261
+ "label": "Synap success fee rate",
22262
+ "valueType": "number",
22263
+ "inputType": "number"
22264
+ },
22265
+ {
22266
+ "slug": "synapFixedFee",
22267
+ "label": "Synap fixed fee",
22268
+ "valueType": "number",
22269
+ "inputType": "number"
22270
+ },
22271
+ {
22272
+ "slug": "expectedClientGain",
22273
+ "label": "Expected client gain",
22274
+ "valueType": "number",
22275
+ "inputType": "number"
22276
+ },
22277
+ {
22278
+ "slug": "synapFeeAmount",
22279
+ "label": "Synap fee amount",
22280
+ "valueType": "number",
22281
+ "inputType": "number"
22282
+ },
22283
+ {
22284
+ "slug": "sourcedByUserId",
22285
+ "label": "Sourced by user ID",
22286
+ "valueType": "string",
22287
+ "inputType": "text"
22288
+ },
22289
+ {
22290
+ "slug": "commissionStatus",
22291
+ "label": "Commission status",
22292
+ "valueType": "string",
22293
+ "inputType": "select",
22294
+ "enumValues": [
22295
+ "estimated",
22296
+ "earned",
22297
+ "paid",
22298
+ "requires_review",
22299
+ "void"
22300
+ ]
22301
+ },
22302
+ {
22303
+ "slug": "introducedAt",
22304
+ "label": "Introduced at",
22305
+ "valueType": "date",
22306
+ "inputType": "date"
22307
+ },
22308
+ {
22309
+ "slug": "outcome",
22310
+ "label": "Outcome",
22311
+ "valueType": "string",
22312
+ "inputType": "textarea"
22313
+ },
22314
+ {
22315
+ "slug": "deadReason",
22316
+ "label": "Dead reason",
22317
+ "valueType": "string",
22318
+ "inputType": "textarea"
22319
+ }
22320
+ ]
22321
+ },
22322
+ {
22323
+ "slug": "solution-provider",
22324
+ "displayName": "Solution Provider",
22325
+ "icon": "handshake",
22326
+ "color": "teal",
22327
+ "description": "A company or person that provides a capability The Arch can broker a client need against.",
22328
+ "scope": "shared",
22329
+ "profileKind": "role",
22330
+ "applicableKinds": [
22331
+ "company",
22332
+ "person"
22333
+ ],
22334
+ "properties": [
22335
+ {
22336
+ "slug": "status",
22337
+ "label": "Status",
22338
+ "valueType": "string",
22339
+ "inputType": "select",
22340
+ "enumValues": [
22341
+ "prospect",
22342
+ "active",
22343
+ "paused",
22344
+ "churned"
22345
+ ]
22346
+ },
22347
+ {
22348
+ "slug": "domains",
22349
+ "label": "Domains",
22350
+ "valueType": "array",
22351
+ "inputType": "text",
22352
+ "placeholder": "The capability areas this provider covers."
22353
+ },
22354
+ {
22355
+ "slug": "capacity",
22356
+ "label": "Capacity",
22357
+ "valueType": "string",
22358
+ "inputType": "text"
22359
+ },
22360
+ {
22361
+ "slug": "pricingNotes",
22362
+ "label": "Pricing Notes",
22363
+ "valueType": "string",
22364
+ "inputType": "textarea"
22365
+ },
22366
+ {
22367
+ "slug": "geography",
22368
+ "label": "Geography",
22369
+ "valueType": "string",
22370
+ "inputType": "text"
22371
+ },
22372
+ {
22373
+ "slug": "notes",
22374
+ "label": "Notes",
22375
+ "valueType": "string",
22376
+ "inputType": "textarea"
22377
+ }
22378
+ ]
22379
+ }
22380
+ ],
22381
+ "entityLinks": [
22382
+ {
22383
+ "sourceProfileSlug": "need",
22384
+ "targetProfileSlug": "company",
22385
+ "type": "needed_by",
22386
+ "label": "Needed by"
22387
+ },
22388
+ {
22389
+ "sourceProfileSlug": "intro",
22390
+ "targetProfileSlug": "need",
22391
+ "type": "resolves",
22392
+ "label": "Resolves"
22393
+ },
22394
+ {
22395
+ "sourceProfileSlug": "intro",
22396
+ "targetProfileSlug": "company",
22397
+ "type": "introduced_requester",
22398
+ "label": "Requester"
22399
+ },
22400
+ {
22401
+ "sourceProfileSlug": "intro",
22402
+ "targetProfileSlug": "company",
22403
+ "type": "introduced_provider",
22404
+ "label": "Provider"
22405
+ },
22406
+ {
22407
+ "sourceProfileSlug": "intro",
22408
+ "targetProfileSlug": "deal",
22409
+ "type": "billed_as",
22410
+ "label": "Billed as"
22411
+ }
22412
+ ],
22413
+ "views": [
22414
+ {
22415
+ "name": "Needs",
22416
+ "slug": "needs",
22417
+ "type": "kanban",
22418
+ "scopeProfileSlug": "need",
22419
+ "description": "Client needs on a board by status — open demand waiting for a match.",
22420
+ "config": {
22421
+ "groupByField": "needStatus"
22422
+ }
22423
+ },
22424
+ {
22425
+ "name": "Intros",
22426
+ "slug": "intros",
22427
+ "type": "kanban",
22428
+ "scopeProfileSlug": "intro",
22429
+ "description": "Brokered intros on a board by stage — from identified match to signed.",
22430
+ "config": {
22431
+ "groupByField": "introStage"
22432
+ }
22433
+ },
22434
+ {
22435
+ "name": "Providers",
22436
+ "slug": "providers",
22437
+ "type": "table",
22438
+ "scopeProfileSlug": "solution-provider",
22439
+ "description": "The solution-provider roster — companies wearing the provider role, by status.",
22440
+ "config": {
22441
+ "columns": [
22442
+ "title",
22443
+ "status",
22444
+ "domains",
22445
+ "geography",
22446
+ "capacity"
22447
+ ]
22448
+ }
22449
+ }
22450
+ ],
22451
+ "automations": [
22452
+ {
22453
+ "key": "networking-intro-matcher",
22454
+ "name": "Intro Matcher",
22455
+ "description": "Once a day, match each shareable open client need against the solution-provider roster, propose an intro for the best fit, and post a match brief to The Arch's internal team channel — never to a client's own channel.",
22456
+ "triggerType": "cron",
22457
+ "triggerConfig": {
22458
+ "expression": "0 9 * * *"
22459
+ },
22460
+ "status": "active",
22461
+ "metadata": {
22462
+ "templateKey": "networking-intro-matcher"
22463
+ },
22464
+ "flow": {
22465
+ "nodes": [
22466
+ {
22467
+ "id": "trigger",
22468
+ "type": "trigger",
22469
+ "position": {
22470
+ "x": 0,
22471
+ "y": 0
22472
+ },
22473
+ "data": {
22474
+ "label": "Daily at 09:00",
22475
+ "triggerType": "cron",
22476
+ "config": {
22477
+ "expression": "0 9 * * *"
22478
+ }
22479
+ }
22480
+ },
22481
+ {
22482
+ "id": "list-needs",
22483
+ "type": "capability",
22484
+ "position": {
22485
+ "x": 0,
22486
+ "y": 120
22487
+ },
22488
+ "data": {
22489
+ "label": "List shareable open needs (FIREWALL filter)",
22490
+ "verbId": "entity.query",
22491
+ "inputMapping": {
22492
+ "profileSlug": "need",
22493
+ "filter": {
22494
+ "needStatus": "open",
22495
+ "confidentiality": "shareable"
22496
+ },
22497
+ "limit": "100"
22498
+ }
22499
+ }
22500
+ },
22501
+ {
22502
+ "id": "list-providers",
22503
+ "type": "capability",
22504
+ "position": {
22505
+ "x": 0,
22506
+ "y": 240
22507
+ },
22508
+ "data": {
22509
+ "label": "List the solution-provider roster",
22510
+ "verbId": "entity.query",
22511
+ "inputMapping": {
22512
+ "profileSlug": "solution-provider",
22513
+ "limit": "100"
22514
+ }
22515
+ }
22516
+ },
22517
+ {
22518
+ "id": "needs-loop",
22519
+ "type": "loop",
22520
+ "position": {
22521
+ "x": 0,
22522
+ "y": 360
22523
+ },
22524
+ "data": {
22525
+ "label": "For each shareable open need",
22526
+ "iteratorExpression": "steps.list-needs.output.entities",
22527
+ "itemVariable": "need"
22528
+ }
22529
+ },
22530
+ {
22531
+ "id": "match",
22532
+ "type": "capability",
22533
+ "position": {
22534
+ "x": 0,
22535
+ "y": 480
22536
+ },
22537
+ "data": {
22538
+ "label": "Match this need to the roster → JSON",
22539
+ "verbId": "ai.generate",
22540
+ "inputMapping": {
22541
+ "json": "true",
22542
+ "maxTokens": "800",
22543
+ "system": "You are The Arch's business-development matchmaker. You connect a CLIENT'S NEED to the single best SOLUTION PROVIDER from a roster.\nFIREWALL (never break): your output is a brief for The Arch's INTERNAL team channel ONLY. NEVER draft anything to be sent into a client's own channel, and NEVER reveal one client's need to another client. Do not name the requesting client in any text intended for the provider.",
22544
+ "prompt": "The client need: title: {{loop.item.title}} domain: {{loop.item.properties.domain}} urgency: {{loop.item.properties.urgency}} budget: {{loop.item.properties.budgetRange}} detail: {{loop.item.properties.notes}}\nThe solution-provider roster (JSON — each has an id, title, and properties incl. domains/geography/capacity): {{steps.list-providers.output.entities}}\nPick the SINGLE best provider for this need, or none if nothing fits well. Respond with STRICT JSON and NOTHING else: {\n \"hasMatch\": \"true\" or \"false\" (a STRING),\n \"providerEntityId\": \"<the matched provider's entity id, or empty string>\",\n \"providerName\": \"<the matched provider's name, or empty string>\",\n \"rationale\": \"<one or two sentences on why this provider fits, for the internal team>\",\n \"brief\": \"<a short internal match brief for the team, markdown>\"\n} Set hasMatch to \"false\" when no provider is a genuine fit."
22545
+ }
22546
+ }
22547
+ },
22548
+ {
22549
+ "id": "match-gate",
22550
+ "type": "condition",
22551
+ "position": {
22552
+ "x": 0,
22553
+ "y": 600
22554
+ },
22555
+ "data": {
22556
+ "label": "Only continue when there is a real match",
22557
+ "expression": "steps.match.output.hasMatch === true"
22558
+ }
22559
+ },
22560
+ {
22561
+ "id": "create-intro",
22562
+ "type": "output",
22563
+ "position": {
22564
+ "x": 0,
22565
+ "y": 720
22566
+ },
22567
+ "data": {
22568
+ "label": "Propose the intro",
22569
+ "outputType": "entity_create",
22570
+ "config": {
22571
+ "profileSlug": "intro",
22572
+ "title": "Intro — {{loop.item.title}} → {{steps.match.output.providerName}}",
22573
+ "properties": {
22574
+ "introStage": "identified",
22575
+ "needId": "{{loop.item.id}}",
22576
+ "requesterCompanyId": "{{loop.item.properties.requesterCompanyId}}",
22577
+ "providerCompanyId": "{{steps.match.output.providerEntityId}}"
22578
+ }
22579
+ }
22580
+ }
22581
+ },
22582
+ {
22583
+ "id": "resolve-team",
22584
+ "type": "capability",
22585
+ "position": {
22586
+ "x": 0,
22587
+ "y": 840
22588
+ },
22589
+ "data": {
22590
+ "label": "Resolve The Arch's internal team channel for the requester (FIREWALL)",
22591
+ "_note": "Resolves from the REQUESTER COMPANY, not the intro entity. channel.resolve is a read-only FIND — it never creates. A just-proposed `intro` has no channel bound to it, so resolving from {{steps.create-intro.output.entityId}} returned channelId: null and the brief silently never posted. The requester company is a stable entity that already owns a `team`-purpose channel (bound at onboarding), so we resolve from it instead. Firewall-safe: this is The Arch's INTERNAL team thread for client A (the need's owner), NOT client B's (the provider's) channel and NOT any client-comms channel.",
22592
+ "verbId": "channel.resolve",
22593
+ "inputMapping": {
22594
+ "contextObjectType": "entity",
22595
+ "contextObjectId": "{{loop.item.properties.requesterCompanyId}}",
22596
+ "branchPurpose": "team"
22597
+ }
22598
+ }
22599
+ },
22600
+ {
22601
+ "id": "post-brief",
22602
+ "type": "output",
22603
+ "position": {
22604
+ "x": 0,
22605
+ "y": 960
22606
+ },
22607
+ "data": {
22608
+ "label": "Post the match brief to the INTERNAL team channel (FIREWALL)",
22609
+ "outputType": "channel_message",
22610
+ "config": {
22611
+ "channelId": "{{steps.resolve-team.output.channelId}}",
22612
+ "content": "**Match found — {{loop.item.title}} → {{steps.match.output.providerName}}**\n{{steps.match.output.rationale}}\n{{steps.match.output.brief}}",
22613
+ "metadata": {
22614
+ "automationMessage": true,
22615
+ "kind": "intro-match"
22616
+ }
22617
+ }
22618
+ }
22619
+ }
22620
+ ],
22621
+ "edges": [
22622
+ {
22623
+ "id": "e-trigger-needs",
22624
+ "source": "trigger",
22625
+ "target": "list-needs"
22626
+ },
22627
+ {
22628
+ "id": "e-needs-providers",
22629
+ "source": "list-needs",
22630
+ "target": "list-providers"
22631
+ },
22632
+ {
22633
+ "id": "e-providers-loop",
22634
+ "source": "list-providers",
22635
+ "target": "needs-loop"
22636
+ },
22637
+ {
22638
+ "id": "e-loop-match",
22639
+ "source": "needs-loop",
22640
+ "target": "match"
22641
+ },
22642
+ {
22643
+ "id": "e-match-gate",
22644
+ "source": "match",
22645
+ "target": "match-gate"
22646
+ },
22647
+ {
22648
+ "id": "e-gate-intro",
22649
+ "source": "match-gate",
22650
+ "target": "create-intro"
22651
+ },
22652
+ {
22653
+ "id": "e-intro-resolve",
22654
+ "source": "create-intro",
22655
+ "target": "resolve-team"
22656
+ },
22657
+ {
22658
+ "id": "e-resolve-post",
22659
+ "source": "resolve-team",
22660
+ "target": "post-brief"
22661
+ }
22662
+ ]
22663
+ }
22664
+ }
22665
+ ],
22666
+ "app": {
22667
+ "kind": "stored",
22668
+ "cellKey": "entity-detail"
22669
+ },
22670
+ "layout": {
22671
+ "defaultView": "Needs",
22672
+ "defaultApp": null,
22673
+ "pinnedApps": [
22674
+ "dashboard",
22675
+ "data"
22676
+ ],
22677
+ "sidebarItems": [
22678
+ {
22679
+ "kind": "view",
22680
+ "viewName": "Needs",
22681
+ "label": "Needs",
22682
+ "icon": "target"
22683
+ },
22684
+ {
22685
+ "kind": "view",
22686
+ "viewName": "Intros",
22687
+ "label": "Intros",
22688
+ "icon": "waypoints"
22689
+ },
22690
+ {
22691
+ "kind": "view",
22692
+ "viewName": "Providers",
22693
+ "label": "Providers",
22694
+ "icon": "handshake"
22695
+ }
22696
+ ]
22697
+ },
22698
+ "bento": {
22699
+ "viewName": "Needs",
22700
+ "blocks": [
22701
+ {
22702
+ "kind": "view",
22703
+ "viewName": "Needs",
22704
+ "pos": {
22705
+ "x": 0,
22706
+ "y": 0,
22707
+ "w": 6,
22708
+ "h": 5
22709
+ }
22710
+ },
22711
+ {
22712
+ "kind": "view",
22713
+ "viewName": "Intros",
22714
+ "pos": {
22715
+ "x": 6,
22716
+ "y": 0,
22717
+ "w": 6,
22718
+ "h": 5
22719
+ }
22720
+ }
22721
+ ]
22722
+ },
22723
+ "onboarding": {
22724
+ "goal": "Capture the two sides of the brokerage — the live client NEEDS and the SOLUTION-PROVIDER roster — so the matcher has real demand and real supply to connect, and every intro traces back to a stated need and a named provider.\n",
22725
+ "framing": "THE BD MIDDLEMAN: Act as a sharp business-development broker who lives\nbetween clients. One client has a need; another has the capability to meet\nit; your value is the introduction and the fee on the match. Push for the\nconcrete: whose need is this, how confidential is it, and which real provider\ncan serve it. Tag the provider role onto the REAL company you already know —\nnever a second entity for the same firm.\n",
22726
+ "expertise": {
22727
+ "starters": [
22728
+ "A need has an owner and a confidentiality. Default every need to confidential — it only enters the match roster once a human marks it shareable. Capture whose need it is (the requester company) and, where you can, the client's own words as the evidence quote.\n",
22729
+ "The provider is a HAT, not a new entity. Attach the solution-provider role to the real company/person you already track (match on domain / name first) — a market of providers is a graph of roles on known companies, not a parallel directory.\n"
22730
+ ],
22731
+ "blindSpots": [
22732
+ "A need with no provider and no status is a wish, not a pipeline. Force the status (open / matching / intro-made) and, once a match exists, broker the intro rather than letting the need sit open.\n",
22733
+ "The firewall is the product. Never let one client's confidential need leak to another client. If a need is sensitive, keep it confidential — an intro is proposed to the internal team first, never straight to a client's channel.\n"
22734
+ ],
22735
+ "bar": "A workspace with real client needs (each with a requester and a confidentiality), a roster of solution providers tagged onto real companies, and the first intros brokered between them — so a glance shows what demand is open and which providers can serve it.\n"
22736
+ },
22737
+ "collect": [
22738
+ {
22739
+ "profileSlug": "need",
22740
+ "what": "The live client needs you could broker a provider against.",
22741
+ "cardinality": "several",
22742
+ "keyFields": [
22743
+ "needStatus",
22744
+ "domain",
22745
+ "requesterCompanyId",
22746
+ "confidentiality"
22747
+ ]
22748
+ },
22749
+ {
22750
+ "profileSlug": "solution-provider",
22751
+ "what": "The solution providers you can connect clients to, tagged onto the real company.",
22752
+ "cardinality": "several",
22753
+ "keyFields": [
22754
+ "status",
22755
+ "domains",
22756
+ "geography"
22757
+ ]
22758
+ }
22759
+ ],
22760
+ "openingQuestions": [
22761
+ "Which client needs are open right now, and whose needs are they?",
22762
+ "Which of those needs are shareable, and which must stay confidential?",
22763
+ "Which solution providers can you connect clients to, and what do they cover?"
22764
+ ],
22765
+ "doneWhen": "A few client needs captured with a requester and a confidentiality, a handful of solution providers tagged onto real companies, and at least one intro brokered between them."
22766
+ }
22767
+ },
22073
22768
  "operations": {
22074
22769
  "meta": {
22075
22770
  "slug": "operations",
@@ -26969,6 +27664,9 @@ const DATA = {
26969
27664
  "integrations": [
26970
27665
  {
26971
27666
  "templateKey": "client-comms-report"
27667
+ },
27668
+ {
27669
+ "templateKey": "arch-backend"
26972
27670
  }
26973
27671
  ],
26974
27672
  "onboarding": {