@synap-core/workspace-templates 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1309 @@
1
+ # Dev Dashboard workspace template — Infrastructure Command Center
2
+ # Internal DevOps inventory product. Union of:
3
+ # synap-backend/templates/packages/dev-dashboard.package.json (primary)
4
+ # synap-control-plane-api/templates/Synap Dev Dashboard.json (cross-check, richer seed data)
5
+ # Validated against types.ts at build time.
6
+ # NOTE: distinct from builder.yaml (the DevPlane + agent layer). Both are kept.
7
+
8
+ meta:
9
+ slug: dev-dashboard
10
+ name: "Synap Dev — Infrastructure Command Center"
11
+ description: "Internal DevOps dashboard for monitoring Synap infrastructure. Tracks services, vendors, and environments with health status, architecture flow map, and quick access to admin panels."
12
+ icon: server
13
+ color: "#3B82F6"
14
+ tags: [devops, infrastructure, monitoring, services, vendors, credentials]
15
+ isPublic: false
16
+
17
+ workspace:
18
+ name: "Synap Dev — Infrastructure Command Center"
19
+ description: "Internal DevOps dashboard for monitoring Synap infrastructure. Tracks services, vendors, and environments with health status, architecture flow map, and quick access to admin panels."
20
+ proposalId: dev-dashboard-v1
21
+ subtype: infrastructure
22
+ workspaceType: operational
23
+
24
+ profiles:
25
+ - slug: service
26
+ displayName: Service
27
+ icon: server
28
+ color: "#3B82F6"
29
+ description: "A Synap infrastructure service or application with monitoring, deployment, and connection details."
30
+ scope: WORKSPACE
31
+ properties:
32
+ - slug: service-type
33
+ label: Service Type
34
+ valueType: string
35
+ inputType: select
36
+ enumValues: [Frontend, Backend API, Worker, Bridge, Landing Page]
37
+ - slug: service-url
38
+ label: Service URL
39
+ valueType: string
40
+ placeholder: "https://..."
41
+ constraints:
42
+ format: url
43
+ - slug: github-url
44
+ label: GitHub URL
45
+ valueType: string
46
+ placeholder: "https://github.com/..."
47
+ constraints:
48
+ format: url
49
+ - slug: health-endpoint
50
+ label: Health Check URL
51
+ valueType: string
52
+ placeholder: "https://.../health"
53
+ constraints:
54
+ format: url
55
+ - slug: deploy-url
56
+ label: Deploy Dashboard URL
57
+ valueType: string
58
+ placeholder: "https://..."
59
+ constraints:
60
+ format: url
61
+ - slug: server-host
62
+ label: Server Host (SSH)
63
+ valueType: string
64
+ placeholder: "user@host"
65
+ - slug: admin-panel-url
66
+ label: Admin Panel URL
67
+ valueType: string
68
+ placeholder: "https://..."
69
+ constraints:
70
+ format: url
71
+ - slug: monitoring-url
72
+ label: Monitoring URL
73
+ valueType: string
74
+ placeholder: "https://..."
75
+ constraints:
76
+ format: url
77
+ - slug: docs-url
78
+ label: Documentation URL
79
+ valueType: string
80
+ placeholder: "https://..."
81
+ constraints:
82
+ format: url
83
+ - slug: health-status
84
+ label: Health Status
85
+ valueType: string
86
+ inputType: select
87
+ enumValues: [Healthy, Degraded, Down, Unknown]
88
+ - slug: tech-stack
89
+ label: Tech Stack
90
+ valueType: array
91
+ - slug: port
92
+ label: Port
93
+ valueType: number
94
+ placeholder: "3000"
95
+ - slug: environment
96
+ label: Environment
97
+ valueType: string
98
+ inputType: select
99
+ enumValues: [Production, Staging, Development]
100
+ - slug: deployment-branch
101
+ label: Deployment Branch
102
+ valueType: string
103
+ placeholder: "main"
104
+ - slug: last-deploy
105
+ label: Last Deploy
106
+ valueType: date
107
+ - slug: service-notes
108
+ label: Notes
109
+ valueType: string
110
+ inputType: textarea
111
+
112
+ - slug: vendor
113
+ displayName: Vendor
114
+ icon: package
115
+ color: "#8B5CF6"
116
+ description: "External services, tools, and providers used by the Synap platform."
117
+ scope: WORKSPACE
118
+ properties:
119
+ - slug: vendor-type
120
+ label: Vendor Type
121
+ valueType: string
122
+ inputType: select
123
+ enumValues: [Hosting, AI, Auth, Database, Monitoring, CI/CD, DNS, Email, Other]
124
+ - slug: vendor-url
125
+ label: Vendor URL
126
+ valueType: string
127
+ placeholder: "https://..."
128
+ constraints:
129
+ format: url
130
+ - slug: admin-url
131
+ label: Admin Console URL
132
+ valueType: string
133
+ placeholder: "https://..."
134
+ constraints:
135
+ format: url
136
+ - slug: docs-url
137
+ label: Documentation URL
138
+ valueType: string
139
+ placeholder: "https://..."
140
+ constraints:
141
+ format: url
142
+ - slug: status-page-url
143
+ label: Status Page URL
144
+ valueType: string
145
+ placeholder: "https://status.example.com"
146
+ constraints:
147
+ format: url
148
+ - slug: api-key-ref
149
+ label: API Key
150
+ valueType: string
151
+ - slug: pricing-model
152
+ label: Pricing Model
153
+ valueType: string
154
+ inputType: select
155
+ enumValues: [Free, Pay-as-you-go, Monthly, Annual]
156
+ - slug: monthly-cost
157
+ label: "Monthly Cost (€)"
158
+ valueType: number
159
+ placeholder: "0"
160
+ - slug: vendor-status
161
+ label: Status
162
+ valueType: string
163
+ inputType: select
164
+ enumValues: [Active, Trial, Deprecated]
165
+ - slug: vendor-notes
166
+ label: Notes
167
+ valueType: string
168
+ inputType: textarea
169
+
170
+ - slug: environment
171
+ displayName: Environment
172
+ icon: cloud
173
+ color: "#10B981"
174
+ description: "Deployment environments for Synap services (production, staging, dev)."
175
+ scope: WORKSPACE
176
+ properties:
177
+ - slug: env-type
178
+ label: Environment Type
179
+ valueType: string
180
+ inputType: select
181
+ enumValues: [Production, Staging, Development, Preview]
182
+ - slug: env-url
183
+ label: Base URL
184
+ valueType: string
185
+ placeholder: "https://..."
186
+ constraints:
187
+ format: url
188
+ - slug: branch
189
+ label: Deployed Branch
190
+ valueType: string
191
+ placeholder: "main"
192
+ - slug: last-deploy
193
+ label: Last Deploy
194
+ valueType: date
195
+ - slug: env-status
196
+ label: Status
197
+ valueType: string
198
+ inputType: select
199
+ enumValues: [Active, Maintenance, Down]
200
+ - slug: env-notes
201
+ label: Notes
202
+ valueType: string
203
+ inputType: textarea
204
+
205
+ - slug: repository
206
+ displayName: Repository
207
+ icon: git-branch
208
+ color: "#F97316"
209
+ description: "A Git repository with branch info, CI status, and contributor activity."
210
+ scope: WORKSPACE
211
+ properties:
212
+ - slug: repo-url
213
+ label: Repository URL
214
+ valueType: string
215
+ placeholder: "https://github.com/..."
216
+ constraints:
217
+ format: url
218
+ - slug: main-branch
219
+ label: Main Branch
220
+ valueType: string
221
+ placeholder: "main"
222
+ - slug: active-branches
223
+ label: Active Branches
224
+ valueType: array
225
+ - slug: ci-status
226
+ label: CI Status
227
+ valueType: string
228
+ inputType: select
229
+ enumValues: [Passing, Failing, Pending, Unknown]
230
+ - slug: ci-url
231
+ label: CI Dashboard URL
232
+ valueType: string
233
+ placeholder: "https://github.com/.../actions"
234
+ constraints:
235
+ format: url
236
+ - slug: last-commit
237
+ label: Last Commit
238
+ valueType: string
239
+ - slug: last-commit-date
240
+ label: Last Commit Date
241
+ valueType: date
242
+ - slug: language
243
+ label: Primary Language
244
+ valueType: string
245
+ inputType: select
246
+ enumValues: [TypeScript, JavaScript, Python, Rust, Go, Other]
247
+ - slug: package-manager
248
+ label: Package Manager
249
+ valueType: string
250
+ inputType: select
251
+ enumValues: [pnpm, npm, yarn, bun, cargo, pip]
252
+ - slug: monorepo
253
+ label: Monorepo
254
+ valueType: boolean
255
+ - slug: repo-notes
256
+ label: Notes
257
+ valueType: string
258
+ inputType: textarea
259
+
260
+ - slug: credential
261
+ displayName: Credential
262
+ icon: key
263
+ color: "#F59E0B"
264
+ description: "API keys, SSH keys, and secrets linked to vault items"
265
+ scope: WORKSPACE
266
+ properties:
267
+ - slug: credential-type
268
+ label: Type
269
+ valueType: string
270
+ inputType: select
271
+ enumValues: [api_key, ssh_key, password, token, certificate, env_variable, other]
272
+ placeholder: "Select credential type"
273
+ - slug: service-name
274
+ label: Service
275
+ valueType: string
276
+ inputType: text
277
+ placeholder: "e.g. Hetzner, Stripe, GitHub"
278
+ - slug: vault-ref
279
+ label: Vault Item Name
280
+ valueType: string
281
+ inputType: text
282
+ placeholder: "Name of the vault item storing this secret"
283
+ - slug: last-rotated
284
+ label: Last Rotated
285
+ valueType: date
286
+ inputType: date
287
+ - slug: expires-at
288
+ label: Expires At
289
+ valueType: date
290
+ inputType: date
291
+ - slug: environment
292
+ label: Environment
293
+ valueType: string
294
+ inputType: select
295
+ enumValues: [production, staging, development, all]
296
+ placeholder: "Environment"
297
+ - slug: notes
298
+ label: Notes
299
+ valueType: string
300
+ inputType: textarea
301
+ placeholder: "Permissions, rotation policy, who has access..."
302
+
303
+ views:
304
+ - name: Infrastructure Map
305
+ type: flow
306
+ scopeProfileSlug: service
307
+ config:
308
+ nodes:
309
+ - id: browser
310
+ type: entity
311
+ position: { x: 0, y: 0 }
312
+ label: Browser
313
+ data: { entityIndex: 8 }
314
+ - id: control-plane
315
+ type: entity
316
+ position: { x: 0, y: 250 }
317
+ label: Control Plane
318
+ data: { entityIndex: 3 }
319
+ - id: synap-app
320
+ type: entity
321
+ position: { x: 400, y: 0 }
322
+ label: Synap App
323
+ data: { entityIndex: 0 }
324
+ - id: control-plane-api
325
+ type: entity
326
+ position: { x: 400, y: 250 }
327
+ label: Control Plane API
328
+ data: { entityIndex: 2 }
329
+ - id: synap-backend
330
+ type: entity
331
+ position: { x: 400, y: 500 }
332
+ label: Synap Backend
333
+ data: { entityIndex: 1 }
334
+ - id: intelligence-service
335
+ type: entity
336
+ position: { x: 800, y: 0 }
337
+ label: Intelligence Service
338
+ data: { entityIndex: 4 }
339
+ - id: zeroclaw-bridge
340
+ type: entity
341
+ position: { x: 800, y: 250 }
342
+ label: ZeroClaw Bridge
343
+ data: { entityIndex: 7 }
344
+ - id: life-feed
345
+ type: entity
346
+ position: { x: 800, y: 500 }
347
+ label: Life Feed
348
+ data: { entityIndex: 6 }
349
+ - id: landing-page
350
+ type: entity
351
+ position: { x: 400, y: 750 }
352
+ label: Landing Page
353
+ data: { entityIndex: 5 }
354
+ edges:
355
+ - id: e-browser-app
356
+ source: browser
357
+ target: synap-app
358
+ label: "embeds workspace"
359
+ animated: false
360
+ - id: e-cp-cpapi
361
+ source: control-plane
362
+ target: control-plane-api
363
+ label: "frontend → API"
364
+ animated: false
365
+ - id: e-app-backend
366
+ source: synap-app
367
+ target: synap-backend
368
+ label: "API calls"
369
+ animated: true
370
+ - id: e-app-intel
371
+ source: synap-app
372
+ target: intelligence-service
373
+ label: "AI features"
374
+ animated: true
375
+ - id: e-cpapi-backend
376
+ source: control-plane-api
377
+ target: synap-backend
378
+ label: "pod management"
379
+ animated: false
380
+ - id: e-backend-intel
381
+ source: synap-backend
382
+ target: intelligence-service
383
+ label: "agent orchestration"
384
+ animated: true
385
+ - id: e-backend-zeroclaw
386
+ source: synap-backend
387
+ target: zeroclaw-bridge
388
+ label: "security scanning"
389
+ animated: false
390
+ - id: e-zeroclaw-intel
391
+ source: zeroclaw-bridge
392
+ target: intelligence-service
393
+ label: "AI analysis"
394
+ animated: false
395
+ - id: e-app-lifefeed
396
+ source: synap-app
397
+ target: life-feed
398
+ label: "real-time events"
399
+ animated: false
400
+
401
+ - name: Service Health
402
+ type: kanban
403
+ scopeProfileSlug: service
404
+ config:
405
+ groupByField: health-status
406
+
407
+ - name: Architecture Graph
408
+ type: graph
409
+ scopeProfileSlugs: [service, vendor, repository]
410
+ config:
411
+ layout: force
412
+ showRelations: true
413
+
414
+ - name: Deploy Timeline
415
+ type: table
416
+ scopeProfileSlug: service
417
+ config:
418
+ visibleColumns: [service-type, environment, deployment-branch, last-deploy, health-status]
419
+ sortBy: last-deploy
420
+ sortDirection: desc
421
+
422
+ - name: Vendor Costs
423
+ type: table
424
+ scopeProfileSlug: vendor
425
+ config:
426
+ visibleColumns: [vendor-type, pricing-model, monthly-cost, vendor-status]
427
+ sortBy: monthly-cost
428
+ sortDirection: desc
429
+
430
+ - name: Services by Type
431
+ type: kanban
432
+ scopeProfileSlug: service
433
+ config:
434
+ groupByField: service-type
435
+
436
+ - name: All Services
437
+ type: table
438
+ scopeProfileSlug: service
439
+ config:
440
+ columns:
441
+ - { key: service-type }
442
+ - { key: environment }
443
+ - { key: health-status }
444
+ - { key: tech-stack }
445
+ - { key: service-url }
446
+ sort:
447
+ field: service-type
448
+ direction: asc
449
+
450
+ - name: Vendors
451
+ type: table
452
+ scopeProfileSlug: vendor
453
+ config:
454
+ columns:
455
+ - { key: vendor-type }
456
+ - { key: pricing-model }
457
+ - { key: monthly-cost }
458
+ - { key: vendor-status }
459
+ - { key: vendor-url }
460
+ sort:
461
+ field: monthly-cost
462
+ direction: desc
463
+
464
+ - name: Repositories
465
+ type: table
466
+ scopeProfileSlug: repository
467
+ config:
468
+ columns:
469
+ - { key: language }
470
+ - { key: package-manager }
471
+ - { key: monorepo }
472
+ - { key: ci-status }
473
+ - { key: main-branch }
474
+ sort:
475
+ field: language
476
+ direction: asc
477
+
478
+ - name: Services Dashboard
479
+ type: bento
480
+ config:
481
+ layout: fixed
482
+ blocks:
483
+ - id: platform-metrics
484
+ kind: widget
485
+ widgetType: dev-platform-metrics
486
+ pos: { x: 0, y: 0, w: 12, h: 3 }
487
+ config: {}
488
+ - id: intelligence-usage
489
+ kind: widget
490
+ widgetType: dev-intelligence-usage
491
+ pos: { x: 0, y: 3, w: 6, h: 4 }
492
+ config: {}
493
+ - id: service-health
494
+ kind: widget
495
+ widgetType: dev-service-health
496
+ pos: { x: 6, y: 3, w: 6, h: 4 }
497
+ config: {}
498
+ - id: agent-activity
499
+ kind: widget
500
+ widgetType: dev-agent-activity
501
+ pos: { x: 0, y: 7, w: 4, h: 5 }
502
+ config: {}
503
+ - id: pod-status
504
+ kind: widget
505
+ widgetType: dev-pod-status
506
+ pos: { x: 4, y: 7, w: 4, h: 5 }
507
+ config: {}
508
+ - id: quick-links
509
+ kind: widget
510
+ widgetType: dev-quick-links
511
+ pos: { x: 8, y: 7, w: 4, h: 5 }
512
+ config: {}
513
+ - id: cost-summary
514
+ kind: widget
515
+ widgetType: dev-cost-summary
516
+ pos: { x: 0, y: 12, w: 12, h: 3 }
517
+ config: {}
518
+
519
+ - name: Credentials
520
+ type: table
521
+ scopeProfileSlug: credential
522
+ config: {}
523
+
524
+ entityLinks:
525
+ - sourceProfileSlug: service
526
+ targetProfileSlug: vendor
527
+ type: uses
528
+ - sourceProfileSlug: service
529
+ targetProfileSlug: environment
530
+ type: deployed_on
531
+ - sourceProfileSlug: service
532
+ targetProfileSlug: service
533
+ type: depends_on
534
+ - sourceProfileSlug: environment
535
+ targetProfileSlug: vendor
536
+ type: hosted_on
537
+ - sourceProfileSlug: repository
538
+ targetProfileSlug: service
539
+ type: powers
540
+ - sourceProfileSlug: repository
541
+ targetProfileSlug: repository
542
+ type: depends_on
543
+
544
+ seedEntities:
545
+ - profileSlug: service
546
+ title: Synap App
547
+ properties:
548
+ service-type: Frontend
549
+ service-url: "https://app.synap.live"
550
+ github-url: "https://github.com/synapsh/synap-app"
551
+ health-status: Unknown
552
+ tech-stack: [Next.js, React, tRPC, Zustand, Ink]
553
+ port: 3000
554
+ environment: Production
555
+ service-notes: "Main workspace application. pnpm monorepo: core, features, views, apps. @synap/capabilities = single source of truth for widget/view types. Bento system via @synap/cell-runtime + @synap/cells."
556
+ - profileSlug: service
557
+ title: Synap Backend
558
+ properties:
559
+ service-type: Backend API
560
+ github-url: "https://github.com/synapsh/synap-backend"
561
+ health-status: Unknown
562
+ tech-stack: [Node.js, Hono, tRPC, Drizzle, PostgreSQL, Better Auth]
563
+ port: 4000
564
+ environment: Production
565
+ service-notes: "Data Pod backend — deployed per user pod at {name}.synap.live. Hono HTTP + tRPC + Better Auth. Hub Protocol (16 sub-routers)."
566
+ - profileSlug: service
567
+ title: Control Plane API
568
+ properties:
569
+ service-type: Backend API
570
+ service-url: "https://api.synap.live"
571
+ github-url: "https://github.com/synapsh/synap-control-plane-api"
572
+ health-endpoint: "https://api.synap.live/health"
573
+ health-status: Unknown
574
+ tech-stack: [Node.js, Hono, Better Auth, Drizzle, PostgreSQL, Stripe]
575
+ port: 4100
576
+ environment: Production
577
+ service-notes: "SaaS Control Plane. REST-only (Hono). Pod provisioning, Stripe subscriptions, Better Auth. CP↔Pod JWT handshake via ES256. Provision JWT carries tier + Resend config to pods."
578
+ - profileSlug: service
579
+ title: Control Plane
580
+ properties:
581
+ service-type: Frontend
582
+ service-url: "https://control.synap.live"
583
+ github-url: "https://github.com/synapsh/synap-control-plane"
584
+ health-status: Unknown
585
+ tech-stack: [Next.js, React]
586
+ port: 3100
587
+ environment: Production
588
+ service-notes: "Platform marketing + dashboard. Sign-up, pod management, billing (Stripe), add-on marketplace."
589
+ - profileSlug: service
590
+ title: Agent Hub
591
+ properties:
592
+ service-type: Backend API
593
+ service-url: "https://intelligence.synap.live"
594
+ github-url: "https://github.com/synapsh/synap-intelligence-service"
595
+ health-endpoint: "https://intelligence.synap.live/health"
596
+ health-status: Unknown
597
+ tech-stack: [Node.js, Hono, Mem0, OpenRouter, MCP]
598
+ port: 4200
599
+ environment: Production
600
+ service-notes: "AI/Agent Hub (synap-agent-hub). OrchestratorAgent (co-founder AI, 15 tools) + PersonaAgent (CTO/Marketing/Sales/PM). Session-scoped memory via compaction engine. MCP client — OpenClaw (browsing) + Firecrawl (scraping) via Docker. Hub Protocol client for all IS→backend operations."
601
+ - profileSlug: service
602
+ title: OpenClaw
603
+ properties:
604
+ service-type: Worker
605
+ github-url: "https://github.com/synapsh/openclaw"
606
+ health-status: Unknown
607
+ tech-stack: [Docker, MCP, Playwright]
608
+ port: 3000
609
+ service-notes: "Web browsing MCP tool. Docker-managed via workspace.settings.serviceCommands.openclaw. MCP stdio/HTTP transport. Used by Agent Hub for web research. Internal only."
610
+ - profileSlug: service
611
+ title: Firecrawl
612
+ properties:
613
+ service-type: Worker
614
+ service-url: "https://firecrawl.dev"
615
+ github-url: "https://github.com/mendableai/firecrawl"
616
+ health-status: Unknown
617
+ tech-stack: [Docker, MCP]
618
+ port: 3001
619
+ service-notes: "Web scraping MCP tool. Docker-managed via workspace.settings.serviceCommands.firecrawl. MCP stdio/HTTP transport. Used by Agent Hub for structured content extraction."
620
+ - profileSlug: service
621
+ title: Browser
622
+ properties:
623
+ service-type: Frontend
624
+ github-url: "https://github.com/synapsh/browser"
625
+ health-status: Unknown
626
+ tech-stack: [Electron, React, Zustand]
627
+ service-notes: "Desktop browser shell. Wraps Synap App with native OS integration, tab management, profile/workspace switching, embedded webviews."
628
+ - profileSlug: service
629
+ title: Langfuse Monitor
630
+ properties:
631
+ service-type: Monitoring
632
+ service-url: "https://ai-monitoring.synap.live"
633
+ github-url: "https://github.com/langfuse/langfuse"
634
+ health-endpoint: "https://ai-monitoring.synap.live/api/public/health"
635
+ health-status: Unknown
636
+ tech-stack: [Langfuse, Docker, PostgreSQL]
637
+ environment: Production
638
+ service-notes: "Self-hosted Langfuse AI observability. Traces all Agent Hub executions."
639
+ - profileSlug: service
640
+ title: MonoHub
641
+ properties:
642
+ service-type: Worker
643
+ github-url: "https://github.com/synapsh/synap"
644
+ health-status: Unknown
645
+ tech-stack: [Node.js, Ink, React, MCP]
646
+ port: 7433
647
+ service-notes: "Internal developer CLI (monohub/). Terminal dashboard: package health, circular dep detection, publish orchestration, capability scaffolding wizard, MCP server for Claude/Cursor. Web dashboard at http://localhost:7433."
648
+ - profileSlug: vendor
649
+ title: Hetzner
650
+ properties:
651
+ vendor-type: Hosting
652
+ vendor-url: "https://hetzner.com"
653
+ admin-url: "https://console.hetzner.cloud"
654
+ status-page-url: "https://status.hetzner.com"
655
+ pricing-model: Monthly
656
+ monthly-cost: 0
657
+ vendor-status: Active
658
+ vendor-notes: "Primary cloud hosting. Servers for Data Pods and Agent Hub."
659
+ - profileSlug: vendor
660
+ title: Stripe
661
+ properties:
662
+ vendor-type: Other
663
+ vendor-url: "https://stripe.com"
664
+ admin-url: "https://dashboard.stripe.com"
665
+ docs-url: "https://stripe.com/docs"
666
+ status-page-url: "https://status.stripe.com"
667
+ pricing-model: Pay-as-you-go
668
+ monthly-cost: 0
669
+ vendor-status: Active
670
+ vendor-notes: "Billing and subscription management. solo/pro/team/enterprise tiers + addon subscriptions. Webhooks consumed by Control Plane API."
671
+ - profileSlug: vendor
672
+ title: OpenRouter
673
+ properties:
674
+ vendor-type: AI
675
+ vendor-url: "https://openrouter.ai"
676
+ admin-url: "https://openrouter.ai/dashboard"
677
+ docs-url: "https://openrouter.ai/docs"
678
+ pricing-model: Pay-as-you-go
679
+ monthly-cost: 0
680
+ vendor-status: Active
681
+ vendor-notes: "LLM API gateway. Used by Agent Hub for all model calls (Claude, GPT-4, etc.)."
682
+ - profileSlug: vendor
683
+ title: Cloudflare
684
+ properties:
685
+ vendor-type: DNS
686
+ vendor-url: "https://cloudflare.com"
687
+ admin-url: "https://dash.cloudflare.com"
688
+ status-page-url: "https://www.cloudflarestatus.com"
689
+ pricing-model: Monthly
690
+ monthly-cost: 0
691
+ vendor-status: Active
692
+ vendor-notes: "DNS management and CDN for all Synap domains."
693
+ - profileSlug: vendor
694
+ title: Resend
695
+ properties:
696
+ vendor-type: Email
697
+ vendor-url: "https://resend.com"
698
+ admin-url: "https://resend.com/dashboard"
699
+ docs-url: "https://resend.com/docs"
700
+ pricing-model: Pay-as-you-go
701
+ monthly-cost: 0
702
+ vendor-status: Active
703
+ vendor-notes: "Transactional email. API key provisioned to each Data Pod via provision JWT."
704
+ - profileSlug: vendor
705
+ title: GitHub
706
+ properties:
707
+ vendor-type: CI/CD
708
+ vendor-url: "https://github.com"
709
+ admin-url: "https://github.com/synapsh"
710
+ pricing-model: Monthly
711
+ monthly-cost: 0
712
+ vendor-status: Active
713
+ vendor-notes: "Code hosting and CI/CD (GitHub Actions). All repos under github.com/synapsh."
714
+ - profileSlug: vendor
715
+ title: Namecheap
716
+ properties:
717
+ vendor-type: Domain Registrar
718
+ vendor-url: "https://namecheap.com"
719
+ admin-url: "https://ap.www.namecheap.com/dashboard"
720
+ pricing-model: Annual
721
+ monthly-cost: 0
722
+ vendor-status: Active
723
+ vendor-notes: "Domain registrar for synap.live. Alternative DNS provider alongside Cloudflare."
724
+ - profileSlug: vendor
725
+ title: Trigger.dev
726
+ properties:
727
+ vendor-type: Background Jobs
728
+ vendor-url: "https://trigger.dev"
729
+ admin-url: "https://cloud.trigger.dev"
730
+ pricing-model: Monthly
731
+ monthly-cost: 0
732
+ vendor-status: Active
733
+ vendor-notes: "Background job orchestration for CP: pod provisioning, rolling updates, health checks."
734
+ - profileSlug: environment
735
+ title: Production
736
+ properties:
737
+ env-type: Production
738
+ env-url: "https://app.synap.live"
739
+ branch: main
740
+ env-status: Active
741
+ env-notes: "Live production environment. All customer data. Requires deployment checklist before any release."
742
+ - profileSlug: environment
743
+ title: Staging
744
+ properties:
745
+ env-type: Staging
746
+ branch: staging
747
+ env-status: Active
748
+ env-notes: "Pre-production staging environment for QA and integration testing."
749
+ - profileSlug: environment
750
+ title: Development
751
+ properties:
752
+ env-type: Development
753
+ env-url: "http://localhost:3000"
754
+ branch: main
755
+ env-status: Active
756
+ env-notes: "Local development. Run: pnpm dev in synap-app, synap-backend, synap-intelligence-service, synap-control-plane-api."
757
+ - profileSlug: repository
758
+ title: synap-app
759
+ properties:
760
+ repo-url: "https://github.com/synapsh/synap-app"
761
+ main-branch: main
762
+ ci-status: Unknown
763
+ ci-url: "https://github.com/synapsh/synap-app/actions"
764
+ language: TypeScript
765
+ package-manager: pnpm
766
+ monorepo: true
767
+ repo-notes: "Frontend monorepo. packages/core (@synap/capabilities, @synap/cell-runtime, @synap/cells), packages/features (channels, sidebar, bento), packages/views, packages/apps (fluid, billing, agent-os)."
768
+ - profileSlug: repository
769
+ title: synap-backend
770
+ properties:
771
+ repo-url: "https://github.com/synapsh/synap-backend"
772
+ main-branch: main
773
+ ci-status: Unknown
774
+ ci-url: "https://github.com/synapsh/synap-backend/actions"
775
+ language: TypeScript
776
+ package-manager: pnpm
777
+ monorepo: true
778
+ repo-notes: "Data Pod backend monorepo. Hono + tRPC + Drizzle + Better Auth. Hub Protocol (16 sub-routers)."
779
+ - profileSlug: repository
780
+ title: synap-control-plane-api
781
+ properties:
782
+ repo-url: "https://github.com/synapsh/synap-control-plane-api"
783
+ main-branch: main
784
+ ci-status: Unknown
785
+ ci-url: "https://github.com/synapsh/synap-control-plane-api/actions"
786
+ language: TypeScript
787
+ package-manager: pnpm
788
+ monorepo: false
789
+ repo-notes: "SaaS Control Plane. Hono REST + Better Auth + Stripe. Also contains workspace template JSON files."
790
+ - profileSlug: repository
791
+ title: synap-intelligence-service
792
+ properties:
793
+ repo-url: "https://github.com/synapsh/synap-intelligence-service"
794
+ main-branch: main
795
+ ci-status: Unknown
796
+ ci-url: "https://github.com/synapsh/synap-intelligence-service/actions"
797
+ language: TypeScript
798
+ package-manager: pnpm
799
+ monorepo: true
800
+ repo-notes: "Agent Hub monorepo (synap-agent-hub). OrchestratorAgent, PersonaAgent, tool registry, Hub Protocol client, compaction engine."
801
+ - profileSlug: repository
802
+ title: browser
803
+ properties:
804
+ repo-url: "https://github.com/synapsh/browser"
805
+ main-branch: main
806
+ ci-status: Unknown
807
+ ci-url: "https://github.com/synapsh/browser/actions"
808
+ language: TypeScript
809
+ package-manager: pnpm
810
+ monorepo: false
811
+ repo-notes: "Electron desktop shell. Native OS integration for Synap App."
812
+ - profileSlug: repository
813
+ title: monohub
814
+ properties:
815
+ repo-url: "https://github.com/synapsh/synap"
816
+ main-branch: main
817
+ ci-status: Unknown
818
+ ci-url: "https://github.com/synapsh/synap/actions"
819
+ language: TypeScript
820
+ package-manager: pnpm
821
+ monorepo: false
822
+ repo-notes: "Developer tooling CLI (monohub/ at workspace root). Terminal dashboard, capability scaffolding, MCP server, publish orchestration. .github/workflows/monohub.yml for monorepo CI."
823
+ - profileSlug: credential
824
+ title: Hetzner API Token
825
+ properties:
826
+ credential-type: api_key
827
+ service-name: Hetzner
828
+ vault-ref: hetzner-api-token
829
+ environment: production
830
+ notes: "Zone DNS Edit + server/volume permissions. Used by CP for pod provisioning."
831
+ - profileSlug: credential
832
+ title: Cloudflare API Token
833
+ properties:
834
+ credential-type: api_key
835
+ service-name: Cloudflare
836
+ vault-ref: cloudflare-api-token
837
+ environment: production
838
+ notes: "Zone DNS Edit permission for synap.live. Used by CP for DNS record management."
839
+ - profileSlug: credential
840
+ title: Namecheap API Key
841
+ properties:
842
+ credential-type: api_key
843
+ service-name: Namecheap
844
+ vault-ref: namecheap-api-key
845
+ environment: production
846
+ notes: "Requires NAMECHEAP_CLIENT_IP whitelist. Fallback DNS provider."
847
+ - profileSlug: credential
848
+ title: Stripe Secret Key
849
+ properties:
850
+ credential-type: api_key
851
+ service-name: Stripe
852
+ vault-ref: stripe-secret-key
853
+ environment: production
854
+ notes: "sk_live_* key for CP billing. Never expose client-side."
855
+ - profileSlug: credential
856
+ title: Stripe Webhook Secret
857
+ properties:
858
+ credential-type: api_key
859
+ service-name: Stripe
860
+ vault-ref: stripe-webhook-secret
861
+ environment: production
862
+ notes: "whsec_* for verifying Stripe webhook payloads in CP."
863
+ - profileSlug: credential
864
+ title: OpenRouter API Key
865
+ properties:
866
+ credential-type: api_key
867
+ service-name: OpenRouter
868
+ vault-ref: openrouter-api-key
869
+ environment: production
870
+ notes: "sk-or-v1-* key. Required by Agent Hub. Covers all LLM models."
871
+ - profileSlug: credential
872
+ title: Resend API Key
873
+ properties:
874
+ credential-type: api_key
875
+ service-name: Resend
876
+ vault-ref: resend-api-key
877
+ environment: production
878
+ notes: "re_* key. Used by CP for transactional emails. Also provisioned to pods."
879
+ - profileSlug: credential
880
+ title: GitHub Actions Token
881
+ properties:
882
+ credential-type: token
883
+ service-name: GitHub
884
+ vault-ref: github-actions-token
885
+ environment: production
886
+ notes: "PAT for CI/CD — ghcr.io image push, workflow triggers."
887
+ - profileSlug: credential
888
+ title: CP EC Private Key
889
+ properties:
890
+ credential-type: certificate
891
+ service-name: Control Plane API
892
+ vault-ref: cp-ec-private-key
893
+ environment: production
894
+ notes: "ES256 PKCS#8 private key. Signs provision JWTs. Pods verify via /well-known/jwks.json."
895
+ - profileSlug: credential
896
+ title: Hetzner SSH Key
897
+ properties:
898
+ credential-type: ssh_key
899
+ service-name: Hetzner
900
+ vault-ref: hetzner-ssh-key
901
+ environment: production
902
+ notes: "SSH key pair for pod server access via Hetzner."
903
+
904
+ suggestedRelations:
905
+ - { sourceRef: "service:Synap App", targetRef: "service:Synap Backend", type: depends_on }
906
+ - { sourceRef: "service:Synap App", targetRef: "service:Agent Hub", type: depends_on }
907
+ - { sourceRef: "service:Browser", targetRef: "service:Synap App", type: depends_on }
908
+ - { sourceRef: "service:Control Plane", targetRef: "service:Control Plane API", type: depends_on }
909
+ - { sourceRef: "service:Control Plane API", targetRef: "service:Synap Backend", type: depends_on }
910
+ - { sourceRef: "service:Synap Backend", targetRef: "service:Agent Hub", type: depends_on }
911
+ - { sourceRef: "service:Agent Hub", targetRef: "service:OpenClaw", type: depends_on }
912
+ - { sourceRef: "service:Agent Hub", targetRef: "service:Firecrawl", type: depends_on }
913
+ - { sourceRef: "service:Agent Hub", targetRef: "vendor:OpenRouter", type: uses }
914
+ - { sourceRef: "service:Control Plane API", targetRef: "vendor:Stripe", type: uses }
915
+ - { sourceRef: "service:Synap Backend", targetRef: "vendor:Hetzner", type: deployed_on }
916
+ - { sourceRef: "service:Agent Hub", targetRef: "vendor:Hetzner", type: deployed_on }
917
+ - { sourceRef: "service:Control Plane API", targetRef: "vendor:Resend", type: uses }
918
+ - { sourceRef: "service:Synap App", targetRef: "vendor:Vercel", type: deployed_on }
919
+ - { sourceRef: "service:Control Plane", targetRef: "vendor:Vercel", type: deployed_on }
920
+ - { sourceRef: "repository:synap-app", targetRef: "service:Synap App", type: powers }
921
+ - { sourceRef: "repository:synap-backend", targetRef: "service:Synap Backend", type: powers }
922
+ - { sourceRef: "repository:synap-control-plane-api", targetRef: "service:Control Plane API", type: powers }
923
+ - { sourceRef: "repository:synap-intelligence-service", targetRef: "service:Agent Hub", type: powers }
924
+ - { sourceRef: "repository:browser", targetRef: "service:Browser", type: powers }
925
+ - { sourceRef: "repository:monohub", targetRef: "service:MonoHub", type: powers }
926
+ - { sourceRef: "Hetzner", targetRef: "Hetzner API Token", type: references }
927
+ - { sourceRef: "Hetzner", targetRef: "Hetzner SSH Key", type: references }
928
+ - { sourceRef: "Cloudflare", targetRef: "Cloudflare API Token", type: references }
929
+ - { sourceRef: "Namecheap", targetRef: "Namecheap API Key", type: references }
930
+ - { sourceRef: "Stripe", targetRef: "Stripe Secret Key", type: references }
931
+ - { sourceRef: "Stripe", targetRef: "Stripe Webhook Secret", type: references }
932
+ - { sourceRef: "OpenRouter", targetRef: "OpenRouter API Key", type: references }
933
+ - { sourceRef: "Resend", targetRef: "Resend API Key", type: references }
934
+ - { sourceRef: "GitHub", targetRef: "GitHub Actions Token", type: references }
935
+ - { sourceRef: "Control Plane API", targetRef: "CP EC Private Key", type: references }
936
+
937
+ displayTemplates:
938
+ - name: Service Card
939
+ description: "Infrastructure service with health status, stack, and links"
940
+ entityType: service
941
+ targetType: entity
942
+ isDefault: true
943
+ config:
944
+ layout:
945
+ structure:
946
+ header:
947
+ enabled: true
948
+ slots: [health-status, service-type]
949
+ layout: horizontal
950
+ sidebar:
951
+ enabled: true
952
+ slots: [environment, port, deployment-branch, last-deploy]
953
+ position: right
954
+ width: "260px"
955
+ layout: vertical
956
+ content:
957
+ enabled: true
958
+ slots: [tech-stack, service-url, github-url, health-endpoint]
959
+ layout: vertical
960
+ fieldMapping:
961
+ health-status:
962
+ slot: health-status
963
+ renderer: { type: badge, size: md }
964
+ showLabel: false
965
+ order: 1
966
+ service-type:
967
+ slot: service-type
968
+ renderer: { type: badge, size: sm }
969
+ showLabel: false
970
+ order: 2
971
+ environment:
972
+ slot: environment
973
+ renderer: { type: badge, size: sm }
974
+ label: Environment
975
+ order: 3
976
+ port:
977
+ slot: port
978
+ renderer: { type: number }
979
+ label: Port
980
+ order: 4
981
+ deployment-branch:
982
+ slot: deployment-branch
983
+ renderer: { type: text }
984
+ label: Branch
985
+ order: 5
986
+ last-deploy:
987
+ slot: last-deploy
988
+ renderer: { type: date, format: relative }
989
+ label: Last Deploy
990
+ order: 6
991
+ tech-stack:
992
+ slot: tech-stack
993
+ renderer: { type: badge }
994
+ label: Tech Stack
995
+ order: 7
996
+ service-url:
997
+ slot: service-url
998
+ renderer: { type: link }
999
+ label: Service URL
1000
+ order: 8
1001
+ github-url:
1002
+ slot: github-url
1003
+ renderer: { type: link }
1004
+ label: GitHub
1005
+ order: 9
1006
+ health-endpoint:
1007
+ slot: health-endpoint
1008
+ renderer: { type: link }
1009
+ label: Health Check
1010
+ order: 10
1011
+ colors:
1012
+ accent: "#3B82F6"
1013
+ styling:
1014
+ borderRadius: "10px"
1015
+
1016
+ - name: Vendor Card
1017
+ description: "External vendor with pricing, status, and admin links"
1018
+ entityType: vendor
1019
+ targetType: entity
1020
+ isDefault: true
1021
+ config:
1022
+ layout:
1023
+ structure:
1024
+ header:
1025
+ enabled: true
1026
+ slots: [vendor-status, vendor-type]
1027
+ layout: horizontal
1028
+ sidebar:
1029
+ enabled: true
1030
+ slots: [pricing-model, monthly-cost]
1031
+ position: right
1032
+ width: "240px"
1033
+ layout: vertical
1034
+ content:
1035
+ enabled: true
1036
+ slots: [vendor-url, admin-url, docs-url, status-page-url]
1037
+ layout: vertical
1038
+ fieldMapping:
1039
+ vendor-status:
1040
+ slot: vendor-status
1041
+ renderer: { type: badge, size: md }
1042
+ showLabel: false
1043
+ order: 1
1044
+ vendor-type:
1045
+ slot: vendor-type
1046
+ renderer: { type: badge, size: sm }
1047
+ showLabel: false
1048
+ order: 2
1049
+ pricing-model:
1050
+ slot: pricing-model
1051
+ renderer: { type: badge, size: sm }
1052
+ label: Pricing
1053
+ order: 3
1054
+ monthly-cost:
1055
+ slot: monthly-cost
1056
+ renderer: { type: number, format: currency }
1057
+ label: Monthly Cost
1058
+ order: 4
1059
+ vendor-url:
1060
+ slot: vendor-url
1061
+ renderer: { type: link }
1062
+ label: Website
1063
+ order: 5
1064
+ admin-url:
1065
+ slot: admin-url
1066
+ renderer: { type: link }
1067
+ label: Admin Console
1068
+ order: 6
1069
+ docs-url:
1070
+ slot: docs-url
1071
+ renderer: { type: link }
1072
+ label: Documentation
1073
+ order: 7
1074
+ status-page-url:
1075
+ slot: status-page-url
1076
+ renderer: { type: link }
1077
+ label: Status Page
1078
+ order: 8
1079
+ colors:
1080
+ accent: "#8B5CF6"
1081
+ styling:
1082
+ borderRadius: "10px"
1083
+
1084
+ - name: Environment Card
1085
+ description: "Deployment environment with status and branch info"
1086
+ entityType: environment
1087
+ targetType: entity
1088
+ isDefault: true
1089
+ config:
1090
+ layout:
1091
+ structure:
1092
+ header:
1093
+ enabled: true
1094
+ slots: [env-status, env-type]
1095
+ layout: horizontal
1096
+ sidebar:
1097
+ enabled: true
1098
+ slots: [branch, last-deploy]
1099
+ position: right
1100
+ width: "240px"
1101
+ layout: vertical
1102
+ content:
1103
+ enabled: true
1104
+ slots: [env-url]
1105
+ layout: vertical
1106
+ fieldMapping:
1107
+ env-status:
1108
+ slot: env-status
1109
+ renderer: { type: badge, size: md }
1110
+ showLabel: false
1111
+ order: 1
1112
+ env-type:
1113
+ slot: env-type
1114
+ renderer: { type: badge, size: sm }
1115
+ showLabel: false
1116
+ order: 2
1117
+ branch:
1118
+ slot: branch
1119
+ renderer: { type: text }
1120
+ label: Branch
1121
+ order: 3
1122
+ last-deploy:
1123
+ slot: last-deploy
1124
+ renderer: { type: date, format: relative }
1125
+ label: Last Deploy
1126
+ order: 4
1127
+ env-url:
1128
+ slot: env-url
1129
+ renderer: { type: link }
1130
+ label: URL
1131
+ order: 5
1132
+ colors:
1133
+ accent: "#10B981"
1134
+ styling:
1135
+ borderRadius: "10px"
1136
+
1137
+ - name: Repository Card
1138
+ description: "Git repository with CI status and branch info"
1139
+ entityType: repository
1140
+ targetType: entity
1141
+ isDefault: true
1142
+ config:
1143
+ layout:
1144
+ structure:
1145
+ header:
1146
+ enabled: true
1147
+ slots: [ci-status, language]
1148
+ layout: horizontal
1149
+ sidebar:
1150
+ enabled: true
1151
+ slots: [main-branch, package-manager, monorepo]
1152
+ position: right
1153
+ width: "240px"
1154
+ layout: vertical
1155
+ content:
1156
+ enabled: true
1157
+ slots: [repo-url, ci-url]
1158
+ layout: vertical
1159
+ fieldMapping:
1160
+ ci-status:
1161
+ slot: ci-status
1162
+ renderer: { type: badge, size: md }
1163
+ showLabel: false
1164
+ order: 1
1165
+ language:
1166
+ slot: language
1167
+ renderer: { type: badge, size: sm }
1168
+ showLabel: false
1169
+ order: 2
1170
+ main-branch:
1171
+ slot: main-branch
1172
+ renderer: { type: text }
1173
+ label: Main Branch
1174
+ order: 3
1175
+ package-manager:
1176
+ slot: package-manager
1177
+ renderer: { type: badge, size: sm }
1178
+ label: Package Manager
1179
+ order: 4
1180
+ monorepo:
1181
+ slot: monorepo
1182
+ renderer: { type: checkbox }
1183
+ label: Monorepo
1184
+ order: 5
1185
+ repo-url:
1186
+ slot: repo-url
1187
+ renderer: { type: link }
1188
+ label: Repository
1189
+ order: 6
1190
+ ci-url:
1191
+ slot: ci-url
1192
+ renderer: { type: link }
1193
+ label: CI Dashboard
1194
+ order: 7
1195
+ colors:
1196
+ accent: "#F97316"
1197
+ styling:
1198
+ borderRadius: "10px"
1199
+
1200
+ # Top-level workspace dashboard (from bentoLayout + bentoViewBlocks union)
1201
+ bento:
1202
+ blocks:
1203
+ - kind: widget
1204
+ widgetType: welcome-header
1205
+ pos: { x: 0, y: 0, w: 12, h: 2 }
1206
+ config: {}
1207
+ - kind: widget
1208
+ widgetType: entity-count
1209
+ pos: { x: 0, y: 2, w: 3, h: 2 }
1210
+ config:
1211
+ profileSlug: service
1212
+ label: Services
1213
+ - kind: widget
1214
+ widgetType: entity-count
1215
+ pos: { x: 3, y: 2, w: 3, h: 2 }
1216
+ config:
1217
+ profileSlug: vendor
1218
+ label: Vendors
1219
+ - kind: widget
1220
+ widgetType: entity-count
1221
+ pos: { x: 6, y: 2, w: 3, h: 2 }
1222
+ config:
1223
+ profileSlug: service
1224
+ label: Healthy
1225
+ filter:
1226
+ health-status: Healthy
1227
+ - kind: widget
1228
+ widgetType: entity-count
1229
+ pos: { x: 9, y: 2, w: 3, h: 2 }
1230
+ config:
1231
+ profileSlug: environment
1232
+ label: Environments
1233
+ - kind: widget
1234
+ widgetType: dev-service-health
1235
+ pos: { x: 0, y: 4, w: 3, h: 3 }
1236
+ config: {}
1237
+ - kind: widget
1238
+ widgetType: dev-cost-summary
1239
+ pos: { x: 3, y: 4, w: 3, h: 3 }
1240
+ config: {}
1241
+ - kind: widget
1242
+ widgetType: dev-quick-links
1243
+ pos: { x: 6, y: 4, w: 6, h: 3 }
1244
+ config:
1245
+ title: Quick Links
1246
+ links:
1247
+ - { label: GitHub, url: "https://github.com/synapsh", color: "#24292E" }
1248
+ - { label: Hetzner Console, url: "https://console.hetzner.cloud", color: "#D50C2D" }
1249
+ - { label: Vercel Dashboard, url: "https://vercel.com/dashboard", color: "#000000" }
1250
+ - { label: Ory Console, url: "https://console.ory.sh", color: "#5528FF" }
1251
+ - { label: Cloudflare, url: "https://dash.cloudflare.com", color: "#F38020" }
1252
+ - { label: OpenRouter, url: "https://openrouter.ai/dashboard", color: "#6366F1" }
1253
+ - kind: widget
1254
+ widgetType: entity-list
1255
+ pos: { x: 0, y: 7, w: 6, h: 5 }
1256
+ config:
1257
+ profileSlug: service
1258
+ title: All Services
1259
+ limit: 10
1260
+ - kind: widget
1261
+ widgetType: entity-list
1262
+ pos: { x: 6, y: 7, w: 3, h: 5 }
1263
+ config:
1264
+ profileSlug: vendor
1265
+ title: Vendors
1266
+ limit: 8
1267
+ - kind: widget
1268
+ widgetType: feed
1269
+ pos: { x: 9, y: 7, w: 3, h: 5 }
1270
+ config: {}
1271
+ - kind: view
1272
+ viewName: Deploy Timeline
1273
+ pos: { x: 0, y: 12, w: 12, h: 4 }
1274
+ - kind: view
1275
+ viewName: Vendor Costs
1276
+ pos: { x: 0, y: 16, w: 6, h: 4 }
1277
+ - kind: view
1278
+ viewName: Service Health
1279
+ pos: { x: 6, y: 16, w: 6, h: 4 }
1280
+
1281
+ onboarding:
1282
+ goal: "Capture the user's infrastructure surface — the services they run, the repositories behind them, their environments, the vendors they depend on, and their credentials inventory — so the command center reflects their real stack."
1283
+ framing: "Act as a staff platform engineer doing an infra walkthrough. Tease out what's running in production, where the code lives, how environments are laid out, which third parties they depend on, and what secrets need tracking. Translate that into services, repositories, environments, vendors, and credentials."
1284
+ collect:
1285
+ - profileSlug: service
1286
+ what: "The services / apps they run and their stack"
1287
+ cardinality: several
1288
+ keyFields: [title, service-type, service-url, tech-stack]
1289
+ - profileSlug: repository
1290
+ what: "The repositories behind those services"
1291
+ cardinality: several
1292
+ keyFields: [title, repo-url, main-branch, language]
1293
+ - profileSlug: environment
1294
+ what: "Their deployment environments (prod, staging, etc.)"
1295
+ cardinality: few
1296
+ keyFields: [title, env-type, env-url, branch]
1297
+ - profileSlug: vendor
1298
+ what: "The third-party vendors / SaaS they depend on and their cost"
1299
+ cardinality: several
1300
+ keyFields: [title, vendor-type, monthly-cost, vendor-url]
1301
+ - profileSlug: credential
1302
+ what: "The credentials / secrets that need tracking and rotation"
1303
+ cardinality: few
1304
+ keyFields: [title, credential-type, service-name, expires-at]
1305
+ openingQuestions:
1306
+ - "What services are running in production right now, and what's each built on?"
1307
+ - "Where does the code live, and how are your environments laid out?"
1308
+ - "Which vendors do you depend on, and what credentials need tracking?"
1309
+ doneWhen: "Their running services and repositories exist, environments are mapped, key vendors are captured with cost, and the credentials inventory is started."