--- name: slide-deck-builder description: > 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. --- # 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"