@pareto4/pp-core 1.7.0 → 1.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.
Files changed (48) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/bin/install.js +116 -0
  3. package/commands/pp-build-handoff.md +46 -0
  4. package/commands/pp-discovery-to-build.md +40 -0
  5. package/gemini-extension.json +1 -1
  6. package/package.json +2 -1
  7. package/pareto-skills/_shared/create-project-board.sh +195 -0
  8. package/pareto-skills/_shared/pp-claude-md-protocol.md +306 -0
  9. package/pareto-skills/_shared/sync-phase-status.sh +139 -0
  10. package/pareto-skills/pp-brand/SKILL.md +644 -0
  11. package/pareto-skills/pp-brand/assets/crew/ParetoAgent.inline.html +120 -0
  12. package/pareto-skills/pp-brand/assets/crew/ParetoAgent.tsx +239 -0
  13. package/pareto-skills/pp-brand/assets/crew/build.svg +11 -0
  14. package/pareto-skills/pp-brand/assets/crew/deploy.svg +11 -0
  15. package/pareto-skills/pp-brand/assets/crew/discovery.svg +11 -0
  16. package/pareto-skills/pp-brand/assets/crew/plan.svg +11 -0
  17. package/pareto-skills/pp-brand/assets/crew/run.svg +11 -0
  18. package/pareto-skills/pp-brand/assets/crew/validate.svg +11 -0
  19. package/pareto-skills/pp-brand/assets/pareto-brand-preview.html +547 -0
  20. package/pareto-skills/pp-obsidian-notes/SKILL.md +127 -0
  21. package/pareto-skills/pp-obsidian-notes/templates/CLAUDE.md +29 -0
  22. package/pareto-skills/pp-obsidian-notes/templates/client-context.md +116 -0
  23. package/pareto-skills/pp-obsidian-notes/templates/meeting-note.md +66 -0
  24. package/pareto-skills/pp-obsidian-notes/templates/pareto-context.md +102 -0
  25. package/pareto-skills/pp-obsidian-notes/templates/proposal.md +117 -0
  26. package/pareto-skills/pp-project-setup/SKILL.md +1364 -0
  27. package/pp-core/bin/lib/intel.cjs +1 -1
  28. package/pp-core/bin/lib/io.cjs +120 -0
  29. package/pp-core/bin/lib/profile-pipeline-command-router.cjs +1 -1
  30. package/pp-core/bin/lib/roadmap-parser.cjs +1 -1
  31. package/pp-core/bin/lib/runtime-artifact-conversion.cjs +2 -2
  32. package/pp-core/bin/lib/surface.cjs +1 -1
  33. package/pp-core/bin/lib/worktree-safety.cjs +2 -2
  34. package/pp-core/bin/pp-tools.cjs +23 -0
  35. package/pp-core/references/ui-brand.md +73 -11
  36. package/pp-core/templates/codebase/structure.md +5 -5
  37. package/pp-core/templates/spec.md +7 -7
  38. package/pp-core/workflows/add-backlog.md +1 -1
  39. package/pp-core/workflows/autonomous.md +4 -4
  40. package/pp-core/workflows/debug.md +1 -1
  41. package/pp-core/workflows/discovery-to-build.md +598 -0
  42. package/pp-core/workflows/execute-phase.md +9 -1
  43. package/pp-core/workflows/plan-phase.md +14 -12
  44. package/pp-core/workflows/pr-branch.md +5 -4
  45. package/pp-core/workflows/reapply-patches.md +1 -1
  46. package/pp-core/workflows/ship.md +1 -1
  47. package/pp-core/workflows/thread.md +1 -1
  48. package/pp-core/workflows/verify-work.md +6 -5
