Documents

officecli-pitch-deck

Try it

Build a stage-aware fundraising pitch deck (.pptx) with the 10-slide VC arc and credible numbers.

What it does

A scene layer on top of officecli-pptx that produces investor pitch decks as a single .pptx. Stage (Seed, Series A/B/C, Bridge/SAFE) is picked first and drives slide count, narrative weight, and which metrics are must-haves. Ships 10 key-slide recipes in a fixed order (cover, problem, solution, market, product, model, traction, team, financials, ask), vertical arc templates for B2B SaaS, Consumer, Deep Tech, and Marketplace, plus a pitch-specific Delivery Gate 6. Requires three-layer TAM/SAM/SOM, ARR curves that start at 0, four-bucket Use-of-Funds, team slide with prior-company credentials, and a fresh-eyes pass. Inherits pptx v2 visual floor, 12-column grid, palettes, connector canon, and…

When to use it

  • Drafting a Series A deck with PMF proof and unit economics
  • Producing a Series B deck with ARR curve, CAC/LTV, and payback
  • Building a consumer Series A with product visuals and "why now"
  • Assembling a deep tech Series B with benchmarks, TRL, and IP

The skill document

OfficeCLI Pitch Deck Skill

This skill is a scene layer on top of officecli-pptx. Every pptx hard rule — visual delivery floor (title ≥ 36pt / body ≥ 18pt / title ≥ 2× body), 12-column grid on 33.87×19.05cm, 4 canonical palettes, chart-choice decision table, connector canon (shape / from / to / tailEnd=triangle), shell escape, resident + batch, Delivery Gate 1–5a — is inherited, not re-taught. This file adds only what fundraising needs on top: stage diagnosis (A / B / C), 5 赛道 arc templates, 10 key-slide recipes (cover / problem / solution / market / product / model / traction / team / financials / ask), pitch-specific numbers convention, a VC ship-check, and a pitch-specific fresh-eyes Gate 6.

When the pptx base rules cover it, the text here says → see pptx v2 §X. Read skills/officecli-pptx/SKILL.md first if you have not.

Setup

If officecli is missing:

  • macOS / Linux: curl -fsSL https://d.officecli.ai/install.sh | bash
  • Windows (PowerShell): irm https://d.officecli.ai/install.ps1 | iex

