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.
Files changed (106) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/_includes/slides/_nested-list.njk +26 -0
  4. package/_includes/slides/agenda.njk +17 -0
  5. package/_includes/slides/center.njk +16 -0
  6. package/_includes/slides/code.njk +15 -0
  7. package/_includes/slides/columns.njk +35 -0
  8. package/_includes/slides/comparison.njk +29 -0
  9. package/_includes/slides/content.njk +22 -0
  10. package/_includes/slides/footer.njk +58 -0
  11. package/_includes/slides/funnel.njk +30 -0
  12. package/_includes/slides/hero.njk +27 -0
  13. package/_includes/slides/image-overlay.njk +21 -0
  14. package/_includes/slides/metrics.njk +27 -0
  15. package/_includes/slides/quote.njk +17 -0
  16. package/_includes/slides/section.njk +6 -0
  17. package/_includes/slides/split-wide.njk +30 -0
  18. package/_includes/slides/split.njk +30 -0
  19. package/_includes/slides/table.njk +31 -0
  20. package/_includes/slides/timeline.njk +30 -0
  21. package/_includes/slides/title.njk +17 -0
  22. package/_layouts/default.njk +20 -0
  23. package/_layouts/presentation.njk +240 -0
  24. package/assets/css/themes/default.css +62 -0
  25. package/assets/css/vendor/glightbox.min.css +1 -0
  26. package/assets/js/vendor/glightbox.min.js +1 -0
  27. package/assets/reveal.js/LICENSE +19 -0
  28. package/assets/reveal.js/dist/reset.css +30 -0
  29. package/assets/reveal.js/dist/reveal.css +8 -0
  30. package/assets/reveal.js/dist/reveal.esm.js +9 -0
  31. package/assets/reveal.js/dist/reveal.esm.js.map +1 -0
  32. package/assets/reveal.js/dist/reveal.js +9 -0
  33. package/assets/reveal.js/dist/reveal.js.map +1 -0
  34. package/assets/reveal.js/dist/theme/beige.css +366 -0
  35. package/assets/reveal.js/dist/theme/black-contrast.css +362 -0
  36. package/assets/reveal.js/dist/theme/black.css +359 -0
  37. package/assets/reveal.js/dist/theme/blood.css +392 -0
  38. package/assets/reveal.js/dist/theme/dracula.css +385 -0
  39. package/assets/reveal.js/dist/theme/fonts/league-gothic/LICENSE +2 -0
  40. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.css +10 -0
  41. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.eot +0 -0
  42. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.ttf +0 -0
  43. package/assets/reveal.js/dist/theme/fonts/league-gothic/league-gothic.woff +0 -0
  44. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/LICENSE +45 -0
  45. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.eot +0 -0
  46. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.ttf +0 -0
  47. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-italic.woff +0 -0
  48. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.eot +0 -0
  49. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.ttf +0 -0
  50. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-regular.woff +0 -0
  51. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.eot +0 -0
  52. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.ttf +0 -0
  53. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibold.woff +0 -0
  54. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.eot +0 -0
  55. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.ttf +0 -0
  56. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro-semibolditalic.woff +0 -0
  57. package/assets/reveal.js/dist/theme/fonts/source-sans-pro/source-sans-pro.css +39 -0
  58. package/assets/reveal.js/dist/theme/league.css +368 -0
  59. package/assets/reveal.js/dist/theme/moon.css +362 -0
  60. package/assets/reveal.js/dist/theme/night.css +360 -0
  61. package/assets/reveal.js/dist/theme/serif.css +363 -0
  62. package/assets/reveal.js/dist/theme/simple.css +362 -0
  63. package/assets/reveal.js/dist/theme/sky.css +370 -0
  64. package/assets/reveal.js/dist/theme/solarized.css +363 -0
  65. package/assets/reveal.js/dist/theme/white-contrast.css +362 -0
  66. package/assets/reveal.js/dist/theme/white.css +359 -0
  67. package/assets/reveal.js/dist/theme/white_contrast_compact_verbatim_headers.css +360 -0
  68. package/assets/reveal.js/plugin/highlight/highlight.esm.js +5 -0
  69. package/assets/reveal.js/plugin/highlight/highlight.js +5 -0
  70. package/assets/reveal.js/plugin/highlight/monokai.css +71 -0
  71. package/assets/reveal.js/plugin/highlight/plugin.js +439 -0
  72. package/assets/reveal.js/plugin/highlight/zenburn.css +80 -0
  73. package/assets/reveal.js/plugin/markdown/markdown.esm.js +7 -0
  74. package/assets/reveal.js/plugin/markdown/markdown.js +7 -0
  75. package/assets/reveal.js/plugin/markdown/plugin.js +491 -0
  76. package/assets/reveal.js/plugin/notes/notes.esm.js +1 -0
  77. package/assets/reveal.js/plugin/notes/notes.js +1 -0
  78. package/assets/reveal.js/plugin/notes/plugin.js +267 -0
  79. package/assets/reveal.js/plugin/notes/speaker-view.html +898 -0
  80. package/cli.js +80 -0
  81. package/data/site.json +3 -0
  82. package/index.js +153 -0
  83. package/lib/export-pdf.js +137 -0
  84. package/lib/init.js +154 -0
  85. package/lib/renumber.js +181 -0
  86. package/lib/validate.js +196 -0
  87. package/package.json +76 -0
  88. package/scaffold/CLAUDE.md +283 -0
  89. package/scaffold/README.md +29 -0
  90. package/scaffold/_template/index.md +78 -0
  91. package/scaffold/_template/outline.md +32 -0
  92. package/scaffold/claude-commands/add-slide.md +61 -0
  93. package/scaffold/claude-commands/create-outline.md +75 -0
  94. package/scaffold/claude-commands/new-presentation.md +218 -0
  95. package/scaffold/claude-commands/refine-slides.md +62 -0
  96. package/scaffold/claude-commands/research-topic.md +66 -0
  97. package/scaffold/claude-commands/validate.md +47 -0
  98. package/scaffold/claude-settings.json +7 -0
  99. package/scaffold/eleventy.config.js +11 -0
  100. package/scaffold/gitignore +5 -0
  101. package/scaffold/my-first-deck/index.md +26 -0
  102. package/scaffold/nvmrc +1 -0
  103. package/scaffold/package.json.tmpl +25 -0
  104. package/scaffold/presentations.11tydata.js +11 -0
  105. package/scaffold/styles.css +3 -0
  106. 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.