A Claude Code skill that builds branded presentation decks (.pptx) through a structured five-phase workflow. Give it source material — a doc, notes, data, or just a description — and it produces a polished, on-brand slide deck with consistent design, proper typography, and optional AI-generated images.
- Gathers context — understands your audience, occasion, and source material
- Analyzes content — identifies narrative arc, maps content to 22 slide types, proposes a numbered deck plan
- Applies your brand — colors, fonts, visual elements, background rhythm from your brand profile
- Generates slides — builds native .pptx with editable text, charts, shapes, and icons via PptxGenJS
- Reviews quality — converts to images and runs visual QA against 12 hard rules, fixes issues before delivery
Output is a .pptx file compatible with Google Slides and Microsoft PowerPoint.
- No bullet dumps. Content is mapped to the right visual format — data gets callout treatment, processes become flows, comparisons become tables. The skill actively prevents common AI-generated presentation failures.
- Brand-aware. Your colors, fonts, and visual identity are encoded in a profile that the skill reads every time. No drift between decks.
- Opinionated design system. Typography hierarchy, spacing rules, background rhythm, density management, and anti-pattern enforcement are built in. Every slide is composed, not templated.
- Optional AI images. Generates contextual background images and supporting visuals via Nano Banana (Gemini 3 Pro) through OpenRouter. Falls back to shapes and icons if you skip image generation.
- Speaker notes preserved, not invented. If you provide notes, they're mapped to slides verbatim. The skill never generates fake speaker notes.
| Requirement | Purpose | Install |
|---|---|---|
| Claude Code | Runs the skill | CLI, desktop app, or IDE extension |
| Node.js 18+ | Builds .pptx files | brew install node or nodejs.org |
Optional (for template ingestion):
| Requirement | Purpose | Install |
|---|---|---|
| Python 3.10+ | Extracts layouts from a .pptx template | brew install python or python.org |
| LibreOffice | Converts template layouts to preview PNGs | brew install --cask libreoffice (Mac) / apt install libreoffice (Linux) |
Optional (for AI image generation):
| Requirement | Purpose | Install |
|---|---|---|
| OpenRouter account | Generates images via Nano Banana (Gemini 3 Pro) | Sign up at openrouter.ai |
-
Clone or download this repo into your Claude Code skills directory:
# Personal install (available in all projects) git clone https://github.com/lowrentkicker/deck-builder.git ~/.claude/skills/deck-builder # Or project-specific install git clone https://github.com/lowrentkicker/deck-builder.git your-project/.claude/skills/deck-builder
-
Install Node dependencies:
cd ~/.claude/skills/deck-builder npm install
-
(Optional) Install Python dependencies for template ingestion:
pip install -r ~/.claude/skills/deck-builder/scripts/requirements.txt -
(Optional) Set up OpenRouter for AI image generation:
mkdir -p ~/.imagegen echo '{"api_key": "YOUR_OPENROUTER_KEY"}' > ~/.imagegen/config.json chmod 600 ~/.imagegen/config.json
That's it. Claude Code auto-discovers skills in ~/.claude/skills/.
The first time you use deck-builder, it walks you through brand profile onboarding — a one-time setup that teaches it your visual identity.
Open Claude Code and say something like:
Build me a deck about Q2 results for the leadership team.
Claude will detect that no brand profile exists and ask how you want to set one up.
Path A — "I have a PowerPoint template"
If your company has a branded .pptx template, provide the file path. Claude runs the inspection script to extract your template's slide layouts as PNGs, reads the structural data, then asks you about:
- Your brand colors (exact hex values)
- Font family
- Logo file and placement
- Visual tone
It generates a brand profile from your answers and the template analysis.
Path B — "I'm starting from scratch"
No template? No problem. Claude interviews you:
- Do you have a website, logo, or brand guidelines?
- What colors represent your brand? (or "what feeling should the deck convey?")
- What visual style? (clean/minimal, bold/graphic, data-forward, editorial)
- What tone? (formal, conversational, editorial, playful)
It suggests font pairings, proposes a color palette, and generates a profile from your answers.
Path C — "Just make it professional"
Skip onboarding entirely. A neutral starter profile (charcoal, blue accent, Work Sans font) is included and works out of the box.
Once a profile exists, Claude moves into the five-phase workflow:
- Asks about your source material, audience, and any must-include points
- Produces a numbered Deck Plan — every slide listed with its type, background, content, and design rationale
- Waits for your approval before generating anything
- Builds the .pptx with native editable text, proper typography, and brand-correct colors
- Converts to images and runs visual QA — fixes issues before handing you the file
Once your brand profile exists, onboarding is skipped. Say "build me a deck" and Claude goes straight to context gathering.
You: Build a deck about the product roadmap for the engineering all-hands.
Here's the doc: /path/to/roadmap.md
Claude: [reads the doc, asks 2-3 clarifying questions]
Claude: [presents Deck Plan — 14 slides, each with type/content/rationale]
You: Looks good, but move the timeline to slide 4 and add a slide about hiring.
Claude: [updates plan, rebuilds]
Claude: [generates .pptx, runs QA, delivers file]
You can also:
- Create additional brand profiles — "Set up a new brand profile called investor-deck" — for different audiences or sub-brands
- Choose a profile per deck — Claude lists your available profiles and asks which one to use
- Edit profiles directly — they're just markdown files in
brand_profiles/
deck-builder/
├── SKILL.md # Entry point — 5-phase workflow + 12 hard rules
├── onboarding.md # Brand profile setup (template or interview)
├── brand_profile_schema.md # Schema that profiles must follow
├── content_analysis.md # Phase 2: source material → deck plan
├── slide_taxonomy.md # 22 slide types with decision rules
├── design_system.md # Visual rules, spacing, anti-patterns
├── image_generation.md # AI images via OpenRouter (optional)
├── quality_review.md # Phase 5: visual QA checklist
├── brand_profiles/
│ └── _starter/
│ └── profile.md # Default neutral profile
├── scripts/
│ ├── inspect_template.py # Template ingestion (optional)
│ └── requirements.txt
├── pptx/
│ └── pptxgenjs.md # PptxGenJS slide construction reference
├── package.json
└── SETUP.md # Detailed setup reference
The skill is entirely markdown — no compiled code, no runtime server. Claude reads the relevant files at each phase and follows the instructions. The only executable is inspect_template.py, which runs once during template onboarding.
These are enforced on every deck, every time:
- No "Thank you" / "Questions?" closing slides (unless explicitly asked)
- Title slide layout used exactly once — on slide 1
- No slides with >40% purposeless empty space
- No bullet lists when a visual format fits (tables, flows, cards)
- No centered body text — left-align paragraphs and lists
- Correct font on every text element
- No consecutive slides with the same layout
- Key metrics get big-number callout treatment
- No empty layout slots — redistribute or pick a different layout
- Split overflowing content rather than shrinking text
- Section dividers are visually distinct from content slides
- Every slide has at least one visual element (image, chart, icon, shape)
Fonts in your brand profile must be installed on the machine where the .pptx is opened, not where it's built. If you use a custom font, include a fallback in your profile.
Safe defaults that are pre-installed almost everywhere:
- Work Sans — free Google Font, used in the starter profile
- Inter — free Google Font, widely available
- Arial — pre-installed on virtually every machine
CC BY-NC 4.0 — free to use, share, and adapt with attribution. Not for commercial use.