Verify with officecli --version (open a new terminal if PATH hasn't picked up). If install fails, download a binary from https://github.com/iOfficeAI/OfficeCLI/releases.

⚠️ Help-First Rule

This skill teaches what a fundraising deck requires, not every command flag. When a prop name, enum value, or preset is uncertain, consult help BEFORE guessing.

officecli help pptx                          # All pptx elements
officecli help pptx                 # Full schema (e.g. chart, shape, connector, picture)
officecli help pptx  --json         # Machine-readable

Help reflects the installed CLI version. When this skill and help disagree, help wins. Every --prop X= in this file has been grep-verified against officecli help pptx — if help adds / renames a prop in a later version, trust help.

Mental Model & Inheritance

Inherits pptx v2. You should have read skills/officecli-pptx/SKILL.md first. This skill assumes you know how to: add slides + shapes + charts + connectors; address by @name= / @id=; quote paths; use batch heredocs; write --prop tailEnd=triangle on every flow connector; and run the 5-gate Delivery Gate. If any of those are unfamiliar, open a pptx v2 session before continuing.

Shell & Execution Discipline

Shell quoting, incremental execution, $FILE convention → see pptx v2 §Shell & Execution Discipline. Same rules verbatim — quote [N] paths, single-quote values containing $ (including $35M, $1.2B TAM in a cover or ask slide), never hand-write \$ \t \n in executable examples, one command at a time. Examples below use $FILE (FILE="deck.pptx").

Single-quote every shape text containing $. --prop text="Series B · $35M" (double quotes) is WRONG — zsh expands $35M → empty, deck renders Series B · M silently. --prop text='Series B · $35M' (single quotes) is right. This is the #1 pitch-deck shell-escape failure mode ($35M, $18M ARR, $1.2B TAM appear on cover/ask/financials/milestones). Gate 2 cannot detect a stripped $35M — no residue. Gate 2b catches common strip patterns; single-quoting PREVENTS them.

What "pitch deck" means here (identity)

A pitch deck is a pptx with a fundraising layer on top: VC-oriented narrative arc, verifiable metrics, stage-appropriate data density, founder-credibility surface. Slides are consumed at ~3 seconds per slide in a live room — the pptx v2 rule. Pitch decks add a second constraint on top: every slide carries one investable proposition. If a slide is "interesting background" that doesn't move the ask forward, cut it. VCs will not. The base pptx rules still apply; pitch decks add six deltas:

  1. Stage determines everything. Series A / B / C each dictates slide count, narrative weight, which metrics are must-haves, and tolerance for unit-econ sophistication. A Series A deck with 6 pages of CAC/LTV math reads as over-packaged; a Series B deck missing unit econ reads as incomplete. Pick the stage first — everything downstream follows.
  2. Narrative arc beats feature dump. 10 essential slides in a fixed order: cover → problem → solution → market → product → model → traction → team → financials → ask. Out of order = VCs disengage.
  3. Numbers are a contract. TAM/SAM/SOM must be clean three-layer; CAC/LTV must have a payback line; ARR ≠ revenue; Use-of-Funds must be a four-bucket pie. Sloppy numbers = round dies.
  4. Team slide carries prior companies. Avatar grid alone reads as a student project. Add prior-company logos / names + one-line role. Without this, first-time founders look exactly like first-time founders.
  5. Traction chart y-axis starts at 0. A "hockey stick" starting at y_min = 80% of current is a visual lie — VCs who have seen 10,000 decks spot it in < 2 seconds.
  6. The ask is a slide, not a footnote. $XX M hero + four-bucket Use-of-Funds + runway length. "We're raising some money" is not an ask.

Reverse handoff — when to go BACK to pptx base

Stay in pptx v2 base for board reviews, all-hands, sales decks, product launches, training decks — anything not tied to raising capital. Use this skill only when: (a) the user mentions a specific round (seed / Series A / B / C) or a VC meeting, AND (b) the deck needs at least 4 of {problem, traction, team with credentials, Use-of-Funds, stage-appropriate unit econ, financial projections}.

If the user says "fundraising deck" but the context is a corporate BU quarterly ask, that is a board review. Route to pptx v2 Recipe (d) 10-slide blueprint. If the user says "board review" but the context is a small company raising a bridge round, route here.

Series A / B / C stage diagnosis (decision tool)

Read this before writing a single command. Pick the row that matches the user's description — everything downstream (slide count, which metrics, which recipes, what the team slide must show) derives from this one call.

StageRevenue bandTeamSlide countDominant narrative (weight)Must-have dataCommon red flag
Seed$0 – $1M ARR (often pre-rev)2 – 8 FTE10 – 12Problem (30%) + Solution (25%) + Team (15%) + Market (15%) + Traction (15%)Founder-market fit story; 1 – 2 design-partner / pilot logos; top-down TAM okOver-claiming traction (10 customers = "market proven")
Series A$1 – $5M ARR10 – 25 FTE12 – 16Problem (20%) + Solution (20%) + Market "why now" (15%) + Product (15%) + Traction (20%) + Team (10%)PMF proof (NRR > 110%, low churn), bottom-up TAM/SAM, pipeline / pilots convertedBottom-up TAM feels fabricated; CAC not yet meaningful but shown anyway
Series B$5 – $30M ARR30 – 100 FTE18 – 22Traction + Unit econ (30%) + Market + Product + Team + Financials (ask)ARR curve starting at 0; NRR, CAC, LTV, payback (< 18 mo ideal); cohort retention; logo wallNo unit-econ slide; CAC payback > 24mo without explanation; Use-of-Funds missing %
Series C$30M+ ARR100+ FTE20 – 24Financials + Scale + Moat (40%) + Market expansion + Team depthMulti-year GAAP, rule-of-40, GM trajectory, international expansion plan, defensibilityNo moat slide; revenue growth without margin story; team slide has no prior CEO / CFO
Bridge / SAFEanyany8 – 10Specific bridge reason + runway math + commitmentsPrior round context; specific milestone the bridge funds; committed investor amountTreating a bridge like a Series A — too many slides dilutes the ask

Decision procedure. From one or two user sentences ("Series B, $18M ARR, 120 customers, $35M raise"), pick exactly one stage row. All later choices in this skill reference your stage: which 赛道 template to pull, which recipes are mandatory vs optional, and which Delivery Gate 6 checks fire.

Corner cases. Bridge rounds & convertibles between A → B are closer to A or B depending on whether the bridge milestone is "finish PMF" (A shape) or "hit unit-econ target" (B shape). "Extension" rounds at the same stage reuse the earlier stage's skeleton and add a one-slide "progress since last round" update.

Non-SaaS stage overrides. The ARR / unit-econ shape of Series B fits SaaS. For other verticals, substitute revenue band + unit-econ equivalent + Gate 6.3 grep:

VerticalRevenue "band" at Series B"Unit econ" equivalentGate 6.3 substitute
Bio / Clinical-stagepre-rev, 20–60 FTEburn rate + runway to next milestone (IND / Ph1 readout / BLA)shape:contains("ORR") OR contains("Pipeline") OR contains("BLA") OR contains("runway") ≥ 1
Deep Tech / Frontierpre-rev or early pilot revtechnical milestones + TRL level + benchmark vs SoTAshape:contains("TRL") OR contains("benchmark") ≥ 1
Marketplace / NetworkGMV $10–100Mtake rate + cohort retention + liquidityshape:contains("GMV") + contains("take rate") ≥ 1
Consumer hardware$2–15M revenue (shipped units)contribution margin + repeat rate + blended CACshape:contains("repeat") OR contains("contribution") ≥ 1

Substitute the analogue grep when running Gate 6.3 on these verticals. False WARN on SaaS CAC/LTV = expected; real concern = vertical-specific analogue present. Bio Series B decks especially: burn + runway-to-milestone IS the "unit econ" story.

赛道 arc templates (5 families)

5 mainstream verticals. Each one has different slide weights because what VCs require as proof-of-concept differs. Pick the vertical row; the slide skeleton is a copy-able starting point. Slide counts assume the matching stage row above.

(1) B2B SaaS / Enterprise software

Canonical arc — the template most of VC muscle memory is built on. Series B example (20 slides): cover · TL;DR · problem · problem evidence · solution · product loop · market TAM/SAM/SOM · unit economics (CAC / LTV / payback / GM) · ARR trajectory · retention cohort · logo wall · team · competitors · financials 4-year · ask. Must-have: unit-econ slide from Series A onward; logo wall from Series B onward.

(2) Consumer (B2C app / consumer hardware / D2C)

Narrative-driven. Early-stage decks lean on product-experience screenshots + founding story + "why now" market timing; lighter on unit econ (which are usually weaker than SaaS). Series A example (14 slides): cover · hook (30-second product demo or 1-line vision) · problem (lived experience) · solution (product shots) · product-experience flow · "why now" market window · pre-order / crowdfunding / early-sales evidence · retention / engagement (DAU, D30) · market (top-down ok if bottom-up unreliable) · competitive positioning · founder story + team · press / endorsements · financials · ask. Must-have: product visuals on ≥ 3 slides; "why now" slide (window justification); engagement metric not just revenue.

(3) Deep Tech / Frontier tech (AI foundation models, quantum, climate hardware, robotics)

Technology credibility is the sell. Pre-revenue deep tech replaces "traction" with technical milestones + defensibility. Series B example (22 slides): cover · thesis (one-line "what changes if this works") · problem (current state of art) · solution (technical approach) · technology architecture · benchmarks vs SoTA · pipeline / TRL levels · market (long-tail) · business model · early commercial traction (pilots, LOIs) · IP / patents · team (usually PhD / ex-FAANG-research) · partners · financials · ask. Must-have: benchmark slide; IP slide; team slide dense with PhDs / prior-lab names.

(4) Marketplace / Network business (two-sided platform, social, commerce)

Liquidity is the metric. Replace "unit econ" with GMV + take rate + cohort retention + supply / demand balance. Series A example (15 slides): cover · problem (friction in current supply-demand) · solution · product demo (both sides) · network effects diagram · early liquidity (first-week GMV, time-to-match) · cohort retention · geographic / category expansion plan · competitive positioning vs incumbents · take-rate model · team · financials · ask. Must-have: liquidity metric slide; cohort retention chart; network-effect diagram.

(5) Bio / Life sciences / Healthtech

Regulatory pipeline IS the business. Replace "product roadmap" with clinical pipeline + regulatory path + scientific evidence. Series B example (22 slides): cover · unmet medical need · scientific rationale (mechanism of action) · preclinical / clinical data (ORR, safety, endpoints) · pipeline chart (candidates × stages × dates) · differentiation vs standard of care · IP / exclusivity · regulatory strategy (IND, BTD, fast-track) · market (prevalence × pricing) · commercial strategy (orphan / specialty / biosimilar) · partnerships / collaborations · team (CSO / CMO with prior FDA wins) · financials (burn to next milestone) · ask. Must-have: pipeline chart; clinical data slide; team slide with prior regulatory wins.

Cross-vertical rule. You can mix elements across templates, but never drop a must-have from your primary vertical. A SaaS deck missing unit econ, a bio deck missing a pipeline chart, a marketplace deck missing a liquidity metric — each is an instant VC disqualification.

Slide Patterns (layout canon)

Patterns are layout geometry; recipes below are narrative intent. A slide picks one pattern for its visual shape (6 canonical ones below) and one recipe for what it argues (cover / problem / traction / ...). Multiple recipes can share one pattern — Problem / Why-Now / Traction-callout all lean on the 3-stat row (C.2). Pick the pattern first, then fill it with recipe content.

Speaker notes rule. Every content slide (non-cover, non-closing) MUST carry speaker notes via officecli add "$FILE" /slide[N] --type notes --prop text='…'. Missing notes = not shippable — inherits pptx v2 §Hard rules (H7). Run officecli help pptx notes to confirm prop names before building.

Pattern reuse discipline. Never run the same pattern on two consecutive slides — even with different data, two identical geometries in a row read as a template loop. Alternate C.2 with C.4 or C.5b to break rhythm.

Vertical centering. When a slide carries fewer elements than the pattern's maximum, nudge y-positions down 2–3cm to center the visual weight. Tables below assume full content.

C.1 Title / Cover (dark gradient)

3–4 text shapes on a gradient fill. Slide 1 in every deck.

+----------------------------------+
|                                  |
|          TITLE (centered)        |
|          tagline                 |
|                                  |
|   round · amount · date          |
|  ________________________        |  <- thin brand band
+----------------------------------+
ElementXYWidthHeightFont / size
Title2cm5cm29.87cm4cmserif bold, ≥ 36pt (44 typical)
Tagline2cm10cm29.87cm2cmsans 18–22pt
Meta (round · $ · date)2cm13cm29.87cm1.5cmsans 12–16pt

Use this when the slide is the first one (Cover recipe 1) — 3-second identity grab. Background is a 180° linear gradient between two dark palette shades (e.g. Professional Navy 1E2761 → 0D1F35). If the title wraps to 2 lines, add height (4cm → 5cm), never drop font below 36pt — sub-36pt on a pitch cover reads as timid regardless of content. Transition: fade.

C.2 3-Stat callout row

Title + 3 big-number / label pairs across. The default for Problem / Why-Now / Traction-callout slides.

+----------------------------------+
|  Title                           |
|                                  |
|   73%      12hr      $4.2B       |
|   label    label     label       |
|   source   source    source      |
+----------------------------------+
ElementXYWidthHeightFont / size
Title1.5cm1cm30.87cm3cmserif bold ≥ 36pt
Stat 1 number2cm5cm9cm4cmserif bold 60–64pt
Stat 1 label2cm9.5cm9cm2cmsans ≥ 16pt (H4 floor)
Stat 2 number / label12.5cm(same)9cm(same)(same)
Stat 3 number / label23cm(same)9cm(same)(same)

Use this when you have 2–3 anchoring numbers and the story is "three facts argue the point" — Problem, Why-Now, Market-callout, single-row Traction. Labels ≥ 16pt is the H4 floor (sub-label exception); a number without a label reads as bravado, so never drop labels to 12–14pt to fit more text.

C.3 4-Stat callout row

Same geometry as C.2 but 4 columns. Numbers 60pt, width 7cm each.

+-------------------------------------+
|  Title                              |
|                                     |
|  73%   12hr   $9M   4.2x            |
|  lbl   lbl    lbl   lbl             |
+-------------------------------------+
ElementX positionsYWidthHeightFont / size
Title1.5cm1cm30.87cm3cmserif bold 36pt
Stat numbers1.5 / 9.5 / 17.5 / 25.5cm5cm7cm4cmserif bold 60pt
Stat labels(same X)9.5cm7cm2cmsans ≥ 16pt

Use this when exactly 4 parallel metrics tell the story and 3 feels under-counted. Prefer C.2 if in doubt — 4 always feels tighter than 3, and wrap risk is real.

Wrap warning. At 60pt in 7cm width, dollar patterns with both $ and . fail: $9.4M is 5 glyphs but the wide $ and . in a serif bold make it wrap to 2 lines and destroy the callout. Safe dollar shapes at 60pt/7cm: $9M, $96B, $4K (3–4 chars). Non-dollar shapes: 340%, 4.2x, 12.3 safe up to 5 chars. Values ≥ 6 chars (197min, 3 Days) will wrap — either (a) drop font to 44–48pt, (b) abbreviate (197m, $9M), or (c) shift to C.2 (9cm per stat). Single tokens only, no internal spaces.

C.4 Chart + Context (chart left, stats right)

Chart takes left 55%, 2–3 stacked callouts on the right. The default for Traction / Financials / Market-sizing-with-context.

+-------------------------------------+
|  Title                              |
|                                     |
|  +---------------+   +--------+     |
|  |               |   | Stat 1 |     |
|  |    chart      |   +--------+     |
|  |               |   | Stat 2 |     |
|  +---------------+   +--------+     |
+-------------------------------------+
ElementXYWidthHeight
Title2cm1cm29.87cm3cm
Chart2cm4cm17cm13cm
Stats column21cm4cm+11cm2.5cm number + 1.5cm label (~3.7cm per pair)

Sub-labels ≥ 16pt (H4 floor). For 5 stats stacked, drop number size to 44pt; 6+ stats means pick a different pattern. Post-batch for column/bar charts: officecli set "$FILE" "/slide[N]/chart[1]" --prop gap=80 to tighten bar spacing.

Use this when one primary chart drives the story and 2–3 numeric anchors reinforce it — Traction (ARR curve + current ARR + YoY + NRR), Financials (4-year column chart + assumption callouts), Market (bar chart + SOM / CAGR / methodology).

C.5 Icon-in-circle grid (3-row vertical)

3 vertical rows, each = circle icon on the left + title + 1-line description.

+---------------------------------------+
|  Title                                |
|                                       |
|  (o)  Label one                       |
|       description one                 |
|                                       |
|  (o)  Label two                       |
|       description two                 |
|                                       |
|  (o)  Label three                     |
|       description three               |
+---------------------------------------+
ElementXY positionsWidthHeightFont / size
Icon circle2cm4.5 / 8.5 / 12.5cm2.5cm2.5cmellipse, accent fill
Label5.5cm(icon Y + 0)25cm1.2cmsans bold 18pt
Description5.5cm(icon Y + 1.3cm)25cm1.8cmsans ≥ 16pt (H4 floor), muted

Use this when you have 3 short vertical points that benefit from a visual anchor per row — Solution mechanism, Value pillars, Product loop. Choose C.5b (2×2 grid) when items are parallel and you have exactly 4; choose a horizontal 5-across variant when icons should read side-by-side (e.g. 5-step process).

C.5b 2×2 Feature grid (4 parallel items)

4 rounded cards, 2 columns × 2 rows. Use when you have exactly 4 parallel items (product pillars, service types, feature quadrants).

+-----------------------------+
|  Title                      |
|                             |
|  +---------+  +---------+   |
|  | (o) T1  |  | (o) T2  |   |
|  | body    |  | body    |   |
|  +---------+  +---------+   |
|  +---------+  +---------+   |
|  | (o) T3  |  | (o) T4  |   |
|  | body    |  | body    |   |
|  +---------+  +---------+   |
+-----------------------------+
ElementXYWidthHeightFont / size
Slide title2cm1cm29.87cm2.5cmserif bold 32pt
Card 1 bg (top-left)1.5cm4cm14.5cm7cmroundRect
Card 2 bg (top-right)17.5cm4cm14.5cm7cmroundRect
Card 3 bg (bottom-left)1.5cm12cm14.5cm7cmroundRect
Card 4 bg (bottom-right)17.5cm12cm14.5cm7cmroundRect
Icon ellipse (each card)card_x + 0.5cmcard_y + 0.5cm2cm2cm
Card title (each)card_x + 3.2cmcard_y + 0.6cm10.5cm1.8cmsans bold 16pt
Card body (each)card_x + 0.5cmcard_y + 3cm13cm3.5cmsans ≥ 16pt (H4 floor)

Use this when you have exactly 4 parallel items and the eye should land on each equally — 4 product pillars, 4 service tiers, 4 stakeholder types. 3 items feel lonely in a 2×2; 5+ items break the grid — go to a 3×2 (see pptx v2 §(d) grid math) or C.5 row pattern.

Z-order canon (critical). Each card's roundRect background must be added immediately before that card's icon / title / body shapes in the batch JSON — pptx paints in insertion order, so a background added after its text paints over and hides the text. When building with officecli batch, follow the per-card sequence bg → ellipse → title → body strictly. Pattern and z-order details → see pptx v2 §Recipe (c) z-order canon; reuse grid math from pptx v2 §(d) for non-2×2 counts.

Dark-background variant. Change card fill from F0F4F8 (light) to a lighter-dark shade like 1A2540 and bump body text to FFFFFF / E8E8E8. Palette variables (e.g. $MUTED) do NOT expand inside single-quoted heredocs — write the literal hex (64748B) in the JSON.


Key-slide recipes (10 essentials)

The 10 slides every pitch deck carries. Each recipe below gives: visual outcome (what the slide looks like from 3m away) + runnable block (≤ 18 lines) + QA one-liner. All recipes inherit pptx v2 palettes, grid math, type hierarchy, and --prop tailEnd=triangle on every connector. Recipes reference the Slide Patterns above: Cover reuses C.1; Problem / Why-Now reuse C.2; Traction / Financials reuse C.4; Feature / pillar slides reuse C.5b. $FILE is your deck file.

Long-title wrap rule. A 36pt+ title that wraps to 2 lines: add height (e.g. 2cm → 3.5cm) — never drop the font below 36pt. Titles < 36pt on a pitch deck read as timid regardless of content.

Chart series1.color= on add works (applies to every chart recipe below). Passing --prop series1.color= (or series2.color=, …) on chart add applies the series color and exits 0. Verify with a readback if you like: officecli get "$FILE" "/slide[N]/chart[1]/series[1]" --json | jq '.data.results[0].format.color'.

(1) Cover slide — company · tagline · round · date

Visual outcome. Dark navy fill, centered 44pt company name, 20pt one-line tagline underneath, small 16pt meta line at the bottom with round + amount + date. Thin brand band at the very bottom (0.5cm high) in the accent color.

officecli add "$FILE" / --type slide --prop layout=blank --prop background=1E2761
officecli add "$FILE" "/slide[1]" --type shape --prop name=BrandBand \
  --prop geometry=rect --prop fill=CADCFC \
  --prop x=0cm --prop y=18.5cm --prop width=33.87cm --prop height=0.55cm
officecli add "$FILE" "/slide[1]" --type shape --prop name=CoverTitle --prop text="Acme DevOps" \
  --prop x=2cm --prop y=7cm --prop width=29.87cm --prop height=3cm \
  --prop font=Georgia --prop size=44 --prop bold=true --prop color=FFFFFF --prop align=center --prop fill=none
officecli add "$FILE" "/slide[1]" --type shape --prop name=Tagline --prop text="Kubernetes observability, built for production at scale" \
  --prop x=2cm --prop y=10.5cm --prop width=29.87cm --prop height=1.5cm \
  --prop font=Calibri --prop size=20 --prop color=CADCFC --prop align=center --prop fill=none
officecli add "$FILE" "/slide[1]" --type shape --prop name=CoverMeta --prop text='Series B · $35M · April 2026' \
  --prop x=2cm --prop y=15cm --prop width=29.87cm --prop height=1.2cm \
  --prop font=Calibri --prop size=16 --prop color=FFFFFF --prop align=center --prop fill=none

QA. Cover has 4 discrete elements (brand band + title + tagline + meta). 80%-whitespace covers fail the pptx "cover ≥ 60% filled" floor.

Consumer variant (3-second grab). Consumer decks (B2C app / hardware / D2C) should add a single dominant motif — hero product shot, oversized company name (60–96pt), or symbolic mark (crescent moon / abstract geometric). Replace the 44pt title with an 80–96pt name + one motif shape (--type shape --prop geometry=ellipse --prop fill= for an abstract mark, or picture at ~40% of slide for a product hero). Keep tagline + round + date identical. SaaS / B2B may skip — the typographic-only cover is sufficient.

(2) Problem slide — industry pain in 1 sentence + 3 data cards

Visual outcome. 36pt title stating the pain (not "The Problem"). Below, three equal-width data cards across the slide: each a giant number (40pt) + one-line qualifier (16pt) + source footnote (12pt gray).

Grid math for 3 cards, 1.5cm margins, 0.76cm gap: usable = 33.87 − 3 − 2·0.76 = 29.35, col_width = 29.35 / 3 = 9.78cm. x-positions: 1.5 / 12.04 / 22.58.

SLIDE=2  # second slide, after cover. Adjust from your build order.
officecli add "$FILE" / --type slide --prop layout=blank --prop background=FFFFFF
officecli add "$FILE" "/slide[$SLIDE]" --type shape --prop text="Kubernetes debugging burns 12 engineering hours / incident" \
  --prop x=1.5cm --prop y=1.2cm --prop width=30.87cm --prop height=2.5cm \
  --prop font=Georgia --prop size=36 --prop bold=true --prop color=1E2761 --prop fill=none
cat < 1 hour to diagnose","x":"1.5cm","y":"9.5cm","width":"9.78cm","height":"3cm","font":"Calibri","size":"18","color":"333333","align":"center","fill":"none"}},
  {"command":"add","parent":"/slide[$SLIDE]","type":"shape","props":{"text":"Source: 2025 DORA Report","x":"1.5cm","y":"13cm","width":"9.78cm","height":"1cm","font":"Calibri","size":"12","italic":"true","color":"666666","align":"center","fill":"none"}}
]
EOF
# Repeat the 4-block pattern at x=12.04cm and x=22.58cm for cards 2 and 3.

