From bmad-skills
Brainstorms, generates, reviews, and exports presentation slides/decks to HTML, PDF, and PPTX using design tokens and a design-system-agnostic approach.
How this skill is triggered — by the user, by Claude, or both
Slash command
/bmad-skills:slide-makerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Make presentation slides that look genuinely impressive and stay on-brand — from a
README.mddeck-template/assets/fonts/Inter-Bold.otfdeck-template/assets/fonts/Inter-LICENSE.txtdeck-template/assets/fonts/Inter-Regular.otfdeck-template/index.htmldeck-template/package-lock.jsondeck-template/package.jsondeck-template/postcss.config.jsdeck-template/public/edit-mode/edit-mode.cssdeck-template/public/edit-mode/edit-mode.jsdeck-template/public/edit-mode/html-to-image.jsdeck-template/scripts/check-slop.mjsdeck-template/scripts/clean-verify.mjsdeck-template/scripts/diff-regions.mjsdeck-template/scripts/export-deck.mjsdeck-template/scripts/export-pptx-jsx.mjsdeck-template/scripts/feedback-bridge.mjsdeck-template/scripts/inspect.mjsdeck-template/scripts/lib/deck-driver.mjsdeck-template/scripts/lib/dom-walk.browser.jsMake presentation slides that look genuinely impressive and stay on-brand — from a single slide to a full deck, with a review loop and HTML/PDF/PPTX export. The skill ships everything: a token-driven design kit, a craft guide, a slop validator, a ready-made React deck, edit-mode collaboration, and the exporters. It works with whatever design system the deck needs — yours, a suggested one, or a neutral default.
It works as job-specific workflows. Figure out which job the user is on (below), then open that workflow file and follow it. The natural order is brainstorm → generate → export, but the user can jump straight to any step (e.g. "export this deck to PDF" on a deck that already exists).
| The user wants to… | Workflow |
|---|---|
| figure out what the deck should say / its structure (vague idea, "I need a deck for X") | slide-brainstorm |
| build the actual slides and iterate on them (generate, review, revise) | slide-generate |
| get an editable PowerPoint (recipient edits text/shapes) | export-editable-pptx |
| get a pixel-perfect, view-only PowerPoint | export-image-pptx |
| get a single self-contained HTML file (opens offline) | export-standalone-html |
| get a PDF (print/handout) | export-pdf |
brainstorm ──▶ generate ──▶ ┬─▶ editable PPTX
(idea→skeleton) (HTML deck, ├─▶ image PPTX
review loop) ├─▶ standalone HTML
└─▶ PDF
Each workflow ends by pointing to the next. If a request is ambiguous about which job, ask one quick question rather than guessing — brainstorming a deck and exporting one are very different work. If the user's idea is still vague and they ask to "make slides," start at brainstorm (don't generate from an unexamined idea).
The layouts are token-driven: color, type, and spacing come from a theme file, never from hardcoded values in the slides. Before you build anything, resolve which design system supplies those tokens. Run this flow in order and stop at the first branch that applies:
design-system/themes/clean-light.css (or a new theme file that the entry point
imports). Layouts never change; only the theme file's token values do.nextlevelbuilder/ui-ux-pro-max-skill is installed. If yes → invoke
it to suggest the best-fit design system for the deck's content/idea, then map that
suggestion into the theme file.https://github.com/nextlevelbuilder/ui-ux-pro-max-skill — this is the preferred
path.git clone https://github.com/nextlevelbuilder/ui-ux-pro-max-skill into /tmp, use it
for THIS TURN ONLY, and do not persist it into the skill or the user's project.
Never run this network fetch without explicit consent — always ask before cloning.clean-light theme.clean-light is the guaranteed floor — the flow always ends in a working theme, so
the skill never blocks. Whatever the outcome, the active theme file is the single source
of truth for color/type: read it, and write token values into it rather than hardcoding
into layouts.
Before scaffolding, ask the user where the deck should live. Propose a default and let them override:
./slides/<deck-name>/ in the user's current project../slides/<deck-name>/export/.deck-template/ scaffold to that location — NOT into the skill directory.
This keeps the skill install clean and lets multiple decks coexist side by side. The
skill's own deck-template/ is a pristine template; the working copy lives in the
user's project.This skill can also feed just the design layer (tokens, components, patterns) to a
different slide generator (e.g. slides-generator). That generator runs its own
workflow but pulls its theme from here instead of picking a generic vibe:
tailwind.config.js and import
the active font. Then the Tailwind utilities resolve to the active design system's tokens.<skill>/design-system/styles.css; style with the CSS custom
properties it exposes (e.g. var(--fs-h1), var(--space-8), the theme's color tokens),
never with literal hex values.Ships inside this skill, so it's standalone:
<skill>/design-system/
├── styles.css ← token entry point (imports tokens + the active theme; link for HTML slides)
├── tokens/ ← colors, typography, spacing, fonts — THE source of truth
├── themes/clean-light.css ← the active theme (bundled neutral default; the guaranteed floor)
├── slides/*.html ← 34 premade slide layouts (the catalog)
└── assets/logos/ ← mark.svg, logo-full.svg (neutral placeholders; swap for the deck's real logos)
The active theme file wins for color/type. If a layout appears to disagree with the tokens, the tokens/theme win — open and read them. Never hardcode a hex or a font into a layout; change the theme file instead.
<skill>/design-system/tokens/ and the
active theme.check-slop.mjs validator is the floor.inspect.mjs, read
geometry.json (true 1280×720 pixels), and assert the inequality — content bottom
y+h ≤ 648, alignment |A.bottom − B.bottom| ≤ 2. Report the measured number, never a
vibe. If the numbers and your eyes disagree, the numbers win. Full method + the canonical
bounds + layout recipes (no magic-pixel heights; items-stretch for equal columns;
footer in flow with mt-auto, never absolute vs flex:1):
visual-review.md → The geometry gate.arena.bottom == step.bottom ±2px AND footer.bottom ≤ 648), and only claim done when it provably passes. If two requirements
conflict (align A to B and keep the footer in-frame ⇒ content too tall), say so and
propose the trade — don't ship an overlap and call it done.| File | What it covers |
|---|---|
| house-style.md | The 34 premade layouts, when to use each, token-driven styling, patterns, logo usage |
| wow-guide.md | Presentation craft: hierarchy, data-viz, depth, motion, density, typography + snippets |
| tailwind-theme.md | Drop-in tailwind.config.js theme block + the chart-series palette |
| validation.md | check-slop.mjs: what each check means + the AI-slop tells to self-catch |
| visual-review.md | Render slides to PNGs and self-review the pixels (the gate the linter can't be) |
| deck-template.md | The ready-made React deck shell: structure, dev, edit mode, HTML/PDF/image export |
| edit-mode.md | The point-and-comment feedback overlay + programmatic inspect API |
| pptx-editable.md | Editable-PPTX deep dive: measure→OOXML, the validation gate + acknowledgement system, fonts, gotchas |
To render the 34 layout previews for review, use
deck-template/scripts/shoot-layouts.mjs.
npx claudepluginhub bmad-labs/skills --plugin bmad-skillsCreates brand-aware presentations using frontend-slides or reveal.js with automated brand setup and source structure detection.
Generates a professionally designed HTML slide deck from a brief or content notes. Single-file output with 13 layout types and 8 style presets.
Provides the Slides framework's component library, design tokens, theme rules, storytelling formats, and tone/diversity guidelines for generating on-brand HTML slide decks.