@synap-core/workspace-templates 0.2.2 → 0.4.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/hr.yaml ADDED
@@ -0,0 +1,474 @@
1
+ # HR workspace template
2
+ # The PEOPLE operating system for a company — the team, hiring, performance, and
3
+ # policies in one lens. Displayed as "People". Consumes the Foundation `strategy`
4
+ # domain so hiring, reviews, and onboarding stay anchored to the company's real
5
+ # values (culture), not a generic template.
6
+
7
+ meta:
8
+ slug: hr
9
+ name: HR
10
+ description: The people operating system — team, hiring, performance reviews, and policies in one place.
11
+ icon: users-round
12
+ color: "#E8663D"
13
+ tags: [hr, people, hiring, team]
14
+ isPublic: true
15
+
16
+ workspace:
17
+ name: People
18
+ description: The company's people operating system — the team, open roles and hiring pipeline, performance cycles, onboarding plans, and people policies.
19
+ proposalId: hr-v1
20
+ subtype: hr
21
+ visibility: members
22
+ workspaceType: operational
23
+ capabilities:
24
+ - hr.team
25
+ - hr.hiring
26
+ - hr.reviews
27
+ # HR provides the people domain to the rest of the pod, and CONSUMES the
28
+ # Foundation `strategy` domain — its values become the culture that anchors
29
+ # hiring bars, review rubrics, and onboarding.
30
+ sourceRoles:
31
+ hr: provider
32
+ strategy: consumer
33
+
34
+ profiles:
35
+ - slug: team-member
36
+ displayName: Team Member
37
+ icon: user-round
38
+ color: indigo
39
+ description: "A person on the team — the core people record."
40
+ properties:
41
+ - slug: role-title
42
+ label: Role
43
+ valueType: string
44
+ inputType: text
45
+ placeholder: e.g. Senior Product Designer
46
+ - slug: status
47
+ label: Status
48
+ valueType: string
49
+ inputType: select
50
+ enumValues: [active, onboarding, on-leave, offboarding, alumni]
51
+ constraints: { defaultValue: active }
52
+ - slug: department
53
+ label: Department
54
+ valueType: string
55
+ inputType: select
56
+ enumValues: [Engineering, Product, Design, Sales, Marketing, Operations, People, Finance, Other]
57
+ - slug: employment-type
58
+ label: Employment Type
59
+ valueType: string
60
+ inputType: select
61
+ enumValues: [full-time, part-time, contractor, intern]
62
+ constraints: { defaultValue: full-time }
63
+ - slug: start-date
64
+ label: Start Date
65
+ valueType: date
66
+ inputType: date
67
+ - slug: email
68
+ label: Email
69
+ valueType: string
70
+ inputType: text
71
+ placeholder: name@company.com
72
+ constraints: { format: email }
73
+ - slug: location
74
+ label: Location
75
+ valueType: string
76
+ inputType: text
77
+ placeholder: City, Country
78
+
79
+ - slug: role
80
+ displayName: Role
81
+ icon: briefcase
82
+ color: amber
83
+ description: "A position — open req or filled seat — with its job spec."
84
+ properties:
85
+ - slug: status
86
+ label: Status
87
+ valueType: string
88
+ inputType: select
89
+ enumValues: [draft, open, interviewing, offer-out, filled, on-hold, closed]
90
+ constraints: { defaultValue: open }
91
+ - slug: department
92
+ label: Department
93
+ valueType: string
94
+ inputType: select
95
+ enumValues: [Engineering, Product, Design, Sales, Marketing, Operations, People, Finance, Other]
96
+ - slug: seniority
97
+ label: Seniority
98
+ valueType: string
99
+ inputType: select
100
+ enumValues: [junior, mid, senior, staff, lead, manager, director]
101
+ - slug: employment-type
102
+ label: Employment Type
103
+ valueType: string
104
+ inputType: select
105
+ enumValues: [full-time, part-time, contractor, intern]
106
+ constraints: { defaultValue: full-time }
107
+ - slug: hiring-manager
108
+ label: Hiring Manager
109
+ valueType: string
110
+ inputType: text
111
+ - slug: target-start
112
+ label: Target Start
113
+ valueType: date
114
+ inputType: date
115
+ - slug: job-spec
116
+ label: Job Spec
117
+ valueType: string
118
+ inputType: textarea
119
+ placeholder: Mission, responsibilities, must-haves, hiring bar...
120
+
121
+ - slug: candidate
122
+ displayName: Candidate
123
+ icon: user-plus
124
+ color: cyan
125
+ description: "A person moving through the hiring pipeline for a role."
126
+ properties:
127
+ - slug: stage
128
+ label: Stage
129
+ valueType: string
130
+ inputType: select
131
+ enumValues: [applied, screening, interview, offer, hired, rejected, withdrawn]
132
+ constraints: { defaultValue: applied }
133
+ - slug: source
134
+ label: Source
135
+ valueType: string
136
+ inputType: select
137
+ enumValues: [referral, inbound, outbound, agency, event, other]
138
+ - slug: email
139
+ label: Email
140
+ valueType: string
141
+ inputType: text
142
+ placeholder: name@email.com
143
+ constraints: { format: email }
144
+ - slug: phone
145
+ label: Phone
146
+ valueType: string
147
+ inputType: text
148
+ - slug: resume-url
149
+ label: Resume
150
+ valueType: string
151
+ inputType: url
152
+ - slug: rating
153
+ label: Rating
154
+ valueType: number
155
+ inputType: number
156
+ constraints: { min: 0, max: 5 }
157
+ - slug: notes
158
+ label: Notes
159
+ valueType: string
160
+ inputType: textarea
161
+
162
+ - slug: review
163
+ displayName: Review
164
+ icon: clipboard-check
165
+ color: violet
166
+ description: "A performance review within a company review cycle."
167
+ properties:
168
+ - slug: cycle
169
+ label: Cycle
170
+ valueType: string
171
+ inputType: text
172
+ placeholder: e.g. H1 2026
173
+ - slug: status
174
+ label: Status
175
+ valueType: string
176
+ inputType: select
177
+ enumValues: [not-started, self-review, manager-review, calibration, shared, complete]
178
+ constraints: { defaultValue: not-started }
179
+ - slug: rating
180
+ label: Rating
181
+ valueType: string
182
+ inputType: select
183
+ enumValues: [exceeds, meets, developing, below]
184
+ - slug: reviewer
185
+ label: Reviewer
186
+ valueType: string
187
+ inputType: text
188
+ - slug: summary
189
+ label: Summary
190
+ valueType: string
191
+ inputType: textarea
192
+
193
+ - slug: policy
194
+ displayName: Policy
195
+ icon: scroll-text
196
+ color: slate
197
+ description: "A people policy or handbook section."
198
+ properties:
199
+ - slug: category
200
+ label: Category
201
+ valueType: string
202
+ inputType: select
203
+ enumValues: [leave, benefits, conduct, remote-work, expenses, security, compensation, other]
204
+ - slug: status
205
+ label: Status
206
+ valueType: string
207
+ inputType: select
208
+ enumValues: [draft, active, under-review, archived]
209
+ constraints: { defaultValue: active }
210
+ - slug: owner
211
+ label: Owner
212
+ valueType: string
213
+ inputType: text
214
+ - slug: effective-date
215
+ label: Effective Date
216
+ valueType: date
217
+ inputType: date
218
+ - slug: summary
219
+ label: Summary
220
+ valueType: string
221
+ inputType: textarea
222
+
223
+ - slug: onboarding-plan
224
+ displayName: Onboarding Plan
225
+ icon: rocket
226
+ color: green
227
+ description: "A new hire's first-weeks plan, buddy, and checklist."
228
+ properties:
229
+ - slug: status
230
+ label: Status
231
+ valueType: string
232
+ inputType: select
233
+ enumValues: [not-started, in-progress, complete]
234
+ constraints: { defaultValue: not-started }
235
+ - slug: start-date
236
+ label: Start Date
237
+ valueType: date
238
+ inputType: date
239
+ - slug: buddy
240
+ label: Buddy
241
+ valueType: string
242
+ inputType: text
243
+ - slug: checklist
244
+ label: Checklist
245
+ valueType: string
246
+ inputType: textarea
247
+ placeholder: Accounts, intro meetings, first task, 30/60/90 goals...
248
+
249
+ views:
250
+ - name: Team
251
+ slug: team
252
+ type: table
253
+ scopeProfileSlug: team-member
254
+ defaultView: true
255
+ description: Everyone on the team, by role and status.
256
+ config:
257
+ columns: [title, role-title, department, status, employment-type, start-date, location]
258
+ - name: Hiring Pipeline
259
+ slug: hiring-pipeline
260
+ type: kanban
261
+ scopeProfileSlug: candidate
262
+ groupBy: stage
263
+ description: Candidates moving through the pipeline, by stage.
264
+ config:
265
+ groupBy: stage
266
+ cardFields: [source, rating, email]
267
+ - name: Open Roles
268
+ slug: open-roles
269
+ type: table
270
+ scopeProfileSlug: role
271
+ description: Positions and their hiring status.
272
+ config:
273
+ columns: [title, status, department, seniority, hiring-manager, target-start]
274
+ - name: Reviews
275
+ slug: reviews
276
+ type: kanban
277
+ scopeProfileSlug: review
278
+ groupBy: status
279
+ description: Performance reviews across the cycle, by status.
280
+ config:
281
+ groupBy: status
282
+ cardFields: [cycle, rating, reviewer]
283
+ - name: Policies
284
+ slug: policies
285
+ type: table
286
+ scopeProfileSlug: policy
287
+ description: People policies and handbook sections.
288
+ config:
289
+ columns: [title, category, status, owner, effective-date]
290
+ - name: Onboarding
291
+ slug: onboarding
292
+ type: table
293
+ scopeProfileSlug: onboarding-plan
294
+ description: New hire onboarding plans and progress.
295
+ config:
296
+ columns: [title, status, start-date, buddy]
297
+
298
+ # Schema-level relations — give the relation picker domain links from day one.
299
+ entityLinks:
300
+ - sourceProfileSlug: candidate
301
+ targetProfileSlug: role
302
+ type: applying_for
303
+ label: Applying for
304
+ - sourceProfileSlug: review
305
+ targetProfileSlug: team-member
306
+ type: reviews
307
+ label: Reviews
308
+ - sourceProfileSlug: onboarding-plan
309
+ targetProfileSlug: team-member
310
+ type: for
311
+ label: For
312
+ - sourceProfileSlug: team-member
313
+ targetProfileSlug: role
314
+ type: fills
315
+ label: Fills
316
+ - sourceProfileSlug: team-member
317
+ targetProfileSlug: team-member
318
+ type: reports_to
319
+ label: Reports to
320
+
321
+ onboarding:
322
+ goal: Capture the real shape of the company's people — who's on the team, what roles are open, who's in the pipeline, and how performance is reviewed — so the People workspace reflects the actual org, not a template.
323
+ framing: >
324
+ THE HEAD OF PEOPLE: Act as a sharp, warm head of people/talent. You care about
325
+ two things at once — the humans and the operating system around them. Draw out
326
+ the real org: who does what, what you're hiring for and why, how candidates move,
327
+ and how you run performance. Anchor everything to the company's culture — pull the
328
+ Foundation values and reflect them back as the hiring bar and review rubric.
329
+ Be direct about gaps (no owner on a policy, a role open with no hiring manager),
330
+ but never clinical — these are people.
331
+ expertise:
332
+ starters:
333
+ - >
334
+ Don't ask for a hiring wishlist — propose the first roles by what unblocks
335
+ the FOUNDER. Whatever the founder is the bottleneck on (sales they can't
336
+ scale, product they can't ship fast enough, ops eating their week) is the
337
+ next hire. Reflect their week back and name the role that buys their time
338
+ back, rather than filling an org chart.
339
+ - >
340
+ Hire for the next 12 months, not the dream team. Propose the role at the
341
+ seniority the company needs NOW — often a scrappy generalist over a
342
+ specialist VP who'll be bored and expensive. Push back on premature senior
343
+ hires the stage can't feed with real scope.
344
+ - >
345
+ Anchor the hiring bar and review rubric to the company's actual values
346
+ (pull them from Foundation), not generic competencies. Propose 3–4 concrete
347
+ "must be true" signals per role derived from those values, so "a great hire"
348
+ means something specific here rather than "smart and nice".
349
+ blindSpots:
350
+ - >
351
+ Culture is not perks — it's what you REWARD and what you TOLERATE. Founders
352
+ describe culture as ping-pong and free lunch; the real culture is who gets
353
+ promoted and what bad behavior goes unchecked. If they answer "culture" with
354
+ benefits, redirect to: what do you celebrate, and what do you refuse to
355
+ put up with?
356
+ - >
357
+ Onboarding and role clarity beat headcount. A team that doesn't know who owns
358
+ what will thrash no matter how many people you add. Before proposing new
359
+ hires, check that existing roles have clear ownership and every new hire has a
360
+ 30/60/90 plan — hiring into ambiguity just scales the confusion.
361
+ - >
362
+ An open role with no hiring manager, or a policy with no owner, is a gap
363
+ hiding in plain sight. Surface these directly: unowned reqs stall for months
364
+ and unowned policies get ignored. Every role needs a decision-maker; every
365
+ policy needs someone accountable for it.
366
+ bar: >
367
+ The org is honest — real people with clear ownership and no orphaned roles or
368
+ policies — the open roles map to what actually unblocks the founder at the right
369
+ seniority for the stage, "a great hire" is defined by concrete signals tied to
370
+ the company's real values, and every new hire lands into role clarity and a
371
+ 30/60/90 plan rather than ambiguity.
372
+ collect:
373
+ - profileSlug: team-member
374
+ what: The people currently on the team, with their role, department, and status.
375
+ cardinality: several
376
+ keyFields: [role-title, department, status]
377
+ - profileSlug: role
378
+ what: The positions you're hiring for right now — open reqs with their hiring bar.
379
+ cardinality: few
380
+ keyFields: [status, department, seniority]
381
+ - profileSlug: candidate
382
+ what: Active candidates worth tracking now, and where they are in the pipeline.
383
+ cardinality: few
384
+ keyFields: [stage, source]
385
+ - profileSlug: review
386
+ what: The current review cycle and how you run performance (cadence + rubric).
387
+ cardinality: one
388
+ keyFields: [cycle, status]
389
+ openingQuestions:
390
+ - "Who's on the team today — walk me through the people and what they own."
391
+ - "What are you hiring for right now, and what does 'a great hire' look like here?"
392
+ - "How do you run performance — what's your review cadence, and what does it reward?"
393
+ doneWhen: The core team exists with roles and status, at least one open role with its hiring bar is captured, and a review cycle is defined — ideally with its rubric tied to the Foundation values.
394
+
395
+ app:
396
+ kind: stored
397
+ cellKey: entity-detail
398
+
399
+ layout:
400
+ defaultView: Team
401
+ defaultApp: null
402
+ pinnedApps: [dashboard, data, intelligence]
403
+ sidebarItems:
404
+ - kind: view
405
+ viewName: Team
406
+ label: Team
407
+ icon: users-round
408
+ - kind: view
409
+ viewName: Hiring Pipeline
410
+ label: Hiring Pipeline
411
+ icon: user-plus
412
+ - kind: view
413
+ viewName: Open Roles
414
+ label: Open Roles
415
+ icon: briefcase
416
+ - kind: view
417
+ viewName: Reviews
418
+ label: Reviews
419
+ icon: clipboard-check
420
+ - kind: view
421
+ viewName: Onboarding
422
+ label: Onboarding
423
+ icon: rocket
424
+ - kind: view
425
+ viewName: Policies
426
+ label: Policies
427
+ icon: scroll-text
428
+ - kind: app
429
+ appId: data
430
+ label: All Data
431
+ icon: database
432
+
433
+ bento:
434
+ viewName: People Command Center
435
+ blocks:
436
+ - kind: widget
437
+ widgetType: welcome-header
438
+ pos: { x: 0, y: 0, w: 12, h: 2 }
439
+ - kind: widget
440
+ widgetType: entity-count
441
+ pos: { x: 0, y: 2, w: 3, h: 2 }
442
+ config:
443
+ profileSlug: team-member
444
+ label: Team
445
+ - kind: widget
446
+ widgetType: entity-count
447
+ pos: { x: 3, y: 2, w: 3, h: 2 }
448
+ config:
449
+ profileSlug: role
450
+ label: Open Roles
451
+ - kind: widget
452
+ widgetType: entity-count
453
+ pos: { x: 6, y: 2, w: 3, h: 2 }
454
+ config:
455
+ profileSlug: candidate
456
+ label: In Pipeline
457
+ - kind: widget
458
+ widgetType: entity-count
459
+ pos: { x: 9, y: 2, w: 3, h: 2 }
460
+ config:
461
+ profileSlug: review
462
+ label: Reviews
463
+ - kind: view
464
+ viewName: Hiring Pipeline
465
+ pos: { x: 0, y: 4, w: 8, h: 5 }
466
+ - kind: view
467
+ viewName: Open Roles
468
+ pos: { x: 8, y: 4, w: 4, h: 5 }
469
+ - kind: view
470
+ viewName: Team
471
+ pos: { x: 0, y: 9, w: 6, h: 4 }
472
+ - kind: view
473
+ viewName: Reviews
474
+ pos: { x: 6, y: 9, w: 6, h: 4 }