QA. officecli query "$FILE" 'shape:contains("Source")' returns ≥ 3 (every claim carries a source). If zero sources, VCs will not trust a single number.

(2b) Why Now slide — Consumer / Seed / early A must-have

Visual outcome. 3 cards across: each = trigger headline (24pt bold) + data point (60pt number or date) + one-line implication (16pt) + source footnote (12pt gray). Reuse Problem grid math (col=9.78cm, x = 1.5 / 12.04 / 22.58). §赛道 Consumer row 2 must-have; Seed / early A in any vertical benefits when "market window" IS the thesis.

SLIDE=3
officecli add "$FILE" / --type slide --prop layout=blank --prop background=FFFFFF
officecli add "$FILE" "/slide[$SLIDE]" --type shape --prop text="Why now: three converging triggers" \
  --prop x=1.5cm --prop y=1.2cm --prop width=30.87cm --prop height=2.5cm \
  --prop font=Georgia --prop size=36 --prop bold=true --prop color=1E2761 --prop fill=none
# Card 1 (x=1.5cm) — trigger / data / implication / source. Repeat at x=12.04cm and x=22.58cm.
cat < 100% acceptable, > 115% strong, > 130% exceptional |
| **CAC** | $ fully-loaded | Sales + marketing spend / new logos acquired |
| **LTV** | $ | ARPU × gross margin × (1 / churn rate) |
| **LTV:CAC** | ratio | VC floor: 3x OK, > 4x strong, > 5x exceptional |
| **CAC payback** | months | VC floor: < 18 mo OK, < 12 mo strong |
| **Gross margin** | % | SaaS floor 70%, strong 80%+; marketplace 15-40%; hardware 30-50% |
| **Burn / runway** | $/month + months | Gross burn vs net burn — label which; runway to specific milestone |
| **Use of Funds** | 4-bucket pie | Engineering / Go-to-Market / G&A / Reserve — see Ask slide recipe |

