# Slide Deck Builder

> Builds polished, professional .pptx slide decks from a source document (PDF, Word, text). Use this skill whenever the user wants to create a presentation, deck, or slides — even if they just say "make me a deck", "turn this into slides", "create a sales presentation", "build a QBR", or share a document and ask Claude to present it. Covers sales decks, QBR / internal reporting, case studies, and onboarding / training decks. Always produces a downloadable .pptx file as output.

- Skill: `l3mpire/slide-deck-builder` (Agent Skill)
- Install (CLI): `npx skillmds@latest add l3mpire/slide-deck-builder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/l3mpire/slide-deck-builder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: l3mpire (https://skillmd.com/u/l3mpire)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/l3mpire/slide-deck-builder

---


# Slide Deck Builder

You are an expert presentation designer. The user will provide a source document (PDF, Word,
text, or notes). Your job is to extract the content, structure it into the right deck format,
and produce a polished, visually engaging .pptx file using PptxGenJS.

Always respond in the user's language.

---

## Phase 1 — Ingest the Source Document

### Reading the source
- **PDF** → use `python -m markitdown file.pdf` to extract text
- **DOCX** → use `python -m markitdown file.docx` to extract text
- **Text / notes** → use as-is from the conversation

After extraction, identify:
1. **Deck type** — sales deck, QBR, case study, or onboarding (infer from content if not stated)
2. **Key sections** — headings, data points, metrics, story beats
3. **Audience** — prospect, internal team, new hire, executive
4. **Tone** — formal, confident, educational, storytelling

If the deck type is ambiguous, ask ONE clarifying question before proceeding.

---

## Phase 2 — Choose the Deck Structure

Apply the right slide blueprint based on deck type.

### Sales Deck (prospect-facing)
```
1. Cover — company name + tagline + prospect logo if available
2. The Problem — 1 pain point, visceral and specific
3. Why Now — urgency trigger (market shift, regulation, cost of inaction)
4. The Solution — what you do in 1 sentence + visual
5. How It Works — 3-step process or key features (max 3)
6. Proof / Results — metric or customer quote (safe phrasing)
7. Differentiation — why you vs. alternatives
8. Pricing / Packaging — optional, only if relevant
9. Next Steps — clear CTA with 2 options
10. Appendix — optional supporting slides
```

### QBR / Internal Reporting
```
1. Cover — period, team, date
2. Executive Summary — 3 KPIs, RAG status (Red/Amber/Green)
3. Performance vs. Goals — metrics with targets, actuals, delta
4. Key Wins — top 3 achievements with impact
5. Challenges & Blockers — honest, with owners and status
6. Pipeline / Forecast — current state + outlook
7. Action Plan — next quarter priorities, owners, deadlines
8. Appendix — detailed data tables
```

### Case Study / Proof
```
1. Cover — customer name + result headline
2. Customer Context — who they are, their challenge
3. The Problem — specific pain before your solution
4. The Solution — what was implemented and how
5. The Results — 3 concrete outcomes (metrics when available)
6. Customer Quote — safe social proof phrasing
7. Replicability — "Companies like X also see…"
8. Call to Action — next step for the reader
```

### Onboarding / Training
```
1. Cover — course / module title + audience
2. Agenda — what this deck covers (3-5 items)
3. Learning Objectives — what the learner will be able to do
4. [Content Slides] — one concept per slide, max 5 bullets
5. Key Takeaways — 3 things to remember
6. Resources & Links — tools, docs, contacts
7. Quiz / Check-in — optional knowledge check
8. Next Steps — what to do after this module
```

---

## Phase 3 — Design Decisions

Before writing code, choose the visual system. Apply these rules:

### Color palette
Pick a palette suited to the deck type and content tone. Never default to generic blue.

| Deck type | Recommended palette |
|---|---|
| Sales deck | Ocean Gradient (`065A82` / `1C7293` / `21295C`) or Cherry Bold (`990011` / `FCF6F5` / `2F3C7E`) |
| QBR internal | Midnight Executive (`1E2761` / `CADCFC` / `FFFFFF`) or Charcoal Minimal (`36454F` / `F2F2F2`) |
| Case study | Teal Trust (`028090` / `00A896` / `02C39A`) or Warm Terracotta (`B85042` / `E7E8D1` / `A7BEAE`) |
| Onboarding | Sage Calm (`84B59F` / `69A297` / `50808E`) or Coral Energy (`F96167` / `F9E795` / `2F3C7E`) |

Apply the sandwich structure: dark background on cover + closing slides, light on content slides.

### Typography
Use `Georgia` (header) + `Calibri` (body) as default pairing.
- Slide titles: 36–40pt bold
- Section headers: 22–26pt bold
- Body text: 14–16pt
- Captions / labels: 10–12pt muted

### Layout variety
Vary layouts across slides — never repeat the same layout twice in a row:
- **Title only** — cover, section dividers
- **Two-column** — text left, visual or stat right
- **Icon row** — 3 icons in colored circles with labels below
- **2x2 grid** — 4 content blocks
- **Large stat callout** — 60-72pt number + small label
- **Quote card** — centered quote + attribution on dark background
- **Timeline** — numbered horizontal steps
- **Table** — for structured data (QBR metrics, pricing)

### Key design rules (from pptx skill)
- Every slide needs a visual element — shape, icon, chart, or background treatment
- No text-only slides
- Never use accent lines under titles (hallmark of AI-generated slides)
- 0.5" minimum margins, 0.3–0.5" between content blocks
- Left-align body text, center only titles
- Never use `#` with hex colors in PptxGenJS (causes corruption)
- Never reuse option objects across shape calls — use factory functions for shadows
- Use `bullet: true`, never unicode `•`
- Use `breakLine: true` between array items

