# Pitch Deck

> Builds the proposal slide deck for a prospect — an animated single-file HTML deck by default, .pptx when the buyer's meeting culture demands Office, or both — walking from evidenced weaknesses (tells) to the sign-here moment. Use when the user says "pitch deck", "proposal deck", "slides for [prospect]", "deck for the meeting", or as the 05-deck stage of a factory run. Every number comes from SYNTHESIS; every scope item traces to a tell; the tells ↔ scope ↔ price bijection is the spine. The HTML artifact is a precise, buildable spec (16:9 stage, anime.js v4, `--sf-*` tokens, ≤2.5MB, zero console errors, WCAG AA, prefers-reduced-motion) — not a vibe.

- Skill: `manutej/pitch-deck` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add manutej/pitch-deck`
- Raw SKILL.md: https://api.skillmd.com/api/skills/manutej/pitch-deck/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: manutej (https://skillmd.com/u/manutej)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/manutej/pitch-deck

---


# Pitch-deck — the walk to the dotted line

A deck is an argument, not a brochure. It ingests ONLY SYNTHESIS-vetted numbers and the tells dossier, wears the prospect's palette over CETI chrome, and its skeleton is the sign-here bijection. This skill emits a **precisely specified artifact** — a single-file animated HTML deck built to `references/deck-spec.md`, assembled from named archetypes (`references/slide-archetypes.md`) choreographed by named motion patterns (`references/motion-grammar.md`), or a `.pptx` translated per `references/pptx-mapping.md`. Read `../forge/references/design-rigor.md` and `../forge/references/evidence-rules.md` before building.

## References index

- `references/deck-spec.md` — the exact HTML deck artifact contract: document structure, geometry, navigation, `--sf-*` token consumption, performance budget, accessibility floor, leave-behind + print modes. Every line is a checkable predicate. **This is the acceptance spine.**
- `references/slide-archetypes.md` — the archetype library, one per narrative beat, each with layout grid, typed content slots + word caps, motion pattern, chart encoding, and acceptance checks. Dense/sparse variants.
- `references/motion-grammar.md` — the named choreography patterns with timing specs, easing/duration token usage, sequencing budget, and the reduced-motion degradation table.
- `references/pptx-mapping.md` — archetype→pptx layout, token→theme mapping, motion→build-steps, what is lost + compensations, when to choose pptx.
- Binding law: `../forge/references/evidence-rules.md`, `../forge/references/design-rigor.md`, `../forge/references/meta-meta-map.md` (the sign-here bijection).

## H1 — Typed contract

**Input** (fill at intake; `UNKNOWN` is legal, never invented):

```
SYNTHESIS:        path            # 01-research/SYNTHESIS.md — the ONLY source of numbers
TOKENS:           path            # design/tokens.css — the ONLY source of color/type/space
TELLS:            path            # 01-research/tells-dossier.md (reached via SYNTHESIS)
PROOF_CONTEXT:    path|ref         # demo-forge artifact link/QR + PROOF results
CHANGE_APPETITE:  {augment|transform|explore}   # mislabel → wrong note on every slide
WARMTH:           {cold|warm|hot}  # sets cold-open temperature + how direct the tells read
MEETING_CONTEXT:  {in-room|remote|leave-behind}  # drives autoplay, caption density, pacing
FORMAT:           {html|pptx|both}
PROSPECT_NAME:    str
```

**Output** (typed):

```
DECK_HTML:   file    # 05-deck/deck.html — single file, zero network deps, built to deck-spec.md
DECK_PPTX:   file    # 05-deck/deck.pptx — when FORMAT ∈ {pptx, both}, per pptx-mapping.md
ATOMS:       list    # ≥1 archetype/phrase atom → FACTORY/atoms.md
AUDIT_REF:   ref     # Stage-3b block in 01-research/CITATIONS.md covering this deck
```

## The narrative spine (8 beats — adapt count, keep order)

Each beat maps to a named archetype in `slide-archetypes.md`.

1. **Cold-open** (`cold-open`) — one observation about THEIR world, live-demonstrable if possible. Earn attention before spending it; no agency-intro slide first.
2. **The tells** (`tells`) — 2–3 evidenced weaknesses, each with source tag and live wedge. Respectful, factual, specific.
3. **Cost of inaction** (`cost-of-inaction`) — what the tells cost per month, from SYNTHESIS math, EST flags shown. Honesty reads as competence.
4. **Offer bijection** (`offer-bijection`) — the sign-here table: each tell ↔ scope item ↔ price line. No orphan scope, no orphan tell (unresolved tells appear as explicit phase-2 rows).
5. **Proof** (`proof`) — PROOF_CONTEXT results, the touchable demo (link/QR), the transparency dashboard.
6. **Gates + timeline** (`gates-timeline`) — critical-path gates and a timeline keyed to them, never to enthusiasm.
7. **Pricing shapes** (`pricing-shapes`) — pilot/hybrid (recommended), performance-max, classic retainer; billable unit on the slide; floor never shown, never breached.
8. **The ask** (`the-ask`) — one next step, one date, one sentence.

## Voice matrices

**CHANGE_APPETITE** (sets the offer's frame on every slide): augment → "your workflow, accelerated and standardized"; transform → "the redesign, de-risked in phases"; explore → "the discovery program, with kill criteria." Mislabeling strikes the wrong note everywhere — read the slot, do not guess.

**WARMTH** (sets cold-open temperature and how pointed the tells read): cold → open with an industry-level observation, tells stated as neutral findings, more proof; warm → open with a named-to-them observation, tells stated directly; hot → open mid-conversation, tells as shared knowledge, move fast to the ask.

**MEETING_CONTEXT** (sets the artifact's autonomy): in-room → autoplay off, presenter drives, captions terse, hero motion carries the beat; remote → autoplay off, captions fuller (screen-share compresses type), one idea per slide; leave-behind → **self-narrating**: captions on, every claim readable without a speaker, autoplay off, the argument survives with no one in the room.

## H3 — Build loop (Frame → Do → Review → Capture)

**FRAME.** Load SYNTHESIS, TOKENS, TELLS. Confirm the Stage-3b audit has passed for the numbers you will use — **refuse to build before it does** (H9). Type the intake slots; state assumptions in one line. Pick archetype per beat and dense/sparse variant per how much synthesis data each beat carries.

**DO.** Build to `deck-spec.md`. For each beat: instantiate its archetype (layout grid + typed slots, honoring word caps), fill slots ONLY from SYNTHESIS (numbers) and TOKENS (style), attach the archetype's one hero motion + ≤3 supporting motions from `motion-grammar.md`. Wire the navigation contract and the reduced-motion gate once, globally. Every figure gets a visible source tag; every estimate an `EST` flag. Regenerate on any SYNTHESIS change — never hand-patch (functor law).

**REVIEW.** Run the H6 predicates + the design-rigor QA ladder (render → buyer read-through → CFO pass → sign-here check → contrast/mobile → slop pass) + the deck-spec acceptance checklist. Fix, regenerate, re-check the affected beats once.

**CAPTURE.** Mint ≥1 atom to `FACTORY/atoms.md`: an archetype that landed (`template`), a phrase that moved the buyer or visibly failed (`phrase`), a chart encoding that read cleanly. Format per `mint-atoms`. Note feedback traces to the exact slot/archetype/motion line that allowed the miss.

## H4 — Scale-native (N prospects)

- **Archetype library is shared and read-only** across all prospects this wave: the 8 archetypes, the motion grammar, `deck-spec.md`. Never fork the library per prospect — divergence there is a defect.
- **Per-prospect swap:** one `SYNTHESIS.md`, one `design/tokens.css` (the `--sf-*` values change; variable NAMES never do), one intake record. The same deck code renders any prospect by swapping the token block — this is the palette-agnostic property (`motion-grammar.md` §tokens).
- **Batch builds:** one sub-agent per prospect, context-complete packet (its SYNTHESIS + its tokens.css + `deck-spec.md` + `slide-archetypes.md`). Sub-agents build decks; they never edit the shared library and never introduce numbers.
- **Fan-in:** collect archetype/phrase atoms; dedupe into shared library atoms. A phrasing that lands across 3 prospects is promoted; one that fits a single deal stays instance-bound.

## H5 — Judgment lives in references

Which archetype variant, how many supporting motions, when to drop a beat — resolved in `slide-archetypes.md` and `motion-grammar.md`, not by feel. When in doubt: fewer beats, one hero motion per slide, more source tags.

## H6 — Checkable predicates (deck is DONE only if all hold)

- [ ] **Render:** deck opens offline; **zero console errors**; all fonts/assets embedded or CDN-with-offline-fallback (deck-spec §structure).
- [ ] **Bijection present:** the `offer-bijection` slide shows tells ↔ scope ↔ price with no orphan on either side (deferred tells labeled phase-2).
- [ ] **Numbers sourced:** every number on the deck exists in SYNTHESIS; every figure carries a visible source tag; every estimate an `EST` flag. Zero numbers absent from SYNTHESIS.
- [ ] **Tokens only:** all color/type/space come from `--sf-*` custom properties; no hard-coded hex/px for themed values (deck-spec §tokens).
- [ ] **Motion budget:** ≤1 hero + ≤3 supporting motions per slide; total slide choreography ≤2.5s to interactive rest (motion-grammar §sequencing).
- [ ] **Reduced-motion:** `prefers-reduced-motion` collapses all choreography to fades; no information is motion-only.
- [ ] **Accessibility:** every foreground/background pair meets WCAG AA from the token matrix; readable at 380px portrait.
- [ ] **Leave-behind:** someone who missed the meeting can follow the whole argument from the file alone.
- [ ] **Budget:** ≤2.5MB total; first paint <1s local; 60fps animations.
- [ ] **Audit:** a Stage-3b block covering this deck exists; ADJUSTED/UNVERIFIED items were corrected by regeneration.

## H8 — Core invariants

SYNTHESIS-only numbers (never introduced inside the deck, never copied artifact-to-artifact). Source tags visible on every figure; `EST` flags on every estimate. Plain language — no functor/bijection vocabulary on any slide; the buyer feels completeness, never sees the machinery. Regenerate on refined input; never hand-patch. Floor never shown, never breached. The sign-here bijection is the deck's skeleton.

## H9 — DONE predicate + refusal conditions

**DONE** when every H6 box is green, the design-rigor QA ladder passes, `deck-spec.md`'s acceptance checklist passes, the requested FORMAT(s) are emitted, and ≥1 atom is minted.

**Refuse to build** when: (1) the **Stage-3b citation audit has not passed** for the numbers in scope — a deck built on unaudited numbers is a losing deck; (2) a required number **has no SYNTHESIS source** — send it to the unknowns ledger and the auto-triage ladder, never invent a "plausible" figure; (3) TOKENS is missing and no prospect palette can be derived — fall back to CETI house style and log it, do not ship an unstyled deck.

## H10 — Feedback tracing

Buyer/human feedback traces to the exact line that allowed it: "wrong tone" → CHANGE_APPETITE or WARMTH mislabeled; "too dense on screen-share" → MEETING_CONTEXT read as in-room not remote; "the chart misled" → wrong encoding in the archetype's chart slot. Log to `FACTORY/feedback-loop.md`, fix at the slot/archetype/motion line, regenerate, mint the lesson as an atom. A run that mints no atom did not complete.

