What it is: the content of a business presentation - what each slide says, why it is there, what evidence backs it and what the speaker says while it is on screen.
Works out the smallest useful deck for the business in front of it, then builds it only when asked. The default output is a short recommendation, not a slide register. The slide register - CSV, SQL DDL, JSON Schema, Notion mapping - is produced on request, from one field list so the four cannot drift apart.
Layer: Layer 6: Engage. Fits: Growth stage. Table code: n/a.
The rule this table exists to enforce: a slide has one job, and the register names that
job. Key Message is a sentence a listener could repeat afterwards, and Bullets is at
most three supporting points - a slide with six bullets and no key message is a document
being read out. Data Source is required for every slide carrying a number, because a
figure with no source is the single most common way a business loses a room.
The second rule: the deck is a derivative of everything else in this pack. The brand
tokens are in design-theme-guide, the proof in gbp-local-seo-intent, the offer in
business-website-setup. A deck built before those exist is a deck of opinions.
Do not use it for: the printed leave-behind (brand-kit-print-collateral), a written
proposal document, a website page, or the brand identity itself
(design-theme-guide, logo-image-design).
Follow the shared execution contract. The module-specific rules below define only domain fields, decisions, calculations, and safety constraints.
Read the request and pick the intent before asking anything.
Ask only if this is the highest-value missing fact; otherwise proceed without an opener:
Q: Who is this presentation for, and what do you want them to decide or do afterwards?
Treat ambiguous replies as unanswered and ask which explicit option the user means. Record unknown values as Unknown; Unknown is not zero. A record must not be Done when a required check fails.
Skip anything already answered. Ask the rest one at a time, and stop as soon as the remaining answers would not change the slide list.
Never invent an answer. Figures, revenue, growth rates, customer names, dates, market
sizes and outcomes the user has not supplied are Unknown. A business case with invented
projections is worse than no deck.
module: presentation-deck
intent: null # set up | review | report | import
scale: null # Starter | Growth | Scale, only if the answer changes it
areas:
"Audience": null
"Ask": null
"Evidence": null
"Constraints": null
"Setup": null
requested_outputs: []
confirmed_facts: []
open_questions: []
Build an already requested artifact without asking again. For advice-only requests, give a short recommendation and offer the relevant artifact.
Recommended approach: Ten slides, one job each, and one slide per answer to the audience's real question rather than one per topic. The opening earns attention with something true about the customer, the middle is evidence, and the last two are the ask and the next step. Anything that would only matter to someone who already agrees goes in an appendix. Numbers carry a source on the slide.
Why this one: Ten slides is what a 15-minute slot actually holds, and a deck that runs over loses the ask at the end - which is the only part anyone acted on. The reason a founder's 40-slide deck fails is not length, it is that no single slide changes what the listener believes.
Workflow: Audience and the ask agreed → Ten jobs listed, one per slide → Evidence mapped to each job → Numbers sourced or removed → Speaker notes written as spoken sentences → Tokens and layouts applied → Rehearsed to time → Appendix built → One page of "if they ask about X" prepared for the five hardest questions
Once the user asks for it, derive the fields from the confirmed context and emit the requested artifacts. For machine-readable text, keep prose outside the data; for files, provide a usable link. Report material validation failures or limitations separately.
A selected Notion output is rendered by notion-manual-import, so route the
Notion step there. When the user selects Notion, hand that step to
@notion-manual-import: it holds the CSV, the property
mapping, the import steps and the verification checklist, and it renders the Field
Reference below instead of defining a table of its own. Do not restate the mapping
here and do not improvise the import steps. Manual CSV and mapping outputs need no
connection. For requested workspace changes, follow the shared contract: verify actual
tool access and the target before writing. A user saying "connected" is not tool evidence.
Never ask for a Notion password or token.
Slide ID,Slide Number,Section,Slide Title,Key Message,Bullets,Visual,Speaker Notes,Data Source,Duration Minutes,Sensitivity,Audience,Template Layout,Brand Token Applied,Version,Status,Owner,Notes
,1,Open,We started from one customer complaint,"Three customers asked the same thing in one month, and we built the service for it","The same request, three times; What we built; Who it is for",One photograph of the real premises,"This is the only slide that needs to be remembered if the rest is forgotten. Say it in a sentence, then stop talking.",Not applicable,1.5,Public,Bank and prospective partner,Title and single image,color.brand.primary on color.surface.page,1.0,Draft,Unknown,Example row - replace every value before use.
-- Engine assumption: PostgreSQL. For another engine use the engine's auto-increment
-- equivalent and keep the rest portable.
CREATE TABLE deck_slide (
slide_id BIGINT PRIMARY KEY,
slide_number INTEGER NOT NULL,
section VARCHAR(100) NOT NULL,
slide_title VARCHAR(255) NOT NULL,
key_message TEXT NOT NULL,
bullets TEXT,
visual VARCHAR(255) NOT NULL,
speaker_notes TEXT,
data_source VARCHAR(255) NOT NULL,
duration_minutes NUMERIC(4,1),
sensitivity VARCHAR(50) NOT NULL,
audience VARCHAR(100) NOT NULL,
template_layout VARCHAR(100) NOT NULL,
brand_token_applied VARCHAR(255) NOT NULL,
version VARCHAR(50) NOT NULL,
status VARCHAR(50) NOT NULL,
owner VARCHAR(255),
notes TEXT,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
CONSTRAINT deck_slide_number_positive CHECK (slide_number > 0),
CONSTRAINT deck_slide_duration_non_negative CHECK (duration_minutes IS NULL OR duration_minutes >= 0)
);
CREATE INDEX idx_deck_slide_status ON deck_slide (status);
CREATE INDEX idx_deck_slide_section ON deck_slide (section);
CREATE UNIQUE INDEX idx_deck_slide_number_version ON deck_slide (slide_number, version);
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Presentation Deck",
"type": "object",
"additionalProperties": false,
"properties": {
"Slide ID": { "type": "integer" },
"Slide Number": { "type": "integer" },
"Section": { "type": "string" },
"Slide Title": { "type": "string" },
"Key Message": { "type": "string" },
"Bullets": { "type": "string" },
"Visual": { "type": "string" },
"Speaker Notes": { "type": "string" },
"Data Source": { "type": "string" },
"Duration Minutes": { "type": "number" },
"Sensitivity": { "type": "string" },
"Audience": { "type": "string" },
"Template Layout": { "type": "string" },
"Brand Token Applied": { "type": "string" },
"Version": { "type": "string" },
"Status": { "type": "string" },
"Owner": { "type": "string" },
"Notes": { "type": "string" }
},
"required": [
"Slide Number",
"Section",
"Slide Title",
"Key Message",
"Visual",
"Data Source",
"Sensitivity",
"Audience",
"Template Layout",
"Brand Token Applied",
"Version",
"Status"
]
}
| CSV column | Notion property | Set after import |
|---|---|---|
| Slide ID | Text (preserve source ID) | Keep imported IDs as Text; optionally add a separate Unique ID property |
| Slide Number | Number | Convert to Number, digits only. Unique per version, not across the deck |
| Section | Select (add options after import) | Convert to Select, add options: "Open", "Problem", "Solution", "Evidence", "Business", "Ask", "Next Step", "Appendix" |
| Slide Title | Text | Leave as Text. The claim the slide makes, not a label like "Overview" |
| Key Message | Text | Leave as Text. One sentence. If the listener repeats only this, the slide worked |
| Bullets | Text | Leave as Text. At most three. Semicolon-separated. Four is too many |
| Visual | Select (add options after import) | Convert to Select, add options: "Photograph", "Chart", "Table", "Diagram", "Screenshot", "Single figure", "Quotation", "None" |
| Speaker Notes | Text | Leave as Text. Written as spoken sentences, not bullet fragments |
| Data Source | Text | Leave as Text. Required for any slide with a number. "Not applicable" is valid only where the slide carries no figure |
| Duration Minutes | Number | Convert to Number, one decimal place. The plan, not a measurement |
| Sensitivity | Select (add options after import) | Convert to Select, add options: "Public", "Internal", "Confidential" |
| Audience | Title | Use as the database title |
| Template Layout | Text | Leave as Text. The layout name from the template, so the build is repeatable |
| Brand Token Applied | Text | Leave as Text. The token names used on this slide, from the design theme |
| Version | Text | Leave as Text |
| Status | Select (add options after import) | Convert to Select, add options: "Outline", "Draft", "In review", "Approved", "Presented" |
| Owner | Text | Leave as Text. Who presents it and who builds it may be two people |
| Notes | Text | Leave as Text |
The rows above are documentation examples only. Emit empty templates unless the user explicitly requests examples. Data Source reads Not applicable only on a
slide that genuinely carries no figure; on any slide with a number it must name where that
number came from.
| # | Field | Type | SQL | JSON Schema | Notion | CSV example |
|---|---|---|---|---|---|---|
| 1 | Slide ID | id |
BIGINT PRIMARY KEY |
integer |
Text or Notion auto-ID | (blank) |
| 2 | Slide Number | number |
INTEGER |
integer |
Number | 1 |
| 3 | Section | select |
VARCHAR(100) |
string |
Select | Open |
| 4 | Slide Title | text |
VARCHAR(255) |
string |
Text | (blank) |
| 5 | Key Message | long_text |
TEXT |
string |
Text | (blank) |
| 6 | Bullets | long_text |
TEXT |
string |
Text | (blank) |
| 7 | Visual | select |
VARCHAR(255) |
string |
Select | Photograph |
| 8 | Speaker Notes | long_text |
TEXT |
string |
Text | (blank) |
| 9 | Data Source | text |
VARCHAR(255) |
string |
Text | Not applicable |
| 10 | Duration Minutes | number |
NUMERIC(4,1) |
number |
Number | 1.5 |
| 11 | Sensitivity | select |
VARCHAR(50) |
string |
Select | Public |
| 12 | Audience | text |
VARCHAR(100) |
string |
Text | (blank) |
| 13 | Template Layout | text |
VARCHAR(100) |
string |
Text | (blank) |
| 14 | Brand Token Applied | text |
VARCHAR(255) |
string |
Text | (blank) |
| 15 | Version | text |
VARCHAR(50) |
string |
Text | 1.0 |
| 16 | Status | select |
VARCHAR(50) |
string |
Select | Draft |
| 17 | Owner | text |
VARCHAR(255) |
string |
Text | Unknown |
| 18 | Notes | long_text |
TEXT |
string |
Text | (blank) |
Section - the eight sections a ten-slide business deck divides into. Ask is not
optional: if the deck has no ask slide, the presentation had no purpose.
Open | Problem | Solution | Evidence | Business | Ask | Next Step | Appendix
Visual - one per slide, and None is allowed only for a title or a section break. A
chart that says nothing is decoration; delete it.
Photograph | Chart | Table | Diagram | Screenshot | Single figure | Quotation | None
Sensitivity - Confidential slides must not go into a version that is emailed to
everyone, and a redacted public version is a different version, not the same one with a
slide hidden.
Public | Internal | Confidential
Status - Presented closes the loop, so the register shows what was actually shown
and when.
Outline | Draft | In review | Approved | Presented
None standalone. Brand Token Applied names tokens from design-theme-guide; confirm
whether the business wants that joined. Data Source may name a table in
seo-directory-backlinks or a metric in an analytics tool - a text reference unless the
business confirms a live join.
The recommended shape. Adapt it, but keep the order of the ask and the next step.
| # | Section | The job | What earns it |
|---|---|---|---|
| 1 | Open | Earn attention with something true | A real customer, a real problem, a real photograph. Not a logo animation |
| 2 | Problem | State the problem in the audience's words | The problem they have already told the business about, in their phrasing |
| 3 | Solution | What the business does about it, in one sentence | Plain language, no jargon, no product names nobody outside knows |
| 4 | Solution | How it works | A diagram or three steps. The most-underused slide in most decks |
| 5 | Evidence | It works - for a real customer | A photograph, a quotation, a result. Named only with permission |
| 6 | Evidence | It works at scale | The numbers, each with a source. Or "we are early" and say so |
| 7 | Business | How the business works | Prices, capacity, team, area covered, hours |
| 8 | Business | Why this business and not another | The differentiator, stated as a fact rather than a claim |
| 9 | Ask | What is being asked for, and by when | The specific thing - money, a decision, a trial, an introduction - and the date |
| 10 | Next Step | Exactly what happens next, and who does it | A name, an action, a date. The slide that makes the meeting worth having |
Appendix: anything a technically-minded listener may ask about, so it is available and does not derail the ten.
Prompt
Our bank wants a five-minute presentation on Monday. There is an existing 30-slide
template that has been used for other loans. We have no idea what to put in it.
Context first - one question per message, nothing already answered:
Q: Who is this presentation for, and what do you want them to decide or do afterwards? A: Our bank manager. We want the loan approved.
Q: How long is the slot, and how many slides does the template expect? A: Five minutes. The template has about 20 slides but we can cut.
Q: What can you show - revenue, customers, photographs, a process? A: Two years of revenue, about 400 customers, and a lot of photos of the shop.
Q: Is any of it confidential, and is there content that must not appear? A: The revenue is confidential. No supplier names.
Q: Who is presenting, and how much rehearsal time is there? A: The founder, and we have Sunday.
Recommended next step - offered, not built:
Ten slides on the existing template, not twenty. The first earns attention with the 400 customers and a photograph of the shop. Two slides of proof, with the revenue figure in the confidential version and removed from the public one. The ask on slide 9 with the amount and the date. Slide 10 names who does what by when. Everything a bank might interrogate - the accounts, the lease, the loan purpose - goes in the appendix, not the ten. Rehearse it Sunday against a timer.
Workflow: Audience and the ask agreed → Ten jobs listed → Evidence mapped to each job → Numbers sourced or removed → Speaker notes written → Tokens and layouts applied → Rehearsed to time → Appendix built → Hardest questions prepared
Want the CSV, SQL DDL, JSON Schema and Notion mapping for this?
Key Message. If two jobs
cannot both fit in that sentence, it is two slides.Data Source records where a number came from when the business supplies
it.Template Layout are the names in the
business's existing template, read from it.Unknown and blank are correct.Sensitivity is a control, not a label. A Confidential slide in a version emailed to
everyone is a disclosure, and it cannot be undone.code-of-conduct and a human reviewer,
never in a pitch deck.See the Related Skills reference for the full guidance.