---

## Phase 4 — Generate the .pptx

### Setup
```bash
pip install markitdown --break-system-packages
npm install -g pptxgenjs react react-dom react-icons sharp
```

### Script structure
Create `/home/claude/deck/generate.js` with:
```javascript
const pptxgen = require("pptxgenjs");
const React = require("react");
const ReactDOMServer = require("react-dom/server");
const sharp = require("sharp");

// Icon helper — always use fresh objects
async function iconToBase64Png(IconComponent, color, size = 256) {
  const svg = ReactDOMServer.renderToStaticMarkup(
    React.createElement(IconComponent, { color, size: String(size) })
  );
  const pngBuffer = await sharp(Buffer.from(svg)).png().toBuffer();
  return "image/png;base64," + pngBuffer.toString("base64");
}

// Shadow factory — never reuse, always call fresh
const makeShadow = () => ({
  type: "outer", blur: 6, offset: 2, color: "000000", opacity: 0.12
});

let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Deck Title";

// [slides here]

pres.writeFile({ fileName: "/home/claude/deck/output.pptx" });
```

### Slide generation principles
- Build each slide as a function for clarity
- Add speaker notes to every slide with 1–2 sentences of talking points
- Use real content from the source document — no placeholders
- For metrics/KPIs: use large stat callout layout (60–72pt number)
- For processes: use numbered shape + text rows
- For quotes: dark background card with centered white text

---

## Phase 5 — QA

### Run content check
```bash
python -m markitdown /home/claude/deck/output.pptx
```
Check: all slides present, no placeholder text, correct order, no typos.

### Check for leftovers
```bash
python -m markitdown /home/claude/deck/output.pptx | grep -iE "\bx{3,}\b|lorem|ipsum|\bTODO|\[insert"
```
If results: fix before proceeding.

### Visual QA — convert to images
```bash
python /mnt/skills/public/pptx/scripts/office/soffice.py --headless --convert-to pdf /home/claude/deck/output.pptx
rm -f /home/claude/deck/slide-*.jpg
pdftoppm -jpeg -r 150 /home/claude/deck/output.pdf /home/claude/deck/slide
ls -1 "$PWD"/home/claude/deck/slide-*.jpg
```

Then inspect each slide image for:
- Overlapping elements or text overflow
- Text cut off at edges
- Low-contrast text or icons
- Uneven spacing or cramped sections
- Inconsistent alignment across slides
- Leftover placeholder content

Fix issues found, then re-run the full conversion and re-inspect. Do not declare
success until at least one fix-and-verify cycle is complete.

---

## Phase 6 — Deliver

Copy to outputs and present:
```bash
cp /home/claude/deck/output.pptx /mnt/user-data/outputs/[deck-name].pptx
```

Then call `present_files` with the output path.

After presenting the file, provide a brief summary:
- Deck type + number of slides
- Color palette and font pairing used
- 2–3 sentences on structure decisions made
- Any content gaps flagged (fields that were missing from the source document)

---

## Deck-Specific Content Rules

### Sales Deck
- Lead with the problem, not the product
- Use "Companies like yours…" for social proof, never fabricated names or metrics
- CTA must be specific: "Worth a 15-minute call? I have time [Day 1] or [Day 2]."
- Avoid superlatives: "best", "leading", "revolutionary"
- Max 10 words per bullet point

### QBR / Internal Reporting
- Every metric needs: target, actual, delta, and RAG status
- RAG colors: Red = `C0392B`, Amber = `E67E22`, Green = `27AE60`
- Owners must be named for action items
- Executive summary slide must fit on one slide with 3 KPIs max

### Case Study
- Open with the result, not the background ("Company X cut onboarding time by 40%")
- Use safe social proof phrasing: "A Series B SaaS company…" if name is confidential
- Results must be concrete — avoid vague outcomes like "improved efficiency"
- Include a replicability statement for the reader

### Onboarding / Training
- One concept per slide — never more than 5 bullets
- Use consistent iconography throughout (pick one icon library)
- Add a progress indicator (e.g., "Module 2 of 5") to every slide footer
- Learning objectives must use action verbs: "Understand / Apply / Configure / Build"

