@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.
- package/.claude-plugin/plugin.json +1 -1
- package/bin/install.js +116 -0
- package/commands/pp-build-handoff.md +46 -0
- package/commands/pp-discovery-to-build.md +40 -0
- package/gemini-extension.json +1 -1
- package/package.json +2 -1
- package/pareto-skills/_shared/create-project-board.sh +195 -0
- package/pareto-skills/_shared/pp-claude-md-protocol.md +306 -0
- package/pareto-skills/_shared/sync-phase-status.sh +139 -0
- package/pareto-skills/pp-brand/SKILL.md +644 -0
- package/pareto-skills/pp-brand/assets/crew/ParetoAgent.inline.html +120 -0
- package/pareto-skills/pp-brand/assets/crew/ParetoAgent.tsx +239 -0
- package/pareto-skills/pp-brand/assets/crew/build.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/deploy.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/discovery.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/plan.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/run.svg +11 -0
- package/pareto-skills/pp-brand/assets/crew/validate.svg +11 -0
- package/pareto-skills/pp-brand/assets/pareto-brand-preview.html +547 -0
- package/pareto-skills/pp-obsidian-notes/SKILL.md +127 -0
- package/pareto-skills/pp-obsidian-notes/templates/CLAUDE.md +29 -0
- package/pareto-skills/pp-obsidian-notes/templates/client-context.md +116 -0
- package/pareto-skills/pp-obsidian-notes/templates/meeting-note.md +66 -0
- package/pareto-skills/pp-obsidian-notes/templates/pareto-context.md +102 -0
- package/pareto-skills/pp-obsidian-notes/templates/proposal.md +117 -0
- package/pareto-skills/pp-project-setup/SKILL.md +1364 -0
- package/pp-core/bin/lib/intel.cjs +1 -1
- package/pp-core/bin/lib/io.cjs +120 -0
- package/pp-core/bin/lib/profile-pipeline-command-router.cjs +1 -1
- package/pp-core/bin/lib/roadmap-parser.cjs +1 -1
- package/pp-core/bin/lib/runtime-artifact-conversion.cjs +2 -2
- package/pp-core/bin/lib/surface.cjs +1 -1
- package/pp-core/bin/lib/worktree-safety.cjs +2 -2
- package/pp-core/bin/pp-tools.cjs +23 -0
- package/pp-core/references/ui-brand.md +73 -11
- package/pp-core/templates/codebase/structure.md +5 -5
- package/pp-core/templates/spec.md +7 -7
- package/pp-core/workflows/add-backlog.md +1 -1
- package/pp-core/workflows/autonomous.md +4 -4
- package/pp-core/workflows/debug.md +1 -1
- package/pp-core/workflows/discovery-to-build.md +598 -0
- package/pp-core/workflows/execute-phase.md +9 -1
- package/pp-core/workflows/plan-phase.md +14 -12
- package/pp-core/workflows/pr-branch.md +5 -4
- package/pp-core/workflows/reapply-patches.md +1 -1
- package/pp-core/workflows/ship.md +1 -1
- package/pp-core/workflows/thread.md +1 -1
- 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
|