Use when the user asks for an executive slide, strategy slide, consulting slide, McKinsey/MBB-style slide, executive or strategy deck, board deck, or wants data/analysis made "boardroom-ready" or presented to leadership. Produces single slides or multi-slide React (.jsx) artifact decks to management-consulting standards.
Build slides to the standard of a top-tier consulting firm: flat, dense-but-clear analytical pages with action titles, labeled charts, and real sources — pages that stand alone without narration. Not SaaS dashboards, not startup pitches, not decorated bullet lists.
Required reading
Before building any slide or deck, read every file in this skill's reference/ directory:
reference/storylining.md — Pyramid Principle, MECE trees, deck types, headline-flow test
reference/layout.md — canvas, grid, title block, footer, the 9 layout patterns
reference/typography.md — the type scale and palette roles
reference/language.md — action titles, copy rules, the humanizer pass
Do not build from memory of these files' names. Read them, then build.
Hard rules
Violating any of these is a failed slide, regardless of how it looks:
Every chart is a real chart object — Chart.js in web artifacts, native PowerPoint charts (python-pptx chart API) in .pptx. No CSS bars, no hand-drawn SVG charts, no screenshots, no placeholders.
Every analytical claim is attributed — a source line per layout.md §4; when matching a house template that has no source convention, provenance is stated in the content instead. No fabricated stamps.
No text below 15px / 11pt anywhere — including chart ticks and labels — and only integer sizes from a defined scale (typography.md's, or one derived the same way from a house template).
Every body-slide title carries the slide's message: by default a complete sentence stating the so-what, ≤2 lines; a user-specified house voice may shorten the form, never the claim. Never a topic label.
Pyramid + MECE structure: conclusion first; titles alone must tell the story (headline-flow test).
Flat consulting style: white background, primary-color title + 2px rule, aligned columns, ≥20% whitespace. No cards, shadows, gradients, or rounded containers (unless a house template says otherwise — see Overrides).
Every color maps to a palette role (primary / secondary / highlight / greyscale). No decorative color, no rainbow charts.
Never invent numbers. A figure the user didn't provide and the source material doesn't contain renders as a visible [ CONFIRM · … ] placeholder — never a plausible-looking value.
Overrides (user context beats skill defaults)
Output format. The React .jsx artifact is the default, not a cage. If the user specifies another format (.pptx, standalone HTML, PDF), build it with the right tool (e.g. python-pptx for .pptx) and keep the entire workflow, hard rules, and self-check. For .pptx: 16:9 = 13.333×7.5 in, pt sizes map 1:1 from the type scale's pt column, letter-spacing via the run's spc XML attribute.
House style. When the user supplies an existing deck or brand system to match, its design language — background, typography, kicker/label conventions, headline style, footer, emphasis devices — overrides layout.md and typography.md defaults. Extract exact tokens from the best source available (an HTML/CSS version beats eyeballing a PDF; check the filesystem for one). Structural discipline still applies in full: storyline, slide plans, the type floor, palette-role mapping of the brand's colors, the humanizer pass, visible placeholders, and the self-check.
Voice. A user-specified voice (short declaratives, no Oxford commas, named-team informality) overrides the default title/copy register. Apply the humanizer pass in that voice; the banned-word list still applies.
Workflow
Step 0 — Intake (conditional; before anything else)
Check whether the conversation/uploads already establish: (a) brand kit or brand colors, (b) audience and objective (persuasive vs. informative), (c) deck type (summary / deep dive / backup), (d) delivery context (presented live vs. standalone read).
If any are missing, ask for all missing items in one batched message, stating the default for each so the user can reply "use defaults": defaults are maroon fallback palette; senior-executive audience, persuasive; summary deck; standalone read.
If all four are known, skip intake entirely and say nothing about it.
Never ask questions after the build starts.
Step 1 — Storyline
Work out (and show briefly): the governing question, the governing thought (one-sentence answer), the 2–4 MECE branches, and the ordered action-title list for every slide. Run the headline-flow test: the titles alone, read in order, must tell the complete story. Fix the storyline before designing anything. Decks with 4+ content slides get a title slide and an executive-summary slide prepended (storylining.md §8).
Step 2 — Slide plans (think before output)
For each slide, before writing any JSX, write a 4-line plan in your visible response:
Message: the action title (final wording)
Evidence: which facts/data prove it, and their source
Layout: the named pattern from layout.md §5, and why
Chart: the chart type from charts.md §2 (with the comparison it shows), or "no chart" with the reason
Check each plan against the Hard rules before rendering. If a plan fails (e.g., no source exists for a claim), fix the plan, not the rendered slide.
Step 3 — Render
Build the artifact per Output format below, following layout.md / charts.md / typography.md exactly.
Step 4 — Humanizer pass
Re-read every piece of copy on every slide against language.md §3: banned words, banned patterns, the four rewrite tests. Rewrite in place. This pass is mandatory even when the copy "seems fine."
Step 5 — Self-check
Run the checklist at the bottom of this file against every slide. Fix all failures before delivering. Then confirm in one line that the deck passed (e.g., "Self-check: 5/5 slides pass").
Output format
Single .jsx React artifact.
Canvas: every slide renders on a fixed 1280×720 stage, scaled to fit the viewport by transform-scaling the whole stage (never by changing font sizes):
Deck: slides as separate components (Slide1, Slide2, …), a shell with keyboard nav (←/→), small bottom-center dot indicators, subtle prev/next arrows. Instant swap, no transitions. Only the active slide is mounted (so Chart.js re-creates cleanly).
Charts:import Chart from "chart.js/auto"; canvas + useRef + useEffect with chart.destroy() cleanup; animation: false; fonts and colors per charts.md §5.
Icons:lucide-react, strokeWidth={1.5}, used only as row/pillar markers per layout.md.
Fonts: Tailwind arbitrary values matching the scale (text-[16px] etc.). text-xs/text-sm are banned.
Worked examples
1. Title: label → claim.
Bad: title "Revenue Growth Analysis" over a bar chart, bullets "Revenue grew significantly," "Margins under pressure."
Good: title "50% annual growth with declining profitability is unsustainable — we need a strategy that balances both." Chart + evidence column (layout 5.1): combo Chart.js bar+line (revenue columns in primary, OI% black line), "48% CAGR" callout, right column of bold-metric evidence blocks ("48% CAGR", "250+ new hires", "−600bps OI"), source line "Source: Client financials, FY2014–17; team analysis."
Why: the bad slide makes the reader do the analysis; the good slide asserts the conclusion and proves it, with axes, units, and a source.
2. Chart honesty: decoration → labeled evidence.
Bad: gradient-filled CSS bars with no axes ("cleaner look"), values only on hover, five colors, no source.
Good: Chart.js horizontal bar sorted by value, one primary-color focal bar and grey context bars, horizontal axis labeled "Store sales ($M)," dashed benchmark line labeled "Industry average $3M" on the chart, data labels on each bar, source line present.
Why: an executive must decode the chart cold — type matched to an item comparison, every scale labeled, benchmark on the chart, one focal color.
3. Copy: AI-slop → executive prose.
Bad: "Leveraging cutting-edge automation to unlock robust operational synergies across the value chain."
Good: "Robotic process automation cuts labor cost 18% while lifting throughput."
Why: banned words out, concrete verb, a number, and a consequence. Passes the partner test.
Self-check (run per slide, fix before delivering)
Title carries the slide's message (so-what sentence, or house-voice equivalent), ≤2 lines, active verb, no banned words
Reading all titles in order tells the full story (deck-level, run once)
Every analytical claim is attributed (source line, or in-content provenance under a house template)
All charts are real chart objects (Chart.js / native pptx); type matches the comparison; axes labeled horizontally with units; benchmark/average lines labeled on the chart
No invented figures — every missing number is a visible [ CONFIRM · … ] placeholder
No text below 15px (including chart options); all sizes from the approved scale
Every color maps to a palette role (primary/secondary/highlight/greyscale); no decorative or unassigned colors; same palette across all slides
Margins (64/48/40), aligned columns, ≥20% whitespace; no cards, shadows, gradients
≤6 supporting points, ≤~8 words each; one idea per slide; slide stands alone without narration
Numbers rounded, units shown, figures tie out across slides
Copy passed the humanizer pass (no banned words/patterns; partner, evidence, verb, deletion tests)
1---2name: executive-slide3description: Use when the user asks for an executive slide, strategy slide, consulting slide, McKinsey/MBB-style slide, executive or strategy deck, board deck, or wants data/analysis made "boardroom-ready" or presented to leadership. Produces single slides or multi-slide React (.jsx) artifact decks to management-consulting standards.4---56# Executive Slide Generator78Build slides to the standard of a top-tier consulting firm: flat, dense-but-clear analytical pages with action titles, labeled charts, and real sources — pages that stand alone without narration. Not SaaS dashboards, not startup pitches, not decorated bullet lists.910## Required reading1112**Before building any slide or deck, read every file in this skill's `reference/` directory:**13141. `reference/storylining.md` — Pyramid Principle, MECE trees, deck types, headline-flow test152. `reference/layout.md` — canvas, grid, title block, footer, the 9 layout patterns163. `reference/charts.md` — chart selection, labeling rules, Chart.js implementation174. `reference/typography.md` — the type scale and palette roles185. `reference/language.md` — action titles, copy rules, the humanizer pass1920Do not build from memory of these files' names. Read them, then build.2122## Hard rules2324Violating any of these is a failed slide, regardless of how it looks:25261. **Every chart is a real chart object** — Chart.js in web artifacts, native PowerPoint charts (python-pptx chart API) in .pptx. No CSS bars, no hand-drawn SVG charts, no screenshots, no placeholders.272. **Every analytical claim is attributed** — a source line per layout.md §4; when matching a house template that has no source convention, provenance is stated in the content instead. No fabricated stamps.283. **No text below 15px / 11pt anywhere** — including chart ticks and labels — and only integer sizes from a defined scale (typography.md's, or one derived the same way from a house template).294. **Every body-slide title carries the slide's message**: by default a complete sentence stating the so-what, ≤2 lines; a user-specified house voice may shorten the form, never the claim. Never a topic label.305. **Pyramid + MECE structure**: conclusion first; titles alone must tell the story (headline-flow test).316. **Flat consulting style**: white background, primary-color title + 2px rule, aligned columns, ≥20% whitespace. No cards, shadows, gradients, or rounded containers (unless a house template says otherwise — see Overrides).327. **Every color maps to a palette role** (primary / secondary / highlight / greyscale). No decorative color, no rainbow charts.338. **Never invent numbers.** A figure the user didn't provide and the source material doesn't contain renders as a visible `[ CONFIRM · … ]` placeholder — never a plausible-looking value.3435## Overrides (user context beats skill defaults)3637- **Output format.** The React `.jsx` artifact is the default, not a cage. If the user specifies another format (`.pptx`, standalone HTML, PDF), build it with the right tool (e.g. python-pptx for `.pptx`) and keep the entire workflow, hard rules, and self-check. For `.pptx`: 16:9 = 13.333×7.5 in, pt sizes map 1:1 from the type scale's pt column, letter-spacing via the run's `spc` XML attribute.38- **House style.** When the user supplies an existing deck or brand system to match, its design language — background, typography, kicker/label conventions, headline style, footer, emphasis devices — overrides layout.md and typography.md defaults. Extract exact tokens from the best source available (an HTML/CSS version beats eyeballing a PDF; check the filesystem for one). Structural discipline still applies in full: storyline, slide plans, the type floor, palette-role mapping of the brand's colors, the humanizer pass, visible placeholders, and the self-check.39- **Voice.** A user-specified voice (short declaratives, no Oxford commas, named-team informality) overrides the default title/copy register. Apply the humanizer pass in that voice; the banned-word list still applies.4041## Workflow4243### Step 0 — Intake (conditional; before anything else)4445Check whether the conversation/uploads already establish: **(a)** brand kit or brand colors, **(b)** audience and objective (persuasive vs. informative), **(c)** deck type (summary / deep dive / backup), **(d)** delivery context (presented live vs. standalone read).4647- If **any** are missing, ask for **all missing items in one batched message**, stating the default for each so the user can reply "use defaults": defaults are maroon fallback palette; senior-executive audience, persuasive; summary deck; standalone read.48- If all four are known, skip intake entirely and say nothing about it.49- **Never ask questions after the build starts.**5051### Step 1 — Storyline5253Work out (and show briefly): the governing question, the governing thought (one-sentence answer), the 2–4 MECE branches, and the **ordered action-title list** for every slide. Run the headline-flow test: the titles alone, read in order, must tell the complete story. Fix the storyline before designing anything. Decks with 4+ content slides get a title slide and an executive-summary slide prepended (storylining.md §8).5455### Step 2 — Slide plans (think before output)5657For **each** slide, before writing any JSX, write a 4-line plan in your visible response:5859- **Message:** the action title (final wording)60- **Evidence:** which facts/data prove it, and their source61- **Layout:** the named pattern from layout.md §5, and why62- **Chart:** the chart type from charts.md §2 (with the comparison it shows), or "no chart" with the reason6364Check each plan against the Hard rules before rendering. If a plan fails (e.g., no source exists for a claim), fix the plan, not the rendered slide.6566### Step 3 — Render6768Build the artifact per Output format below, following layout.md / charts.md / typography.md exactly.6970### Step 4 — Humanizer pass7172Re-read every piece of copy on every slide against language.md §3: banned words, banned patterns, the four rewrite tests. Rewrite in place. This pass is mandatory even when the copy "seems fine."7374### Step 5 — Self-check7576Run the checklist at the bottom of this file against **every slide**. Fix all failures before delivering. Then confirm in one line that the deck passed (e.g., "Self-check: 5/5 slides pass").7778## Output format7980Single `.jsx` React artifact.8182- **Canvas:** every slide renders on a fixed 1280×720 stage, scaled to fit the viewport by transform-scaling the whole stage (never by changing font sizes):8384```jsx85function Stage({ children }) {86 // Scale the 1280x720 slide to the available width87 const ref = useRef(null);88 const [scale, setScale] = useState(1);89 useEffect(() => {90 const update = () => setScale(Math.min(ref.current.offsetWidth / 1280, 1));91 update();92 window.addEventListener("resize", update);93 return () => window.removeEventListener("resize", update);94 }, []);95 return (96 <div ref={ref} className="w-full" style={{ height: 720 * scale }}>97 <div style={{ width: 1280, height: 720, transform: `scale(${scale})`, transformOrigin: "top left" }}>98 {children}99 </div>100 </div>101 );102}103```104105- **Single slide:** one stage, no navigation chrome.106- **Deck:** slides as separate components (`Slide1`, `Slide2`, …), a shell with keyboard nav (←/→), small bottom-center dot indicators, subtle prev/next arrows. Instant swap, no transitions. Only the active slide is mounted (so Chart.js re-creates cleanly).107- **Charts:** `import Chart from "chart.js/auto"`; canvas + `useRef` + `useEffect` with `chart.destroy()` cleanup; `animation: false`; fonts and colors per charts.md §5.108- **Icons:** `lucide-react`, `strokeWidth={1.5}`, used only as row/pillar markers per layout.md.109- **Fonts:** Tailwind arbitrary values matching the scale (`text-[16px]` etc.). `text-xs`/`text-sm` are banned.110111## Worked examples112113**1. Title: label → claim.**114- Bad: title "Revenue Growth Analysis" over a bar chart, bullets "Revenue grew significantly," "Margins under pressure."115- Good: title "50% annual growth with declining profitability is unsustainable — we need a strategy that balances both." Chart + evidence column (layout 5.1): combo Chart.js bar+line (revenue columns in primary, OI% black line), "48% CAGR" callout, right column of bold-metric evidence blocks ("48% CAGR", "250+ new hires", "−600bps OI"), source line "Source: Client financials, FY2014–17; team analysis."116- Why: the bad slide makes the reader do the analysis; the good slide asserts the conclusion and proves it, with axes, units, and a source.117118**2. Chart honesty: decoration → labeled evidence.**119- Bad: gradient-filled CSS bars with no axes ("cleaner look"), values only on hover, five colors, no source.120- Good: Chart.js horizontal bar sorted by value, one primary-color focal bar and grey context bars, horizontal axis labeled "Store sales ($M)," dashed benchmark line labeled "Industry average $3M" on the chart, data labels on each bar, source line present.121- Why: an executive must decode the chart cold — type matched to an item comparison, every scale labeled, benchmark on the chart, one focal color.122123**3. Copy: AI-slop → executive prose.**124- Bad: "Leveraging cutting-edge automation to unlock robust operational synergies across the value chain."125- Good: "Robotic process automation cuts labor cost 18% while lifting throughput."126- Why: banned words out, concrete verb, a number, and a consequence. Passes the partner test.127128## Self-check (run per slide, fix before delivering)129130- [ ] Title carries the slide's message (so-what sentence, or house-voice equivalent), ≤2 lines, active verb, no banned words131- [ ] Reading all titles in order tells the full story (deck-level, run once)132- [ ] Every analytical claim is attributed (source line, or in-content provenance under a house template)133- [ ] All charts are real chart objects (Chart.js / native pptx); type matches the comparison; axes labeled horizontally with units; benchmark/average lines labeled on the chart134- [ ] No invented figures — every missing number is a visible `[ CONFIRM · … ]` placeholder135- [ ] No text below 15px (including chart options); all sizes from the approved scale136- [ ] Every color maps to a palette role (primary/secondary/highlight/greyscale); no decorative or unassigned colors; same palette across all slides137- [ ] Margins (64/48/40), aligned columns, ≥20% whitespace; no cards, shadows, gradients138- [ ] ≤6 supporting points, ≤~8 words each; one idea per slide; slide stands alone without narration139- [ ] Numbers rounded, units shown, figures tie out across slides140- [ ] Copy passed the humanizer pass (no banned words/patterns; partner, evidence, verb, deletion tests)
Run npx skillmds@latest add trev0rr/executive-slide in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Use when the user asks for an executive slide, strategy slide, consulting slide, McKinsey/MBB-style slide, executive or strategy deck, board deck, or wants data/analysis made "boardroom-ready" or presented to leadership. Produces single slides or multi-slide React (.jsx) artifact decks to management-consulting standards. It is listed under Web & Frontend on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
trev0rr (@trev0rr) published this skill. Their other Agent Skills are listed on their SkillMD profile.