@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,127 @@
1
+ ---
2
+ name: pp-obsidian-notes
3
+ description: >
4
+ Create and manage Obsidian vault structure, client context files, meeting notes, and
5
+ proposals for The Pareto Project. Use this skill whenever the user wants to set up
6
+ the Pareto Obsidian vault from scratch, create a new client folder and context file,
7
+ add a meeting note for a client, create or update a proposal, or scaffold any part
8
+ of the Pareto knowledge structure. Triggers on requests like "set up the vault",
9
+ "create a client folder for X", "add a meeting note for X", "new meeting with X",
10
+ "create a proposal for X", "set up obsidian", "new client X", "log a call with X",
11
+ or any mention of creating or updating Pareto client knowledge files. Always use
12
+ this skill — do not improvise the structure from scratch.
13
+ ---
14
+
15
+ # Pareto Obsidian Notes Skill
16
+
17
+ Creates and manages the Pareto Obsidian knowledge vault structure: initial scaffold,
18
+ client context files, meeting notes, proposals, and internal Pareto context. Operates
19
+ directly on the filesystem via Claude Code's file tools.
20
+
21
+ ---
22
+
23
+ ## Vault location
24
+
25
+ Default vault root: `~/pareto-vault`
26
+
27
+ If the user has specified a different path, use that instead. Always confirm or infer
28
+ the vault path before writing files.
29
+
30
+ ---
31
+
32
+ ## Workflow by task type
33
+
34
+ ### 1. Initial vault scaffold
35
+ Triggered by: "set up the vault", "create the obsidian structure", "initialise vault"
36
+
37
+ 1. Create the full directory structure (see **Vault structure** below)
38
+ 2. Write `CLAUDE.md` at the vault root using `templates/CLAUDE.md`
39
+ 3. Write `internal/_pareto-context.md` using `templates/pareto-context.md`
40
+ 4. Write `clients/README.md` with one-line instructions
41
+ 5. Print all created paths and confirm to the user
42
+
43
+ ### 2. New client
44
+ Triggered by: "new client X", "create a client folder for X", "onboard client X"
45
+
46
+ 1. Confirm the client name — convert to lowercase-hyphenated slug (e.g. `acme-corp`)
47
+ 2. Ask for or infer: full client name, industry, primary contact name, engagement type
48
+ 3. Create `clients/{slug}/` directory
49
+ 4. Write `clients/{slug}/_context.md` using `templates/client-context.md`
50
+ 5. Print the created path and remind the user to fill in any `[PLACEHOLDER]` fields
51
+
52
+ ### 3. New meeting note
53
+ Triggered by: "log a meeting with X", "add meeting notes for X", "new call with X", "meeting with X"
54
+
55
+ 1. Confirm client slug and meeting date (default: today in YYYY-MM-DD)
56
+ 2. Ask for or infer: attendees, meeting type (kickoff / check-in / review / discovery / demo)
57
+ 3. Write `clients/{slug}/YYYY-MM-DD-{type}.md` using `templates/meeting-note.md`
58
+ 4. Print the created file path
59
+
60
+ ### 4. New proposal
61
+ Triggered by: "create a proposal for X", "draft a proposal for X", "new proposal X"
62
+
63
+ 1. Confirm client slug and version (default: v1)
64
+ 2. Check if a previous version exists — if so, bump to v2, v3, etc.
65
+ 3. Write `proposals/{slug}-proposal-v{N}-{YYYY-MM-DD}.md` using `templates/proposal.md`
66
+ 4. Print the created file path
67
+
68
+ ### 5. Update existing note
69
+ Triggered by: "update the context for X", "edit the meeting note from DATE", "add to X"
70
+
71
+ 1. Read the existing file first
72
+ 2. Make the requested changes
73
+ 3. Confirm what changed and print the file path
74
+
75
+ ---
76
+
77
+ ## Vault structure
78
+
79
+ ```
80
+ {vault-root}/
81
+ ├── CLAUDE.md
82
+ ├── internal/
83
+ │ └── _pareto-context.md
84
+ ├── clients/
85
+ │ └── {client-slug}/
86
+ │ ├── _context.md
87
+ │ └── YYYY-MM-DD-{type}.md
88
+ ├── proposals/
89
+ │ └── {slug}-proposal-v{N}-{date}.md
90
+ └── projects/
91
+ └── {project-slug}/
92
+ ├── _brief.md
93
+ └── _decisions.md
94
+ ```
95
+
96
+ ---
97
+
98
+ ## File naming conventions
99
+
100
+ - Client slugs: lowercase, hyphen-separated (`acme-corp`, `ing-bank`)
101
+ - Meeting notes: `YYYY-MM-DD-{type}.md` — type is `kickoff`, `check-in`, `review`, `discovery`, `demo`
102
+ - Proposals: `{client-slug}-proposal-v{N}-{YYYY-MM-DD}.md`
103
+ - Files prefixed `_` are source-of-truth — never auto-delete or overwrite without confirmation
104
+
105
+ ---
106
+
107
+ ## Templates
108
+
109
+ Read the relevant template before writing any file:
110
+
111
+ | Task | Template |
112
+ |---|---|
113
+ | Vault root map | `templates/CLAUDE.md` |
114
+ | Pareto internal context | `templates/pareto-context.md` |
115
+ | Client context | `templates/client-context.md` |
116
+ | Meeting note | `templates/meeting-note.md` |
117
+ | Proposal | `templates/proposal.md` |
118
+
119
+ ---
120
+
121
+ ## Conventions
122
+
123
+ - Use `[PLACEHOLDER]` for fields the user must fill in manually
124
+ - Never overwrite `_context.md` without reading it first and confirming
125
+ - Meeting notes are append-only — never edit past notes, always create new
126
+ - Proposals are versioned — if v1 exists, create v2
127
+ - Always print full file paths after creation so the user can verify in Obsidian
@@ -0,0 +1,29 @@
1
+ # Pareto knowledge vault
2
+
3
+ This is the Pareto Project Obsidian knowledge vault. All client context,
4
+ meeting notes, proposals, and internal Pareto knowledge lives here.
5
+
6
+ ## Structure
7
+
8
+ - `internal/_pareto-context.md` — Pareto's identity, positioning, principles, tone
9
+ - `clients/{slug}/_context.md` — stable client profile (source of truth)
10
+ - `clients/{slug}/YYYY-MM-DD-{type}.md` — meeting notes, chronological
11
+ - `proposals/{slug}-proposal-v{N}-{date}.md` — versioned proposals
12
+ - `projects/{slug}/_brief.md` — project brief
13
+ - `projects/{slug}/_decisions.md` — key decisions log
14
+
15
+ ## Conventions
16
+
17
+ - Files prefixed with `_` are source-of-truth documents
18
+ - Meeting note types: kickoff, check-in, review, discovery, demo
19
+ - Client slugs are lowercase-hyphenated (e.g. acme-corp)
20
+ - Always read `_context.md` before working on any client task
21
+ - For proposals, read the most recent meeting notes first
22
+
23
+ ## How to use this vault in Claude Code
24
+
25
+ When working on a client task:
26
+ 1. Read `internal/_pareto-context.md` for Pareto's positioning and tone
27
+ 2. Read `clients/{slug}/_context.md` for the client profile
28
+ 3. Read the last 2–3 meeting notes for recent context
29
+ 4. Then proceed with the task
@@ -0,0 +1,116 @@
1
+ ---
2
+ type: client-context
3
+ client: [PLACEHOLDER: Full Client Name]
4
+ slug: [PLACEHOLDER: client-slug]
5
+ industry: [PLACEHOLDER]
6
+ status: active
7
+ contract-start: [PLACEHOLDER: YYYY-MM-DD]
8
+ contract-end: [PLACEHOLDER: YYYY-MM-DD or ongoing]
9
+ last-updated: [PLACEHOLDER: YYYY-MM-DD]
10
+ ---
11
+
12
+ # [PLACEHOLDER: Full Client Name] — client context
13
+
14
+ This is the source-of-truth profile for this client.
15
+ Read this before any client work. Update when material things change.
16
+
17
+ ---
18
+
19
+ ## Who they are
20
+
21
+ **[PLACEHOLDER: Full Client Name]** is [PLACEHOLDER: one sentence describing the company —
22
+ what they do, their size, their market position].
23
+
24
+ - **Industry:** [PLACEHOLDER]
25
+ - **HQ:** [PLACEHOLDER: city, country]
26
+ - **Size:** [PLACEHOLDER: headcount or revenue range]
27
+ - **Website:** [PLACEHOLDER: URL]
28
+
29
+ ---
30
+
31
+ ## Key contacts
32
+
33
+ | Name | Role | Email | Notes |
34
+ |---|---|---|---|
35
+ | [PLACEHOLDER] | [PLACEHOLDER: e.g. CEO] | [PLACEHOLDER] | Primary contact |
36
+ | [PLACEHOLDER] | [PLACEHOLDER] | [PLACEHOLDER] | |
37
+
38
+ ---
39
+
40
+ ## Why they hired Pareto
41
+
42
+ [PLACEHOLDER: 2–3 sentences on the problem or opportunity that brought them to us.
43
+ What were they trying to achieve? What was the trigger?]
44
+
45
+ ---
46
+
47
+ ## Engagement summary
48
+
49
+ - **Type:** [PLACEHOLDER: retainer / project / advisory]
50
+ - **Scope:** [PLACEHOLDER: brief description of what we're doing]
51
+ - **Start:** [PLACEHOLDER: YYYY-MM-DD]
52
+ - **Status:** [PLACEHOLDER: active / on hold / complete]
53
+ - **Linear project:** [PLACEHOLDER: link or project name]
54
+ - **Google Drive folder:** [PLACEHOLDER: link]
55
+
56
+ ---
57
+
58
+ ## Goals and success metrics
59
+
60
+ What does success look like for this client?
61
+
62
+ 1. [PLACEHOLDER]
63
+ 2. [PLACEHOLDER]
64
+ 3. [PLACEHOLDER]
65
+
66
+ ---
67
+
68
+ ## Their context and constraints
69
+
70
+ [PLACEHOLDER: anything material about their situation — tech stack, org structure,
71
+ internal politics, budget constraints, timelines, regulatory context, past initiatives
72
+ that succeeded or failed. This is the nuance that makes advice actually useful.]
73
+
74
+ ---
75
+
76
+ ## Their AI maturity
77
+
78
+ [PLACEHOLDER: where are they on the AI adoption curve?
79
+ e.g. "just starting, no AI tools in production yet" or "have GitHub Copilot, exploring agents"]
80
+
81
+ ---
82
+
83
+ ## Communication preferences
84
+
85
+ - **Preferred channel:** [PLACEHOLDER: email / Slack / WhatsApp]
86
+ - **Meeting cadence:** [PLACEHOLDER: e.g. weekly 45-min check-in, Thursdays]
87
+ - **Style:** [PLACEHOLDER: e.g. prefers short written updates over long decks]
88
+ - **Decision-maker:** [PLACEHOLDER: who ultimately approves things]
89
+
90
+ ---
91
+
92
+ ## Key decisions made
93
+
94
+ | Date | Decision | Context |
95
+ |---|---|---|
96
+ | [PLACEHOLDER] | [PLACEHOLDER] | [PLACEHOLDER] |
97
+
98
+ ---
99
+
100
+ ## Open questions
101
+
102
+ - [PLACEHOLDER]
103
+
104
+ ---
105
+
106
+ ## Risks and watch-outs
107
+
108
+ - [PLACEHOLDER: e.g. budget approval pending for phase 2]
109
+ - [PLACEHOLDER: e.g. key sponsor leaving in Q3]
110
+
111
+ ---
112
+
113
+ ## Related files
114
+
115
+ - `[[proposals/{slug}-proposal-v1-{date}]]`
116
+ - Meeting notes: see other files in this folder
@@ -0,0 +1,66 @@
1
+ ---
2
+ type: meeting-note
3
+ client: [PLACEHOLDER: Full Client Name]
4
+ date: [PLACEHOLDER: YYYY-MM-DD]
5
+ meeting-type: [PLACEHOLDER: kickoff / check-in / review / discovery / demo]
6
+ attendees-pareto: [PLACEHOLDER: Pareto team members present]
7
+ attendees-client: [PLACEHOLDER: Client contacts present]
8
+ ---
9
+
10
+ # [PLACEHOLDER: Full Client Name] — [PLACEHOLDER: meeting type] — [PLACEHOLDER: YYYY-MM-DD]
11
+
12
+ ---
13
+
14
+ ## Context recap
15
+
16
+ [PLACEHOLDER: 2–3 sentences on where things stood going into this meeting.
17
+ "Previously on..." — what were we working on, what was the outstanding question?
18
+ This is the most important field for future AI context. Write it as if briefing
19
+ someone who hasn't spoken to this client in 3 weeks.]
20
+
21
+ ---
22
+
23
+ ## Discussed
24
+
25
+ [PLACEHOLDER: bullet points of the main topics covered, in order.
26
+ Not exhaustive notes — the key substance of what was talked about.]
27
+
28
+ -
29
+ -
30
+ -
31
+
32
+ ---
33
+
34
+ ## Decisions made
35
+
36
+ [PLACEHOLDER: things that were agreed, confirmed, or resolved.
37
+ Be specific — vague decisions create future confusion.]
38
+
39
+ -
40
+ -
41
+
42
+ ---
43
+
44
+ ## Actions
45
+
46
+ | Owner | Action | Due |
47
+ |---|---|---|
48
+ | [PLACEHOLDER] | [PLACEHOLDER] | [PLACEHOLDER: YYYY-MM-DD or "next call"] |
49
+ | [PLACEHOLDER] | [PLACEHOLDER] | [PLACEHOLDER] |
50
+
51
+ ---
52
+
53
+ ## Open questions
54
+
55
+ [PLACEHOLDER: things that came up but weren't resolved.
56
+ These should either be answered before the next meeting or explicitly carried forward.]
57
+
58
+ -
59
+ -
60
+
61
+ ---
62
+
63
+ ## Next meeting
64
+
65
+ - **Date:** [PLACEHOLDER: YYYY-MM-DD or TBC]
66
+ - **Agenda:** [PLACEHOLDER: what needs to be covered next time]
@@ -0,0 +1,102 @@
1
+ ---
2
+ type: internal
3
+ last-updated: [PLACEHOLDER: YYYY-MM-DD]
4
+ ---
5
+
6
+ # Pareto — internal context
7
+
8
+ This file is the standing context for all Claude-assisted work at Pareto.
9
+ Paste this at the top of any Claude conversation involving client work.
10
+
11
+ ---
12
+
13
+ ## Who we are
14
+
15
+ **Pareto** is [PLACEHOLDER: one sentence description of what Pareto does].
16
+
17
+ Founded: [PLACEHOLDER: year], based in the Netherlands (Dutch BV).
18
+
19
+ ---
20
+
21
+ ## What we do
22
+
23
+ [PLACEHOLDER: 2–3 sentences describing Pareto's core service or product.
24
+ What problem do you solve? For whom? How?]
25
+
26
+ ---
27
+
28
+ ## Who we work with
29
+
30
+ **Ideal client profile:**
31
+ - [PLACEHOLDER: industry or sector]
32
+ - [PLACEHOLDER: company size]
33
+ - [PLACEHOLDER: key characteristic — e.g. "companies undergoing AI transformation"]
34
+
35
+ ---
36
+
37
+ ## Engagement model
38
+
39
+ [PLACEHOLDER: describe how Pareto typically works with clients.
40
+ e.g. retainer / project-based / productised service / advisory]
41
+
42
+ Typical engagement length: [PLACEHOLDER]
43
+ Typical team size per engagement: [PLACEHOLDER]
44
+
45
+ ---
46
+
47
+ ## Pricing principles
48
+
49
+ [PLACEHOLDER: brief description of how Pareto prices work.
50
+ e.g. day rate, fixed-price projects, retainer tiers]
51
+
52
+ ---
53
+
54
+ ## Our positioning
55
+
56
+ **We are not:**
57
+ - [PLACEHOLDER: e.g. a traditional consulting firm]
58
+ - [PLACEHOLDER: e.g. a software agency]
59
+
60
+ **We are:**
61
+ - [PLACEHOLDER: e.g. an AI-first transformation partner]
62
+
63
+ ---
64
+
65
+ ## Tone and communication style
66
+
67
+ - [PLACEHOLDER: e.g. direct, no jargon, evidence-led]
68
+ - [PLACEHOLDER: e.g. collaborative — we work with clients, not at them]
69
+ - [PLACEHOLDER: e.g. pragmatic — we focus on what moves the needle]
70
+
71
+ When writing on behalf of Pareto:
72
+ - Use "we" for Pareto
73
+ - Avoid buzzwords like "synergy", "leverage" (as a verb), "ecosystem"
74
+ - [PLACEHOLDER: any other style preferences]
75
+
76
+ ---
77
+
78
+ ## Key people
79
+
80
+ | Name | Role |
81
+ |---|---|
82
+ | [PLACEHOLDER] | Founder |
83
+ | [PLACEHOLDER] | [PLACEHOLDER] |
84
+
85
+ ---
86
+
87
+ ## Constraints and principles
88
+
89
+ - We are a Dutch BV — all contracts governed by Dutch law
90
+ - GDPR compliance is non-negotiable for all client work
91
+ - [PLACEHOLDER: any other hard constraints]
92
+
93
+ ---
94
+
95
+ ## Tools and stack
96
+
97
+ - Knowledge: Obsidian (this vault)
98
+ - Project tracking: Linear
99
+ - Deliverables: Google Drive
100
+ - Communication: Slack, Gmail (Google Workspace)
101
+ - Development: Claude Code, GitHub, Docker, AWS/GCP
102
+ - Finance: Moneybird
@@ -0,0 +1,117 @@
1
+ ---
2
+ type: proposal
3
+ client: [PLACEHOLDER: Full Client Name]
4
+ version: [PLACEHOLDER: v1]
5
+ date: [PLACEHOLDER: YYYY-MM-DD]
6
+ status: draft
7
+ ---
8
+
9
+ # Proposal — [PLACEHOLDER: Engagement Title]
10
+ **Prepared for:** [PLACEHOLDER: Full Client Name]
11
+ **Prepared by:** The Pareto Project
12
+ **Date:** [PLACEHOLDER: YYYY-MM-DD]
13
+ **Version:** [PLACEHOLDER: v1]
14
+
15
+ ---
16
+
17
+ ## The situation
18
+
19
+ [PLACEHOLDER: 2–3 sentences on the client's current situation and the problem or
20
+ opportunity this proposal addresses. Written from their perspective — what is
21
+ happening in their world that makes this work important right now?]
22
+
23
+ ---
24
+
25
+ ## What we propose
26
+
27
+ [PLACEHOLDER: clear description of what Pareto will do. Avoid jargon.
28
+ Write it so the client could describe it accurately to a colleague.]
29
+
30
+ ---
31
+
32
+ ## Scope of work
33
+
34
+ ### Phase 1 — [PLACEHOLDER: phase name]
35
+ [PLACEHOLDER: description of what this phase covers]
36
+
37
+ **Deliverables:**
38
+ - [PLACEHOLDER]
39
+ - [PLACEHOLDER]
40
+
41
+ **Duration:** [PLACEHOLDER: e.g. 3 weeks]
42
+
43
+ ---
44
+
45
+ ### Phase 2 — [PLACEHOLDER: phase name]
46
+ [PLACEHOLDER: description]
47
+
48
+ **Deliverables:**
49
+ - [PLACEHOLDER]
50
+
51
+ **Duration:** [PLACEHOLDER]
52
+
53
+ ---
54
+
55
+ ## What's not in scope
56
+
57
+ [PLACEHOLDER: explicit list of things this engagement does NOT cover.
58
+ This protects both parties and sets clear expectations.]
59
+
60
+ -
61
+ -
62
+
63
+ ---
64
+
65
+ ## How we'll work together
66
+
67
+ [PLACEHOLDER: brief description of the working model.
68
+ e.g. weekly check-ins, async updates via Slack, deliverables reviewed in shared Drive]
69
+
70
+ **Your time commitment:** [PLACEHOLDER: e.g. ~2 hours/week for reviews and input]
71
+
72
+ ---
73
+
74
+ ## Investment
75
+
76
+ | Item | Amount |
77
+ |---|---|
78
+ | [PLACEHOLDER: Phase 1] | €[PLACEHOLDER] |
79
+ | [PLACEHOLDER: Phase 2] | €[PLACEHOLDER] |
80
+ | **Total** | **€[PLACEHOLDER]** |
81
+
82
+ **Payment terms:** [PLACEHOLDER: e.g. 50% upfront, 50% on completion]
83
+ **Invoicing:** Via Moneybird, 30-day payment terms
84
+
85
+ ---
86
+
87
+ ## Timeline
88
+
89
+ | Milestone | Date |
90
+ |---|---|
91
+ | Kick-off | [PLACEHOLDER: YYYY-MM-DD] |
92
+ | [PLACEHOLDER: Phase 1 complete] | [PLACEHOLDER] |
93
+ | [PLACEHOLDER: Final delivery] | [PLACEHOLDER] |
94
+
95
+ ---
96
+
97
+ ## Why Pareto
98
+
99
+ [PLACEHOLDER: 2–3 sentences on why Pareto is the right partner for this.
100
+ Specific to this client and engagement — not generic credentials.]
101
+
102
+ ---
103
+
104
+ ## Next steps
105
+
106
+ To proceed:
107
+ 1. Review this proposal and share any questions or changes
108
+ 2. Sign the accompanying engagement letter
109
+ 3. Pay the initial invoice
110
+ 4. We schedule kick-off for [PLACEHOLDER: date]
111
+
112
+ Questions? Reach us at [PLACEHOLDER: email or Slack]
113
+
114
+ ---
115
+
116
+ *This proposal is valid until [PLACEHOLDER: YYYY-MM-DD].*
117
+ *Governed by Dutch law. VAT number: [PLACEHOLDER].*