agentleFS
isatimurisatimur/presentation-md/.agents/skills/presentation-generator/SKILL.md

presentation-generator

Skill4 starsChanged 3 months agoMITView on GitHub

Create stunning slide decks from notes — vibe → preview → craft. Self-contained HTML plus editable PowerPoint. 75 themes, Studio share links, MCP craft gates. Use for pitch decks, investor updates, keynotes, product launches, sales demos, and any presentation request.

  • Installs packages

7 other projects use a version of this.

Adopted by

Most recently taken up by

  • Other versions7 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 7

    1. glebis/claude-skills★ 410same name
    2. shaharsha/claude-skills★ 6same name
    3. Ntmib/jarvis-architect★ 4same name
    4. DanderlionJer/skills★ 1same name
    5. JAVICHILEON/claude---Skills★ 0same name
    6. KISHOR403/claude-skills★ 0same name
    7. yashmgupta/agentic-slides★ 0same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository2 other files it gives its agents.

The file

Show its rules and text

We split this skill into the rules it gives an agent

44 rules. 0 are common, 19 are distinctive, and 25 are very specific to this project.

  • 0

    Common

    Most of the 6 edited versions we read keep these.

  • 19

    Distinctive

    This author's own choices. Worth a look.

  • 25

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Create stunning slide decks with an AI coding agent — HTML you own, plus editable PowerPoint when the room needs Office.

    line 15
  2. Distinctive:

    Default first win (no schema lecture): ask for a deck → show three vibes → scaffold → hand the user a Studio share link.

    line 17
  3. Distinctive:

    Do not ask the user to memorize theme names or layout enums.

    line 62
  4. Very specific:

    If they already named a theme/alias/brand URL, skip to Phase 3 (import_brand_theme for brand match).

    line 68
  5. Very specific:

    Only open references/deck-schema.md and layout details when emitting or repairing JSON.

    line 79
  6. Very specific:

    Always surface the editable handoff: studio_share_url / share_deck_link / Studio Copy link.

    line 85
  7. Distinctive:

    Every deck needs a dramatic arc.

    line 127
  8. Distinctive:

    The tension law: every slide should create a tiny question in the audience's mind that the next slide answers.

    line 149
  9. Very specific:

    Craft tip: Prefer ratio + aside over a balanced 50/50 when the slide needs a pull-quote or one dominant claim — balanced columns read as …

    line 174
  10. Distinctive:

    When to use: before/after, old way vs new way, us vs them, option A vs B.

    line 182
  11. Very specific:

    Craft tip: Always set emphasis toward the winning side in a sales or pitch deck — equal-weight comparisons feel undecided.

    line 185
  12. Distinctive:

    Design rule: keep the snippet short (≤18 lines).

    line 216
  13. Distinctive:

    When to use: every deck ends here. Make the next action unmissable.

    line 231
  14. Very specific:

    Design rule: keep total ≤ 120. Prefer over custom-html squares.

    line 238
  15. Distinctive:

    When a brief matches a stunning-25 vibe, open that structured proof and match its craft ceiling — do not invent a watered-down palette.

    line 262
  16. Very specific:

    Prefer image-hero or a composed visual beat on slide 1 for investor/launch/brand decks.

    line 269
  17. Very specific:

    Run audit_deck then judge_deck (t1 minimum, t2 before delivery).

    line 271
  18. Very specific:

    Read references/anti-slop-bans.md — Inter/purple/cream-terracotta defaults are banned unless the theme owns them.

    line 272
  19. Very specific:

    When the brief is paper/editorial (soft-editorial, heritage-editorial, emerald-editorial, vintage-editorial, pink-script, claude, …

    line 274
  20. Distinctive:

    Rule 2 — One warm, one cool: Every great palette pairs one warm tone with one cool tone.

    line 299
  21. Distinctive:

    Rule 3 — Earn your accent: If you use your accent color on more than 15% of any slide's surface area, it stops being an accent.

    line 301
  22. Distinctive:

    All CSS animations in this skill follow a choreography hierarchy:

    line 311
  23. Very specific:

    Use @keyframes fadeUp universally: from { opacity:0.

    line 321
  24. Distinctive:

    The breathing rule: every slide needs at least 40px of "air" on all sides.

    line 323
  25. Distinctive:

    One job per slide: If you can describe what a slide does in more than one sentence, split it.

    line 329
  26. Distinctive:

    Do not ask the user to pick a theme from a bare name list when they are unsure.

    line 383
  27. Distinctive:

    Default when vibe is vague: a popular shortlist + one stunning-25 bold option in the preview mix — never three near-identical safe …

    line 396
  28. Very specific:

    Read references/theme-selection-index.json (mood, best_for, avoid_for, scheme, aliases).

    line 398
  29. Very specific:

    Stunning twenty-five: when the brief matches a flagship vibe, read references/stunning-25.md and open that structured proof / Studio …

    line 401
  30. Very specific:

    Prefer shortlists marked "popular": true when the vibe is vague.

    line 405
  31. Very specific:

    Required when tooling is available: call preview_themes with those 3 names (writes …

    line 415
  32. Very specific:

    If MCP is unavailable, run: npx @presentation-md/render preview.json -o previews/<theme>.html --theme <name> three times (one title slide …

    line 420
  33. Very specific:

    After they pick, set meta.theme and proceed.

    line 423
  34. Very specific:

    When a theme has a gallery field, open that craft deck as a multi-slide proof (not just the title preview).

    line 424
  35. Very specific:

    If they already named a theme, alias, or brand URL, skip discovery (import_brand_theme for brand match).

    line 426
  36. Distinctive:

    Never shrink until cramped — split into more slides instead.

    line 435
  37. Distinctive:

    Before generating, confirm (ask together when possible — purpose, length/density, content readiness):

    line 443
  38. Very specific:

    Direct to file: when inside a repo: write <slug>/deck.html

    line 485
  39. Distinctive:

    Code block: when copy-paste is requested: wrap the rendered HTML in a fenced code block, no surrounding explanation

    line 486
  40. Very specific:

    Deck-spec path: use the renderer — it ships 16:9 slides, scroll-snap, keyboard arrows, .nav-hint, entrance motion, and …

    line 489
  41. Very specific:

    Use fenced chart bar CSV blocks for charts and html for custom-html art.

    line 504
  42. Very specific:

    When the user already has a .pptx, import it into deck JSON first (don't retype slides):

    line 510
  43. Very specific:

    Call preview_themes (or open gallery structured proofs) before locking a vibe — never invent a palette.

    line 536
  44. Very specific:

    Call judge_deck for craft gates (tier=t1).

    line 538

“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Presentation Generator

Create stunning slide decks with an AI coding agent — HTML you own, plus editable PowerPoint when the room needs Office.

Default first win (no schema lecture): ask for a deck → show three vibes → scaffold → hand the user a Studio share link.

User: "Series A pitch for our AI infra startup — bold, not corporate"
You:  preview_themes (safe + bold + wildcard) → user picks
      scaffold_deck(purpose, theme) → return studio_share_url (?d=)
      fill copy → audit_deck → render / export PPTX if asked

Gallery + Studio (zero install): https://presentation-md.vercel.app


Progressive disclosure (load only what you need)

This SKILL.md is the workflow map. Open supporting files on demand — do not dump schema, all 75 themes, or layout encyclopedias into context before the user has a vibe.

FilePurposeLoad when
SKILL.md (this file)Workflow + first-win pathAlways
references/theme-shortlists.jsonUse-case vibe shortlistsPhase 1 (vibe)
references/stunning-25.mdFlagship craft ceilingsPhase 1 when brief matches
references/theme-selection-index.jsonCompact theme metadataPhase 1 shortlist
references/themes.mdOne-liners for all 75Only if shortlists miss
references/layout-recipes.mdPitch / launch / wrap slide mapsPhase 3 (craft)
references/deck-schema.mdLayout prop referencePhase 3 while emitting JSON
references/anti-slop-bans.mdBanned AI-slop aestheticsBefore custom styling
references/custom-html-recipes.mdSchema-safe art escapesOnly for intentional art beats
references/animation-patterns.mdMotion on direct-HTML pathDirect-HTML only
references/pptx-import.md / markdown-import.mdImport bridgesWhen converting existing decks

Phases — vibe → preview → craft → share

Phase 0 — Mode

  • New deck → Phase 1
  • Convert PPTX / Markdown → import_pptx / import_markdown (see import refs), then Phase 2
  • Enhance existing → open Studio / Deck JSON; remorph or retheme; skip discovery if vibe is locked

Phase 1 — Vibe (ask once, together)

Collect purpose, length/density, content readiness, and a rough mood. Prefer intelligent defaults over interrogation (≤3 clarifying questions).

Do not ask the user to memorize theme names or layout enums.

Phase 2 — Preview (show, don’t tell)

Shortlist 3 themes: 1 safe · 1 bold · 1 wildcard. Call preview_themes (inline PNGs on by default; ≥2 themes → layouts mode). User picks visually.

If they already named a theme/alias/brand URL, skip to Phase 3 (import_brand_theme for brand match).

Phase 3 — Craft

Preferred first hop when MCP is available:

  1. scaffold_deck(purpose, theme) → craft-floor skeleton + studio_share_url
  2. Fill real copy (no lorem)
  3. audit_deck (apply_safe_fixes / remorph_density as needed) then judge_deck (t1+)
  4. render_deck / export PPTX / hand Studio link

Only open references/deck-schema.md and layout details when emitting or repairing JSON. Prefer recipe maps in references/layout-recipes.md over freehanding 14-slide feature-grid funerals.

Direct-HTML fallback (no tooling): single self-contained .html, internal CSS only, fixed 16:9 stage — see Rendering Guidelines below.

Phase 4 — Share

Always surface the editable handoff: studio_share_url / share_deck_link / Studio Copy link. Optional: export_deck (PPTX / PDF / MD / notes), deploy_deck (confirm-gated).


Install (any agent)

npx @presentation-md/install claude-code   # or: cursor | copilot | codex | gemini-cli | cli
npx skills add isatimur/presentation-md --skill presentation-generator
/plugin marketplace add isatimur/presentation-md
/plugin install presentation-md@presentation-md

Then restart and ask for a deck — or /slides <brief> in Claude Code.


Four verbs (after the first win)

VerbWhat it does
scaffold / build (default)scaffold_deck → Deck JSON + studio_share_url. One hop to an editable Studio link.
auditaudit_deck (+ apply_safe_fixes / remorph_density) then judge_deck — schema-valid ≠ shippable.
remorph / rethemeapply_theme · remorph_density · Studio My deck restyle / preview_themes with json.
shareHand studio_share_url / Studio Copy link. Optional PPTX/PDF/deploy.

Studio: https://presentation-md.vercel.app/studio — live edit, present, export PPTX. Craft controls (ratio, emphasis, bento, notes, …) live in Deck JSON and the Studio form; set them when crafting, not when discovering vibes.

Honest compares: vs frontend-slides · vs Hallmark


Narrative Architecture — Before You Write One Slide

The biggest mistake in presentations: jumping straight to content without building the story spine.

Every deck needs a dramatic arc. Use one of these:

The Problem-Solution Arc (pitches, sales)

Hook → Pain → Insight → Solution → Proof → Vision → Ask

The Revelation Arc (keynotes, product launches)

Context → Surprising Claim → Evidence → Mechanism → Implications → Call to Action

The Decision Arc (investor updates, board decks)

Situation → Complication → Resolution → Forward Guidance → Risk Register → Recommendation

The Transformation Arc (before/after, case studies)

World Before → The Turning Point → The Method → World After → What's Next

The tension law: every slide should create a tiny question in the audience's mind that the next slide answers. If a slide answers a question no one was asking, cut it.


The 18 Layout Types

Each layout is a tool. Match the layout to the job, not to the order. Only these eighteen names are valid in deck JSON (references/deck-schema.md). If you need a "manifesto" or "metric-hero" feeling, compose it with the closest layout below — never invent a layout name.

title — Single cinematic statement

When to use: opening cover, or a one-idea hero beat. Props: { heading, lead?, eyebrow? } Design rule: heading fills most of the vertical space. Nothing competes with it. Compose: a "manifesto" = title with an enormous one-sentence heading and empty lead.

section — Rhythm break

When to use: between major acts. Resets cognitive load. Creates anticipation. Props: { heading, number?, eyebrow? } Design rule: almost empty is correct — type itself is the visual.

two-column — Argument + evidence

When to use: explaining a concept with supporting copy, a side image, or a pull-aside. Props: { heading, lead?, body?, image?, imageAlt?, aside?, ratio?: "1-1"|"2-1"|"1-2"|"3-2"|"2-3", reverse? } Compose: "photo-story" = two-column with image + caption in lead/body. Asymmetric craft = ratio: "2-1" (or "1-2") so type or media dominates; aside for a quote panel when there's no image; reverse: true flips media to the left. Craft tip: Prefer ratio + aside over a balanced 50/50 when the slide needs a pull-quote or one dominant claim — balanced columns read as template; asymmetry reads as designed.

image-hero — Full-bleed cinematic moment

When to use: emotional beat, product shot, team photo, location reveal — one image carries the slide. Props: { heading, lead?, eyebrow?, image, imageAlt? } Design rule: the image is the hero; text sits on a bottom scrim. Keep copy short — one headline, one line max.

comparison — Side-by-side contrast

When to use: before/after, old way vs new way, us vs them, option A vs B. Props: { heading?, leftLabel?, left, rightLabel?, right, eyebrow?, emphasis?: "left"|"right" } Design rule: parallel structure in both columns — same kind of claim on each side so the contrast reads instantly. Use emphasis to grow the winning column. Craft tip: Always set emphasis toward the winning side in a sales or pitch deck — equal-weight comparisons feel undecided.

feature-grid — Capabilities overview

When to use: product features, service offerings, team skills. Props: { heading, cards: [{ icon?, title, body? }], columns?: 2|3|4|"bento" } (3–6 cards) Design rule: odd counts (3, 5) feel more dynamic than even. "bento" = asymmetric hero + four supporting cards. Craft tip: For 5 cards on genz-bento, playful, or any hard/soft bento surface, prefer columns: "bento" so the first card becomes a hero tile — mirrors the handcrafted gallery energy.

stat-row — Proof through numbers

When to use: traction, market size, ROI validation — or a single room-stopping metric. Props: { heading?, stats: [{ value, label }] } (1–5 stats) Design rule: the number is 3–4× the label. For a "metric-hero", use one stat and a short heading.

quote — Borrowed authority

When to use: customer voice, expert validation, memorable claim. Props: { quote, by? } Design rule: the quote should work as a tweet. If it wouldn't, find a better quote.

timeline — Progress and plan

When to use: GTM roadmap, implementation steps, historical trajectory, "how it works". Props: { heading, steps: [{ title, body? }] } Compose: a "process" flow = timeline with numbered titles ("01 · Sign up", …).

data-table — Detailed evidence

When to use: financial summary, feature matrix, risk register, multi-column comparison grid. Props: { heading, columns: string[], rows: string[][], eyebrow?, lead? } Compose: a competitive matrix with 3+ columns = data-table; a simple A-vs-B story = comparison.

code — Snippet / API proof

When to use: developer demos, SDK install, one-file "aha", CLI recipes — when the product is the code. Props: { heading?, lead?, eyebrow?, code, language?, filename? } Design rule: keep the snippet short (≤18 lines). Prefer a real filename in chrome. Never invent syntax highlighting markup — plain text only (renderer escapes HTML).

chart — Data visualization

When to use: trends, composition, ranked series — when a table or stat-row is not enough. Props: { heading?, lead?, chartType?: "bar"|"horizontal-bar"|"line"|"area"|"pie"|"donut", categories?, series: [{ name?, values }], showLegend?, showValues?, stacked? } Design rule: one chart job per slide. Prefer bar/line for trends; pie/donut for share (single series). Theme colors drive series fills automatically. Craft tip: Set showValues only when the exact number matters more than the shape — otherwise let the marks speak.

custom-html — Schema-safe art escape hatch

When to use: one-off frontend-slides craft that no layout covers — without abandoning Deck JSON / Studio / theme tokens. At most one intentional art beat per deck unless the brief is pure poster. Props: { heading?, lead?, html } Design rule: use theme CSS variables (var(--accent), var(--heading-font), …). Scripts and event handlers are stripped. PPTX approximates custom-html to text — ship HTML when the art is the point. Theme surface chrome (grids, rails, mastheads, soft washes, hard frames, Win95 bars, electric-studio split/rail, studio acid frame, grove monograph rules, etc.) is approximated as native PPTX shapes for every theme package. Pulse / risograph / candy-pop get denser soft-blob + frame stand-ins; Pulse eyebrows render as filled chips; candy-pop cards get hard ink borders (not just slide chrome). Paper/editorial themes keep quiet fiber grain as HTML-only — PPTX carries rules/washes/mastheads. True mix-blend-mode / animated marquees remain HTML-only. Recipes: references/custom-html-recipes.md — split panels, big-number + hairline, poster stamp stack, typographic explosion. Prefer those over inventing sticker piles.

closing — The ask / CTA

When to use: every deck ends here. Make the next action unmissable. Props: { heading, lead?, actions?: [{ label, href?, style?: "solid"|"outline"|"ghost", icon? }], cta?: { label?, href? } } Design rule: one primary action by default. For wrap/share/store/launch/investor duals, use actions[] with solid + outline pills (max 3) and an icon on every pill (FA brands for social; rocket/download/calendar for CTAs). cta is an alias for actions[0]. Stunning-25 and launch/investor closings prefer dual asks with icons — a lone cta trips audit_deck.

streak-grid — Day-streak / habit cells

When to use: year-wrap streak beats, habit calendars, filled-vs-empty progress grids. Props: { heading?, lead?, filled, total?, cols?, body? } Design rule: keep total ≤ 120. Prefer over custom-html squares. PPTX maps to rounded rects.

metric-ring — Circular KPI

When to use: percentile flex, completion %, single hero ring KPI (Pulse / Verdant / Bounce energy). Props: { heading?, value, label?, pct?, lead?, body? } Design rule: omit/pct: 100 = full badge ring; 1–99 = arc progress. Prefer over a lone stat chip when the ring is the story.


The Themes — Visual Identity System

Each theme is a complete design language: colors, typography, geometry, motion, and soul. Do not memorize 75 palettes here — discover them from references (progressive disclosure):

  1. Use-case shortlists — references/theme-shortlists.json (Series A, developer demo, wrap, …)
  2. Compact vibe table — references/themes.md (all 75 one-liners)
  3. Selection index — references/theme-selection-index.json (mood, best_for, aliases, gallery)
  4. Stunning twenty-five — references/stunning-25.md (flagship craft ceilings + Studio ?example=)
  5. Layout recipes — references/layout-recipes.md (pitch / launch / wrap / neon / poster / paper / hud / modernist / soft-product / playful / neon-tech / data-editorial / scatterbrain slide maps)
  6. Visual pick — MCP preview_themes / list_themes (never ask the user to choose from bare names)

Install: npm i @presentation-md/theme-<name>. Scaffold: npx @presentation-md/create-theme. Brand match: import_brand_theme MCP or npx @presentation-md/create-theme --from-url ….

When a brief matches a stunning-25 vibe, open that structured proof and match its craft ceiling — do not invent a watered-down palette.

Default craft bar (beat Gamma / Beautiful.ai / md-slides / Claude Design canvas / frontend-slides on first glance):

  1. One-shot bar — the first deck JSON must already clear anti-slop + craft gates. Do not ship a "vibe draft" and hope a second pass fixes it.
  2. Open a stunning-25 structured proof before writing slides — match density, type scale, and asymmetry. Prefer stunning-25 / popular shortlists when the brief matches; never invent a watered-down palette.
  3. Density lock — choose speaker-led vs reading-first once with purpose; keep that density for the whole deck (never mix cramped reading copy into a speaker talk).
  4. Prefer image-hero or a composed visual beat on slide 1 for investor/launch/brand decks.
  5. Force asymmetry early: comparison + emphasis, two-column with non-1-1 ratio, or feature-grid columns: "bento".
  6. Run audit_deck then judge_deck (t1 minimum, t2 before delivery). Schema-valid ≠ shippable.
  7. Read references/anti-slop-bans.md — Inter/purple/cream-terracotta defaults are banned unless the theme owns them.
  8. Prefer theme-native PPTX chrome (paper washes, masthead double rules, hero-gated candy/pills/corner blots on soft-editorial / capsule / long-table / paper-ink; always-on hard frames / offset-shadow strips / plates / tablets / multi-layer arcade shadows / Win95 bevels on stencil-tablet / retro-zine / daisy-days / block-frame / creative-mode / sakura-chroma / 8-bit-orbit / retro-windows / scatterbrain; neon rim/scanlines/horizon glow/soft aero shadow on neon-noir / vaporwave / y2k-aero; poster hatch/speckle frames + hard cards on coral / peoples-platform / bold-signal; hard-card strokes on genz-bento / brutalist-acid / bauhaus / neo-grid-bold / bold-poster / raw-grid / creative-voltage / kinetic-wrapped; HUD grid/reticle chrome on aerospace-hud / blueprint / crt-terminal) over inventing flat card stacks — export is a craft surface, not a screenshot dump.
  9. When the brief is paper/editorial (soft-editorial, heritage-editorial, emerald-editorial, vintage-editorial, pink-script, claude, paper-ink, long-table), write magazine cadence — short literary leads, one quote beat, comparison with emphasis — not SaaS three-up grids.
  10. Open references/layout-recipes.md and match a slide-count contract for the brief (pitch, launch, wrap, neon, poster, paper, hud, modernist, hard-bento, glass, electric, briefing, quiet-luxe, soft-product, playful, neon-tech, data-editorial, scatterbrain) before freehanding layouts.

Typography Hierarchy — The Scale System

Great presentations use exactly 4 type sizes, never more:

RoleSizeWeightUsage
Display4–8rem800–900Cover headlines, hero metric values
Heading2–3rem700Slide titles
Body0.9–1rem400–500Explanatory copy, bullets
Caption0.75–0.85rem400Sources, labels, footnotes

The contrast law: adjacent text blocks must differ by at least 1.5× in size OR weight OR color. Never change just one axis on similar-importance content.

The line-length law: headings: ≤ 8 words. Body: ≤ 12 words per line. Bullets: ≤ 7 words each.


Color & Consistency — The Rules That Separate Good from Great

Rule 1 — The 60-30-10 ratio. 60% background neutral, 30% secondary (cards, surfaces), 10% accent (calls to action, data highlights, emphasis). Never invert this.

Rule 2 — One warm, one cool. Every great palette pairs one warm tone with one cool tone. Violet + cyan. Navy + gold. Coral + lime. They create visual tension that keeps eyes moving.

Rule 3 — Earn your accent. If you use your accent color on more than 15% of any slide's surface area, it stops being an accent. It becomes noise. Make the audience work for the highlight.

Rule 4 — Token discipline. Every color and font on every slide comes from the chosen theme's tokens — nothing else. No off-palette one-off, no hand-picked hex "just for this slide," no default-to-blue because it feels safe. One deck, one palette, one type system, applied identically from cover to close. Inconsistency is the fastest way to look unfinished.

Rule 5 — One motif, repeated. Pick a single distinctive visual device — a card frame, an icon-in-circle treatment, a corner tick, a consistent chart style — and repeat it on every slide. Repetition reads as craft; a brand-new decorative idea on each slide reads as chaos. Let the subject inform the accent, not habit.


Animation & Motion — The Timing System

All CSS animations in this skill follow a choreography hierarchy:

ElementDelayDurationEasing
Slide background0msinstant—
Main headline0ms400msease-out
Supporting content100ms350msease-out
Cards / grid items150ms + 60ms×n300msease-out
Decorative elements200ms500msease-in-out

Use @keyframes fadeUp universally: from { opacity:0; transform:translateY(20px) }.

The breathing rule: every slide needs at least 40px of "air" on all sides. Crowded slides signal anxiety to audiences and undermine trust.


The 7 Laws of the Unforgettable Slide

  1. One job per slide. If you can describe what a slide does in more than one sentence, split it.
  2. The 3-second rule. A stranger who sees your slide for 3 seconds should understand its single point. If they can't, redesign.
  3. Data needs context. "87% retention" means nothing. "87% retention — industry average is 34%" is a story.
  4. Avoid the river of bullets. Bullets are for grocery lists. Presentations are for ideas. Rewrite bullets as short provocations or kill them entirely.
  5. The slide before the big reveal is the most important slide. It creates the question. The big reveal slide just answers it. Invest in the setup.
  6. White space is confidence. Filling every pixel signals insecurity. Empty space says: "We don't need to convince you with volume."
  7. The last slide is the first slide people remember. They leave the room thinking about it. Make it the strongest statement in the deck, not a list of contact info.

Complete Deck Templates

Canonical slide maps (pitch, sales, keynote, investor, launch, wrap, neon, poster, paper) live in references/layout-recipes.md — open that file and match a recipe before freehanding layouts. Keep layout-count discipline; write theme-native voice on top.


The Deadly Sins of Presentation Design

  1. The Wall of Text — More than 40 words on a slide is a document, not a slide.
  2. The Identical Grid — Every slide using the same layout is a PowerPoint funeral.
  3. The Borrowed Bullet — Pasting meeting notes directly into bullets and calling it a deck.
  4. The Missing Tension — No question set up → no answer satisfying. Every slide should create or resolve tension.
  5. The Timid Headline — "Q1 Update" says nothing. "Q1: Our best quarter ever — here's why it happened" says everything.
  6. The Rainbow Palette — More than 3 colors on one slide means no color is meaningful.
  7. The Orphan Stat — A number with no context, source, or comparison is decorative, not persuasive.
  8. The Graveyard Outro — Ending with "Questions?" or your LinkedIn URL. End with your strongest statement.
  9. The Premature Close — Asking for the sale before building desire. The close should feel inevitable, not pushy.
  10. The Crowded Canvas — Padding under 32px on any edge. Margins are not wasted space.
  11. The Inconsistent Accent — Using your accent color on 8 different things. It signals everything and means nothing.
  12. The Slide Count Ego — 47 slides for a 30-minute meeting. Edit ruthlessly. The best decks have the fewest slides that get the job done.

The AI-Slop Tells — instant credibility killers

These are the details that make a deck read as machine-generated. A reviewer clocks them in under a second, and every one is avoidable.

  1. The Accent Line Under the Title — a thin decorative rule slapped beneath every heading is the single clearest fingerprint of an AI-generated slide. Let type size, weight, and whitespace establish the hierarchy. Never draw a line under a title just to fill the gap.
  2. The Text-Only Slide — every slide earns at least one deliberate visual element: a chart, an icon, an image, a shape, a pull-stat. Words floating alone in the middle of a slide are a memo, not a presentation. (The section and manifesto-style title layouts are the intentional exceptions — there the type itself is the visual.)
  3. The Centered Paragraph — center a hero headline if you like, but body copy, bullets, and multi-line captions are always left-aligned. Centered running text has a ragged left edge the eye can't track.
  4. The Overflow — nothing falls off the slide and nothing overlaps. Every element sits inside the safe margin with real breathing room around it. Text clipped at the edge or a chart crashing into a caption instantly reads as broken.
  5. The Low-Contrast Whisper — light text on a light surface, or dark on dark. Body text must clear a genuine contrast ratio (aim WCAG AA, ~4.5:1). "It looks fine on my monitor" fails in a bright conference room every time.
  6. The Italic Crutch — reaching for italic to signal emphasis, a quote, or "elegance" is a font-rendering roulette: most of the display fonts in these themes don't ship a true italic, so the browser fake-slants the roman weight and it reads as broken, not intentional. Get emphasis from weight, size, color, or space instead.

Theme Discovery (show, don't tell)

Do not ask the user to pick a theme from a bare name list when they are unsure. Match frontend-slides' mandatory visual discovery — but with structured themes + MCP + a one-shot quality bar so the first draft already beats their vibe-pack defaults. Studio matches that bar in-product: Generate modal live Title/Bento/Compare shot strip on by default, theme pick-3 auto-enables live My deck restyle (selected slide re-themed in each slot — content-true, not a canned gallery; Craft proofs Title/Bento/Compare still one toggle away) when the tray hits 3, and Example featured trio shows the same shared-iframe shot strip (scroll-crop densified — one live document per theme, not 3× iframes) plus Compare 3 themes → live theme tray.

One-shot quality bar (beat frontend-slides first drafts)

frontend-slides wins on discovery UX; presentation-md wins when the first emitted deck is already shippable craft — not a purple SaaS skeleton.

  1. Stunning-25-first — when the brief matches a flagship vibe, lock that theme (or a popular shortlist sibling) and open the structured proof / Studio ?example= before writing slides.
  2. Density lock — speaker-led vs reading-first chosen once; never mix cramped reading density into a live-talk deck (or vice versa). If density drifts after drafting, call audit_deck with remorph_density (or Studio Speaker density / Reading density, or CLI --remorph-density) before rewriting copy.
  3. Anti-slop gate — read references/anti-slop-bans.md before any custom styling; ban Inter-only / purple-on-white / cream-terracotta / accent-underline titles / text-only content slides unless the chosen theme owns them.
  4. Layouts preview for pick-3 — preview_themes with ≥2 themes auto-defaults to mode: "layouts" (pass mode: "title" only for a cover skim). Pass json (Deck JSON) to restyle your slides across the pick (Studio My deck parity; optional slide_index). Inline PNGs attach as MCP image content by default — compare in-chat, then apply_theme.
  5. Craft gates before ship — audit_deck then judge_deck (t1→t2). Schema-valid ≠ shippable. Fix asymmetry, emphasis, dual CTA, image-hero, data beat, notes.

Default when vibe is vague: a popular shortlist + one stunning-25 bold option in the preview mix — never three near-identical safe corporate looks.

  1. Read references/theme-selection-index.json (mood, best_for, avoid_for, scheme, aliases).
    • frontend-slides STYLE_PRESET names map via aliases: Neon Cyber → neon-noir, Terminal Green → crt-terminal, Swiss Modern → swiss-typographic.
    • Stunning twenty-five: when the brief matches a flagship vibe, read references/stunning-25.md and open that structured proof / Studio ?example= before authoring.
    • Optional fast path: references/theme-shortlists.json — pick a use-case shortlist (Series A, developer demo, swiss agency, …) instead of scanning all 75. Prefer shortlists marked "popular": true when the vibe is vague.
    • list_themes returns preview_url + studio_url on every theme (stunning-25 → ?example= craft; others → ?theme= blank slate) plus studio_example / gallery_url when available — open those before authoring (show-don't-tell). preview_themes also returns studio_share_url (?d=) for the exact bake deck.
  2. Shortlist 3 themes that fit purpose + audience + density. Preview mix (mandatory):
    • 1 safe / readable theme (core-defaults, corporate, soft-product, quiet paper)
    • 1 bold / expressive theme (stunning-25, neon, brutal/poster, wrap)
    • 1 wildcard — either a second bold shortlist pick or a brand/import-driven custom direction that creates useful contrast (do not force three near-identical pastels)
  3. Required when tooling is available: call preview_themes with those 3 names (writes .presentation-md/theme-previews/<theme>-layouts-preview.html for pick-3). ≥2 themes auto-defaults to mode: "layouts" so body craft (cards, comparison, stats, quote, code) is visible — pass mode: "title" only for a cover skim. Open each file for the user — they pick visually, not from adjectives alone.
  4. If MCP is unavailable, run: npx @presentation-md/render preview.json -o previews/<theme>.html --theme <name> three times (one title slide each).
  5. After they pick, set meta.theme and proceed. Read references/anti-slop-bans.md before custom styling.
  6. When a theme has a gallery field, open that craft deck as a multi-slide proof (not just the title preview).

If they already named a theme, alias, or brand URL, skip discovery (import_brand_theme for brand match).

Density modes (ask once with purpose)

DensityBest forDesign behavior
Speaker-led (low)Talks, keynotes, live pitchesOne idea per slide, large type, generous space, 1–3 bullets max, more slides if needed
Reading-first (high)Board packs, async review, handoutsSelf-contained slides, structured grids/tables, tighter but intentional spacing

Never shrink until cramped — split into more slides instead.

See also: references/animation-patterns.md for motion craft on the direct-HTML path.


Parameters to Collect

Before generating, confirm (ask together when possible — purpose, length/density, content readiness):

ParameterWhat good looks like
Purpose"Raise a Series A" not "show investors stuff"
Audience"Two partners at a16z who've seen 200 AI pitches" not "investors"
Ask"$12M for 18 months of runway" not "funding"
DensitySpeaker-led (low density, big type) vs reading-first (higher density, more self-contained)
VibeTheme discovery above, or describe the soul in 3 adjectives
ContentRaw notes, data, existing copy — the messier the better
ConstraintsTime, slide count, branding rules

Fill gaps with intelligent defaults (theme-shortlists.json / list_themes with include_shortlists — prefer core-defaults when vibe is vague). Never ask more than 3 clarifying questions.


MCP Tools

Fourteen tools via @presentation-md/mcp-server (not the deprecated @presentation-skill-pack/mcp-server stub — it only redirects). Restart the client after switching packages.

ToolUse it to
render_deckConvert deck JSON → polished HTML
export_deckExport deck JSON → .pptx, vector PDF, html, Markdown (format: "md" — Marp round-trip), or speaker-notes handouts (format: "notes_txt" / "notes_vtt")
audit_deckSchema-validate + craft gates; optional apply_safe_fixes returns repaired JSON (fields + beat inserts: image-hero / comparison / data / logo-wall / wrap tones + theme-honesty leftovers); optional remorph_density (speaker/reading) for non-LLM structural density remorph
list_themesSee installed themes with vibe/description + proof deep-links (preview_url + always-on studio_url); filter with browse chips (site/Studio parity), shortlist, mood, or query; use suggested_preview (safe/bold/wildcard) for pick-3
apply_themeSwap meta.theme (default also runs repairCraft for theme honesty — Studio My deck Use parity; pass apply_safe_fixes:false for a pure swap)
generate_deck_promptBuild a generation prompt wired to a theme + schema
scaffold_deckScaffold a recipe skeleton (pitch / launch / wrap / paper / …) with craft floors pre-wired — returns studio_share_url (?d=) by default for one-call editable Studio handoff; fill copy, then audit
share_deck_linkEncode Deck JSON → Studio ?d= URL (Copy link parity) for editable user handoff after edits
deploy_deckOpt-in Vercel preview via deploy.sh — dry-run unless confirm:true after human approval; prod needs confirm_prod
preview_themesRender 1–3 theme HTML previews; inline PNG screenshots on by default; studio_share_url for the exact bake; pass json for Studio My deck restyle (content-true) + optional slide_index; mode: "layouts" for multi-slide craft bake
CLI --preview-compareSame pick-3 craft bake + discovery PNGs without MCP: presentation-md-render --preview-compare a,b,c
import_pptxImport a .pptx into deck JSON (see references/pptx-import.md)
import_markdownImport Marp/md-slides Markdown → Deck JSON (--- splits, ```chart / ```html)
judge_deckDesign judge — tier t0/t1 JSON gates; t2 HTML metrics + Chrome shots (inline PNGs by default); t3 panel or agent rubric
import_brand_themeGenerate a theme from a brand URL or CSS file

Rendering Guidelines

  • Direct to file when inside a repo: write <slug>/deck.html
  • Code block when copy-paste is requested: wrap the rendered HTML in a fenced code block, no surrounding explanation
  • No framework imports — all CSS is internal, no Tailwind/Bootstrap/React
  • No lorem ipsum — all copy must be plausible, specific, and consistent with the brand
  • Deck-spec path: use the renderer — it ships 16:9 slides, scroll-snap, keyboard arrows, .nav-hint, entrance motion, and prefers-reduced-motion
  • Direct-HTML path: match that craft — scroll-snap, arrow keys, print-safe @media print, hide .nav-hint when printing
  • Never display: grid (or flex) directly on an <li> that contains inline elements (<code>, <span>, <a>) — the browser wraps each inline child in an anonymous block box to satisfy the grid formatting context, which silently breaks bullet alignment and spacing. Put the grid/flex on a wrapper <div> inside the <li> instead, or keep the <li> a plain block and let its child own the layout.

Import from Markdown

Marp / md-slides authors can bridge into Deck JSON without rewriting slides:

presentation-md-render --from-md ./deck.md -o deck.json --theme kinetic-wrapped

Or call import_markdown. Front matter sets theme / title / company. Slides split on ---. Use fenced ```chart bar CSV blocks for charts and ```html for custom-html art.

Export the other way: presentation-md-render deck.json --format md -o deck.md, MCP export_deck format: "md", or Studio Source ▾ → Download Markdown — same Marp/md-slides dialect for round-trip.

Import from PowerPoint

When the user already has a .pptx, import it into deck JSON first (don't retype slides):

presentation-md-render --from-pptx ./board-deck.pptx -o deck.json --theme claude

Or call the import_pptx MCP tool. Then review layouts, adjust copy, swap themes, and render/export as usual. Details: references/pptx-import.md.


Export & Share

Once a deck is done, it can leave the browser two ways. Both scripts live inside this skill's own directory, not the user's project — resolve <skill-dir> to wherever this SKILL.md is installed (e.g. ~/.claude/skills/presentation-generator/ or the plugin's skill path) and invoke them from there, passing the deck's path as an argument:

  • PDF — MCP export_deck with format: "pdf", CLI presentation-md-render deck.json --format pdf -o deck.pdf, Studio Source ▾ → Download PDF (local Studio: headless Chromium blob via /api/export-pdf, same @page 16:9 as MCP/CLI; static hosts: client raster; print dialog last resort), or bash <skill-dir>/scripts/export-pdf.sh ./deck.html [./output.pdf]. MCP/CLI render through headless Chromium's print pipeline (not screenshots): vector output, selectable text, one page per slide via the deck's own @media print rule. Installs Playwright on first run. Good for email, Slack, Notion, or printing.
  • Live URL — MCP deploy_deck / CLI presentation-md-render deck.html --deploy (dry-run by default) or bash <skill-dir>/scripts/deploy.sh ./deck.html (or a deck directory). Deploys to Vercel and prints a shareable URL that works on any device. Defaults to a preview deployment, not production — pass --prod / prod:true only once the human has confirmed it's fine to publish permanently. Confirm with the human before running this: it's an externally-visible action, and decks are often confidential drafts. MCP/CLI require confirm:true / --confirm-deploy to actually invoke deploy.sh (otherwise dry-run only). Requires npx vercel login once, interactively, beforehand. A single-file deck that references local images/fonts will be refused (they'd 404 once deployed) — inline them as data: URLs first, or deploy the deck's whole directory instead.

For native, editable PowerPoint, use the Studio export mentioned above instead — it's a different fidelity trade-off (editable shapes vs. exact CSS rendering).


Self-Review Before You Ship

You have been staring at this deck while building it, so you now see what you intended, not what is actually on the slide. Assume there are problems and go find them — a deliberate review pass is not optional, even for a 3-slide deck.

Tooling first (deck-spec path) — non-skippable when MCP/CLI is available:

  1. Call preview_themes (or open gallery structured proofs) before locking a vibe — never invent a palette.
  2. Call audit_deck on the deck JSON — fix every error, then address warnings. Pass apply_safe_fixes: true to auto-fill safe structural craft and insert missing beats (image-hero, comparison, stat-row, logo-wall, wrap tones/ranked/streak, cadence swaps, theme-honesty leftovers, emphasis, ratio, bento, CTA/icons, speaker notes, candy-pop brand) and get back json + fixes_applied[]. Pass remorph_density: "speaker"|"reading" for a non-LLM structural density remorph (speaker splits crowded grids/lists + moves overflow body into notes; reading merges thin continuation lists + promotes notes onto thin bodies) — Studio craft panel + CLI --remorph-density parity. Prefer scaffold_deck when starting from a brief so the first JSON already clears craft floors.
  3. Call judge_deck for craft gates (tier=t1). Escalate to tier=t2 (HTML metrics + inline slide PNGs) before delivery; tier=t3 when highest stakes.
  4. Render with render_deck / CLI, open the HTML, and spot-check with keyboard arrows.
  5. Re-run judge_deck at t2/t3 with attached shots → fix → re-score. Do not ship on schema-valid alone.

Then walk every slide against this checklist and fix before delivering:

  • Placeholder sweep — search the output for leftover scaffolding: Lorem, ipsum, XXXX, TODO, [, placeholder, dummy numbers. Zero may survive.
  • Overflow & overlap — nothing clipped at an edge, nothing colliding, every element inside the safe margin.
  • Contrast — every text block is legible against its actual background (see AI-Slop Tell #17).
  • AI-slop tells — no accent line under a title, no text-only content slide, no centered paragraphs.
  • Visual beat — investor, launch, and brand decks need ≥1 real image-hero (composed SVG/data URI or asset). Icon grids alone are not a visual. Kinetic wraps may use ranked/streak/metric/hero-stat instead.
  • Present-mode craft — add brief notes on 2–4 key slides; decks with ≥6 slides need a data beat (chart / stat-row / data-table / ranked-list / metric-ring / timeline); launch/investor closings prefer dual actions[] with icons (not a lone cta).
  • Asymmetry — at least one comparison with emphasis, two-column, code, ranked-list, logo-wall, streak-grid, metric-ring, or columns: "bento" — never a stack of identical three-up cards.
  • Token discipline — colors and fonts all trace back to the chosen theme; no off-palette one-offs.
  • The 3-second test — pick any slide at random: is its single point obvious in three seconds?
  • Arc integrity — the deck still follows one narrative arc end to end; every slide sets up or pays off the one before it.
  • Schema honesty — every layout value is one of the eighteen enums; no invented layout names.
  • Wrap honesty — kinetic-wrapped decks need tone on ≥3 slides and a visual beat (ranked-list, streak-grid, metric-ring, stat-row variant:"hero", or image-hero).
  • Gallery honesty — if you named a stunning-25 theme (aurora-glass, ft-editorial, luxury-minimalist, …), open its structured proof and match that craft ceiling.
  • Candy honesty — candy-pop marquees brand from meta.company (or meta.marquee / meta.title); never hardcode Jellybean.
  • Riso honesty — risograph-zine decks should feel printed: prefer comparison with emphasis, a punchy quote, and kraft-paper copy — not a stack of soft corporate cards.
  • Paper honesty — paper/editorial themes (claude, soft-editorial, ft-editorial, broadsheet, heritage-editorial, vellum, paper-ink, long-table, editorial-serif, editorial-forest, emerald-editorial, pin-and-paper, vintage-editorial, monochrome, notebook-tabs, blue-professional, pink-script, biennale-yellow, pastel-dreamy, scandinavian): magazine cadence (quote, comparison+emphasis, short literary leads) — not soft corporate card stacks. Quiet fiber grain is HTML surface craft; PPTX keeps rules/washes/mastheads + always-on pink-script hairline / hero-gated ornaments / biennale sun frame / pastel plump clouds + theme-native card hairlines (paper-ink / editorial-serif / vintage-editorial literary left rules; ft-editorial / biennale-yellow / luxury-minimalist top rules; heritage / pin / emerald keep full box hairlines) — prefer HTML when the tooth is the brand.
  • Loud honesty — loud/neobrutal peers (stencil-tablet, retro-zine, daisy-days, block-frame, creative-mode, sakura-chroma, brutalist-acid, raw-grid, capsule, scatterbrain, 8-bit-orbit, retro-windows, cobalt-grid, genz-bento, bauhaus, neo-grid-bold, bold-poster, creative-voltage, electric-studio, studio, brutalist-mono): expect hard frames + offset-shadow strips (or multi-layer arcade / Win95 bevel / cobalt grid+hatch chrome) and hard-border cards on body slides (pills/tape/blocks/chroma may stay hero-gated) — don’t invent custom-html stickers for atmosphere. scatterbrain wants a workshop beat (feature-grid / image-hero / quote / stats) with ink sticky-card hairlines in PPTX.
  • Atmosphere honesty — neon-noir / vaporwave / y2k-aero / retro-arcade: expect cyan/pink rims, rain/arcade scanlines or horizon glow, soft aero shadow stubs, and a cinematic image-hero or punchy quote — don’t flatten into SaaS three-up grids.
  • Poster honesty — coral / peoples-platform / bold-signal / broadside: expect hard poster frames + square (or plump bold-signal accent-rim) hard-border cards and a bold beat (image-hero, comparison, quote, or punchy stats) — not soft corporate card stacks. mat wants a mid-century beat (quote / image-hero / comparison / punchy stats) with woodglow + cream rim chrome.
  • HUD honesty — aerospace-hud / crt-terminal / blueprint: expect instrument chrome (grid/scanlines/reticles) plus a data beat (chart, data-table, stat-row, ranked-list, timeline, or metric-ring) — not soft marketing grids.
  • Glass honesty — aurora-glass / glassmorphism: expect a frosted product beat (image-hero, punchy quote, or stats) — PPTX keeps glass rims (not true blur).
  • Modernist honesty — bauhaus / swiss-typographic / art-deco: geometry + hard type with a modernist beat (quote / image-hero / comparison / icon feature-grid).
  • Briefing honesty — signal: quiet dual-surface chrome + an editorial beat (quote / image-hero / comparison / stats); PPTX keeps briefing frames and border-hairline cards.
  • Quiet-luxe honesty — luxury-minimalist: top-rule cards + a restrained luxury beat (quote / image-hero / comparison) — not soft SaaS stacks. ft-editorial / biennale-yellow share top-rule card geometry under paper honesty. long-table keeps dashed rust supper cards under paper honesty.
  • Soft-product honesty — corporate / fintech-clean: clean product beat (stat-row / comparison / feature-grid / chart); PPTX keeps accent-hairline cards + quiet frames.
  • Playful honesty — playful / split-pastel: soft-bento beat (feature-grid / image-hero / stats / quote); PPTX keeps plump coral/ink card rims.
  • Neon-tech honesty — default-tech / developer-dark: tech product beat (code / feature-grid / chart / comparison / stats); PPTX keeps neon/terminal card rims.
  • Data-editorial honesty — data-editorial: reported data beat (chart / data-table / stat-row / ranked-list / timeline); PPTX keeps ink card hairlines.
  • Recipe honesty — match a references/layout-recipes.md slide map for the brief before inventing a 14-slide feature-grid funeral.

For a rigorous, scored pass, run the deck-design-judge skill: it grades the deck against the design rubric, tells you exactly what to fix, and lets you re-score after the fix.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.