**Rule.** Every number on a deck carries a unit. `18%` or `18M` alone is ambiguous — write `$18M ARR` / `18% NRR growth`. `TBD`, `coming soon`, `(fill in)`, `lorem`, `xxxx` in numeric slots = immediate VC disqualification. Gate 6 greps these below.

## VC ship-check (6 red flags / positive signals)

What the VC reads in the first 30 seconds. Six one-line conditions — every "FAIL" below is an instant round-killer; fix before delivering.

| # | Red flag (FAIL if present) | Positive signal (shipwise) |
|---|---|---|
| 1 | Cover without round + amount + date | `Company · tagline · Series X · $YM · Date` in 4 lines |
| 2 | TAM > $100B without a cited source / methodology | TAM clearly labeled bottom-up OR top-down with a visible 2024+ source |
| 3 | Traction chart y-axis does not start at 0 (hockey-stick lie) | Line chart `axismin=0`; growth shape honest |
| 4 | Team slide: headshots + names only, no prior companies | Every member: prior company + role + 1 achievement metric |
| 5 | Ask slide missing Use-of-Funds breakdown | `$XM` hero + 4-bucket pie (Eng / GTM / G&A / Reserve) + runway + next milestone |
| 6 | `TBD` / `lorem` / `xxxx` / `{{...}}` / `(fill in)` anywhere | `view text` clean — zero placeholder tokens |

