{
  "spec": "quick-html/v0",
  "id": "pitch-deck",
  "version": "0.1.0",
  "name": "Pitch Deck",
  "description": "The classic outward-facing startup pitch deck as one 4:3 HTML file: problem, solution, market, product, traction with a bar chart, business model, competition, team and the ask. Pick it when a founder must convince investors or a first customer who do not know the company yet.",
  "useWhen": [
    "pitch deck",
    "investor deck",
    "seed round deck",
    "series a deck",
    "fundraising deck",
    "startup pitch",
    "raise a round",
    "vc pitch",
    "demo day deck",
    "sales pitch deck",
    "investeerderspitch",
    "pitchdeck maken",
    "Investorenpitch",
    "deck de levee de fonds"
  ],
  "format": "deck",
  "theme": "marketing",
  "audience": [
    "small-business",
    "exec",
    "sales"
  ],
  "tags": [
    "startup",
    "investor",
    "fundraising",
    "pitch",
    "slides"
  ],
  "language": "en",
  "modules": [
    "deck-runtime",
    "edit-overlay",
    "print-helper"
  ],
  "slots": [
    {
      "name": "doc-title",
      "type": "text",
      "required": true,
      "example": "Ohmwise B.V. · seed round · pitch deck",
      "notes": "Browser tab title, and the filename the Edit module downloads. Company, round, document type."
    },
    {
      "name": "cover-company",
      "type": "text",
      "required": true,
      "example": "Ohmwise B.V.",
      "notes": "Legal or trading name. The deck runtime copies this into the footer of every slide, so it is written once here and nowhere else."
    },
    {
      "name": "cover-pitch",
      "type": "text",
      "required": true,
      "example": "Every electric van's battery, scored daily, from data the fleet already sends",
      "notes": "The whole company in one line: what you do, for whom, and the unfair bit. 60-85 chars; it is set at 2,5em and must not run past three lines."
    },
    {
      "name": "cover-founders",
      "type": "text",
      "required": true,
      "example": "Lieke Terhorst (CEO) · Rafael Coelho (CTO) · Nadia Bekkers (CCO)",
      "notes": "Founders with roles, separated by ' · '. Investors read this line before the pitch, so put the founder who will answer questions first."
    },
    {
      "name": "cover-date",
      "type": "text",
      "required": true,
      "example": "Seed round · Delft · 19 August 2026",
      "notes": "Round name, home city and the date the deck is sent, spelled out. Re-date the deck every time it goes out; a stale date reads as a stale round."
    },
    {
      "name": "problem-tag",
      "type": "text",
      "required": true,
      "example": "01 · The problem",
      "notes": "Section eyebrow. Keep the '01 ·' numbering running in order across the deck; under ~22 chars."
    },
    {
      "name": "problem-title",
      "type": "text",
      "required": true,
      "example": "A 500-van fleet writes off € 1,2 m of battery it never used",
      "notes": "The pain quantified in one line, in the customer's own money. Not 'Problem'. Under ~70 chars."
    },
    {
      "name": "problem-body",
      "type": "html",
      "required": true,
      "example": "<p>An electric van's pack is 35% of what the vehicle cost and it is the one component nobody measures. Bad charging takes <strong>11% of usable pack life in the first four years</strong>. On 500 vans at € 22.000 a pack that is € 1,2 million, gone silently.</p>",
      "notes": "One or two <p>. Name the mechanism and show the arithmetic behind the title; wrap the key figure in <strong>. Under ~420 chars."
    },
    {
      "name": "solution-tag",
      "type": "text",
      "required": true,
      "example": "02 · The solution"
    },
    {
      "name": "solution-title",
      "type": "text",
      "required": true,
      "example": "One health score per pack, from the telematics feed already running",
      "notes": "What you deliver and why it is easy to adopt. Under ~70 chars."
    },
    {
      "name": "solution-body",
      "type": "html",
      "required": true,
      "example": "<p>Ohmwise reads the telematics stream every fleet already pays for and returns a daily state-of-health figure per vehicle, with the charging behaviour that explains it. <strong>No hardware, no workshop visit, first score in nine days.</strong></p>",
      "notes": "One <p>. End on the adoption cost in <strong> — time to value, not features. Under ~380 chars."
    },
    {
      "name": "market-tag",
      "type": "text",
      "required": true,
      "example": "03 · Market"
    },
    {
      "name": "market-headline",
      "type": "text",
      "required": true,
      "example": "A nine-fold bigger park by 2030 makes this a € 160 m annual market",
      "notes": "The market conclusion, with the number that matters. Under ~70 chars."
    },
    {
      "name": "market-note",
      "type": "text",
      "required": true,
      "example": "We do not need the whole park. One per cent of it at list price is € 1,6 m of recurring revenue, and we are at € 0,7 m today.",
      "notes": "The honesty line under the big figures: what share you actually need, tied back to today's revenue. Sceptics look for this line, so compute it."
    },
    {
      "name": "product-tag",
      "type": "text",
      "required": true,
      "example": "04 · Product"
    },
    {
      "name": "product-title",
      "type": "text",
      "required": true,
      "example": "The output is a number a lessor will discount against",
      "notes": "What the product produces, in the buyer's terms — not the architecture. Under ~70 chars."
    },
    {
      "name": "product-body",
      "type": "html",
      "required": true,
      "example": "<p>Three surfaces, one model: a depot dashboard, an API, and a signed <strong>residual-value certificate</strong> that travels with the vehicle.</p><p>Two leasing companies now accept that certificate in place of their flat 12% deduction.</p>",
      "notes": "Two short <p>: what it is, then the strongest proof that someone outside the company relies on it. Under ~450 chars."
    },
    {
      "name": "product-caption",
      "type": "text",
      "required": true,
      "example": "Illustrative: raw pack telemetry (grey) against the modelled state-of-health curve, crossing the 80% warranty threshold. Not customer data.",
      "notes": "Caption for the abstract product diagram, which is static and carries no data. Say what it represents AND that it is illustrative, or delete the diagram."
    },
    {
      "name": "traction-tag",
      "type": "text",
      "required": true,
      "example": "05 · Traction"
    },
    {
      "name": "traction-title",
      "type": "text",
      "required": true,
      "example": "ARR is up 4,9x in twelve months on 34 paying fleets",
      "notes": "The growth claim with its period and its base. Must agree with the metrics and the bars below it. Under ~70 chars."
    },
    {
      "name": "traction-note",
      "type": "text",
      "required": true,
      "example": "ARR in € thousand at quarter end. Bars are linear from zero and the tallest is € 720k; pilots are not counted.",
      "notes": "Mandatory axis note: unit, measurement date, that the scale starts at zero, and what is excluded. The chart has no y-axis, so this line is the scale."
    },
    {
      "name": "model-tag",
      "type": "text",
      "required": true,
      "example": "06 · Business model"
    },
    {
      "name": "model-title",
      "type": "text",
      "required": true,
      "example": "€ 3,50 per vehicle per month, 84% gross margin, a year up front",
      "notes": "Price, margin and payment terms in one line. Under ~70 chars."
    },
    {
      "name": "model-body",
      "type": "html",
      "required": true,
      "example": "<p>One price per monitored vehicle per month, billed twelve months in advance. Data and compute cost € 0,55, so gross margin is <strong>84%</strong>. Average contract € 21k a year against € 6.400 to win it, repaid in <strong>4,4 months</strong>. The recurring lines below add to the € 720k of ARR on the previous slide.</p>",
      "notes": "One <p> covering price, unit cost, gross margin, average contract value and CAC payback. Compute the margin and the payback; state that the lines reconcile to ARR."
    },
    {
      "name": "comp-tag",
      "type": "text",
      "required": true,
      "example": "07 · Competition"
    },
    {
      "name": "comp-title",
      "type": "text",
      "required": true,
      "example": "Everyone holds the data; nobody makes a number a lessor accepts",
      "notes": "The gap you occupy, stated as a conclusion. Under ~70 chars."
    },
    {
      "name": "comp-statement",
      "type": "text",
      "required": true,
      "example": "We are the independent layer between the telematics feed and residual value: brand-agnostic, hardware-free, and auditable. That is precisely the part neither the platforms nor the manufacturers want to own.",
      "notes": "Positioning in two sentences: the axis you win on, and why the obvious incumbent will not simply do it. Under ~260 chars."
    },
    {
      "name": "comp-head-who",
      "type": "text",
      "required": true,
      "example": "Today's alternative",
      "notes": "First column header; under ~22 chars or it wraps. Compare categories of alternative, not named companies."
    },
    {
      "name": "comp-head-note",
      "type": "text",
      "required": true,
      "example": "What they get"
    },
    {
      "name": "comp-head-us",
      "type": "text",
      "required": true,
      "example": "What Ohmwise adds",
      "notes": "The 'us versus them' column header; put your own company name in it."
    },
    {
      "name": "team-tag",
      "type": "text",
      "required": true,
      "example": "08 · Team"
    },
    {
      "name": "team-title",
      "type": "text",
      "required": true,
      "example": "Three founders, three sides of the same problem",
      "notes": "Why this team wins, in one line. Under ~70 chars."
    },
    {
      "name": "team-note",
      "type": "text",
      "required": true,
      "example": "Eleven people today, in Delft and Lisbon. This round funds fifteen more, nine of them engineers.",
      "notes": "Headcount now and after the round. The hire count must match the use-of-funds lines on the ask slide."
    },
    {
      "name": "ask-tag",
      "type": "text",
      "required": true,
      "example": "09 · The ask"
    },
    {
      "name": "ask-title",
      "type": "text",
      "required": true,
      "example": "€ 3,5 m buys 24 months, € 4,0 m of ARR and a certified method",
      "notes": "Amount, runway and the milestones it funds, in one line. Under ~70 chars."
    },
    {
      "name": "ask-amount",
      "type": "text",
      "required": true,
      "example": "€ 3,5 m",
      "notes": "The number, set at 4,75em. Keep it to about 8 characters ('€ 3,5 m', '€ 750k') or it collides with the column beside it."
    },
    {
      "name": "ask-amount-note",
      "type": "text",
      "required": true,
      "example": "Seed round, priced, closing October 2026. Lead investor sought; existing shareholders participate pro rata.",
      "notes": "Round name, instrument, timing and who is already in — without naming anyone you have not cleared. Never claim a commitment you do not have in writing."
    },
    {
      "name": "ask-use-head",
      "type": "text",
      "required": true,
      "example": "Use of funds"
    },
    {
      "name": "ask-use",
      "type": "html",
      "required": true,
      "example": "<ul class=\"uses\"><li><strong>€ 1,7 m</strong> <span>Engineering: nine hires and seven further OEM integrations.</span></li><li><strong>€ 1,0 m</strong> <span>Commercial: six hires to open DACH and the Nordics.</span></li><li><strong>€ 0,3 m</strong> <span>Working capital and a six-month reserve.</span></li></ul>",
      "notes": "Keep the <ul class=\"uses\"> wrapper and the <strong>amount</strong> + <span>purpose</span> pattern. Three or four lines, and the amounts MUST add up to ask-amount."
    },
    {
      "name": "ask-milestones-head",
      "type": "text",
      "required": true,
      "example": "What it has to prove"
    },
    {
      "name": "ask-milestones",
      "type": "text",
      "required": true,
      "example": "Twenty-four months of runway to € 4,0 m of ARR across 120 fleets, with the method certified. That is 2,4x growth a year — half the 4,9x we just delivered — and it is the evidence a Series A prices.",
      "notes": "The milestones the money buys, with the implied growth rate computed from today's revenue and sense-checked against the rate you just achieved. Under ~260 chars."
    },
    {
      "name": "close-tag",
      "type": "text",
      "required": true,
      "example": "Thank you",
      "notes": "Eyebrow on the closing slide; not numbered."
    },
    {
      "name": "close-line",
      "type": "text",
      "required": true,
      "example": "Every electric van in Europe will need a battery record. We intend to be the one buyers trust.",
      "notes": "The line you want repeated after the meeting: the world as it will be, and your place in it. Two sentences, under ~120 chars."
    },
    {
      "name": "contact-line",
      "type": "text",
      "required": true,
      "example": "Lieke Terhorst · lieke@ohmwise.eu · +31 15 202 4471 · Molengraaffsingel 12, 2629 JD Delft",
      "notes": "One reachable person: name, e-mail, phone, address, separated by ' · '. Never leave a placeholder here — an unreachable pitch is a dead pitch."
    }
  ],
  "repeats": [
    {
      "name": "pain-point",
      "description": "One symptom of the problem on the problem slide, laid out in a two-column grid. Two or four read best; three leaves a visible hole in the grid.",
      "min": 2,
      "max": 4,
      "slots": [
        {
          "name": "pain-title",
          "type": "text",
          "required": true,
          "example": "Nobody sees the damage happen",
          "notes": "The symptom in under ~34 chars, one line."
        },
        {
          "name": "pain-text",
          "type": "text",
          "required": true,
          "example": "Depot managers get kWh delivered and a state-of-charge number. Nothing tells them that one 20-minute DC session at 90% costs more pack life than a week of depot charging.",
          "notes": "Why it hurts, with a number or a concrete detail. 110-180 chars; four lines is the ceiling."
        }
      ]
    },
    {
      "name": "how-step",
      "description": "One step of the 'how it works' sequence on the solution slide. The step numbers are generated by CSS, so adding or removing a step can never leave a stale number.",
      "min": 2,
      "max": 4,
      "slots": [
        {
          "name": "how-title",
          "type": "text",
          "required": true,
          "example": "Connect the feed",
          "notes": "Verb first, under ~24 chars."
        },
        {
          "name": "how-text",
          "type": "text",
          "required": true,
          "example": "One API key from the fleet's existing telematics provider. Seven providers supported today, and not a single vehicle is touched.",
          "notes": "What happens and what it costs the customer in effort. 90-140 chars."
        }
      ]
    },
    {
      "name": "market-figure",
      "description": "One oversized market number with its own source line. Three is the design intent; four makes each column narrow enough to break a long value onto two lines.",
      "min": 2,
      "max": 4,
      "slots": [
        {
          "name": "figure-value",
          "type": "text",
          "required": true,
          "example": "3,8 m",
          "notes": "Set at 3,75em: keep it under ~8 characters ('3,8 m', '55%', '€ 160 m'). Unit inside the value, never in the label."
        },
        {
          "name": "figure-label",
          "type": "text",
          "required": true,
          "example": "Electric vans and trucks on EU roads by 2030",
          "notes": "What it counts and as of when. Under ~58 chars."
        },
        {
          "name": "figure-source",
          "type": "text",
          "required": true,
          "example": "Ohmwise projection: 420.000 in service at end-2025, grown at the 2022-2025 rate. An estimate, not a forecast we own.",
          "notes": "Mandatory. Either a citable source, or your own method plus the word 'estimate'. Say which figures are actual and which are projected — this is the first thing an investor tests."
        }
      ]
    },
    {
      "name": "traction-metric",
      "description": "One oversized proof number across the top of the traction slide. Four fit comfortably; at five the values must stay very short.",
      "min": 2,
      "max": 5,
      "slots": [
        {
          "name": "metric-value",
          "type": "text",
          "required": true,
          "example": "€ 720k",
          "notes": "Set at 2,875em: under ~7 characters. Lead with revenue, then customers, then a retention figure."
        },
        {
          "name": "metric-label",
          "type": "text",
          "required": true,
          "example": "ARR at 30 June 2026",
          "notes": "What it measures and as of when — always date it. Under ~34 chars."
        }
      ]
    },
    {
      "name": "growth-bar",
      "description": "One period of the single-series growth chart on the traction slide. One colour, flat bars, no gradient: the chart's only job is to be believed.",
      "min": 4,
      "max": 8,
      "slots": [
        {
          "name": "bar-value",
          "type": "text",
          "required": true,
          "example": "96",
          "notes": "Printed above the bar, in the unit named in traction-note. Same decimals for every bar."
        },
        {
          "name": "bar-style",
          "type": "text",
          "required": true,
          "example": "height:12%",
          "notes": "EXACTLY 'height:NN%', no spaces. NN = this period's value divided by the largest value in the series, times 92, rounded — 92 rather than 100 so the tallest bar leaves room for its own number. Never truncate the axis: the scale starts at zero."
        },
        {
          "name": "bar-label",
          "type": "text",
          "required": true,
          "example": "Q1 2025",
          "notes": "Period label under the bar, under ~9 chars. Keep the periods evenly spaced in time or the shape of the chart lies."
        }
      ]
    },
    {
      "name": "revenue-line",
      "description": "One line of the business model: what it is, how it is priced, and what it is worth today. The recurring lines must add up to the ARR figure on the traction slide.",
      "min": 1,
      "max": 4,
      "slots": [
        {
          "name": "line-name",
          "type": "text",
          "required": true,
          "example": "Fleet subscription",
          "notes": "Under ~30 chars."
        },
        {
          "name": "line-terms",
          "type": "text",
          "required": true,
          "example": "€ 3,50 per monitored vehicle per month, twelve months up front, hundred-vehicle minimum. 15.600 vehicles today.",
          "notes": "Unit price, billing terms and today's volume, so the reader can reproduce the value beside it. 80-130 chars."
        },
        {
          "name": "line-value",
          "type": "text",
          "required": true,
          "example": "€ 655k",
          "notes": "Annualised value, under ~10 characters. For a line that is not recurring write 'Not in ARR' rather than a number that inflates the total."
        }
      ]
    },
    {
      "name": "competitor-row",
      "description": "One row of the competition table: a category of alternative, what it delivers, and what you add. Compare categories, not named companies.",
      "min": 2,
      "max": 6,
      "slots": [
        {
          "name": "competitor-name",
          "type": "text",
          "required": true,
          "example": "Fleet telematics suites",
          "notes": "The category the buyer would otherwise choose, including 'do nothing' or 'build it in-house'. Under ~30 chars."
        },
        {
          "name": "competitor-note",
          "type": "text",
          "required": true,
          "example": "Deliver kWh, state of charge and driver scores. No degradation model and no residual-value output.",
          "notes": "Credit what they genuinely do well, then name the gap. 80-115 chars. A straw man loses the room."
        },
        {
          "name": "competitor-us",
          "type": "text",
          "required": true,
          "example": "We read the same feed and hand back pack health — usually as an add-on the platform resells.",
          "notes": "Your advantage against this specific alternative, with a number where one exists. 80-115 chars."
        }
      ]
    },
    {
      "name": "founder",
      "description": "One founder or key hire, with an inline-SVG monogram ring instead of a photograph. Three fit the row; at four or five keep the credentials to two lines.",
      "min": 1,
      "max": 5,
      "slots": [
        {
          "name": "founder-initials",
          "type": "text",
          "required": true,
          "example": "LT",
          "notes": "Two or three letters, uppercase, matching founder-name. The ring around them is inline SVG; never replace it with a photo."
        },
        {
          "name": "founder-name",
          "type": "text",
          "required": true,
          "example": "Lieke Terhorst"
        },
        {
          "name": "founder-role",
          "type": "text",
          "required": true,
          "example": "Co-founder & CEO",
          "notes": "Rendered uppercase; under ~24 chars."
        },
        {
          "name": "founder-credential",
          "type": "text",
          "required": true,
          "example": "PhD in battery degradation modelling, TU Delft. Four years leading cell validation at a European van manufacturer.",
          "notes": "The two facts that make this person the right one for THIS company. 90-140 chars, no life story, no adjectives."
        }
      ]
    }
  ],
  "optionals": [],
  "changelog": [
    {
      "version": "0.1.0",
      "date": "2026-08-19",
      "notes": "Initial release: 11-slide outward-facing investor pitch deck (cover, problem, solution, market, product, traction, business model, competition, team, ask, contact) with oversized numerals, a single-series CSS growth chart and an inline-SVG signature mark. Prints one slide per page at 254 x 190,5 mm."
    }
  ],
  "agentInstructions": "EVERY TITLE STATES THE POINT, NOT THE TOPIC: 'Fleet operators lose 14% of battery life to bad charging', never 'Problem'. Keep titles under ~70 chars. RECONCILE EVERY NUMBER, TWICE: the recurring revenue-line values must add up to the ARR metric on the traction slide; the tallest growth bar must be that same ARR; ask-use amounts must add up to ask-amount; its hire counts must match team-note; and the milestone growth rate must follow from today's revenue. BAR HEIGHTS are exactly 'height:NN%', no spaces, NN = value / largest value x 92 rounded; traction-note must state the unit and the zero baseline. Every market figure needs a figure-source: a citation, or your own method plus the word 'estimate'. NEVER invent investor names, customer logos, press quotes or awards: 'two leasing companies' is honest, an unverified name is not. Delete every data-example block and every unused repeat row. Unknown figures become [PLACEHOLDER]; warn the user that investors check ARR, growth rate, customer count, retention and burn first, so fill those five via the built-in Edit button before sending. Mirror the formats '€ 720k', '€ 3,5 m', '15.600', '128%', '19 August 2026'. All eleven slides are mandatory: strengthen a thin one rather than drop it. Never hand-number slides; the runtime does that.",
  "license": "MIT",
  "authors": [
    {
      "github": "bvrln"
    }
  ]
}
