artifact-deck
OUTPUT CONTRACT
Produces ONE .html file. A slide deck is multi-slide by definition; all slides live inside the same file and are switched by JavaScript (arrow keys, click on the chrome, hash routing). NEVER one file per slide. NEVER a .md outline.
File extension is .html. File name typically <topic>-deck.html.
A single-file slide deck. Navigate with arrow keys, click the dots, or drag the URL hash. The reader can jump straight to slide N via #/N. The deck is presentation-mode by default — chrome stays minimal, content sits center-screen.
Read artifact-css/SKILL.md first for the full OUTPUT CONTRACT, design tokens, and class vocabulary. This skill uses no jQuery — slide nav is ~30 lines of vanilla JS.
When to reach for this skill
- User says "make me a deck for X", "Friday demo slides", "kickoff deck", "exec readout", "lightning talk".
- User has 5-15 short ideas they want to walk a viewer through in order.
- User wants something they can present in a meeting without firing up Keynote / Google Slides.
If they want a one-page summary, use artifact-report. If they want a clickable mockup with hotspots, use artifact-flow. If they want a long narrative, use artifact-explainer.
Anatomy of a deck
Built from four element types. Use them in order.
- Header bar — fixed-position chrome at top with: deck title, current slide number / total, optional progress bar. Stays visible across all slides.
- Slide container — a
<section class="slide" id="s-N"> per slide. Only the active slide is visible. Each slide is its own flexbox-centered viewport (100vh - header).
- Slide content — one of these shapes per slide:
- Title slide — eyebrow + h1 + lead. The cover.
- Statement slide — one giant headline. No subhead. Used when the slide is a single point.
- Two-column slide —
.grid-2 with image/code/list on each side.
- Stat slide —
.stats grid for 2-4 big numbers.
- Timeline slide — small
.timeline showing progression.
- Code slide —
.code-block with one focused snippet, mono large.
- Closing slide — eyebrow + h2 + call-to-action.
- Footer chrome — fixed-position bottom-right: prev / next buttons, slide counter, "Press → to advance" hint.
Five to fifteen slides is the right zone. Fewer = no point of a deck. More = it's an article.
Voice and density rules
- One idea per slide. If a slide needs more than one h2, split it.
- Big type. Body text below 18px shouldn't appear on a deck slide. The reader is 6 feet from a screen.
- No paragraphs. A slide with three sentences of prose is a slide that should have been a stat or a bullet list.
- No bullet soup. Three to five bullets max per slide. Beyond that, split.
- Numbers, names, and verbs. A slide that says "We made progress on infrastructure" is a slide that should have been deleted. Replace with "Cut p99 latency 38% across 3 services."
Navigation contract
- → / Space / PageDown — next slide.
- ← / PageUp — previous slide.
- Home / End — first / last slide.
- Click anywhere on the slide chrome (not on a link or button) — next slide.
- Hash routing —
#/3 jumps to slide 3. Updates as you navigate so the URL is shareable.
- F or
? — toggle a help overlay listing the shortcuts.
The JS that wires this is ~30 lines, included in the template.
Fallback contract
With JS disabled:
- All slides render stacked top-to-bottom (one after another).
- Each slide has its own scroll target.
- The header / footer chrome still renders but the prev/next buttons are dead.
Reader still gets the content. Just no presentation polish.
Common mistakes
- Slide deck as long-form article. If your slides are paragraphs, you wanted
artifact-explainer.
- Two ideas per slide. Reader can't track. Split.
- Tiny screenshots. A 240×180 PNG on a 1920×1080 deck is unreadable. Either it fills 60%+ of the slide or it doesn't belong.
- No closing slide. Decks need a "what now" slide — next steps, links, contact. Otherwise the deck just stops.
- Auto-advance. Don't add timed advance. Presenter controls the pace.
After the artifact
Offer the plain-text outline alongside: one line per slide, prefixed with the slide number. Useful for speaker notes or for pasting into a thread that won't render the HTML.
1---2name: artifact-deck3description: OUTPUT IS ALWAYS A SINGLE `.html` FILE (never `.md`, never separate per-slide files) containing multiple slides navigated by arrow keys. Use this skill whenever the user asks for a slide deck, presentation, talk, "Friday demo", "share-out slides", "exec readout", "kickoff deck", "lightning talk", arrow-key deck, keynote-style outline, or any artifact whose primary shape is "a sequence of slides you advance through". Pair with `artifact-css` for the underlying design system. Do NOT use for single-page reports — those are `artifact-report`.4---56# artifact-deck78> ## OUTPUT CONTRACT9>10> **Produces ONE `.html` file.** A slide deck is multi-slide by definition; all slides live inside the same file and are switched by JavaScript (arrow keys, click on the chrome, hash routing). NEVER one file per slide. NEVER a `.md` outline.11>12> File extension is `.html`. File name typically `<topic>-deck.html`.1314---1516A single-file slide deck. Navigate with arrow keys, click the dots, or drag the URL hash. The reader can jump straight to slide N via `#/N`. The deck is presentation-mode by default — chrome stays minimal, content sits center-screen.1718Read `artifact-css/SKILL.md` first for the full OUTPUT CONTRACT, design tokens, and class vocabulary. This skill uses **no jQuery** — slide nav is ~30 lines of vanilla JS.1920## When to reach for this skill2122- User says "make me a deck for X", "Friday demo slides", "kickoff deck", "exec readout", "lightning talk".23- User has 5-15 short ideas they want to walk a viewer through in order.24- User wants something they can present in a meeting without firing up Keynote / Google Slides.2526If they want a one-page summary, use `artifact-report`. If they want a clickable mockup with hotspots, use `artifact-flow`. If they want a long narrative, use `artifact-explainer`.2728## Anatomy of a deck2930Built from four element types. Use them in order.31321. **Header bar** — fixed-position chrome at top with: deck title, current slide number / total, optional progress bar. Stays visible across all slides.332. **Slide container** — a `<section class="slide" id="s-N">` per slide. Only the active slide is visible. Each slide is its own flexbox-centered viewport (`100vh - header`).343. **Slide content** — one of these shapes per slide:35 - **Title slide** — eyebrow + h1 + lead. The cover.36 - **Statement slide** — one giant headline. No subhead. Used when the slide is a single point.37 - **Two-column slide** — `.grid-2` with image/code/list on each side.38 - **Stat slide** — `.stats` grid for 2-4 big numbers.39 - **Timeline slide** — small `.timeline` showing progression.40 - **Code slide** — `.code-block` with one focused snippet, mono large.41 - **Closing slide** — eyebrow + h2 + call-to-action.424. **Footer chrome** — fixed-position bottom-right: prev / next buttons, slide counter, "Press → to advance" hint.4344Five to fifteen slides is the right zone. Fewer = no point of a deck. More = it's an article.4546## Voice and density rules47481. **One idea per slide.** If a slide needs more than one h2, split it.492. **Big type.** Body text below 18px shouldn't appear on a deck slide. The reader is 6 feet from a screen.503. **No paragraphs.** A slide with three sentences of prose is a slide that should have been a stat or a bullet list.514. **No bullet soup.** Three to five bullets max per slide. Beyond that, split.525. **Numbers, names, and verbs.** A slide that says "We made progress on infrastructure" is a slide that should have been deleted. Replace with "Cut p99 latency 38% across 3 services."5354## Navigation contract5556- **→ / Space / PageDown** — next slide.57- **← / PageUp** — previous slide.58- **Home / End** — first / last slide.59- **Click anywhere on the slide chrome (not on a link or button)** — next slide.60- **Hash routing** — `#/3` jumps to slide 3. Updates as you navigate so the URL is shareable.61- **F or `?`** — toggle a help overlay listing the shortcuts.6263The JS that wires this is ~30 lines, included in the template.6465## Fallback contract6667With JS disabled:68- All slides render stacked top-to-bottom (one after another).69- Each slide has its own scroll target.70- The header / footer chrome still renders but the prev/next buttons are dead.7172Reader still gets the content. Just no presentation polish.7374## Common mistakes7576- **Slide deck as long-form article.** If your slides are paragraphs, you wanted `artifact-explainer`.77- **Two ideas per slide.** Reader can't track. Split.78- **Tiny screenshots.** A 240×180 PNG on a 1920×1080 deck is unreadable. Either it fills 60%+ of the slide or it doesn't belong.79- **No closing slide.** Decks need a "what now" slide — next steps, links, contact. Otherwise the deck just stops.80- **Auto-advance.** Don't add timed advance. Presenter controls the pace.8182## After the artifact8384Offer the plain-text outline alongside: one line per slide, prefixed with the slide number. Useful for speaker notes or for pasting into a thread that won't render the HTML.