lazyslides 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +207 -0
- package/_includes/slides/_nested-list.njk +26 -0
- package/_includes/slides/agenda.njk +17 -0
- package/_includes/slides/center.njk +16 -0
- package/_includes/slides/code.njk +15 -0
- package/_includes/slides/columns.njk +35 -0
- package/_includes/slides/comparison.njk +29 -0
- package/_includes/slides/content.njk +22 -0
- package/_includes/slides/footer.njk +58 -0
- package/_includes/slides/funnel.njk +30 -0
- package/_includes/slides/hero.njk +27 -0
- package/_includes/slides/image-overlay.njk +21 -0
- package/_includes/slides/metrics.njk +27 -0
- package/_includes/slides/quote.njk +17 -0
- package/_includes/slides/section.njk +6 -0
- package/_includes/slides/split-wide.njk +30 -0
- package/_includes/slides/split.njk +30 -0
- package/_includes/slides/table.njk +31 -0
- package/_includes/slides/timeline.njk +30 -0
- package/_includes/slides/title.njk +17 -0
- package/_layouts/default.njk +20 -0
- package/_layouts/presentation.njk +240 -0
- package/assets/css/themes/default.css +62 -0
- package/assets/css/vendor/glightbox.min.css +1 -0
- package/assets/js/vendor/glightbox.min.js +1 -0
- package/assets/reveal.js/LICENSE +19 -0
- package/assets/reveal.js/dist/reset.css +30 -0
- package/assets/reveal.js/dist/reveal.css +8 -0
- package/assets/reveal.js/dist/reveal.esm.js +9 -0
- package/assets/reveal.js/dist/reveal.esm.js.map +1 -0
- package/assets/reveal.js/dist/reveal.js +9 -0
- package/assets/reveal.js/dist/reveal.js.map +1 -0
- package/assets/reveal.js/dist/theme/beige.css +366 -0
- package/assets/reveal.js/dist/theme/black-contrast.css +362 -0
- package/assets/reveal.js/dist/theme/black.css +359 -0
- package/assets/reveal.js/dist/theme/blood.css +392 -0
- package/assets/reveal.js/dist/theme/dracula.css +385 -0
- package/assets/reveal.js/dist/theme/fonts/league-gothic/LICENSE +2 -0
- package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.css +10 -0
- package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.eot +0 -0
- package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.ttf +0 -0
- package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.woff +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/LICENSE +45 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff +0 -0
- package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro.css +39 -0
- package/assets/reveal.js/dist/theme/league.css +368 -0
- package/assets/reveal.js/dist/theme/moon.css +362 -0
- package/assets/reveal.js/dist/theme/night.css +360 -0
- package/assets/reveal.js/dist/theme/serif.css +363 -0
- package/assets/reveal.js/dist/theme/simple.css +362 -0
- package/assets/reveal.js/dist/theme/sky.css +370 -0
- package/assets/reveal.js/dist/theme/solarized.css +363 -0
- package/assets/reveal.js/dist/theme/white-contrast.css +362 -0
- package/assets/reveal.js/dist/theme/white.css +359 -0
- package/assets/reveal.js/dist/theme/white_contrast_compact_verbatim_headers.css +360 -0
- package/assets/reveal.js/plugin/highlight/highlight.esm.js +5 -0
- package/assets/reveal.js/plugin/highlight/highlight.js +5 -0
- package/assets/reveal.js/plugin/highlight/monokai.css +71 -0
- package/assets/reveal.js/plugin/highlight/plugin.js +439 -0
- package/assets/reveal.js/plugin/highlight/zenburn.css +80 -0
- package/assets/reveal.js/plugin/markdown/markdown.esm.js +7 -0
- package/assets/reveal.js/plugin/markdown/markdown.js +7 -0
- package/assets/reveal.js/plugin/markdown/plugin.js +491 -0
- package/assets/reveal.js/plugin/notes/notes.esm.js +1 -0
- package/assets/reveal.js/plugin/notes/notes.js +1 -0
- package/assets/reveal.js/plugin/notes/plugin.js +267 -0
- package/assets/reveal.js/plugin/notes/speaker-view.html +898 -0
- package/cli.js +80 -0
- package/data/site.json +3 -0
- package/index.js +153 -0
- package/lib/export-pdf.js +137 -0
- package/lib/init.js +154 -0
- package/lib/renumber.js +181 -0
- package/lib/validate.js +196 -0
- package/package.json +76 -0
- package/scaffold/CLAUDE.md +283 -0
- package/scaffold/README.md +29 -0
- package/scaffold/_template/index.md +78 -0
- package/scaffold/_template/outline.md +32 -0
- package/scaffold/claude-commands/add-slide.md +61 -0
- package/scaffold/claude-commands/create-outline.md +75 -0
- package/scaffold/claude-commands/new-presentation.md +218 -0
- package/scaffold/claude-commands/refine-slides.md +62 -0
- package/scaffold/claude-commands/research-topic.md +66 -0
- package/scaffold/claude-commands/validate.md +47 -0
- package/scaffold/claude-settings.json +7 -0
- package/scaffold/eleventy.config.js +11 -0
- package/scaffold/gitignore +5 -0
- package/scaffold/my-first-deck/index.md +26 -0
- package/scaffold/nvmrc +1 -0
- package/scaffold/package.json.tmpl +25 -0
- package/scaffold/presentations.11tydata.js +11 -0
- package/scaffold/styles.css +3 -0
- package/src/styles.css +2077 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with this LazySlides project.
|
|
4
|
+
|
|
5
|
+
## Presentation Authoring Workflow
|
|
6
|
+
|
|
7
|
+
### Creating a new presentation
|
|
8
|
+
|
|
9
|
+
1. Start with an outline — fill in `presentations/_template/outline.md` or use `/create-outline`
|
|
10
|
+
2. Run `/new-presentation` — the slash command guides you through the full process
|
|
11
|
+
3. Or manually: create `presentations/{name}/index.md` with YAML frontmatter
|
|
12
|
+
|
|
13
|
+
### Adding slides
|
|
14
|
+
|
|
15
|
+
1. Run `/add-slide` — picks template, gathers content, inserts at the right position
|
|
16
|
+
2. Or manually: add a new `- template: ...` entry to the `slides:` array
|
|
17
|
+
|
|
18
|
+
### Editing slides
|
|
19
|
+
|
|
20
|
+
1. Read the presentation's `index.md`
|
|
21
|
+
2. Modify the YAML for the target slide
|
|
22
|
+
3. Run `pnpm run validate` to verify
|
|
23
|
+
4. Run `pnpm run dev` to preview
|
|
24
|
+
|
|
25
|
+
### Validating
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
pnpm run validate # check all presentations
|
|
29
|
+
pnpm run renumber # update slide comment numbers
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## YAML Schema Reference
|
|
33
|
+
|
|
34
|
+
All presentations use this structure:
|
|
35
|
+
|
|
36
|
+
```yaml
|
|
37
|
+
---
|
|
38
|
+
title: Deck Title # required
|
|
39
|
+
description: Subtitle
|
|
40
|
+
author: Speaker Name
|
|
41
|
+
theme: default
|
|
42
|
+
transition: slide
|
|
43
|
+
progress: true
|
|
44
|
+
slideNumber: true
|
|
45
|
+
show_footer: true
|
|
46
|
+
slides: # required — array of slide objects
|
|
47
|
+
- template: content # required on every slide
|
|
48
|
+
title: Slide Title
|
|
49
|
+
# ... template-specific fields
|
|
50
|
+
notes: | # optional speaker notes (all templates)
|
|
51
|
+
What to say during this slide
|
|
52
|
+
---
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Do NOT include** `layout: presentation` — it is set automatically.
|
|
56
|
+
|
|
57
|
+
### Template Fields
|
|
58
|
+
|
|
59
|
+
Fields marked with `*` are required.
|
|
60
|
+
|
|
61
|
+
#### `title` — Opening slide
|
|
62
|
+
- `title`* — presentation title
|
|
63
|
+
- `subtitle` — tagline or date
|
|
64
|
+
- `author` — speaker name
|
|
65
|
+
- `logo` — show logo (default: true)
|
|
66
|
+
|
|
67
|
+
#### `section` — Chapter divider
|
|
68
|
+
- `title`* — section name
|
|
69
|
+
- `subtitle` — section description
|
|
70
|
+
|
|
71
|
+
#### `content` — Standard bullets
|
|
72
|
+
- `title`* — slide title
|
|
73
|
+
- `lead` — intro paragraph above bullets
|
|
74
|
+
- `text` — body paragraph
|
|
75
|
+
- `items` — bullet list (supports nested lists)
|
|
76
|
+
- `ordered_items` — numbered list (supports nested lists)
|
|
77
|
+
- `reference` / `reference_link` — single source
|
|
78
|
+
- `references` — multiple sources (array of `{name, link}`)
|
|
79
|
+
|
|
80
|
+
#### `center` — Centered statement or image
|
|
81
|
+
- `title` — optional heading
|
|
82
|
+
- `text` — centered statement
|
|
83
|
+
- `image` — centered image path
|
|
84
|
+
- `image_alt` — alt text
|
|
85
|
+
- `reference` / `reference_link` / `references`
|
|
86
|
+
|
|
87
|
+
#### `hero` — Full-bleed background
|
|
88
|
+
- `title`* — big headline
|
|
89
|
+
- `text` — supporting text
|
|
90
|
+
- `image` — background image path
|
|
91
|
+
- `color` — hex fallback color (e.g., `"#1a1a2e"`)
|
|
92
|
+
- `box_title` — overlay box heading
|
|
93
|
+
- `box_text` — overlay box content
|
|
94
|
+
- `box_items` — overlay box bullet list
|
|
95
|
+
- `hide_footer` — hide footer on this slide
|
|
96
|
+
|
|
97
|
+
#### `metrics` — Key statistics
|
|
98
|
+
- `title`* — slide title
|
|
99
|
+
- `subtitle` — description
|
|
100
|
+
- `metrics`* — array of metric objects:
|
|
101
|
+
- `value`* — the number/percentage
|
|
102
|
+
- `label`* — what it measures
|
|
103
|
+
- `context` — small text below label
|
|
104
|
+
- `color` — `mint`, `coral`, `icy`, `amber` (default: mauve)
|
|
105
|
+
- `reference` / `reference_link` / `references`
|
|
106
|
+
|
|
107
|
+
#### `comparison` — Two-column table
|
|
108
|
+
- `title`* — slide title
|
|
109
|
+
- `left_header` — left column header
|
|
110
|
+
- `right_header` — right column header
|
|
111
|
+
- `rows`* — array of row objects:
|
|
112
|
+
- `left` — left cell content
|
|
113
|
+
- `right` — right cell content
|
|
114
|
+
- `left_icon` — show icon in left cell (true/false)
|
|
115
|
+
- `right_icon` — show icon in right cell (true/false)
|
|
116
|
+
- `highlight` — `left`, `right` (default), or `none`
|
|
117
|
+
- `reference` / `reference_link` / `references`
|
|
118
|
+
|
|
119
|
+
#### `columns` — Side-by-side content
|
|
120
|
+
- `title`* — slide title
|
|
121
|
+
- `left_title` / `left_text` / `left_items`
|
|
122
|
+
- `right_title` / `right_text` / `right_items`
|
|
123
|
+
- `reference` / `reference_link` / `references`
|
|
124
|
+
|
|
125
|
+
#### `quote` — Testimonial
|
|
126
|
+
- `quote`* — the quotation text
|
|
127
|
+
- `author` — who said it
|
|
128
|
+
- `author_title` — their role/title
|
|
129
|
+
- `reference` / `reference_link` / `references`
|
|
130
|
+
|
|
131
|
+
#### `image-overlay` — Image with text box
|
|
132
|
+
- `image`* — full background image path
|
|
133
|
+
- `title` — overlay heading
|
|
134
|
+
- `text` — overlay paragraph
|
|
135
|
+
- `items` — overlay bullet list
|
|
136
|
+
- `position` — text box position
|
|
137
|
+
- `reference` / `reference_link` / `references`
|
|
138
|
+
|
|
139
|
+
#### `code` — Code snippet
|
|
140
|
+
- `title`* — slide title
|
|
141
|
+
- `code`* — the code block (use `|` for multiline)
|
|
142
|
+
- `language` — syntax highlighting language
|
|
143
|
+
- `caption` — description below code
|
|
144
|
+
- `reference` / `reference_link` / `references`
|
|
145
|
+
|
|
146
|
+
#### `timeline` — Horizontal events
|
|
147
|
+
- `title`* — slide title
|
|
148
|
+
- `events`* — array of event objects:
|
|
149
|
+
- `date` — when it happened
|
|
150
|
+
- `title`* — event name
|
|
151
|
+
- `text` — event description
|
|
152
|
+
- `reference` / `reference_link` / `references`
|
|
153
|
+
|
|
154
|
+
#### `funnel` — Progressive narrowing
|
|
155
|
+
- `title`* — slide title
|
|
156
|
+
- `stages`* — array of stage objects:
|
|
157
|
+
- `label`* — stage name
|
|
158
|
+
- `text` — stage description
|
|
159
|
+
- `reference` / `reference_link` / `references`
|
|
160
|
+
|
|
161
|
+
#### `split` — 1/3 image + 2/3 content
|
|
162
|
+
- `title`* — slide title
|
|
163
|
+
- `text` — body text
|
|
164
|
+
- `items` — bullet list (supports nested lists)
|
|
165
|
+
- `image`* — image path
|
|
166
|
+
- `image_alt` — alt text
|
|
167
|
+
- `reference` / `reference_link` / `references`
|
|
168
|
+
|
|
169
|
+
#### `split-wide` — 1/3 content + 2/3 image
|
|
170
|
+
- `title`* — slide title
|
|
171
|
+
- `text` — body text
|
|
172
|
+
- `items` — bullet list (supports nested lists)
|
|
173
|
+
- `image`* — image path
|
|
174
|
+
- `image_alt` — alt text
|
|
175
|
+
- `reference` / `reference_link` / `references`
|
|
176
|
+
|
|
177
|
+
#### `table` — Data table
|
|
178
|
+
- `title`* — slide title
|
|
179
|
+
- `columns`* — array of column header strings
|
|
180
|
+
- `rows`* — array of row arrays (each row is an array of cell strings)
|
|
181
|
+
- `reference` / `reference_link` / `references`
|
|
182
|
+
|
|
183
|
+
#### `agenda` — Clickable table of contents
|
|
184
|
+
- `title` — slide title (default: "Agenda")
|
|
185
|
+
- `sections`* — array of section objects:
|
|
186
|
+
- `title`* — section name
|
|
187
|
+
- `slide`* — slide number to link to
|
|
188
|
+
- `reference` / `reference_link` / `references`
|
|
189
|
+
|
|
190
|
+
## Common Patterns
|
|
191
|
+
|
|
192
|
+
### Nested lists
|
|
193
|
+
Supported in `content`, `split`, and `split-wide` templates:
|
|
194
|
+
```yaml
|
|
195
|
+
items:
|
|
196
|
+
- "Regular item"
|
|
197
|
+
- "Parent with children:":
|
|
198
|
+
- "Child 1"
|
|
199
|
+
- "Child 2"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### References
|
|
203
|
+
```yaml
|
|
204
|
+
# Single source
|
|
205
|
+
reference: "McKinsey Digital 2024"
|
|
206
|
+
reference_link: "https://..."
|
|
207
|
+
|
|
208
|
+
# Multiple sources
|
|
209
|
+
references:
|
|
210
|
+
- name: "Source 1"
|
|
211
|
+
link: "https://..."
|
|
212
|
+
- name: "Source 2"
|
|
213
|
+
link: "https://..."
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Speaker notes
|
|
217
|
+
```yaml
|
|
218
|
+
notes: |
|
|
219
|
+
Key talking points for this slide.
|
|
220
|
+
Press S in Reveal.js to open speaker view.
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Section comments
|
|
224
|
+
Use YAML comments to number and label slides:
|
|
225
|
+
```yaml
|
|
226
|
+
slides:
|
|
227
|
+
# Slide 1: Opening
|
|
228
|
+
- template: title
|
|
229
|
+
title: My Talk
|
|
230
|
+
|
|
231
|
+
# Slide 2: Agenda
|
|
232
|
+
- template: agenda
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Image lightbox
|
|
236
|
+
Images in `center`, `split`, and `split-wide` templates automatically get lightbox functionality via GLightbox. Click any image to view fullscreen.
|
|
237
|
+
|
|
238
|
+
## Design System
|
|
239
|
+
|
|
240
|
+
- **Dimensions:** 960x540 (16:9) — Reveal.js scales to fit viewport
|
|
241
|
+
- **Typography:** Source Serif 4 for headings, Plus Jakarta Sans for body
|
|
242
|
+
- **Colors:** Primary is mauve (purple), semantic colors: `mint`, `coral`, `amber`, `icy`
|
|
243
|
+
- **Spacing:** 40px slide padding
|
|
244
|
+
|
|
245
|
+
## Rules for Claude
|
|
246
|
+
|
|
247
|
+
### DO
|
|
248
|
+
- Read the template docblock before generating YAML for unfamiliar templates
|
|
249
|
+
- Run `pnpm run validate` after any YAML changes
|
|
250
|
+
- Use the map syntax for nested lists (parent string ends with colon, quoted)
|
|
251
|
+
- Quote YAML strings containing colons, HTML, or special characters
|
|
252
|
+
- Keep bullet points to 3-5 per slide
|
|
253
|
+
- Use `section` templates to organize long presentations
|
|
254
|
+
|
|
255
|
+
### DON'T
|
|
256
|
+
- Add `layout: presentation` to frontmatter
|
|
257
|
+
- Use raw HTML in YAML values
|
|
258
|
+
- Create deeply nested lists (max 2 levels)
|
|
259
|
+
- Use template names not in the valid list
|
|
260
|
+
- Reference images that don't exist without marking them as TODOs
|
|
261
|
+
|
|
262
|
+
## Slash Commands
|
|
263
|
+
|
|
264
|
+
| Command | Description |
|
|
265
|
+
|---------|-------------|
|
|
266
|
+
| `/new-presentation` | Create a complete presentation from scratch |
|
|
267
|
+
| `/add-slide` | Add a slide to an existing presentation |
|
|
268
|
+
| `/validate` | Validate YAML and fix issues |
|
|
269
|
+
| `/research-topic` | Research a topic for data-driven slides |
|
|
270
|
+
| `/create-outline` | Create a structured outline before generating YAML |
|
|
271
|
+
| `/refine-slides` | Review and improve an existing presentation |
|
|
272
|
+
|
|
273
|
+
## Build Commands
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
pnpm run dev # Development server with hot reload
|
|
277
|
+
pnpm run build # Production build
|
|
278
|
+
pnpm run validate # Validate presentation YAML
|
|
279
|
+
pnpm run renumber # Renumber slide comments
|
|
280
|
+
pnpm run pdf # Export to PDF
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**Requirements:** Node.js 22 (see `.nvmrc`), install deps with `pnpm install`
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
A presentation project built with [LazySlides](https://github.com/chris-tietz/lazyslides).
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm install
|
|
9
|
+
pnpm run dev
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## Commands
|
|
13
|
+
|
|
14
|
+
| Command | Description |
|
|
15
|
+
|---------|-------------|
|
|
16
|
+
| `pnpm run dev` | Development server with hot reload |
|
|
17
|
+
| `pnpm run build` | Production build |
|
|
18
|
+
| `pnpm run validate` | Validate presentation YAML |
|
|
19
|
+
| `pnpm run renumber` | Renumber slide comments |
|
|
20
|
+
| `pnpm run pdf` | Export to PDF |
|
|
21
|
+
|
|
22
|
+
## Creating Presentations
|
|
23
|
+
|
|
24
|
+
Add a new folder under `presentations/` with an `index.md` file containing your slides in YAML format. See `presentations/_template/index.md` for a starter template.
|
|
25
|
+
|
|
26
|
+
## Customization
|
|
27
|
+
|
|
28
|
+
- **Themes** — Drop CSS files into `themes/` to override the default theme
|
|
29
|
+
- **Styles** — Add custom CSS to `src/styles.css`
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Presentation Title
|
|
3
|
+
description: Brief description
|
|
4
|
+
transition: slide
|
|
5
|
+
|
|
6
|
+
slides:
|
|
7
|
+
- template: title
|
|
8
|
+
title: Presentation Title
|
|
9
|
+
subtitle: Subtitle or tagline
|
|
10
|
+
author: Your Name
|
|
11
|
+
|
|
12
|
+
- template: section
|
|
13
|
+
title: Section One
|
|
14
|
+
|
|
15
|
+
- template: content
|
|
16
|
+
title: Content Slide
|
|
17
|
+
text: Introduction to your topic
|
|
18
|
+
items:
|
|
19
|
+
- First key point
|
|
20
|
+
- Second key point
|
|
21
|
+
- Third key point
|
|
22
|
+
|
|
23
|
+
- template: center
|
|
24
|
+
title: Big Statement
|
|
25
|
+
text: A powerful quote or impactful statement.
|
|
26
|
+
|
|
27
|
+
- template: comparison
|
|
28
|
+
title: Before vs After
|
|
29
|
+
rows:
|
|
30
|
+
- left: Old way
|
|
31
|
+
right: New way
|
|
32
|
+
- left: "✗ Problem"
|
|
33
|
+
right: "✓ Solution"
|
|
34
|
+
|
|
35
|
+
- template: hero
|
|
36
|
+
title: Hero Title
|
|
37
|
+
image: images/hero.jpg
|
|
38
|
+
text: Overlay text on full-bleed image
|
|
39
|
+
|
|
40
|
+
- template: image-overlay
|
|
41
|
+
title: Context
|
|
42
|
+
image: images/diagram.png
|
|
43
|
+
position: bottom-left
|
|
44
|
+
text: Explanation of what the image shows.
|
|
45
|
+
|
|
46
|
+
- template: section
|
|
47
|
+
title: Section Two
|
|
48
|
+
|
|
49
|
+
- template: metrics
|
|
50
|
+
title: Key Metrics
|
|
51
|
+
metrics:
|
|
52
|
+
- value: "42%"
|
|
53
|
+
label: Metric One
|
|
54
|
+
- value: "3x"
|
|
55
|
+
label: Metric Two
|
|
56
|
+
|
|
57
|
+
- template: columns
|
|
58
|
+
title: Two Columns
|
|
59
|
+
left_title: Left Side
|
|
60
|
+
left_text: Content for the left column.
|
|
61
|
+
right_title: Right Side
|
|
62
|
+
right_text: Content for the right column.
|
|
63
|
+
|
|
64
|
+
- template: code
|
|
65
|
+
title: Code Example
|
|
66
|
+
language: python
|
|
67
|
+
code: |
|
|
68
|
+
def hello(name):
|
|
69
|
+
return f"Hello, {name}!"
|
|
70
|
+
|
|
71
|
+
- template: quote
|
|
72
|
+
quote: Your favorite quote here.
|
|
73
|
+
author: Attribution
|
|
74
|
+
|
|
75
|
+
- template: title
|
|
76
|
+
title: Thank You!
|
|
77
|
+
subtitle: Questions?
|
|
78
|
+
---
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Presentation Title
|
|
2
|
+
|
|
3
|
+
> This is the target format for LazySlides outlines. Any AI tool — Claude Code,
|
|
4
|
+
> Claude Desktop, ChatGPT, or others — can convert research notes, meeting
|
|
5
|
+
> transcripts, or any source material into this format. Save the completed
|
|
6
|
+
> outline as `outline.md` in your presentation folder, then use it to generate
|
|
7
|
+
> the final slide deck.
|
|
8
|
+
|
|
9
|
+
## Metadata
|
|
10
|
+
- **Audience:** [description]
|
|
11
|
+
- **Purpose:** [goal]
|
|
12
|
+
- **Speaker:** [name and background]
|
|
13
|
+
- **Duration:** [estimated time]
|
|
14
|
+
|
|
15
|
+
## Key Messages
|
|
16
|
+
1. [message 1]
|
|
17
|
+
2. [message 2]
|
|
18
|
+
3. [message 3]
|
|
19
|
+
|
|
20
|
+
## Outline
|
|
21
|
+
|
|
22
|
+
### Section 1: [Section Name]
|
|
23
|
+
Purpose: [why this section exists]
|
|
24
|
+
|
|
25
|
+
#### Slide 1.1: [Slide Title]
|
|
26
|
+
- **Key point:** [main takeaway]
|
|
27
|
+
- **Template:** [template name]
|
|
28
|
+
- **Notes:** [what to say]
|
|
29
|
+
- **Visual idea:** [optional visualization concept]
|
|
30
|
+
|
|
31
|
+
### Section 2: [Section Name]
|
|
32
|
+
...
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Add Slide
|
|
2
|
+
|
|
3
|
+
You are helping the user add a new slide to an existing presentation.
|
|
4
|
+
|
|
5
|
+
## Step 1: Identify Target Presentation
|
|
6
|
+
|
|
7
|
+
List the presentation folders in `presentations/` (excluding `_template`). Ask the user which presentation they want to add a slide to. If there's only one, confirm it.
|
|
8
|
+
|
|
9
|
+
## Step 2: Show Current Slides
|
|
10
|
+
|
|
11
|
+
Read the presentation's `index.md` and display a numbered list of existing slides:
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
1. [title] Opening Slide
|
|
15
|
+
2. [content] Key Points
|
|
16
|
+
3. [metrics] Results
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Ask the user where to insert the new slide (after which slide number, or at the end).
|
|
20
|
+
|
|
21
|
+
## Step 3: Choose Template
|
|
22
|
+
|
|
23
|
+
Ask the user which template to use. Show this reference:
|
|
24
|
+
|
|
25
|
+
| Template | Best For |
|
|
26
|
+
|----------|----------|
|
|
27
|
+
| `title` | Opening slide with logo, title, subtitle, author |
|
|
28
|
+
| `section` | Section divider for organizing chapters |
|
|
29
|
+
| `content` | Standard bullet points with optional lead text |
|
|
30
|
+
| `center` | Single statement or image, centered |
|
|
31
|
+
| `hero` | Full-bleed background image with text overlay |
|
|
32
|
+
| `metrics` | 2-4 key statistics with colored cards |
|
|
33
|
+
| `comparison` | Before/after two-column table |
|
|
34
|
+
| `columns` | Side-by-side content columns |
|
|
35
|
+
| `split` | 1/3 image + 2/3 content |
|
|
36
|
+
| `split-wide` | 1/3 content + 2/3 image |
|
|
37
|
+
| `quote` | Testimonial with attribution |
|
|
38
|
+
| `timeline` | Horizontal timeline with events |
|
|
39
|
+
| `funnel` | Progressive narrowing funnel |
|
|
40
|
+
| `table` | Data table with headers |
|
|
41
|
+
| `code` | Code snippet with syntax highlighting |
|
|
42
|
+
| `image-overlay` | Full image with positioned text box |
|
|
43
|
+
| `agenda` | Clickable table of contents |
|
|
44
|
+
|
|
45
|
+
## Step 4: Gather Content
|
|
46
|
+
|
|
47
|
+
Based on the chosen template, read the docblock in `_includes/slides/{template}.njk` for the exact field reference. Ask the user for:
|
|
48
|
+
- Required fields (marked with * in the docblock)
|
|
49
|
+
- Optional fields they want to include
|
|
50
|
+
- Speaker notes (optional)
|
|
51
|
+
|
|
52
|
+
## Step 5: Generate and Insert
|
|
53
|
+
|
|
54
|
+
1. Generate the YAML for the new slide
|
|
55
|
+
2. Insert it at the correct position in the `slides:` array
|
|
56
|
+
3. Run `pnpm run renumber` to update slide comments
|
|
57
|
+
4. Run `pnpm run validate` to verify
|
|
58
|
+
|
|
59
|
+
## Step 6: Preview
|
|
60
|
+
|
|
61
|
+
Suggest the user run `pnpm run dev` to preview the result.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Create Outline
|
|
2
|
+
|
|
3
|
+
You are helping the user create a structured outline before generating presentation YAML.
|
|
4
|
+
|
|
5
|
+
## Step 1: Gather Context
|
|
6
|
+
|
|
7
|
+
Ask the user for:
|
|
8
|
+
1. **Topic** — what is the presentation about?
|
|
9
|
+
2. **Audience** — who will watch this?
|
|
10
|
+
3. **Purpose** — inform, persuade, teach, pitch, report?
|
|
11
|
+
4. **Duration** — how long is the talk? (affects slide count: ~1 slide per minute)
|
|
12
|
+
5. **Speaker** — name and relevant background
|
|
13
|
+
|
|
14
|
+
## Step 2: Check for Existing Research
|
|
15
|
+
|
|
16
|
+
Look for a `research.md` file in the target presentation folder. If it exists, use the findings to inform the outline. If not, proceed with the user's input.
|
|
17
|
+
|
|
18
|
+
## Step 3: Draft Section Structure
|
|
19
|
+
|
|
20
|
+
Based on the purpose, propose a structure:
|
|
21
|
+
|
|
22
|
+
**Pitch:** Problem → Solution → Evidence → Differentiation → Ask
|
|
23
|
+
**Teaching:** Context → Concepts → Examples → Practice → Summary
|
|
24
|
+
**Report:** Overview → Findings → Analysis → Recommendations → Next Steps
|
|
25
|
+
**Persuasion:** Status Quo → Problem → Vision → Proof → Call to Action
|
|
26
|
+
|
|
27
|
+
Present the proposed sections and iterate with the user.
|
|
28
|
+
|
|
29
|
+
## Step 4: Detail Each Slide
|
|
30
|
+
|
|
31
|
+
For each slide in the outline, specify:
|
|
32
|
+
- **Title** — clear, concise slide title
|
|
33
|
+
- **Template** — which LazySlides template to use
|
|
34
|
+
- **Key point** — the one takeaway from this slide
|
|
35
|
+
- **Content sketch** — bullet points, data, or narrative
|
|
36
|
+
- **Notes sketch** — what the speaker should say
|
|
37
|
+
|
|
38
|
+
Read the docblock in `_includes/slides/{template}.njk` to verify field names.
|
|
39
|
+
|
|
40
|
+
## Step 5: Save Outline
|
|
41
|
+
|
|
42
|
+
Save as `outline.md` in the presentation folder:
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
# [Presentation Title]
|
|
46
|
+
|
|
47
|
+
## Metadata
|
|
48
|
+
- **Audience:** [description]
|
|
49
|
+
- **Purpose:** [goal]
|
|
50
|
+
- **Speaker:** [name and background]
|
|
51
|
+
- **Duration:** [estimated time]
|
|
52
|
+
- **Slide count:** [estimated number]
|
|
53
|
+
|
|
54
|
+
## Key Messages
|
|
55
|
+
1. [message 1]
|
|
56
|
+
2. [message 2]
|
|
57
|
+
3. [message 3]
|
|
58
|
+
|
|
59
|
+
## Outline
|
|
60
|
+
|
|
61
|
+
### Section 1: [Name]
|
|
62
|
+
|
|
63
|
+
#### Slide 1.1: [Title]
|
|
64
|
+
- **Template:** [template]
|
|
65
|
+
- **Key point:** [takeaway]
|
|
66
|
+
- **Content:** [sketch]
|
|
67
|
+
- **Notes:** [speaker notes]
|
|
68
|
+
|
|
69
|
+
#### Slide 1.2: [Title]
|
|
70
|
+
...
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Step 6: Next Steps
|
|
74
|
+
|
|
75
|
+
Offer to generate the full presentation YAML from this outline — this follows the same flow as `/new-presentation` Step 5 onward.
|