@@ -0,0 +1,644 @@
1
+ ---
2
+ name: pp-brand
3
+ description: Apply The Pareto Project brand to any deliverable. Use this skill whenever creating or reviewing content, presentations, documents, web artifacts, or application UX for Pareto. Trigger phrases include "make a presentation", "write a proposal", "create a page", "build a dashboard", "write copy", "make slides", "design a screen", "draft an email", "create a report", or any request to produce a client-facing or public deliverable for Pareto. Also triggers on "on-brand", "Pareto style", or requests to check/improve content for Pareto brand alignment. The brand includes the Pareto Crew — six animated AI-agent characters, one per delivery phase (Discovery, Plan, Build, Validate, Deploy, Run), used to communicate the 80/20 execution model.
4
+ ---
5
+
6
+ # The Pareto Project — Brand Skill
7
+
8
+ ## What this skill does
9
+
10
+ Ensures every Pareto deliverable — written, visual, or interactive — is consistent, credible, and on-brand. Covers three output modes and five formats. Includes the **Pareto Crew** — six animated agent characters, one per delivery phase, used to personify the 80/20 AI-execution model. The crew has **no character names** — the pipeline phase is the identity — and their **eyes track the cursor**.
11
+
12
+ **Visual references (ship alongside the skill):**
13
+ - `assets/pareto-brand-preview.html` — Full brand identity preview (colors, type, components, crew)
14
+ - `assets/crew/*.svg` — Static SVG exports of each phase agent
15
+ - `assets/crew/ParetoAgent.tsx` — Drop-in React component (Next.js / React 19)
16
+ - `assets/crew/ParetoAgent.inline.html` — Vanilla-HTML copy-paste snippet
17
+
18
+ ---
19
+
20
+ ## Output Modes
21
+
22
+ | Mode | Trigger | What to do |
23
+ |------|---------|-----------|
24
+ | **Generate** | "Create / write / build / make" | Load brand reference → apply format rules → produce output |
25
+ | **Check** | "Review / check / is this on-brand" | Score against brand dimensions → show what works / what to fix |
26
+ | **Improve** | "Fix / improve / rewrite" | Identify top issues → rewrite with before/after → explain changes |
27
+
28
+ ---
29
+
30
+ ## Pareto Brand Identity
31
+
32
+ ### Who is Pareto
33
+
34
+ The Pareto Project is an **AI-First software delivery company**. We redesigned the software development lifecycle so AI agents execute ~80% of the work and humans own the 20% that matters: defining the problem, validating the outcome, taking responsibility.
35
+
36
+ The brand is **technical, confident, optimistic**. Serious about craft, approachable in voice. Where 21south is clinical, Pareto is warmer — it has a cast of characters. Where most AI-tooling brands are abstract, Pareto is specific: every delivery phase has its own agent.
37
+
38
+ ### Brand Character
39
+
40
+ | Dimension | Pareto Optimum |
41
+ |-----------|----------------|
42
+ | Visual style | **Confident minimalism** — sharp right angles, generous whitespace, one bold accent |
43
+ | Tone | **Direct and human** — plain English, first-principles, no buzzwords |
44
+ | Complexity | **Technical** — we explain the mechanism, not just the benefit |
45
+ | Focus | **Outcome-first** — economics, speed, quality; receipts over promises |
46
+ | Mascot | **The Crew** — six agents, one per delivery phase, no names |
47
+
48
+ ### Core Design Principles
49
+
50
+ 1. **Pareto Blue is the signal** — one accent color does all interactive lifting. No rainbow palettes.
51
+ 2. **Right angles, not pillows** — 3–4px radius maximum. Cards, buttons, inputs share the same sharp edge.
52
+ 3. **Type is the design** — strong hierarchy with Inter + JetBrains Mono. No decorative shapes to prop up layouts.
53
+ 4. **Mono for metadata, sans for content** — JetBrains Mono labels, eyebrows, kickers, numbers. Inter for everything the reader reads.
54
+ 5. **The crew has roles, not just faces** — every agent owns one pipeline phase (no names — the phase is the identity). Don't use them decoratively.
55
+ 6. **Evidence over superlatives** — "build time: 1 month" beats "blazingly fast." Numbers first.
56
+
57
+ ---
58
+
59
+ ## Colors
60
+
61
+ ### Primary Colors
62
+
63
+ | Name | Hex | RGB | Use |
64
+ |------|-----|-----|-----|
65
+ | **Pareto Blue** | `#2251FF` | 34/81/255 | Primary brand, CTAs, active states, links, accents |
66
+ | **Pareto Blue Steel** | `#146FF4` | 20/111/244 | Hover states, secondary fills |
67
+ | **Night** | `#051C2C` | 5/28/44 | Dark sections, headings on light bg |
68
+ | **Ink** | `#0A1330` | 10/19/48 | Mascot face details (eyes, mouth) |
69
+ | **White** | `#ffffff` | 255/255/255 | Primary light surface |
70
+ | **Fog** | `#F5F7FA` | 245/247/250 | Alt surface, card bg on light |
71
+ | **Slate** | `#6B7A99` | 107/122/153 | Body text on light bg |
72
+ | **Border** | `#E0E5EE` | 224/229/238 | Hairlines, card edges |
73
+
74
+ ### Crew Accent Palette
75
+
76
+ Six accent colors — **one per phase agent**. Never use outside crew contexts. These are *phase identifiers*, not UI tokens. The crew has no character names — the pipeline phase is the identity.
77
+
78
+ | Agent | Mode | Body color | Antenna dot | Accessory |
79
+ |-------|------|------------|-------------|-----------|
80
+ | **Discovery** | Human-led | `#F6B437` Amber | `#2251FF` Pareto Blue | Magnifying glass |
81
+ | **Plan** | AI-led | `#146FF4` Steel | `#F6B437` Amber | Blueprint |
82
+ | **Build** | AI-led | `#2251FF` Pareto Blue | `#F6B437` Amber | Hard hat |
83
+ | **Validate** | Human-led | `#3ECF8E` Mint | `#F6B437` Amber | Checklist |
84
+ | **Deploy** | AI-led | `#FF6B4A` Coral | `#F6B437` Amber | Rocket |
85
+ | **Run** | AI-led | `#A884FF` Violet | `#F6B437` Amber | Gauge |
86
+
87
+ The **hero** agent (single-mascot / hero placements) is Pareto Blue with no phase accessory. Human-led phases (Discovery, Validate) carry blue mode labels; AI-led phases carry green (`#1D9E75`).
88
+
89
+ ### Semantic
90
+
91
+ | Name | Hex | Use |
92
+ |------|-----|-----|
93
+ | Success | `#00A878` | Confirmations, passing tests |
94
+ | Warning | `#F3A738` | Advisories |
95
+ | Error | `#E04E2F` | Destructive, failures |
96
+
97
+ **Rules:**
98
+ - Pareto Blue dominates. One accent across the entire interface.
99
+ - Crew accents appear **only** with crew mascots or agent-role labels. Never as generic UI chrome.
100
+ - Never combine more than one crew accent in the same card — that's a mascot lineup, not a palette.
101
+ - Gradients: avoid. If unavoidable, Pareto Blue → Night only.
102
+
103
+ ---
104
+
105
+ ## Typography
106
+
107
+ ### Fonts
108
+
109
+ - **Inter** (sans) — UI, body, headings. Weights 300 / 400 / 500 / 600 / 700 / 800.
110
+ - **JetBrains Mono** — eyebrows, labels, metadata, numerics, code. Weights 400 / 500.
111
+
112
+ Loaded via `next/font/google` in the Next.js site; exposed as `--font-sans` / `--font-mono`.
113
+
114
+ | Role | Font | Weight | Size | Use |
115
+ |------|------|--------|------|-----|
116
+ | Display / Hero | Inter | 800 | clamp(2rem, 3.8vw, 3.4rem) | Hero claim |
117
+ | H1 | Inter | 800 | 2.4rem | Page title |
118
+ | H2 | Inter | 700 | 1.8–2.4rem | Section title |
119
+ | H3 | Inter | 700 | 1.1rem | Card title |
120
+ | Body (P) | Inter | 400 | 1rem | Body copy |
121
+ | Caption | Inter | 400 | 0.84rem | Descriptions |
122
+ | Eyebrow / Kicker | JetBrains Mono | 400–500 | 0.75rem, 0.18em tracking, uppercase | Section markers |
123
+ | Label / Tag | JetBrains Mono | 500 | 0.7rem, 0.14em tracking, uppercase | Status, metadata |
124
+ | Numeric | Inter | 800 | 2rem | Stat values |
125
+
126
+ **Settings:**
127
+ - Letter-spacing on headings: `-0.025em` (display), `-0.02em` (h2), `-0.01em` (h3).
128
+ - Line-height: 1.08 (display), 1.1 (h2), 1.25 (h3), 1.65 (body).
129
+ - Heading color on light: `#051C2C`. Body on light: `#6B7A99`.
130
+ - Heading color on dark: `#ffffff`. Body on dark: `rgba(255,255,255,0.55)`.
131
+
132
+ ---
133
+
134
+ ## Voice & Tone
135
+
136
+ ### Character
137
+
138
+ Pareto communicates in **English** (Dutch for NL-market materials on request). Direct, first-principles, human. We explain mechanisms, not just benefits.
139
+
140
+ ### Six principles
141
+
142
+ 1. **First-principles** — Explain *why*, not just *what*. "We redesigned the SDLC because AI changed the economics" beats "leverage AI synergies."
143
+ 2. **Specific > abstract** — "Build time: 1 month vs 5 months" beats "faster delivery."
144
+ 3. **Plain English** — No jargon unless earned. If a smart 15-year-old wouldn't follow, rewrite.
145
+ 4. **Confident, not grandiose** — Affirmative verbs, no superlatives. "Pareto delivers" not "Pareto is the leading AI-first platform."
146
+ 5. **Evidence over promise** — Benchmarks, numbers, before/after. Show the receipts.
147
+ 6. **Own the trade-offs** — If something is hard, say so. Humans own the 20% *because* AI can't be trusted with it. That's the model, not a caveat.
148
+
149
+ ### Writing Rules
150
+
151
+ | Do | Don't |
152
+ |----|-------|
153
+ | Active voice | Passive constructions |
154
+ | Specific numbers | Vague quantities ("many", "fast") |
155
+ | Short declarative sentences | Nested clauses |
156
+ | Em-dashes for aside clauses | Parentheses for everything |
157
+ | Name the phase agent ("the Build agent ships code") | Anthropomorphize generically ("the AI") |
158
+ | Em-dash `—` (U+2014) | Hyphen `-` for ranges / asides |
159
+
160
+ ### Vocabulary
161
+
162
+ **Use:** AI-first, delivery, specification, discovery, agent, pipeline, execute, validate, ship, benchmark, craft, manifest, 80/20.
163
+
164
+ **Avoid:** synergy, leverage, revolutionary, game-changer, best-in-class, robust, seamless, cutting-edge.
165
+
166
+ ### The Crew — usage rules
167
+
168
+ - The crew has **no character names** — refer to each agent by its phase: "the Discovery agent", "the Build agent".
169
+ - Agents *do* things. "The Validate agent gates every increment." Not "Validate represents quality."
170
+ - Introduce by phase + what it owns: "the Deploy agent — automated, reversible releases."
171
+ - When referring to the group: "the Pareto Crew", "the six agents", or "our agents."
172
+ - Never use more than 2 agents in a single paragraph. Rotate.
173
+
174
+ ---
175
+
176
+ ## The Pareto Crew — mascot system
177
+
178
+ ### Anatomy
179
+
180
+ Every agent is built from the same 140×140 viewBox:
181
+
182
+ - **Body** — rounded rectangle, 28px corner radius, body color fill
183
+ - **Antenna** — 4px stroke line + 5px radius dot above the head
184
+ - **Eyes** — white circles (r=8) with a dark pupil (r=4, `#0A1330`) that **track the cursor** (rAF-throttled; pupils clamp inside the white; disabled under reduced-motion). At rest, offset slightly down-right.
185
+ - **Smile** — quadratic curve, 3px stroke `#0A1330`
186
+ - **Accessory** — phase-specific element: magnifying glass (Discovery), blueprint (Plan), hard hat (Build), checklist (Validate), rocket (Deploy), gauge (Run)
187
+
188
+ ### Animation timings (idle)
189
+
190
+ | Element | Keyframes | Duration |
191
+ |---------|-----------|----------|
192
+ | Body | bob ±4px | 3.4s ease-in-out |
193
+ | Antenna dot | pulse + opacity | 2.2s ease-in-out |
194
+ | Eyes | blink (scaleY 1 → 0.1) | 5s ease-in-out |
195
+ | Smile | stretch 1.08× | 4s ease-in-out |
196
+ | Role accessory | stage-specific micro-motion | 1.8–3.6s |
197
+
198
+ When a row of agents appears, **stagger `animation-delay` by 0.3s per agent** (six agents) so they don't sync.
199
+
200
+ Beyond idle motion, the **pupils track the cursor in real time** (interactive, rAF-throttled) — a separate behaviour from the idle blink.
201
+
202
+ Respect `prefers-reduced-motion: reduce` — kill all agent animations **and** the eye-tracking when set.
203
+
204
+ ### Sizing rules
205
+
206
+ | Context | Size |
207
+ |---------|-----:|
208
+ | Hero mascot (single hero agent) | 240–320px |
209
+ | Crew row on landing page | 100–140px |
210
+ | Product companion (peeking) | 60–80px |
211
+ | Agent card (role explainer) | 96–120px |
212
+ | Inline in paragraph | 24–32px |
213
+ | Favicon-scale | Use flat variant, no face |
214
+
215
+ **Rule:** never render below 24px with a face. Below that, drop to the body silhouette + antenna.
216
+
217
+ ### When to use which agent
218
+
219
+ Match the agent to the pipeline phase the content is about:
220
+
221
+ - **Discovery** (Human-led, amber) — research, scoping, problem definition, stakeholder work.
222
+ - **Plan** (AI-led, steel) — backlog, increments, sequencing, dependency mapping.
223
+ - **Build** (AI-led, Pareto Blue) — "we build" contexts, code, the default/hero agent. The face of Pareto.
224
+ - **Validate** (Human-led, mint) — quality, security, testing, sign-off, governance.
225
+ - **Deploy** (AI-led, coral) — release, go-live, launch, deployment notes.
226
+ - **Run** (AI-led, violet) — monitoring, ops, cost, reliability, knowledge base.
227
+
228
+ ### Don'ts
229
+
230
+ - Don't place the Pareto wordmark on the chest — the agent *is* the brand.
231
+ - Don't give the agents character names — they're identified by their phase.
232
+ - Don't recolor agents — body colors are fixed (one per phase).
233
+ - Don't draw new agents or new accessories without a design review.
234
+ - Don't use the crew as pure decoration. Each appearance should earn its phase.
235
+
236
+ ---
237
+
238
+ ## Format Rules
239
+
240
+ ### 1. VOICE & WRITTEN COPY
241
+
242
+ **Structure:**
243
+ 1. What changed (the market, the tech, the economics)
244
+ 2. What we built in response
245
+ 3. What the reader gets
246
+
247
+ **Content types:**
248
+ - **Proposals:** Situation → Mechanism (what we do differently) → Evidence (benchmarks) → Next step
249
+ - **Emails:** Subject = outcome. Body = ask or update. Brief.
250
+ - **Release notes:** New · Changed · Fixed. Max 2 sentences per item. Agent attribution optional ("Shipped by the Deploy agent").
251
+ - **Blog posts:** Lead with a specific claim + a number. Support with a mechanism. End with a callable next step.
252
+
253
+ **Language:** English by default; Dutch for NL-market deliverables on request.
254
+
255
+ ---
256
+
257
+ ### 2. PRESENTATIONS
258
+
259
+ **Slide anatomy:**
260
+ - One idea per slide
261
+ - Headline: Inter 700, max 12 words
262
+ - Eyebrow: JetBrains Mono, uppercase, 0.18em tracking, Pareto Blue
263
+ - One visual OR one table OR three bullets — never all three
264
+
265
+ **Slide modes:**
266
+
267
+ | Mode | Background | Text | Accent | Use for |
268
+ |------|-----------|------|--------|---------|
269
+ | Night | `#051C2C` + grid overlay | White | `#2251FF` | Section openers, hero, manifest |
270
+ | Fog | `#F5F7FA` | `#051C2C` | `#2251FF` | Data, comparisons, process |
271
+ | White | `#ffffff` | `#051C2C` | `#2251FF` | Detail, quotes, bios |
272
+
273
+ **Crew appearances:**
274
+ - Opening slide: single hero agent, 240px, centered.
275
+ - Process slide: all six agents in a row mapped to the delivery phases (Discovery → Run).
276
+ - Section dividers: the agent matching the section's phase (e.g., Validate for "Quality").
277
+
278
+ ---
279
+
280
+ ### 3. DOCUMENTS (Word / PDF / Reports)
281
+
282
+ **Typography:**
283
+ - H1: Inter Bold 28–36pt, `#051C2C`
284
+ - H2: Inter Bold 22pt, `#2251FF`
285
+ - H3: Inter SemiBold 16pt, `#051C2C`
286
+ - Body: Inter Regular 11pt, `#6B7A99`, 1.6 line-height
287
+ - Code/data: JetBrains Mono 10pt
288
+
289
+ **Tables:**
290
+ - Header: `#051C2C` background, white text, Inter 600
291
+ - Zebra: `#F5F7FA` / `#ffffff`
292
+ - Borders: 1px `#E0E5EE`
293
+
294
+ **Callouts:**
295
+ - Info: 3px left border `#2251FF`, `#F5F7FA` bg
296
+ - Warning: 3px left border `#F3A738`, `#FFF8E1` bg
297
+ - Success: 3px left border `#00A878`, `#F0FAF4` bg
298
+
299
+ **Crew appearances in documents:**
300
+ - Cover page: single hero agent top-right, 120px
301
+ - Chapter openers: the agent matching the chapter's phase, 80px
302
+ - Never inline in body copy (too small, becomes noise)
303
+
304
+ ---
305
+
306
+ ### 4. WEB & HTML ARTIFACTS
307
+
308
+ **CSS design tokens — always use:**
309
+
310
+ ```css
311
+ :root {
312
+ /* Primary */
313
+ --blue: #2251FF;
314
+ --blue-steel: #146FF4;
315
+ --night: #051C2C;
316
+ --ink: #0A1330;
317
+ --fog: #F5F7FA;
318
+ --slate: #6B7A99;
319
+ --border: #E0E5EE;
320
+
321
+ /* Crew accents — one per phase */
322
+ --crew-discovery: #F6B437;
323
+ --crew-plan: #146FF4;
324
+ --crew-build: #2251FF;
325
+ --crew-validate: #3ECF8E;
326
+ --crew-deploy: #FF6B4A;
327
+ --crew-run: #A884FF;
328
+ --crew-antenna: #F6B437;
329
+
330
+ /* Semantic */
331
+ --success: #00A878;
332
+ --warning: #F3A738;
333
+ --error: #E04E2F;
334
+
335
+ /* Typography */
336
+ --font-sans: var(--font-sans, 'Inter'), system-ui, sans-serif;
337
+ --font-mono: var(--font-mono, 'JetBrains Mono'), monospace;
338
+
339
+ /* Shape */
340
+ --radius: 3px;
341
+ --radius-md: 4px;
342
+ --shadow-sm: 0 1px 3px rgba(5,28,44,0.08), 0 4px 16px rgba(5,28,44,0.06);
343
+ --shadow-md: 0 4px 20px rgba(5,28,44,0.10);
344
+ }
345
+ ```
346
+
347
+ **Layout principles:**
348
+ - Max content width: 1200px, centered
349
+ - Section padding: 96px vertical / 72px horizontal on desktop
350
+ - Base grid unit: 8px
351
+ - Hero sections: minimum `92vh`, radial blue tint + linear-gradient background, faint grid overlay at 72px
352
+
353
+ **Component patterns:**
354
+ - Buttons: 3px radius, Inter 600
355
+ - Primary: `#2251FF` fill, white text
356
+ - Ghost: transparent, `rgba(255,255,255,0.18)` border on dark / `#E0E5EE` on light
357
+ - Cards: white bg, 1px `#E0E5EE`, 4px radius, 32px padding
358
+ - Eyebrow blocks: JetBrains Mono uppercase, Pareto Blue, 16px margin-bottom
359
+ - Status pills: 3px radius, 12% opacity bg, darker text
360
+ - Mascot sit-ins: never on a colored fill that clashes with the agent's body
361
+
362
+ ---
363
+
364
+ ### 5. APPLICATION UX
365
+
366
+ **Core principles:**
367
+ - Desktop-first; single-column on mobile only where necessary
368
+ - One accent color (Pareto Blue). Status colors appear only as badges / indicators
369
+ - Dashboards use Night or Fog as the dominant surface — never both in the same screen
370
+ - Agents can act as pipeline-stage indicators in build/CI views — show the agent responsible for each step
371
+
372
+ ---
373
+
374
+ ## Integration into the Pareto website (Next.js 16 / React 19)
375
+
376
+ The crew is already live in production. When porting it elsewhere:
377
+
378
+ 1. **Drop `ParetoAgent.tsx`** into `src/app/components/ParetoAgent.tsx` (from `assets/crew/`). Roles: `hero | discovery | plan | build | validate | deploy | run`. Pupils track the cursor automatically.
379
+ 2. **Hero** — `<ParetoAgent role="hero" size={220} />` in the hero content.
380
+ 3. **Crew row** — `<ParetoCrewRow />` renders all six agents with phase number, label, human/AI mode, and a one-line function (no names).
381
+ 4. **Process page** — `CrewFlowVisual.tsx` maps the six phases (Discovery, Plan, Build, Validate, Deploy, Run); agents can stand in for the stage icons.
382
+ 5. **Blog posts** — byline may attribute to a phase agent ("Shipped by the Deploy agent") with a small 32px inline agent.
383
+
384
+ Always respects `prefers-reduced-motion` (idle animation **and** eye-tracking disabled). No dependencies added to package.json.
385
+
386
+ ---
387
+
388
+ ## Brand Check Scorecard
389
+
390
+ When reviewing existing content:
391
+
392
+ | Dimension | Strong | Acceptable | Needs Work |
393
+ |-----------|--------|-----------|------------|
394
+ | **Color** | Pareto Blue dominates, crew accents only with crew | Minor deviations | Rainbow palette, wrong hex |
395
+ | **Typography** | Inter + JetBrains Mono, correct hierarchy | Slight inconsistency | Wrong fonts, missing mono |
396
+ | **Voice** | Specific, first-principles, active, evidence-led | Some passive / vague | Buzzwords, superlatives |
397
+ | **Crew usage** | Role-matched, correct sizing, animations respected | Decorative but not wrong | Random, off-palette, tiny-with-face |
398
+ | **Layout** | Sharp edges, generous whitespace, clear hierarchy | Slightly cramped | Rounded pillows, decorative noise |
399
+ | **Numbers** | Specific benchmarks, with comparisons | Generic stats | No evidence, adjectives only |
400
+
401
+ **Output format:**
402
+ ```
403
+ ## Brand Check: [Name]
404
+
405
+ ### What works
406
+ - [Specific example]
407
+
408
+ ### Fix these
409
+ - **[Dimension]**: [Issue] → [Specific fix]
410
+ Before: "[quote]"
411
+ After: "[rewrite]"
412
+
413
+ ### Overall: Strong / Acceptable / Needs Work
414
+ [One-line summary + priority recommendation]
415
+ ```
416
+
417
+ ---
418
+
419
+ ## Examples
420
+
421
+ ### Generate: Client update email
422
+
423
+ **Request:** "Write a project update email about the deployment pipeline work"
424
+
425
+ ```
426
+ Subject: Deployment time: 2 hours → 8 minutes
427
+
428
+ Hi [Name],
429
+
430
+ Quick update on the CI/CD automation.
431
+
432
+ This week we completed the automated deployment pipeline for staging:
433
+
434
+ - Deploy time: 2 hours → 8 minutes
435
+ - Manual steps: 0 (previously 12 error-prone actions)
436
+ - Quality gates: enforced automatically on every deploy
437
+
438
+ The pipeline is boring by design. That's what production systems demand.
439
+
440
+ Next: we extend this to production. I need 30 minutes of your time to approve the gate configuration — I'll send a calendar invite.
441
+
442
+ One decision needed: automatic rollback on health check failure, or manual?
443
+ - Automatic: faster recovery, less risk
444
+ - Manual: you approve every rollback
445
+ - My recommendation: manual first, automatic after we build confidence
446
+
447
+ Let me know by Thursday.
448
+
449
+ [Name]
450
+ ```
451
+
452
+ ### Check: Slide headline
453
+
454
+ **Request:** "Check this slide headline: 'Leveraging our innovative AI-powered platform to synergistically drive digital transformation'"
455
+
456
+ ```
457
+ ## Brand Check: Slide headline
458
+
459
+ ### Fix these
460
+ - **Voice**: Buzzword-heavy, no evidence, passive framing
461
+ Before: "Leveraging our innovative AI-powered platform to synergistically drive digital transformation"
462
+ After: "We cut deployment time from 2 hours to 8 minutes — by removing 12 manual steps"
463
+
464
+ ### Overall: Needs Work
465
+ Replace every adjective with a number. Start with the outcome.
466
+ ```
467
+
468
+ ### Generate: LinkedIn post
469
+
470
+ **Request:** "Write a LinkedIn post about quality and speed"
471
+
472
+ ```
473
+ Most teams treat quality and speed as a tradeoff.
474
+
475
+ They're not. That's a false choice.
476
+
477
+ When you build quality in from the start — proper CI/CD gates, automated testing, zero manual steps — you eliminate the rework that slows everything down.
478
+
479
+ We recently rebuilt a client's deployment pipeline from scratch. The result: 2 hours became 8 minutes. Not because we moved faster. Because we eliminated 12 sources of waste.
480
+
481
+ Quality doesn't slow you down. Poor quality does.
482
+ ```
483
+
484
+ ---
485
+
486
+ ## Notes for Claude
487
+
488
+ - Pareto communicates in **English** by default; Dutch on request for NL-market content.
489
+ - **Never freestyle colors** — use the exact hex values in this document.
490
+ - **Pareto Blue `#2251FF`** is the single dominant accent. Crew accents are *only* for crew.
491
+ - **Inter + JetBrains Mono** — no other fonts. JetBrains Mono *only* for labels, eyebrows, metadata, numerics.
492
+ - **The crew has roles** — six agents, one per phase, no character names. Use the right one for the context (Discovery, Plan, Build, Validate, Deploy, Run). Pupils track the cursor; respect reduced-motion.
493
+ - **Animations always respect `prefers-reduced-motion`** — no exceptions.
494
+ - **Em-dash `—` (U+2014)** for asides, never a hyphen.
495
+ - **Evidence > superlatives** — every claim should have a number or a benchmark.
496
+ - **Sharp edges** — 3–4px radius max across the whole system.
497
+ - **The production integration point** is `gitlab.com/pareto4/website` (Next.js 16, React 19). Components live at `src/app/components/ParetoAgent.tsx` and `src/app/components/ParetoCrewRow.tsx`.
498
+
499
+ ---
500
+
501
+ ## PDF Output — Paginated HTML
502
+
503
+ ### Step 1: Always ask first
504
+ Before building any HTML, ask: **"Is this for PDF output or for use as a website/application?"**
505
+
506
+ - **For PDF output:** Use the paginated design system described below. Every page is an exact `297mm × 210mm` block. Content is written to fit the grid — never the other way around.
507
+ - **For website/application:** Use the standard fluid layout with `max-width`, section padding, and responsive design. Do NOT apply fixed page dimensions.
508
+
509
+ ---
510
+
511
+ ### Step 2: Design system first — content second
512
+
513
+ The single most important rule: **define the type scale and spacing system before writing any content.** Never adjust font sizes after the fact to make content fit. If content doesn't fit, cut the content.
514
+
515
+ #### Fixed type scale (A4 landscape)
516
+
517
+ | Role | Size | Use |
518
+ |------|------|-----|
519
+ | Display / Hero | 48px | Hero h1 only |
520
+ | H2 | 28px | Section title |
521
+ | H3 | 15px | Card/component title |
522
+ | Body | 13px | All body copy |
523
+ | Small | 11px | Captions, descriptions, notes |
524
+ | Mono/label | 10px | Kickers, tags, metadata |
525
+ | Footer | 9px | Footer only |
526
+
527
+ **Rule: these sizes are fixed. No inline `font-size` overrides anywhere. Ever.**
528
+
529
+ #### Fixed spacing scale
530
+
531
+ Use multiples of 4px: `4 / 6 / 8 / 12 / 16 / 20 / 24 / 32px`. Define as CSS variables and reference them consistently. Never use arbitrary pixel values.
532
+
533
+ #### Page geometry (A4 landscape)
534
+
535
+ | Dimension | Value |
536
+ |-----------|-------|
537
+ | Page width | 297mm (1123px at 96dpi) |
538
+ | Page height | 210mm (794px at 96dpi) |
539
+ | Padding | 14mm (53px) each side |
540
+ | Footer height | 10mm (38px) |
541
+ | Content area | 1017 × 650px |
542
+
543
+ **Content budget:** at 13px body with 1.55 line-height = ~20px per line. Content area gives ~32 lines of body text. Write to this budget.
544
+
545
+ ---
546
+
547
+ ### Step 3: Page shell CSS
548
+
549
+ ```css
550
+ :root {
551
+ --pad: 53px; /* 14mm */
552
+ --footer: 38px; /* 10mm */
553
+
554
+ --t-display: 48px;
555
+ --t-h2: 28px;
556
+ --t-h3: 15px;
557
+ --t-body: 13px;
558
+ --t-small: 11px;
559
+ --t-mono: 10px;
560
+ --t-footer: 9px;
561
+
562
+ --sp-4: 4px; --sp-6: 6px; --sp-8: 8px;
563
+ --sp-12: 12px; --sp-16: 16px; --sp-20: 20px;
564
+ --sp-24: 24px; --sp-32: 32px;
565
+ }
566
+
567
+ .page {
568
+ width: 297mm;
569
+ height: 210mm;
570
+ overflow: hidden;
571
+ position: relative;
572
+ display: flex;
573
+ flex-direction: column;
574
+ page-break-after: always;
575
+ break-after: page;
576
+ }
577
+
578
+ .content {
579
+ flex: 1;
580
+ padding: var(--pad);
581
+ display: flex;
582
+ flex-direction: column;
583
+ overflow: hidden;
584
+ }
585
+
586
+ .footer {
587
+ height: var(--footer);
588
+ padding: 0 var(--pad);
589
+ display: flex;
590
+ align-items: center;
591
+ justify-content: space-between;
592
+ flex-shrink: 0;
593
+ }
594
+ ```
595
+
596
+ ---
597
+
598
+ ### Step 4: Verify before generating
599
+
600
+ Before running Playwright, check that no page exceeds 794px height:
601
+
602
+ ```javascript
603
+ const heights = page.evaluate(() =>
604
+ Array.from(document.querySelectorAll('.page')).map((p, i) => ({
605
+ page: i + 1,
606
+ h: Math.round(p.getBoundingClientRect().height)
607
+ }))
608
+ );
609
+ // Every page must be exactly 794px. If any page > 794px, cut content — never resize fonts.
610
+ ```
611
+
612
+ ---
613
+
614
+ ### Step 5: Generate PDF with Playwright
615
+
616
+ ```python
617
+ from playwright.sync_api import sync_playwright
618
+
619
+ with sync_playwright() as p:
620
+ browser = p.chromium.launch()
621
+ page = browser.new_page()
622
+ page.goto(f"file://{html_path}")
623
+ page.wait_for_timeout(3000) # wait for fonts
624
+ page.pdf(
625
+ path=pdf_path,
626
+ format="A4",
627
+ landscape=True,
628
+ margin={"top": "0", "right": "0", "bottom": "0", "left": "0"},
629
+ print_background=True
630
+ )
631
+ browser.close()
632
+ ```
633
+
634
+ ---
635
+
636
+ ### Rules summary
637
+
638
+ - **Design system first, content second** — never the reverse
639
+ - **No inline font-size overrides** — all sizes from CSS variables
640
+ - **No inline spacing values** — all spacing from the scale
641
+ - **Content that doesn't fit gets cut** — not resized
642
+ - **Every page exactly 794px** — verify before generating
643
+ - **Footer always present** — logo left, page number right
644
+ - **`print_background: true`** — required for background colors and gradients