Create and manage presentation decks. Two modes - Slidev markdown (default) and "conference" hand-built HTML. Use when user asks to "create slides", "make a presentation", "add slides to this project", "set up a slide deck", or mentions "slidev", "pitch deck", "conference talk", "conference deck", or "slides folder".
74
91%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Scaffold and manage presentation decks in any project. Two modes:
@slidev/cli. Best for project pitches, internal decks, README-driven content, and anything where the author edits markdown and lets Slidev render. Covered in the "Slidev Mode" section below.gh-pages worktree. No framework, no build step - the author edits HTML directly. Covered in the "Conference Mode" section further below.When the user invokes the skill, ASK upfront:
"Slidev (default) or conference (hand-built HTML)?"
Pick by signal too. Default to Slidev unless the user says any of: "conference", "conference talk", "conference deck", "hand-built", "no framework", "html deck", or references the AI Native DevCon style. If they pick conference, skip the Slidev sections and follow "Conference Mode" below.
Ask the user where to create the slides folder. Suggest ./slides as default.
Create the following structure:
<slides-dir>/
├── slides.md # Slide content (Slidev markdown)
├── package.json # Slidev dependencies
├── Makefile # Convenience targets
└── public/ # Static assets (images, diagrams)package.json{
"name": "slides",
"private": true,
"scripts": {
"dev": "slidev slides.md --open",
"build": "slidev build slides.md",
"export": "slidev export slides.md"
},
"dependencies": {
"@slidev/cli": "^52.11.5",
"@slidev/theme-default": "^0.25.0"
}
}Makefile.PHONY: slides slides-build slides-export slides-setup
slides: node_modules ## Open slides in browser with hot-reload
npx slidev slides.md --open
slides-build: node_modules ## Build static SPA to ./dist
npx slidev build slides.md
slides-export: node_modules ## Export slides to PDF
npx slidev export slides.md
slides-setup: ## Install dependencies
npm install
node_modules: package.json
npm install
@touch node_modulesslides.md (starter)Generate a title slide using the project name. Use this template:
---
theme: default
title: "<Project Name>"
---
# <Project Name>
<One-line project description from README or user prompt.>
---
# Overview
- Point one
- Point two
- Point threeRun npm install inside the slides folder.
If a .gitignore exists in the slides folder or project root, ensure node_modules/ and dist/ are ignored. Check before adding to avoid duplicates.
When asked to generate or write slide content:
--- separates slidespublic/ and are referenced as /image.pngslides.md---
theme: default
title: "Deck Title"
---
# Slide Title
Regular markdown content.
---
# Code Slide
\`\`\`python
def hello():
print("hello")
\`\`\`
---
# Image Slide
<img src="/diagram.png" class="h-80" />
---
layout: two-cols
---
# Left Column
Content here.
::right::
# Right Column
Content here.
---
layout: center
---
# Centered Content
Big statement.default — standard contentcenter — centered on pagetwo-cols — split with ::right:: separatorimage-right / image-left — content + image side by sidecover — title/cover slidesection — section dividerKeep slides.md readable. Prefer built-in layouts and theme classes before writing custom CSS. Add styles selectively — not preemptively.
Content first, styling after. When a slide does need a <style> or <style scoped> block, put it at the bottom of the slide, just above the closing ---. Slidev parses the whole slide regardless of position, so pushing CSS below the content means a reader opening slides.md sees the actual content first — if they then scroll past some styling, so be it.
If a pattern is reused across many slides (typography, card layouts, shared tables), promote it to the theme under themes/<name>/styles/ instead of repeating it inline.
When asked to edit slides:
slides.mdmake slides to preview changesBy default, use theme: default in frontmatter. Do NOT suggest or apply custom themes unless the user specifically asks about available themes.
Custom themes are local Slidev theme folders stored in this skill at themes/<name>/. To apply one, copy the theme folder into the slides directory and set theme: ./<name> in frontmatter.
Style inspired by QuantumBlack's publicly available visual identity. All colors, fonts, and design patterns sourced exclusively from public materials:
#0C1C23For an example slide in this style, see references/qblabs-example-slide.html.
Setup: Copy themes/qblabs/ into the slides directory, then:
---
theme: ./qblabs
title: "Deck Title"
---Layouts:
cover — dark navy background, blue accent bar, centered titledefault — clean white background, blue underline on h1section — dark navy section divider with blue accentKey colors (from public QB website/branding):
#051C2C — Dark navy (hero/section backgrounds)#2251FF — Electric blue (accent, links, CTAs)#222222 — Body text (on light backgrounds)#A2AAAD — Secondary text (medium grey)Fonts: Georgia (serif, headings) and Arial (sans, body) — standard PowerPoint substitutes for Bower and McKinsey Sans which are not publicly licensed.
Utility classes: .qb-blue, .qb-navy, .qb-bg-dark, .qb-bg-light, .qb-accent-bar
Two hand-built, single-file HTML slides live in references/. Each is a self-contained 1920x1080 slide with no dependencies - open in a browser, edit, save.
references/qblabs-example-slide.html) - dark, corporate, agentic-engineering style. Use for QB-branded or dark technical decks.references/dwmkerr-com-timeline-slide.html) - light off-white, shell-header, # timeline heading over four phase columns. Use for personal-site, terminal/shell-focused slides.
Both slides support in-browser editing. Open the file, then:
| Key | Action |
|---|---|
E | Enter edit mode (click any text and type) |
Cmd/Ctrl+S | Save - downloads the edited slide as an HTML file |
Esc | Exit edit mode |
Press E, edit text inline, Cmd+S to download the updated HTML, Esc to finish. Edits are made live in the browser; save writes a new HTML file you keep. The E shortcut is ignored while a field is focused, so it never inserts a stray character.
Copy references/dwmkerr-com-timeline-slide.html, open it in a browser, press E and edit the text, then Cmd+S to save. To add columns, duplicate a .phase block and bump the count in the .phases grid; relabel the timeline ticks by editing the t0...t4 labels.
A hand-built HTML conference deck. No framework, no Vue, no Slidev, no build step. The author edits presentation.html directly. Speaker notes live in presentation.md and are baked into a standalone notes.html teleprompter sheet for a phone or second screen.
gh-pages worktree, with separate public URLs for the deck and for the phone-readable notes sheet.If the user wants a quick scaffold from a README, or wants Markdown-driven content with Slidev's built-in layouts, use Slidev mode instead.
For a complete real-world example of a finished conference deck (structure, slide markup), see references/conference-example.html — the final deck from a real AI Native DevCon talk.
./presentation or a conference-specific folder name (for example ./conferences/<year>-<event>/).themes/conference/template/ into the target folder verbatim. No npm install, no dependencies.make dev serves presentation.html on http://localhost:2663.make notes serves notes.html (open on a phone for a teleprompter).presentation.html to change slide content.presentation.md to change speaker notes, then regenerate notes.html from it.make deploy to work, ask for their site repo path and the public URL pattern, then update SITE_REPO, PUBLIC_NOTES_URL, and PUBLIC_PRESENTATION_URL at the top of the Makefile.<deck-dir>/
├── presentation.html # The deck (single hand-edited HTML file)
├── presentation.md # Single source of truth for speaker notes
├── notes.html # Baked teleprompter sheet (regenerated from md)
├── Makefile # dev / notes / deploy / deploy-presentation / deploy-notes / lab / help
├── images/ # QR codes, photos, diagrams
└── README.md # Quick start, conventions<section class="slide <type>" data-name="<unique-id>"> block.<div class="label-in">Section name</div> then <h3>One central idea</h3> (or <h1> for title slides, <h2> for disclaimer / punch).data-reveal="true" and mark each fragment with class="revealable".title, disclaimer, content, chartslide, punch (section divider), regtable (two-column bad-vs-good table, optionally recap-hero), jokes (progressive reveal list with punchline), title split (title + image / QR on the right).Apply consistently when colouring words, lines, table rows, and markers.
| Token | Hex | Meaning |
|---|---|---|
| Red | #e8503a | Bad / dysregulating / warning |
| Green | #6bbf73 | Good / regulating / managing |
| Blue | #4c8dd6 | Accent / anchored to baseline |
| Yellow | #f2c94c | Support / highlight |
The slate accent (#5e8a9c) and warm rust (#d99161) are the deck's neutral accents - eyebrows, section punches, decorative rules.
presentation.md is the single source of truth for speaker notes. The deck (presentation.html) is the public artefact and should not carry full notes inline.presentation.md is a ## or ### heading. On-slide content sits above ---; speaker notes sit below ---. End each notes block with *Clock: X:XX* for pacing.# headings in the md are the author's organising structure (parts / acts) - they are scaffolding, not slides. Skip them when regenerating.notes.html by rewriting the entries inside its <div id="list"> block from the parsed md, pairing each md slide by index with the deck's data-name order. Keep the notes.html shell (CSS, controls bar, fonts / theme JS) untouched.make deploy-presentation and make deploy-notes publish straight to the gh-pages branch of SITE_REPO via a throwaway git worktree. Each pushes a single commit. The deck lives at <site>/presentation/presentation.html; the notes sheet lives at <site>/presentation/notes.html. The phone-readable notes URL is meant to be opened on a second screen during the talk.
User: "Add slides to this project"
./slides), scaffold folder with theme: default, run npm install, tell user cd slides && make slides to open../presentation or ./conferences/<year>-<event>/), copy themes/conference/template/* into it, tell user make dev to open.User: "Create a conference talk deck" or "Set up a hand-built HTML deck"
themes/conference/template/* into the target folder.make dev to preview, edit presentation.html for content and presentation.md for notes, regenerate notes.html from md when notes change.User: "Create slides from the README"
slides.md to understand current stateslides.mdmake slides to previewUser: "Add a slide about the architecture"
slides.md--- delimitermake slides to previewUser: "What themes are available?" or "Use the qblabs theme"
theme: ./<name>4316684
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.