**Common Series-specific failures.**
- **Series A specific** — bottom-up TAM calculated from a fictional enterprise-count × ACV (no reference customers to anchor the count); `CAC / LTV` shown with < 12 months of data (statistically meaningless).
- **Series B specific** — no unit-econ slide at all; CAC payback > 24 months without a "we're pre-scale, here's the plan" narrative; logo wall < 8 customers.
- **Series C specific** — no moat / defensibility slide; revenue growth shown without margin trajectory; international expansion stated but no specific launch plan / hires.

The Delivery Gate 6 block below executes checks 1–6 above via grep + query. Gate 5b fresh-eyes covers the visual judgments (hockey stick, team credibility) that grep can't see.

## Traction triple-pattern (ARR + milestones + logos)

For Series B+, traction often spans 2 slides: one for the chart + callout (recipe 7 above), one for **milestone timeline + logo wall**. Timeline = 4-6 horizontal dates with one-line events. Logo wall = 12-20 customer logos in a 4×N or 5×N grid, muted monochrome so no single brand dominates.

```bash
# Milestone timeline: 5 dates as circles on a horizontal line at y=8cm.
# Use pptx shapes (ellipse preset) + connectors (shape=straight) between them.
# Each milestone = ellipse at y=8cm + date label above + event description below.
# → See pptx v2 Recipe (d) row 9 (Roadmap timeline) for the canonical pattern.

# Logo wall: pictures in a 5×N grid. Typical spacing: logo width = 5cm, height = 2cm, gap = 0.4cm.
# grid math for 5 logos across, 1.5cm edge margin: usable = 33.87 − 3 − 4·0.4 = 29.27, col = 5.85cm
# (use 5cm logo width centered in each 5.85cm column)

QA. Logo wall should have ≥ 8 logos for Series B+, ≥ 4 for Series A. Fewer = "lighter than it looks"; more than 20 = pixel noise.

QA — Delivery Gate (executable)

Assume there are problems. First render is almost never correct. Pitch decks fail at two layers: structural (schema, token leaks — caught by pptx v2 Gates 1–3) and narrative (wrong stage, missing unit econ, TAM unsourced — the checks that make pptx v2 Gate 5b + Gate 6 indispensable). Every check must print its success message.

Gates 1–5a — inherited from pptx v2 verbatim

→ see pptx v2 §Delivery Gate L637-679. Copy-paste the full block:

  • Gate 1validate schema check (whitelist ChartShapeProperties warnings per C-P-2).
  • Gate 2 — token leak via view text grep ($xxx$, {{...}}, ``, lorem, xxxx, empty ()/[], \$/\t/\n literals).
  • Gate 3 — hyperlink rPr schema trap (C-P-1) — zero ``.
  • Gate 4 — slide-order sanity — cover first, dividers before sections, closing last.
  • Gate 5a — dark-on-dark contrast — every fill in {1E2761, 0A1628, 8B1A1A, 2C5F2D, 36454F} must declare near-white textColor. This includes charts rendered on that fill: chart title.textColor, legend.textColor, axis text default to dark and read as invisible on dark backgrounds — set them explicitly, or place the chart on a light card inside the dark slide.

Do not skip or reorder these five. Every pptx-layer defect caught by Gates 1–5a also fires on pitch decks.

Gate 2b — pitch-specific shell-strip signatures (MANDATORY). Gate 2 misses $35M that zsh silently stripped to empty (no residue to grep). Run this after Gate 2:

# $XXM stripped by zsh leaves bare " M ARR" / " M raised" / "Series [A-C] · M" patterns.
STRIP=$(officecli view "$FILE" text | grep -niE '(^|[^A-Za-z0-9])M (ARR|raised|Series|runway|round|raise)|Series [A-C] · M( |$)|runway · M|raised · M|raising ·? M')
[ -z "$STRIP" ] && echo "Gate 2b OK (no \$-strip signatures)" || { echo "REJECT Gate 2b (likely zsh \$-strip — re-issue with single quotes):"; echo "$STRIP"; exit 1; }

Fix: re-issue the offending add/set with single quotes around the text value (--prop text='Series B · $35M', not double quotes). The same strip hits chart series names / axis titles (--prop name="营收 ($M)" → legend shows 营收 ()): single-quote every chart prop carrying $.

Gate 5b — Visual audit via HTML preview (MANDATORY, NOT optional)

Gates 1–5a are token-grep defenses. They cannot see a rendered slide. This step is the only visual-assembly check. Do not skip.

Run officecli view "$FILE" html and Read the returned HTML. Walk every slide and answer, for EACH (inherits pptx v2 Gate 5b checklist; pitch-specific additions marked ⭐):

  • overlap: do any text shapes overlap each other or a chart?
  • dark-on-dark: is any text on a fill where fill brightness < 30% AND text brightness < 80%?
  • divider overlap: any giant decorative number (01/02/03 at 100pt+) colliding with the divider title text?
  • order sanity: does the slide sequence match your stage-appropriate narrative outline?
  • missing arrowheads: do flowchart/decision-tree connectors show direction, or plain lines?
  • traction y-axis: does every ARR / revenue / growth line chart start at 0 on the y-axis? (Not 80% of current — that is the hockey-stick lie.)
  • team credibility: does every team-slide card show a prior company or prior title? (Cards with just headshot + name = reject.)
  • TAM / market number credibility: is the TAM under $100B for a niche market, or if ≥ $100B, is a methodology source cited? (A claimed $500B TAM with no source is an auto-reject red flag.)
  • Use-of-Funds pie: does the ask slide carry a 4-bucket pie (Engineering / GTM / G&A / Reserve) or a 4-card row with %s?
  • narrative completeness: is the order cover → problem → solution → market → product → model → traction → team → financials → ask, or your stage-appropriate permutation from §Stage diagnosis?

Instruction. Run officecli view "$FILE" html and Read the HTML. Walk every slide against the questions below. If rendering chart colors, animations, or zoom — those only show in the target viewer (PowerPoint / Keynote / WPS); ask the user to open .pptx directly for those runtime features.

For every slide: (a) Are slides in VC narrative order (cover → problem → solution → market → product → model → traction → team → financials → ask, with your stage's adjustments)? Flag any out-of-sequence. (b) Is every ARR / revenue / growth line chart y-axis anchored at 0? Flag hockey-stick visual lies. (c) Does the team slide carry prior-company credentials for each person? (Not just headshot + name.) (d) Does every TAM / SAM / SOM claim have a visible source or methodology? (e) Does the ask slide have a 4-bucket Use of Funds (Engineering / GTM / G&A / Reserve) and a specific next milestone + runway length? (f) Any text overlap, dark-on-dark, off-slide geometry, missing arrowheads, placeholder tokens (TBD / lorem / {{...}} / xxxx / empty ())?

Report every instance with slide number. If ANY defect — REJECT; do not deliver until fixed.

Human preview (optional). If you want the user to visually preview the deck, run officecli watch "$FILE" for a live preview the user can open at their own discretion, or have them open the .pptx directly in PowerPoint / WPS / Keynote. For final visual verification, open the file in the target presentation viewer.

Gate 6 — Pitch narrative sanity (executable)

Pitch-specific checks that grep the deck for VC red flags. Every one is a token check — combine with Gate 5b's human read for full coverage.

FILE="deck.pptx"

# 6.1 — no TBD / lorem / placeholder tokens (stronger than Gate 2 — pitch-specific scope)
LEAK=$(officecli view "$FILE" text | grep -niE 'TBD|lorem|\(fill in\)|xxxx|coming soon|placeholder')
[ -z "$LEAK" ] && echo "Gate 6.1 OK (no placeholder tokens)" || { echo "REJECT Gate 6.1:"; echo "$LEAK"; exit 1; }

# 6.2 — TAM / SAM / SOM presence (Series A+)
TAM_HIT=$(officecli query "$FILE" 'shape:contains("TAM")' --json | jq '.data.results | length')
[ "$TAM_HIT" -ge 1 ] && echo "Gate 6.2 OK (TAM slide present)" || echo "WARN Gate 6.2: no TAM mention — confirm stage is Seed / Bridge if intentional"

# 6.3 — Unit econ presence (Series B+): CAC OR LTV OR payback
CAC_HIT=$(officecli query "$FILE" 'shape:contains("CAC")' --json | jq '.data.results | length')
LTV_HIT=$(officecli query "$FILE" 'shape:contains("LTV")' --json | jq '.data.results | length')
if [ "$CAC_HIT" -ge 1 ] || [ "$LTV_HIT" -ge 1 ]; then
  echo "Gate 6.3 OK (unit econ surface)"
else
  echo "WARN Gate 6.3: no CAC / LTV — confirm stage Seed/A if intentional, REJECT if Series B+"
fi

# 6.4 — Use of Funds present on ask slide
UOF_HIT=$(officecli query "$FILE" 'shape:contains("Use of Funds")' --json | jq '.data.results | length')
[ "$UOF_HIT" -ge 1 ] && echo "Gate 6.4 OK (Use of Funds)" || { echo "REJECT Gate 6.4: ask slide missing Use of Funds"; exit 1; }

# 6.5 — Team prior-company signal (at least one of ex- / former / prior / previously)
PRIOR_HIT=$(officecli view "$FILE" text | grep -ciE '\b(ex-|former|prior|previously)\b')
[ "$PRIOR_HIT" -ge 1 ] && echo "Gate 6.5 OK (team prior-company)" || { echo "REJECT Gate 6.5: team slide has no prior-company credentials"; exit 1; }

# 6.6 — Traction chart y-axis anchored at 0 (at least one chart must set axismin=0, Series A+)
AXISMIN_HIT=$(officecli query "$FILE" 'chart' --json | jq '[.data.results[]? | select(.format.axisMin == "0" or .format.axisMin == 0 or .format.axismin == "0" or .format.axismin == 0)] | length')
[ "$AXISMIN_HIT" -ge 1 ] && echo "Gate 6.6 OK (traction chart axisMin=0)" || echo "WARN Gate 6.6: no chart sets axisMin=0 — confirm no ARR/revenue line chart, or add --prop axismin=0"

echo "Delivery Gate 6 PASS (token + narrative checks) — proceed to Gate 5b fresh-eyes (MANDATORY)"

Readback key note. CLI accepts lowercase axismin as input (on --prop axismin=0) but emits camelCase axisMin in query --json readback. The jq above accepts bo

Related skills

Create, edit, and inspect .pptx files from the officecli CLI with built-in design rules.

24 installs

Generate research-backed pitch decks, business presentations, and educational slides as PDF or editable PPTX.

213 installs8 stars

Create or redesign PowerPoint and slide decks into clear, modern presentation materials. Use for PPT layout, visual hierarchy, storytelling, classroom reports, product decks, and presentation design review.

2 installs

Create, edit, and analyze PowerPoint presentations. Invoke when user asks about PPT, slides, presentations, or needs to create/modify .pptx files.

by xztzmr

Generate .pptx decks with PowerPoint Morph transitions where shapes move, grow, and rotate across adjacent slides.

16 installs