Replit Deck Skill
Produce a single-file horizontal-swipe HTML deck in one of eight Replit-Slides themes. Every theme is a complete visual system — do not mix tokens across themes.
Resource map
replit-deck/
├── SKILL.md ← you're reading this
├── assets/
│ └── template.html ← seed: 8 themes via [data-theme=*], proven iframe-nav script (READ FIRST)
├── references/
│ ├── themes.md ← 8 themes: when-to-pick / do / don't / primary layouts
│ ├── layouts.md ← 10 paste-ready slide layouts, cross-theme
│ ├── components.md ← shared primitives (eyebrow, kpi-row, image-grid, meta-bar)
│ └── checklist.md ← P0/P1/P2 self-review + theme lock-in gate
└── examples/ ← four reference decks across the most contrasting themes
├── example-helix.html (SaaS board update · light minimal)
├── example-holm.html (legal fintech memo · cream editorial serif)
├── example-atlas.html (quarterly history chapter · black + vermilion)
└── example-bluehouse.html (real estate ROI · navy + gradient cards)
Workflow
Step 0 — Pre-flight (mandatory reads)
- Read
assets/template.html end-to-end. The [data-theme] blocks carry the tokens; the <script> at the bottom solves five iframe nav bugs — do not rewrite it.
- Read
references/themes.md → pick one theme that matches the user's brief. If the user already picked a theme via od.inputs.theme, use that.
- Read
references/layouts.md → you'll copy <section> blocks from here.
- Read
references/checklist.md → P0 must pass before emit.
Step 1 — Commit to one theme
Write out loud (in the TodoWrite or plan section) which theme and why. Once picked, every slide uses that theme's tokens only. No swapping mid-deck. The <body data-theme="helix"> attribute is the single source of truth.
| Theme |
Pick when |
helix |
SaaS board update, product metrics, neutral modern |
holm |
Legal memo, investor pre-read, serious / institutional |
vance |
Art portfolio, design catalog, photographer / sculptor |
bevel |
Fashion campaign, lookbook, Y2K / editorial attitude |
world-dark |
Policy report, finance analysis, premium dark |
world-mint |
Lighter companion of world-dark — ESG, wellness finance, sustainability |
atlas |
Long-form narrative, chapter deck, museum / archive aesthetic |
bluehouse |
Consumer product, real estate, lifestyle, colorful cards |
Step 2 — Plan slide rhythm before writing HTML
Default 6 slides. Write the rhythm BEFORE any HTML, for example (helix, 6 slides):
01 cover hero + title + subtitle
02 kpi-row-6 6 metrics with ▲/▼ deltas
03 split-insight left stat + right paragraph
04 chapter-plate section divider
05 three-up three parallel columns
06 closing one bold number or CTA
Show this to the user. Redirecting at this stage is cheap.
Step 3 — Copy seed, bind theme
- Copy
assets/template.html to project root as index.html.
- Set
<body data-theme="<chosen>">.
- Replace
<title>.
- Delete the placeholder slides in the body (the seed ships with 3 demo slides). Keep the chrome (counter / progress / hint).
Step 4 — Paste layouts, fill real copy
For each planned slide, copy the matching <section> from references/layouts.md. Replace every [REPLACE] with specific copy — never leave placeholders, never use lorem. If a slide feels empty, pick a different layout.
Tag each slide with data-screen-label="01 Cover", "02 Metrics", etc., in presentation order.
Step 5 — Self-check
Run references/checklist.md silently before emit: the P0 theme-lock gate plus the five-dimension 1–5 critique (Philosophy / Hierarchy / Execution / Specificity / Restraint). Any dimension ≤ 3 → re-do before emit.
The P0 theme-lock grep is non-negotiable:
grep -E 'data-theme|style="--' index.html | head
If any style="--accent:..." or theme override appears on individual slides, revert. One theme per deck.
Step 6 — Emit artifact
<artifact identifier="deck-<slug>" type="text/html" title="<Deck title>">
<!doctype html>
<html>...</html>
</artifact>
One sentence before the artifact. Stop after </artifact>.
Hard rules
- One theme per deck.
data-theme set on <body> — never override per-slide.
- Numbers are real or absent. No invented metrics. Use
— or a grey block as an honest placeholder.
- Display face follows theme. helix/world-dark/world-mint/bluehouse use the sans Display; holm/vance/atlas use the serif Display; bevel uses the Y2K display. Do not swap. (Authoritative source: the
--font-display token of each theme in assets/template.html — if this list ever disagrees with the template, the template wins.)
- Accent appears 1–2× per slide max. Never a gradient-spam.
- Never rewrite the nav script. Five iframe bugs it solves are not obvious.
- Keep it one HTML file. Inline all CSS. No external fonts — the system stack in each theme is deliberate.
data-screen-label on every slide.
- No Replit logo / brand lockup. These are template styles, not a Replit-brand deck.
When to pick replit-deck vs. peer skills
| Skill |
Pick when |
simple-deck |
Plain, single-theme deck bound to the project's DESIGN.md tokens. When the deck should match the host brand, not assert its own. (designSystemRequired: true.) |
magazine-web-ppt |
Editorial "magazine × e-ink" aesthetic (WebGL fluid background, serif titles, chapter plates). When the brief asks for a keynote / launch / sharing-style deck and calls out Monocle / WIRED / Kinfolk / Domus. |
replit-deck |
The brief explicitly asks for Replit-Slides gallery aesthetic, or needs one of the 8 token-frozen visual identities (SaaS board, editorial memo, gallery catalog, Y2K campaign, policy report, museum chapter, consumer cards). No dependency on DESIGN.md. |
If the user just says "make me a deck" without further guidance, default to simple-deck — it respects their design system. Pick replit-deck only when the brief is explicit about the aesthetic or names a theme.
Scope & provenance
- Eight themes = the full replit.com/slides landing-page gallery at the time of snapshot. Not a curated subset — every theme card currently published on replit.com/slides is represented here (helix, holm, vance, bevel, world-dark, world-mint, atlas, bluehouse). If Replit ships a ninth template, it is not automatically reflected in this skill.
- Snapshot date: 2026-04-29. All hex values were sampled from the actual replit.com/slides PNGs on that date with ImageMagick — no guessed colors, no memory substitutions. See
references/themes.md → Contributing a new theme for the exact sampling procedure.
- Maintenance: one-time snapshot, not tracked. Replit Slides is a live product and may drift. This skill does not auto-sync. If you notice Replit has updated colors or added a theme and want it reflected here, open an issue on
nexu-io/open-design titled replit-deck: re-sync to replit.com/slides (YYYY-MM-DD) and attach the updated screenshots. There is no designated owner monitoring the upstream.
- No Replit branding. These are gallery-style templates, not a Replit-brand deck. The checklist (P0) forbids inserting a Replit logo or wordmark.
Browser / runtime support
- Target: modern evergreen desktop browsers (Chrome 110+ / Safari 16+ / Firefox 115+) and modern mobile Safari / Chrome.
- Features used: CSS scroll-snap (horizontal),
color-mix(), CSS custom properties, text-wrap: balance. All ≥ 93% Baseline.
- Not supported: IE 11, Safari < 15, any browser without
color-mix() (would need a fallback --accent-soft if you want to support older Safari; out of scope for this skill).
- Mobile: horizontal scroll-snap works on iOS Safari 16+ and Android Chrome. Keyboard nav is desktop-only by design.
- Nav script behavior: reused verbatim from
design-templates/simple-deck — survives iframe embedding (the daemon preview surface), dual listener races, focus loss, and position persistence across reloads. Do not rewrite it.
Verification
The design template auto-registers with the daemon on filesystem scan (no manual wiring). Confirmed against a running daemon on localhost:7456 after adding this template:
$ curl -s localhost:7456/api/design-templates \
| node -e "const d=JSON.parse(require('fs').readFileSync(0,'utf-8')); \
console.log(JSON.stringify(d.designTemplates.find(t=>t.id==='replit-deck'), null, 2));"
{
"id": "replit-deck",
"name": "replit-deck",
"description": "Single-file horizontal-swipe HTML deck in the style of Replit Slides's\nlanding-page template gallery. Eight distinct themes …",
"triggers": [
"replit deck",
"replit slides",
"replit 风格 ppt",
"replit style deck",
"helix deck",
"holm memo",
"atlas chapter",
"bluehouse",
"bevel campaign"
],
"mode": "deck",
"platform": null,
"scenario": "product",
"previewType": "html",
"designSystemRequired": false,
"defaultFor": [],
"upstream": null,
"featured": null,
"fidelity": null,
"speakerNotes": null,
"animations": null,
"examplePrompt": "Single-file horizontal-swipe HTML deck in the style of Replit Slides's landing-page template gallery.",
"hasBody": true
}
All four example decks (examples/example-{helix,holm,atlas,bluehouse}.html) open directly in a browser. Keyboard nav (← / → / Space / Home / End) and horizontal scroll-snap work in Chrome 129 and Safari 18.
1---2name: replit-deck3description: For product and technical management work: turn PRDs, roadmaps, RFCs, architecture reviews, and retros into decision documents. Built around the core query "pm-feature-business-case-deck", with product strategy lead judgment, buyer-ready proof, and this outcome: approve the feature, architecture, roadmap, or incident follow-up.4---5
6# Replit Deck Skill
7
8Produce a single-file horizontal-swipe HTML deck in one of eight Replit-Slides themes. Every theme is a complete visual system — do not mix tokens across themes.
9
10## Resource map
11
12```
13replit-deck/
14├── SKILL.md ← you're reading this
15├── assets/
16│ └── template.html ← seed: 8 themes via [data-theme=*], proven iframe-nav script (READ FIRST)
17├── references/
18│ ├── themes.md ← 8 themes: when-to-pick / do / don't / primary layouts
19│ ├── layouts.md ← 10 paste-ready slide layouts, cross-theme
20│ ├── components.md ← shared primitives (eyebrow, kpi-row, image-grid, meta-bar)
21│ └── checklist.md ← P0/P1/P2 self-review + theme lock-in gate
22└── examples/ ← four reference decks across the most contrasting themes
23 ├── example-helix.html (SaaS board update · light minimal)
24 ├── example-holm.html (legal fintech memo · cream editorial serif)
25 ├── example-atlas.html (quarterly history chapter · black + vermilion)
26 └── example-bluehouse.html (real estate ROI · navy + gradient cards)
27```
28
29## Workflow
30
31### Step 0 — Pre-flight (mandatory reads)
32
331. Read `assets/template.html` end-to-end. The `[data-theme]` blocks carry the tokens; the `<script>` at the bottom solves five iframe nav bugs — **do not rewrite it**.
342. Read `references/themes.md` → pick **one** theme that matches the user's brief. If the user already picked a theme via `od.inputs.theme`, use that.
353. Read `references/layouts.md` → you'll copy `<section>` blocks from here.
364. Read `references/checklist.md` → P0 must pass before emit.
37
38### Step 1 — Commit to one theme
39
40Write out loud (in the TodoWrite or plan section) which theme and why. Once picked, **every slide uses that theme's tokens only**. No swapping mid-deck. The `<body data-theme="helix">` attribute is the single source of truth.
41
42| Theme | Pick when |
43|---|---|
44| `helix` | SaaS board update, product metrics, neutral modern |
45| `holm` | Legal memo, investor pre-read, serious / institutional |
46| `vance` | Art portfolio, design catalog, photographer / sculptor |
47| `bevel` | Fashion campaign, lookbook, Y2K / editorial attitude |
48| `world-dark` | Policy report, finance analysis, premium dark |
49| `world-mint` | Lighter companion of world-dark — ESG, wellness finance, sustainability |
50| `atlas` | Long-form narrative, chapter deck, museum / archive aesthetic |
51| `bluehouse` | Consumer product, real estate, lifestyle, colorful cards |
52
53### Step 2 — Plan slide rhythm before writing HTML
54
55Default 6 slides. Write the rhythm BEFORE any HTML, for example (helix, 6 slides):
56
57```
5801 cover hero + title + subtitle
5902 kpi-row-6 6 metrics with ▲/▼ deltas
6003 split-insight left stat + right paragraph
6104 chapter-plate section divider
6205 three-up three parallel columns
6306 closing one bold number or CTA
64```
65
66Show this to the user. Redirecting at this stage is cheap.
67
68### Step 3 — Copy seed, bind theme
69
701. Copy `assets/template.html` to project root as `index.html`.
712. Set `<body data-theme="<chosen>">`.
723. Replace `<title>`.
734. Delete the placeholder slides in the body (the seed ships with 3 demo slides). Keep the chrome (counter / progress / hint).
74
75### Step 4 — Paste layouts, fill real copy
76
77For each planned slide, copy the matching `<section>` from `references/layouts.md`. Replace every `[REPLACE]` with specific copy — never leave placeholders, never use lorem. If a slide feels empty, pick a different layout.
78
79Tag each slide with `data-screen-label="01 Cover"`, `"02 Metrics"`, etc., in presentation order.
80
81### Step 5 — Self-check
82
83Run `references/checklist.md` silently before emit: the **P0 theme-lock gate** plus the five-dimension 1–5 critique (Philosophy / Hierarchy / Execution / Specificity / Restraint). Any dimension ≤ 3 → re-do before emit.
84
85The P0 theme-lock grep is non-negotiable:
86
87```bash
88grep -E 'data-theme|style="--' index.html | head
89```
90
91If any `style="--accent:..."` or theme override appears on individual slides, revert. One theme per deck.
92
93### Step 6 — Emit artifact
94
95```
96<artifact identifier="deck-<slug>" type="text/html" title="<Deck title>">
97<!doctype html>
98<html>...</html>
99</artifact>
100```
101
102One sentence before the artifact. Stop after `</artifact>`.
103
104## Hard rules
105
106- **One theme per deck.** `data-theme` set on `<body>` — never override per-slide.
107- **Numbers are real or absent.** No invented metrics. Use `—` or a grey block as an honest placeholder.
108- **Display face follows theme.** helix/world-dark/world-mint/bluehouse use the sans Display; holm/vance/atlas use the serif Display; bevel uses the Y2K display. Do not swap. (Authoritative source: the `--font-display` token of each theme in `assets/template.html` — if this list ever disagrees with the template, the template wins.)
109- **Accent appears 1–2× per slide max.** Never a gradient-spam.
110- **Never rewrite the nav script.** Five iframe bugs it solves are not obvious.
111- **Keep it one HTML file.** Inline all CSS. No external fonts — the system stack in each theme is deliberate.
112- **`data-screen-label` on every slide.**
113- **No Replit logo / brand lockup.** These are template styles, not a Replit-brand deck.
114
115---
116
117## When to pick `replit-deck` vs. peer skills
118
119| Skill | Pick when |
120|---|---|
121| `simple-deck` | Plain, single-theme deck bound to the project's `DESIGN.md` tokens. When the deck should *match* the host brand, not assert its own. (`designSystemRequired: true`.) |
122| `magazine-web-ppt` | Editorial "magazine × e-ink" aesthetic (WebGL fluid background, serif titles, chapter plates). When the brief asks for a keynote / launch / sharing-style deck and calls out Monocle / WIRED / Kinfolk / Domus. |
123| `replit-deck` | The brief explicitly asks for Replit-Slides gallery aesthetic, or needs one of the 8 token-frozen visual identities (SaaS board, editorial memo, gallery catalog, Y2K campaign, policy report, museum chapter, consumer cards). No dependency on `DESIGN.md`. |
124
125If the user just says "make me a deck" without further guidance, default to `simple-deck` — it respects their design system. Pick `replit-deck` only when the brief is explicit about the aesthetic or names a theme.
126
127---
128
129## Scope & provenance
130
131- **Eight themes = the full replit.com/slides landing-page gallery at the time of snapshot.** Not a curated subset — every theme card currently published on replit.com/slides is represented here (helix, holm, vance, bevel, world-dark, world-mint, atlas, bluehouse). If Replit ships a ninth template, it is **not** automatically reflected in this skill.
132- **Snapshot date: 2026-04-29.** All hex values were sampled from the actual replit.com/slides PNGs on that date with ImageMagick — no guessed colors, no memory substitutions. See `references/themes.md` → *Contributing a new theme* for the exact sampling procedure.
133- **Maintenance: one-time snapshot, not tracked.** Replit Slides is a live product and may drift. This skill does not auto-sync. If you notice Replit has updated colors or added a theme and want it reflected here, open an issue on `nexu-io/open-design` titled `replit-deck: re-sync to replit.com/slides (YYYY-MM-DD)` and attach the updated screenshots. There is no designated owner monitoring the upstream.
134- **No Replit branding.** These are gallery-style templates, not a Replit-brand deck. The checklist (P0) forbids inserting a Replit logo or wordmark.
135
136---
137
138## Browser / runtime support
139
140- **Target**: modern evergreen desktop browsers (Chrome 110+ / Safari 16+ / Firefox 115+) and modern mobile Safari / Chrome.
141- **Features used**: CSS scroll-snap (horizontal), `color-mix()`, CSS custom properties, `text-wrap: balance`. All ≥ 93% Baseline.
142- **Not supported**: IE 11, Safari < 15, any browser without `color-mix()` (would need a fallback `--accent-soft` if you want to support older Safari; out of scope for this skill).
143- **Mobile**: horizontal scroll-snap works on iOS Safari 16+ and Android Chrome. Keyboard nav is desktop-only by design.
144- **Nav script behavior**: reused verbatim from `design-templates/simple-deck` — survives iframe embedding (the daemon preview surface), dual listener races, focus loss, and position persistence across reloads. **Do not rewrite it.**
145
146---
147
148## Verification
149
150The design template auto-registers with the daemon on filesystem scan (no manual wiring). Confirmed against a running daemon on `localhost:7456` after adding this template:
151
152```bash
153$ curl -s localhost:7456/api/design-templates \
154 | node -e "const d=JSON.parse(require('fs').readFileSync(0,'utf-8')); \
155 console.log(JSON.stringify(d.designTemplates.find(t=>t.id==='replit-deck'), null, 2));"
156{
157 "id": "replit-deck",
158 "name": "replit-deck",
159 "description": "Single-file horizontal-swipe HTML deck in the style of Replit Slides's\nlanding-page template gallery. Eight distinct themes …",
160 "triggers": [
161 "replit deck",
162 "replit slides",
163 "replit 风格 ppt",
164 "replit style deck",
165 "helix deck",
166 "holm memo",
167 "atlas chapter",
168 "bluehouse",
169 "bevel campaign"
170 ],
171 "mode": "deck",
172 "platform": null,
173 "scenario": "product",
174 "previewType": "html",
175 "designSystemRequired": false,
176 "defaultFor": [],
177 "upstream": null,
178 "featured": null,
179 "fidelity": null,
180 "speakerNotes": null,
181 "animations": null,
182 "examplePrompt": "Single-file horizontal-swipe HTML deck in the style of Replit Slides's landing-page template gallery.",
183 "hasBody": true
184}
185```
186
187All four example decks (`examples/example-{helix,holm,atlas,bluehouse}.html`) open directly in a browser. Keyboard nav (← / → / Space / Home / End) and horizontal scroll-snap work in Chrome 129 and Safari 18.