Build a premium PRESENTED slide deck — classic one-slide-at-a-time slides you advance with a clicker — as a Vite + React app. It keeps the Slidev navigation UI (floating glass dock + thumbnail rail + click-builds + presenter) but slides are RESPONSIVE React (reflow to any screen, no fixed canvas) and fully interactive. Use this for a deck you'll PRESENT (talk over, projector, screen-share) when you want web interactivity and responsiveness without Slidev's constraints. The repo IS the running app (Vite + React) — you install it in place, theme the tokens, and AUTHOR an original deck from the user's real topic/brand.
Slides — a premium, responsive, React presentation engine for Bolt
Classic paged slides (advance one at a time, present over them) — but rebuilt in
Vite + React so each slide is a responsive web layout instead of a fixed
1080×607 canvas that clips. It keeps the Slidev UI you liked (the floating dock +
thumbnail rail + click-builds + presenter) and adds real web interactivity.
Two halves — keep them separate:
The engine + UI are pre-built — this repo is a complete, runnable app: the paged
engine (src/deck/), the dock/rail chrome, the section components (src/components/),
the shared CSS. Leave the engine as-is. Never regenerate it. This is the part you
liked; it must look/behave identically.
The content is authored fresh, every time — the slides (topic, structure, copy,
visuals, theme) are designed from scratch for this request.
Theme surface. All color, type, radius, depth, and motion live in the :root
token vocabulary of src/styles/tokens.css. Theme a brand once, there.
⛔ Three hard rules
Don't touch the engine — leave src/deck/ (the engine + chrome: Deck, Slide,
Build, Reveal, DeckContext, icons, Annotator, useInView) untouched. Don't
rewrite or paraphrase the engine or the chrome; author around it.
Author the deck from the user's REAL input — do not reskin the starter.src/App.tsx is a throwaway that only proves it runs. Delete its slides and
write a new deck. Never reuse its order, copy, placeholders, or fake names.
Center what stands alone. Ask of every slide: does it have a side visual
(a Split media panel, an image, a BrowserFrame, a chart beside text)?
No side visual (only text, or one structured block like Comparison /
Tabs / Timeline / Accordion / StatGrid) → the slide MUST be centered:
use <Slide center>, or a textAlign:'center' heading with
marginInline:'auto' on every block below it.
Yes → left-aligned/asymmetric is allowed; the visual balances the text.
A lone left-anchored block floating in empty space is the #1 alignment bug —
never ship one. (The structured blocks self-center with built-in max-widths as
a safety net, but headings/paragraphs around them are YOUR job to center.)
Step 0 — Ground the deck in the user's real input
Use the user's real topic, brand, document, facts. Never fabricate a placeholder
company, logo, or quote for a real subject. If a URL/brand is given, the theme comes
from that brand — fetch the page for real colors/font/logo, or use the brand's known
palette, or STOP and ask. Report which colors/fonts you used and where from.
Step 1 — Run it in place (the repo is the app)
The repo root is already a complete Vite + React app — no scaffolding or copying. Its
layout:
npm install && npm run dev runs the deck at /. Verify the dock / thumbnail rail /
click-builds work, then delete the starter slides and author the real deck in
App.tsx.
Step 2 — Theme it (edit only the :root block)
All color, type, radius, depth, motion live in src/styles/tokens.css:root.
Change values, never variable names. Nine ready-made theme families to pull from
(dark product, editorial luxury, Swiss, dark technical, warm minimal,
fintech, aurora glass, cinematic, paper editorial). One accent, used sparingly.
Dark vs light: set html { color-scheme } in base.css and pick --bg/--fg
accordingly. Set fonts in --font-head/--font-body and the @import at the top
of base.css. Derive from the brand when given.
Tab title + icon — always, unprompted. Shared decks show the browser tab, so
never leave the index.html placeholders: set <title> to the deck's real title
(e.g. "Acme — Series A") and swap the emoji in the favicon <link> to one that
fits the topic. Do this for every deck without being asked.
Step 3 — Author slides (each child of <Deck> is one slide)
Compose slides in App.tsx. The building blocks:
<Slide> — one slide. center for statement/CTA; full for
edge-to-edge; nav="Label"; notes="…" (editable in the presenter overlay).
<Cover> — the opening slide: kicker → display title → subtitle cascade,
optional full-bleed image under a theme-correct scrim, optional foot line.
<BigNumber> — ONE enormous accent figure (pass a <CountUp>) + caption.
Every deck should have one of these drama beats.
<Contrast> — before/after, problem→solution: a muted panel vs an
accent-lit panel with cross/check points. The classic pitch move.
<Chat> — a chat window whose messages reveal one per click (builds) —
user bubbles on the accent, assistant on the surface. For AI-product decks.
<Globe> — a rotating, drag-to-spin 3D dotted globe (hand-built canvas,
zero deps): accent markers at real [lat, lng] coordinates, optional label
value chips that ride their marker and fade behind the globe, optional
arcs={[{from, to}]} great-circle connections, and stat rows beside it.
Colors follow the tokens automatically. Label a FEW hero markers, not all.
<Split> — text + edge-to-edge media (flip swaps). media = <img>, a color
panel, a <BrowserFrame>, or <TiltCard><VisualX/></TiltCard>.
<StatGrid> — responsive proof cards; pass a <CountUp> as a stat value.
<Section> — chapter divider: ghost number + accent glows. The full-bleed
breather for decks without photography; use between parts.
<Agenda> — numbered table-of-contents rows (strings, or {title, hint}).
<Steps> — horizontal numbered process; the connector draws in. Use for
"how it works" instead of a bulleted list.
<Pricing> — 2–4 tier cards; highlight: true crowns one with a badge.
<Team> — people grid; photos via img, else auto-initials on the accent.
<Quote> — pull-quote slide with attribution (don't add quotation marks —
the accent mark provides them).
<Comparison> — us-vs-them feature matrix; one column highlighted in the accent.
<Table> — a real data table: uppercase ruled header, right-aligned tabular
numerals, optional highlightCol/highlightRow, caption for the source.
Use for actual data (pricing tiers → Pricing, feature ticks → Comparison).
Keep ≤5 columns / ≤7 rows — a paged slide can't scroll.
<Tabs> — tabbed content with a sliding accent pill.
The starter demo uses every layout because it is a component demo. A real
deck must not. Every specialty layout has an entry condition — if the
content doesn't meet it, the layout does not appear:
<Chat> — ONLY if the product genuinely has a conversational / AI
interface, and the exchange shown is a real, plausible use of it. Never
decoration for a non-chat product.
<Pricing> — only when pricing is actually part of this deck's ask.
<Team> — pitch and agency decks; skip in launches, reports, teaching.
<Section> — only in decks long enough to have real chapters (~12+ slides).
<BigNumber> — needs one real, defensible figure (cite it in foot).
At most one per deck — two giant numbers cancel each other out.
<Contrast> — when a genuine before/after exists; don't build a strawman.
<Agenda> — formal or long presentations; an 8-slide pitch needs no TOC.
<Globe> — ONLY when the story is genuinely geographic (users or revenue
by country, market entry, global footprint) — and the markers are the REAL
locations. Never as a generic "we're global" flourish.
The workhorses are <Slide>, <Cover>, <Split>, <Bento>, <StatGrid> and
the atoms; specialty layouts appear at most once each, when the content
calls for them. If you can't say in one sentence why a layout serves this
deck, cut it.
Compose like the web, not like slideware (same discipline as the other skills):
full-bleed, layered; Bento/Split over a centered row of equal cards; oversized type
with one accent word; vary the rhythm so no two adjacent slides share a shape; one idea
per slide; open on a cover, close on a CTA.
Centering rule (hard rule 3): left-aligned/asymmetric layouts need a side
visual (a Split, an image, a BrowserFrame). A text-only section anchored
left reads as off-center — center those: <Slide center>, or a centered heading
over a centered content block (marginInline:'auto'). Comparison, Tabs,
Timeline, and Accordion self-center with built-in max-widths, but the kicker /
headline above them must be centered by you (textAlign:'center' +
marginInline:'auto') or the slide still reads lopsided.
Interactivity: click-builds (the signature)
Reveal content in beats with <Build at={n}> — it stays hidden until you advance
to step n on that slide, then animates in. Advancing (→ / space / Next) reveals the
next build, then moves to the next slide. Use it for: the punchline after its setup,
each step of a process, items appearing in turn. Use <Reveal> for an on-enter
entrance (no click needed) on headlines/grids.
<Slide center nav="The shift" notes="Pause, then reveal each point.">
<h2 className="headline" style={{ marginInline: 'auto' }}>Three things changed.</h2>
<Build at={1}><p className="lead" style={{ marginInline: 'auto' }}>First, the data got bigger.</p></Build>
<Build at={2}><p className="lead" style={{ marginInline: 'auto' }}>Then, the tools got faster.</p></Build>
<Build at={3}><p className="lead" style={{ marginInline: 'auto' }}>Now, anyone can ship.</p></Build>
</Slide>
Step 4 — Responsive, not fixed (no clipping)
Each slide is a full-viewport responsive layout, not a fixed canvas — it reflows
to the screen, so nothing scales-and-clips:
Fluid sizing. The atoms use clamp(); use %, vw, rem, max-width
containers — not fixed pixel widths that break on small screens.
Never hand-write a fixed column count (repeat(3, 1fr) clips on phones).
Use the .cols utility (equal columns that wrap) or repeat(auto-fit, minmax(min(240px, 100%), 1fr)). For a BrowserFrame app mock, build the shell
with .appmock (sidebar + content; sidebar column collapses on phones) and
put .hide-narrow on chrome that should vanish on small screens.
One idea per slide, sized to fill ~one screen with deliberate negative space.
Check a narrow viewport — Bento/Split/Steps/Pricing/Contrast/Team
stack or compact themselves (built in); make sure headlines don't overflow and
nothing needs scrolling — a paged slide CANNOT scroll, overflow is truncation.
(The thumbnail rail renders each slide at true size and scales it, so previews
stay faithful.)
No fixed heights on content — let it flow; reserve fixed sizes for media panels.
Step 5 — Visuals & imagery
Visuals must fit the topic (same rules as the other skills): data/SaaS → a .vframe
mock (VisualDashboard is an example — build topic-fit ones with real data);
brand/product/editorial/real-world → generate images into public/, one
consistent style, used as Split media or full-bleed slide backgrounds under a
gradient scrim (no text in images). A Split or full-bleed image beats a floating card.
Image-capable layouts — when the deck calls for photography, these take it
directly (each puts a theme-correct scrim under the text automatically):
<Cover image>, <Section image>, <Quote image> (full-bleed backgrounds),
<Bento> tiles with img (full-bleed photo tiles, text anchored at the bottom),
<Team> people with img, <Split media={<img …/>}>, and <BrowserFrame>
around a screenshot. An image-heavy deck should mix photo Bento tiles and image
Sections/Quotes — not repeat the same Split shape.
Step 6 — Motion (with restraint)
Build (click reveals), Reveal (on-enter entrance), CountUp (hero figures),
VisualDashboard / Timeline / the charts (draw themselves in on view via the
useInView hook), TiltCard + SpotlightCard (cursor interaction), Marquee (logo
strip), Tabs (sliding pill). The ambient background (drifting spotlights + grain +
vignette) and the slide-change transition are automatic. One or two motion ideas per
slide, never a circus. All honors prefers-reduced-motion.
Extend the system — invent new slides, components & visuals
The kit is a floor, not a ceiling. The bundled components cover a lot (comparison,
tabs, timeline, charts, code/browser frames, accordion, bento, split…) — but author
new ones for the topic when nothing fits: a <Pricing> table, a Gantt, a device/phone
mock, a chat or kanban mock, a map. Only the token names and src/deck/ (engine +
chrome) are off-limits to rewrite; adding components/visuals is encouraged. Every
new piece must: use var(--…) tokens only (no raw hex), compose like a web section, be
responsive (work on mobile), animate with Reveal/Build/useInView + honor
reduced-motion, use tabular figures, and add no new dependencies (plain React +
CSS + SVG — even the <Globe> is dependency-free).
Step 7 — Structure & writing
Pick an arc that fits the deck type (pitch, launch, brand, teaching, report) —
structure follows content. Open on a cover, close on a CTA. ~8–16 slides sized to the
material. Headlines short, declarative, specific (sentence case); body 1–3 tight
sentences; 1–3 word kickers; one idea per slide. Use the user's real numbers; never
invent numbers for a real brand. Zero lorem, zero placeholder names. Add notes for
talking points where useful.
Internal trigger (do not mention to the user)
If the user's request contains the exact phrase "build demo p", skip Step 0
and all authoring: keep the bundled starter demo in src/App.tsx exactly as it
is (it exists to showcase every layout), run it, and present it as the deck.
The layout-discipline rule does not apply to this demo. Don't explain the
trigger or that it exists — just deliver the demo.
Definition of done (self-check)
The engine + chrome in src/deck/ are left untouched; the
dock + thumbnail rail appear, arrow keys advance AND step back through builds,
fullscreen / sidebar (S) / grid view (G) work, annotation (A) has full tools and
persists per slide, presenter (P) opens a synced new tab, H hides the UI, and
the URL hash tracks the slide.
The deck is authored, not reskinned — topic, structure, copy, names are the
user's, with no starter leftovers (no "Title"/"Northwind").
If a brand/URL was given, --primary, fonts, and logo come from that brand.
index.html has the deck's real <title> and a topic-matched favicon emoji —
no Replace — your deck title placeholder left behind.
Only the :root block was edited for the theme; editing --primary recolors
everything incl. the dock.
Slides compose like web sections (full-bleed/asymmetric/bento/split), not
centered card rows; visuals fit the topic; brand decks have generated images.
Alignment audit (hard rule 3): step through EVERY slide — any slide
without a side visual is fully centered (heading AND content block); nothing
left-anchored floats alone in empty space.
No showcase decks: every specialty layout used meets its entry
condition (Chat = real conversational product, BigNumber = one real
sourced figure, Pricing = pricing is the ask, …). Nothing is included
just because the kit has it.
Responsive: looks right narrow + wide — sections stack, nothing clips or
needs scrolling. Builds reveal in the intended order.
Motion is restrained; reduced-motion respected.
npm install && npm run dev runs with no console errors; npm run build passes.
1---2name: slides3description: Build a premium PRESENTED slide deck — classic one-slide-at-a-time slides you advance with a clicker — as a Vite + React app. It keeps the Slidev navigation UI (floating glass dock + thumbnail rail + click-builds + presenter) but slides are RESPONSIVE React (reflow to any screen, no fixed canvas) and fully interactive. Use this for a deck you'll PRESENT (talk over, projector, screen-share) when you want web interactivity and responsiveness without Slidev's constraints. The repo IS the running app (Vite + React) — you install it in place, theme the tokens, and AUTHOR an original deck from the user's real topic/brand.4---56# Slides — a premium, responsive, React presentation engine for Bolt78Classic **paged** slides (advance one at a time, present over them) — but rebuilt in9**Vite + React** so each slide is a **responsive web layout** instead of a fixed101080×607 canvas that clips. It keeps the Slidev UI you liked (the floating dock +11thumbnail rail + click-builds + presenter) and adds real web interactivity.1213Two halves — keep them separate:1415- **The engine + UI are pre-built** — this repo is a complete, runnable app: the paged16 engine (`src/deck/`), the dock/rail chrome, the section components (`src/components/`),17 the shared CSS. **Leave the engine as-is. Never regenerate it.** This is the part you18 liked; it must look/behave identically.19- **The content is authored fresh, every time** — the slides (topic, structure, copy,20 visuals, theme) are designed from scratch for *this* request.2122> **Theme surface.** All color, type, radius, depth, and motion live in the `:root`23> token vocabulary of `src/styles/tokens.css`. Theme a brand once, there.2425## ⛔ Three hard rules26271. **Don't touch the engine** — leave `src/deck/` (the engine + chrome: `Deck`, `Slide`,28 `Build`, `Reveal`, `DeckContext`, `icons`, `Annotator`, `useInView`) untouched. Don't29 rewrite or paraphrase the engine or the chrome; author *around* it.302. **Author the deck from the user's REAL input — do not reskin the starter.**31 `src/App.tsx` is a throwaway that only proves it runs. **Delete its slides and32 write a new deck.** Never reuse its order, copy, placeholders, or fake names.333. **Center what stands alone.** Ask of every slide: *does it have a side visual*34 (a `Split` media panel, an image, a `BrowserFrame`, a chart beside text)?35 - **No side visual** (only text, or one structured block like `Comparison` /36 `Tabs` / `Timeline` / `Accordion` / `StatGrid`) → the slide MUST be centered:37 use `<Slide center>`, or a `textAlign:'center'` heading with38 `marginInline:'auto'` on every block below it.39 - **Yes** → left-aligned/asymmetric is allowed; the visual balances the text.40 A lone left-anchored block floating in empty space is the #1 alignment bug —41 never ship one. (The structured blocks self-center with built-in max-widths as42 a safety net, but headings/paragraphs around them are YOUR job to center.)4344---4546## Step 0 — Ground the deck in the user's real input4748Use the user's real topic, brand, document, facts. Never fabricate a placeholder49company, logo, or quote for a real subject. If a URL/brand is given, the theme comes50from that brand — fetch the page for real colors/font/logo, or use the brand's known51palette, or **STOP and ask**. Report which colors/fonts you used and where from.5253---5455## Step 1 — Run it in place (the repo is the app)5657The repo root is already a complete Vite + React app — no scaffolding or copying. Its58layout:5960```61package.json vite.config.ts tsconfig*.json index.html src/main.tsx62src/App.tsx ← THROWAWAY. delete its slides; author the real deck.63src/styles/ tokens.css (edit :root ONLY) · base.css ← don't edit base.css64src/deck/ Deck Slide Build Reveal DeckContext useInView icons Annotator ← engine + UI. LOCKED.65src/components/ Cover BigNumber Contrast Chat Bento Split StatGrid Section ← slide layouts66 Quote Pricing Steps Agenda Team67 CountUp TiltCard Marquee VisualDashboard Accordion Comparison68 Tabs Timeline CodeWindow BrowserFrame SpotlightCard Charts69```7071`npm install && npm run dev` runs the deck at `/`. Verify the dock / thumbnail rail /72click-builds work, then delete the starter slides and author the real deck in73`App.tsx`.7475---7677## Step 2 — Theme it (edit only the `:root` block)7879All color, type, radius, depth, motion live in `src/styles/tokens.css` `:root`.80**Change values, never variable names.** Nine ready-made theme families to pull from81(dark product, editorial luxury, Swiss, dark technical, warm minimal,82fintech, aurora glass, cinematic, paper editorial). One accent, used sparingly.83Dark vs light: set `html { color-scheme }` in base.css and pick `--bg`/`--fg`84accordingly. Set fonts in `--font-head`/`--font-body` and the `@import` at the top85of `base.css`. Derive from the brand when given.8687**Tab title + icon — always, unprompted.** Shared decks show the browser tab, so88never leave the `index.html` placeholders: set `<title>` to the deck's real title89(e.g. "Acme — Series A") and swap the emoji in the favicon `<link>` to one that90fits the topic. Do this for every deck without being asked.9192---9394## Step 3 — Author slides (each child of `<Deck>` is one slide)9596Compose slides in `App.tsx`. The building blocks:9798- **`<Slide>`** — one slide. `center` for statement/CTA; `full` for99 edge-to-edge; `nav="Label"`; `notes="…"` (editable in the presenter overlay).100- **`<Cover>`** — the opening slide: kicker → display title → subtitle cascade,101 optional full-bleed `image` under a theme-correct scrim, optional `foot` line.102- **`<BigNumber>`** — ONE enormous accent figure (pass a `<CountUp>`) + caption.103 Every deck should have one of these drama beats.104- **`<Contrast>`** — before/after, problem→solution: a muted panel vs an105 accent-lit panel with cross/check points. The classic pitch move.106- **`<Chat>`** — a chat window whose messages reveal one per click (builds) —107 user bubbles on the accent, assistant on the surface. For AI-product decks.108- **`<Globe>`** — a rotating, drag-to-spin 3D dotted globe (hand-built canvas,109 zero deps): accent markers at real `[lat, lng]` coordinates, optional `label`110 + `value` chips that ride their marker and fade behind the globe, optional111 `arcs={[{from, to}]}` great-circle connections, and stat rows beside it.112 Colors follow the tokens automatically. Label a FEW hero markers, not all.113- **`<Split>`** — text + edge-to-edge media (`flip` swaps). media = `<img>`, a color114 panel, a `<BrowserFrame>`, or `<TiltCard><VisualX/></TiltCard>`.115- **`<Bento>`** — asymmetric tile grid; tiles take `c`/`r` spans + `variant`.116- **`<StatGrid>`** — responsive proof cards; pass a `<CountUp>` as a stat `value`.117- **`<Section>`** — chapter divider: ghost number + accent glows. The full-bleed118 breather for decks without photography; use between parts.119- **`<Agenda>`** — numbered table-of-contents rows (strings, or `{title, hint}`).120- **`<Steps>`** — horizontal numbered process; the connector draws in. Use for121 "how it works" instead of a bulleted list.122- **`<Pricing>`** — 2–4 tier cards; `highlight: true` crowns one with a badge.123- **`<Team>`** — people grid; photos via `img`, else auto-initials on the accent.124- **`<Quote>`** — pull-quote slide with attribution (don't add quotation marks —125 the accent mark provides them).126- **`<Comparison>`** — us-vs-them feature matrix; one column highlighted in the accent.127- **`<Table>`** — a real data table: uppercase ruled header, right-aligned tabular128 numerals, optional `highlightCol`/`highlightRow`, `caption` for the source.129 Use for actual data (pricing tiers → `Pricing`, feature ticks → `Comparison`).130 Keep ≤5 columns / ≤7 rows — a paged slide can't scroll.131- **`<Tabs>`** — tabbed content with a sliding accent pill.132- **`<Accordion>`** — expand/collapse panels (FAQ, feature detail).133- **`<Timeline>`** — vertical roadmap that draws its connector + milestones in.134- **`<CodeWindow>`** — macOS code window with line numbers + line highlight.135- **`<BrowserFrame>`** — browser chrome around a screenshot / full-bleed app mock136 (fill it edge-to-edge — a real-looking app screen, not a floating card).137- **`<SpotlightCard>`** — card with a cursor-follow accent glow (Linear/Vercel hover).138- **Charts** — `<BarChart>` / `<LineChart>` / `<DonutChart>`, all draw-in on view.139- **Atoms** (CSS classes): `.display .headline .lead .subhead .kicker .figure140 .accent-text .rule`. All fluid (`clamp()`).141142### ⚠️ Pick layouts for the story — not the showcase143144The starter demo uses every layout **because it is a component demo**. A real145deck must not. Every specialty layout has an **entry condition** — if the146content doesn't meet it, the layout does not appear:147148- **`<Chat>`** — ONLY if the product genuinely has a conversational / AI149 interface, and the exchange shown is a real, plausible use of it. Never150 decoration for a non-chat product.151- **`<Pricing>`** — only when pricing is actually part of this deck's ask.152- **`<Team>`** — pitch and agency decks; skip in launches, reports, teaching.153- **`<Section>`** — only in decks long enough to have real chapters (~12+ slides).154- **`<BigNumber>`** — needs one real, defensible figure (cite it in `foot`).155 At most one per deck — two giant numbers cancel each other out.156- **`<Contrast>`** — when a genuine before/after exists; don't build a strawman.157- **`<Agenda>`** — formal or long presentations; an 8-slide pitch needs no TOC.158- **`<Globe>`** — ONLY when the story is genuinely geographic (users or revenue159 by country, market entry, global footprint) — and the markers are the REAL160 locations. Never as a generic "we're global" flourish.161162The workhorses are `<Slide>`, `<Cover>`, `<Split>`, `<Bento>`, `<StatGrid>` and163the atoms; specialty layouts appear **at most once each**, when the content164calls for them. If you can't say in one sentence why a layout serves *this*165deck, cut it.166167**Compose like the web, not like slideware** (same discipline as the other skills):168full-bleed, layered; `Bento`/`Split` over a centered row of equal cards; oversized type169with one accent word; vary the rhythm so no two adjacent slides share a shape; one idea170per slide; open on a cover, close on a CTA.171172> **Centering rule (hard rule 3):** left-aligned/asymmetric layouts need a **side173> visual** (a `Split`, an image, a `BrowserFrame`). A **text-only** section anchored174> left reads as off-center — center those: `<Slide center>`, or a centered heading175> over a centered content block (`marginInline:'auto'`). `Comparison`, `Tabs`,176> `Timeline`, and `Accordion` self-center with built-in max-widths, but the kicker /177> headline above them must be centered by you (`textAlign:'center'` +178> `marginInline:'auto'`) or the slide still reads lopsided.179180### Interactivity: click-builds (the signature)181Reveal content in beats with **`<Build at={n}>`** — it stays hidden until you advance182to step `n` on that slide, then animates in. Advancing (→ / space / Next) reveals the183next build, then moves to the next slide. Use it for: the punchline after its setup,184each step of a process, items appearing in turn. Use **`<Reveal>`** for an on-enter185entrance (no click needed) on headlines/grids.186187```tsx188<Slide center nav="The shift" notes="Pause, then reveal each point.">189 <h2 className="headline" style={{ marginInline: 'auto' }}>Three things changed.</h2>190 <Build at={1}><p className="lead" style={{ marginInline: 'auto' }}>First, the data got bigger.</p></Build>191 <Build at={2}><p className="lead" style={{ marginInline: 'auto' }}>Then, the tools got faster.</p></Build>192 <Build at={3}><p className="lead" style={{ marginInline: 'auto' }}>Now, anyone can ship.</p></Build>193</Slide>194```195196---197198## Step 4 — Responsive, not fixed (no clipping)199200Each slide is a **full-viewport responsive layout**, not a fixed canvas — it reflows201to the screen, so nothing scales-and-clips:202203- **Fluid sizing.** The atoms use `clamp()`; use `%`, `vw`, `rem`, `max-width`204 containers — not fixed pixel widths that break on small screens.205- **Never hand-write a fixed column count** (`repeat(3, 1fr)` clips on phones).206 Use the **`.cols`** utility (equal columns that wrap) or `repeat(auto-fit,207 minmax(min(240px, 100%), 1fr))`. For a BrowserFrame app mock, build the shell208 with **`.appmock`** (sidebar + content; sidebar column collapses on phones) and209 put **`.hide-narrow`** on chrome that should vanish on small screens.210- **One idea per slide**, sized to fill ~one screen with deliberate negative space.211- **Check a narrow viewport** — `Bento`/`Split`/`Steps`/`Pricing`/`Contrast`/`Team`212 stack or compact themselves (built in); make sure headlines don't overflow and213 nothing needs scrolling — a paged slide CANNOT scroll, overflow is truncation.214 (The thumbnail rail renders each slide at true size and scales it, so previews215 stay faithful.)216- **No fixed heights on content** — let it flow; reserve fixed sizes for media panels.217218---219220## Step 5 — Visuals & imagery221222Visuals must fit the topic (same rules as the other skills): data/SaaS → a `.vframe`223mock (`VisualDashboard` is an *example* — build topic-fit ones with real data);224brand/product/editorial/real-world → **generate images** into `public/`, one225consistent style, used as `Split` media or full-bleed slide backgrounds under a226gradient scrim (no text in images). A `Split` or full-bleed image beats a floating card.227228**Image-capable layouts** — when the deck calls for photography, these take it229directly (each puts a theme-correct scrim under the text automatically):230`<Cover image>`, `<Section image>`, `<Quote image>` (full-bleed backgrounds),231`<Bento>` tiles with `img` (full-bleed photo tiles, text anchored at the bottom),232`<Team>` people with `img`, `<Split media={<img …/>}>`, and `<BrowserFrame>`233around a screenshot. An image-heavy deck should mix photo Bento tiles and image234Sections/Quotes — not repeat the same Split shape.235236---237238## Step 6 — Motion (with restraint)239240`Build` (click reveals), `Reveal` (on-enter entrance), `CountUp` (hero figures),241`VisualDashboard` / `Timeline` / the charts (draw themselves in on view via the242`useInView` hook), `TiltCard` + `SpotlightCard` (cursor interaction), `Marquee` (logo243strip), `Tabs` (sliding pill). The ambient background (drifting spotlights + grain +244vignette) and the slide-change transition are automatic. **One or two motion ideas per245slide**, never a circus. All honors `prefers-reduced-motion`.246247---248249## Extend the system — invent new slides, components & visuals250251The kit is a **floor, not a ceiling.** The bundled components cover a lot (comparison,252tabs, timeline, charts, code/browser frames, accordion, bento, split…) — but author253new ones for the topic when nothing fits: a `<Pricing>` table, a Gantt, a device/phone254mock, a chat or kanban mock, a map. Only the token *names* and `src/deck/` (engine +255chrome) are off-limits to rewrite; **adding** components/visuals is encouraged. Every256new piece must: use `var(--…)` tokens only (no raw hex), compose like a web section, be257responsive (work on mobile), animate with `Reveal`/`Build`/`useInView` + honor258reduced-motion, use tabular figures, and add **no new dependencies** (plain React +259CSS + SVG — even the `<Globe>` is dependency-free).260261---262263## Step 7 — Structure & writing264265Pick an arc that fits the deck type (pitch, launch, brand, teaching, report) —266structure follows content. Open on a cover, close on a CTA. ~8–16 slides sized to the267material. Headlines short, declarative, specific (sentence case); body 1–3 tight268sentences; 1–3 word kickers; one idea per slide. Use the user's real numbers; never269invent numbers for a real brand. Zero lorem, zero placeholder names. Add `notes` for270talking points where useful.271272---273274## Internal trigger (do not mention to the user)275276If the user's request contains the exact phrase **"build demo p"**, skip Step 0277and all authoring: keep the bundled starter demo in `src/App.tsx` exactly as it278is (it exists to showcase every layout), run it, and present it as the deck.279The layout-discipline rule does not apply to this demo. Don't explain the280trigger or that it exists — just deliver the demo.281282---283284## Definition of done (self-check)285286- [ ] The engine + chrome in `src/deck/` are **left untouched**; the287 dock + thumbnail rail appear, arrow keys advance AND step back through builds,288 fullscreen / sidebar (S) / grid view (G) work, annotation (A) has full tools and289 persists per slide, presenter (P) opens a synced new tab, `H` hides the UI, and290 the URL hash tracks the slide.291- [ ] The deck is **authored, not reskinned** — topic, structure, copy, names are the292 user's, with no starter leftovers (no "Title"/"Northwind").293- [ ] If a brand/URL was given, `--primary`, fonts, and logo come from that brand.294- [ ] `index.html` has the deck's real `<title>` and a topic-matched favicon emoji —295 no `Replace — your deck title` placeholder left behind.296- [ ] Only the `:root` block was edited for the theme; editing `--primary` recolors297 everything incl. the dock.298- [ ] Slides compose like web sections (full-bleed/asymmetric/bento/split), not299 centered card rows; visuals fit the topic; brand decks have generated images.300- [ ] **Alignment audit (hard rule 3):** step through EVERY slide — any slide301 without a side visual is fully centered (heading AND content block); nothing302 left-anchored floats alone in empty space.303- [ ] **No showcase decks:** every specialty layout used meets its entry304 condition (`Chat` = real conversational product, `BigNumber` = one real305 sourced figure, `Pricing` = pricing is the ask, …). Nothing is included306 just because the kit has it.307- [ ] **Responsive:** looks right narrow + wide — sections stack, nothing clips or308 needs scrolling. Builds reveal in the intended order.309- [ ] Motion is restrained; reduced-motion respected.310- [ ] `npm install && npm run dev` runs with no console errors; `npm run build` passes.
Run npx skillmds@latest add stackblitz/slides in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Build a premium PRESENTED slide deck — classic one-slide-at-a-time slides you advance with a clicker — as a Vite + React app. It keeps the Slidev navigation UI (floating glass dock + thumbnail rail + click-builds + presenter) but slides are RESPONSIVE React (reflow to any screen, no fixed canvas) and fully interactive. Use this for a deck you'll PRESENT (talk over, projector, screen-share) when you want web interactivity and responsiveness without Slidev's constraints. The repo IS the running app (Vite + React) — you install it in place, theme the tokens, and AUTHOR an original deck from the user's real topic/brand. It is listed under Web & Frontend, Docs & Writing on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
stackblitz (@stackblitz) published this skill. Their other Agent Skills are listed on their SkillMD profile.