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,218 @@
1
+ # Create New Presentation
2
+
3
+ You are helping the user create a new presentation in this Eleventy + Reveal.js presentation system.
4
+
5
+ ## Step 1: Gather Basic Information
6
+
7
+ Ask the user for:
8
+ 1. **Presentation name** (required) - will be used for folder name (kebab-case)
9
+ 2. **Presentation date** (optional) - format: MMYYYY (e.g., 032026 for March 2026)
10
+
11
+ Create the folder at `presentations/{name}-{date}/` or `presentations/{name}/` if no date provided.
12
+
13
+ ## Step 2: Check for Outline
14
+
15
+ Ask the user if they have an `outline.md` file to supply.
16
+
17
+ ### If NO outline exists:
18
+
19
+ Help them create one by gathering:
20
+
21
+ 1. **Audience** - Who will be watching this presentation?
22
+ 2. **Purpose** - What's the goal? (inform, persuade, teach, pitch, etc.)
23
+ 3. **Speaker background** - What gives the speaker credibility on this topic?
24
+ 4. **Key points** - What are the 3-5 main messages they want to convey?
25
+ 5. **Desired structure** - Do they have a mental model? (problem/solution, journey, comparison, etc.)
26
+ 6. **Time constraint** - How long is the presentation? (affects slide count)
27
+
28
+ Use this information to draft an `outline.md` in the presentation folder with this structure:
29
+
30
+ ```markdown
31
+ # [Presentation Title]
32
+
33
+ ## Metadata
34
+ - **Audience:** [description]
35
+ - **Purpose:** [goal]
36
+ - **Speaker:** [name and background]
37
+ - **Duration:** [estimated time]
38
+
39
+ ## Key Messages
40
+ 1. [message 1]
41
+ 2. [message 2]
42
+ 3. [message 3]
43
+
44
+ ## Outline
45
+
46
+ ### Section 1: [Section Name]
47
+ Purpose: [why this section exists]
48
+
49
+ #### Slide 1.1: [Slide Title]
50
+ - **Key point:** [main takeaway]
51
+ - **Notes:** [what to say]
52
+ - **Visual idea:** [optional visualization concept]
53
+
54
+ #### Slide 1.2: [Slide Title]
55
+ ...
56
+
57
+ ### Section 2: [Section Name]
58
+ ...
59
+ ```
60
+
61
+ ### If outline IS supplied:
62
+
63
+ Review it and confirm:
64
+ - Does it have clear sections?
65
+ - Does each slide have a key point?
66
+ - Is there enough detail to select templates?
67
+
68
+ If not, iterate with the user to fill in gaps.
69
+
70
+ ## Step 3: Map Slides to Templates
71
+
72
+ Review each slide in the outline and propose a template. The available templates are in `_includes/slides/`:
73
+
74
+ | Template | Best For |
75
+ |----------|----------|
76
+ | `title` | Opening slide with logo, title, subtitle, author |
77
+ | `section` | Section dividers within the presentation |
78
+ | `agenda` | Table of contents with clickable section links |
79
+ | `content` | Standard bullet points with optional lead text |
80
+ | `center` | Single impactful statement, centered |
81
+ | `hero` | Full-bleed background image with big text |
82
+ | `metrics` | 2-4 key statistics with colored cards |
83
+ | `comparison` | Before/after or two-column comparison table |
84
+ | `columns` | Side-by-side content columns |
85
+ | `split` | 1/3 image + 2/3 content layout |
86
+ | `split-wide` | 1/3 content + 2/3 image layout |
87
+ | `quote` | Testimonial or quotation with attribution |
88
+ | `timeline` | Horizontal timeline with events |
89
+ | `funnel` | Sales/conversion funnel visualization |
90
+ | `table` | Data table with headers |
91
+ | `code` | Code snippet with syntax highlighting |
92
+ | `image-overlay` | Image with text overlay |
93
+
94
+ Read each template file's docblock comment for exact YAML structure and options.
95
+
96
+ Present your template recommendations to the user in a table:
97
+
98
+ ```
99
+ | Slide | Title | Proposed Template | Rationale |
100
+ |-------|-------|-------------------|-----------|
101
+ | 1.1 | ... | title | Opening |
102
+ ```
103
+
104
+ Iterate until the user approves. Then update `outline.md` with a `template:` field for each slide.
105
+
106
+ ## Step 4: Research & Enrichment (Optional)
107
+
108
+ If the user wants, help enrich the outline with:
109
+ - Statistics and citations
110
+ - Industry data
111
+ - Competitor analysis
112
+ - Supporting examples
113
+
114
+ Add references to the outline as you find them.
115
+
116
+ ## Step 5: Create index.md
117
+
118
+ Once the outline is finalized, create `presentations/{folder}/index.md` with the full YAML frontmatter.
119
+
120
+ ### Required frontmatter structure:
121
+
122
+ ```yaml
123
+ ---
124
+ title: [Presentation Title]
125
+ description: [Subtitle or tagline]
126
+ author: [Speaker Name]
127
+ theme: default
128
+ transition: slide
129
+ progress: true
130
+ slideNumber: true
131
+ show_footer: true
132
+ slides:
133
+ # Slide 1: [Title]
134
+ - template: [template_name]
135
+ title: [slide title]
136
+ # ... template-specific fields from docblock
137
+ notes: |
138
+ [speaker notes from outline]
139
+ ---
140
+ ```
141
+
142
+ Note: Do NOT include `layout: presentation` — this is set automatically by the directory data file.
143
+
144
+ ### For each slide:
145
+
146
+ 1. Read the template docblock in `_includes/slides/{template}.njk`
147
+ 2. Map outline content to the template's required/optional fields
148
+ 3. Add speaker notes from the outline
149
+ 4. Add references if provided
150
+
151
+ ### Image handling:
152
+
153
+ - Create an `images/` folder in the presentation directory
154
+ - If visuals are specified in outline, note them in the YAML
155
+ - If NO visuals are specified but the template needs an image (hero, split), create a placeholder:
156
+ - Create placeholder file: `images/placeholder-{slide-number}.jpg`
157
+ - Add a comment in the YAML: `# TODO: Replace placeholder image`
158
+ - Note in the slide's notes what kind of image would work
159
+
160
+ ## Step 6: Validate
161
+
162
+ After creating `index.md`, run the validation:
163
+
164
+ ```bash
165
+ pnpm run validate
166
+ ```
167
+
168
+ Fix any errors before finishing.
169
+
170
+ ## Step 7: Preview
171
+
172
+ Suggest the user run:
173
+
174
+ ```bash
175
+ pnpm run dev
176
+ ```
177
+
178
+ Then navigate to the presentation URL to preview.
179
+
180
+ ---
181
+
182
+ ## Template Quick Reference
183
+
184
+ When creating slides, always read the full docblock in the template file. Here are the key patterns:
185
+
186
+ ### Nested lists (content, split, split-wide templates):
187
+ ```yaml
188
+ items:
189
+ - "Regular item"
190
+ - "Parent with children:":
191
+ - "Child 1"
192
+ - "Child 2"
193
+ ```
194
+
195
+ ### References:
196
+ ```yaml
197
+ reference: "Source Name 2025"
198
+ reference_link: "https://..."
199
+ # OR for multiple:
200
+ references:
201
+ - name: "Source 1"
202
+ link: "https://..."
203
+ - name: "Source 2"
204
+ link: "https://..."
205
+ ```
206
+
207
+ ### Metrics colors:
208
+ `mint`, `coral`, `icy`, `amber` (or omit for default mauve)
209
+
210
+ ### Comparison highlight:
211
+ `highlight: left` | `highlight: right` (default) | `highlight: none`
212
+
213
+ ### Hero backgrounds:
214
+ ```yaml
215
+ image: images/background.jpg
216
+ # OR
217
+ color: "#1a1a2e"
218
+ ```
@@ -0,0 +1,62 @@
1
+ # Refine Slides
2
+
3
+ You are helping the user improve an existing presentation.
4
+
5
+ ## Step 1: Load and Validate
6
+
7
+ 1. Ask which presentation to refine (list `presentations/` folders)
8
+ 2. Read the presentation's `index.md`
9
+ 3. Run validation first:
10
+ ```bash
11
+ pnpm run validate
12
+ ```
13
+ 4. Fix any errors before proceeding
14
+
15
+ ## Step 2: Structural Analysis
16
+
17
+ Analyze and report:
18
+ - **Slide count** — is it appropriate for the estimated duration?
19
+ - **Template diversity** — are templates varied or repetitive? (e.g., 10 `content` slides in a row)
20
+ - **Visual rhythm** — is there a good mix of text-heavy and visual slides?
21
+ - **Section structure** — are `section` dividers used to organize the flow?
22
+ - **Notes coverage** — which slides are missing speaker notes?
23
+
24
+ ## Step 3: Content Review
25
+
26
+ Check each slide for:
27
+ - **Title quality** — clear, concise, action-oriented?
28
+ - **Bullet density** — too many items per slide? (aim for 3-5)
29
+ - **Nested list depth** — more than 2 levels deep is hard to read
30
+ - **Quote length** — quotes should be impactful, not paragraphs
31
+ - **Image paths** — do all referenced images exist?
32
+ - **References** — are sources properly attributed?
33
+
34
+ ## Step 4: Prioritized Suggestions
35
+
36
+ Present findings as a prioritized list:
37
+
38
+ ### High Priority
39
+ - Issues that affect readability or correctness
40
+
41
+ ### Medium Priority
42
+ - Template swaps that would improve visual variety
43
+ - Slides that could be split or merged
44
+
45
+ ### Low Priority
46
+ - Minor wording improvements
47
+ - Optional enhancements (add speaker notes, add references)
48
+
49
+ ## Step 5: Apply Changes
50
+
51
+ After the user approves specific suggestions:
52
+ 1. Apply the changes to `index.md`
53
+ 2. Run `pnpm run renumber` to update slide comments
54
+ 3. Run `pnpm run validate` to verify
55
+
56
+ ## Step 6: Summary
57
+
58
+ Show a before/after comparison:
59
+ - Slide count (before → after)
60
+ - Template distribution
61
+ - Issues resolved
62
+ - Remaining suggestions (if any)
@@ -0,0 +1,66 @@
1
+ # Research Topic
2
+
3
+ You are helping the user research a topic to build a data-driven presentation.
4
+
5
+ ## Step 1: Gather Research Parameters
6
+
7
+ Ask the user for:
8
+ 1. **Topic** — what is the presentation about?
9
+ 2. **Angle** — what perspective or thesis? (e.g., "why companies should adopt X")
10
+ 3. **Audience** — who will watch this? (affects depth and jargon level)
11
+ 4. **Depth** — quick overview (5-10 data points) or deep dive (20+)?
12
+
13
+ ## Step 2: Research
14
+
15
+ Search the web for:
16
+ - **Statistics** — recent numbers, percentages, growth rates
17
+ - **Quotes** — expert opinions, notable statements
18
+ - **Comparisons** — before/after, competitor analysis, benchmarks
19
+ - **Timelines** — key events, milestones, evolution
20
+ - **Case studies** — real-world examples with outcomes
21
+
22
+ Prioritize recent sources (last 2 years). Always capture the source name, URL, and date.
23
+
24
+ ## Step 3: Organize Findings
25
+
26
+ Structure findings into categories:
27
+
28
+ ```markdown
29
+ ## Key Statistics
30
+ - [stat] — Source (Year)
31
+
32
+ ## Notable Quotes
33
+ - "[quote]" — Author, Title (Source)
34
+
35
+ ## Comparisons
36
+ - [comparison point] — Source
37
+
38
+ ## Timeline / Milestones
39
+ - [date]: [event] — Source
40
+
41
+ ## Case Studies
42
+ - [company/example]: [outcome] — Source
43
+ ```
44
+
45
+ ## Step 4: Save Research
46
+
47
+ Save the organized findings as `research.md` in the target presentation folder:
48
+ `presentations/{name}/research.md`
49
+
50
+ ## Step 5: Suggest Template Mapping
51
+
52
+ For each finding, suggest which LazySlides template would best present it:
53
+
54
+ | Finding | Suggested Template | Rationale |
55
+ |---------|-------------------|-----------|
56
+ | Key statistic | `metrics` | Numeric data with colored cards |
57
+ | Quote | `quote` | Attribution and styling |
58
+ | Comparison | `comparison` | Side-by-side table |
59
+ | Timeline | `timeline` | Chronological events |
60
+ | Case study | `split` or `content` | Narrative with supporting image |
61
+
62
+ ## Step 6: Next Steps
63
+
64
+ Offer the user:
65
+ - `/create-outline` to structure a full presentation from this research
66
+ - `/add-slide` to add individual data points to an existing deck
@@ -0,0 +1,47 @@
1
+ # Validate Presentations
2
+
3
+ You are helping the user validate their presentation YAML and fix any issues.
4
+
5
+ ## Step 1: Run Validation
6
+
7
+ ```bash
8
+ pnpm run validate
9
+ ```
10
+
11
+ ## Step 2: Interpret Results
12
+
13
+ Review the output and categorize issues:
14
+
15
+ ### Errors (must fix)
16
+ - **No valid YAML front matter** — missing `---` fences or malformed YAML
17
+ - **Missing required field** — `title` or `slides` missing from frontmatter
18
+ - **Missing template field** — a slide is missing the `template:` key
19
+ - **Wrong comparison format** — comparison slides must use `rows:` with `left`/`right` pairs
20
+
21
+ ### Warnings (should fix)
22
+ - **Unknown template** — template name doesn't match one of the 17 valid types
23
+ - **Missing title** — slide has no title (except `quote` which doesn't need one)
24
+ - **Missing image** — image path in YAML doesn't exist on disk
25
+ - **Hidden slide** — possible slide definition commented out
26
+ - **Slide count mismatch** — `expected_slides` doesn't match actual count
27
+
28
+ ## Step 3: Propose Fixes
29
+
30
+ For each error:
31
+ 1. Explain what's wrong in plain language
32
+ 2. Show the problematic YAML
33
+ 3. Propose the corrected YAML
34
+
35
+ For each warning:
36
+ 1. Explain the risk
37
+ 2. Suggest a fix or explain why it's safe to ignore
38
+
39
+ ## Step 4: Apply Fixes
40
+
41
+ After the user approves, apply the fixes and re-run validation:
42
+
43
+ ```bash
44
+ pnpm run validate
45
+ ```
46
+
47
+ Repeat until all errors are resolved.
@@ -0,0 +1,7 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(pnpm run:*)"
5
+ ]
6
+ }
7
+ }
@@ -0,0 +1,11 @@
1
+ import lazyslides from "lazyslides";
2
+
3
+ export default function(eleventyConfig) {
4
+ eleventyConfig.addPlugin(lazyslides);
5
+
6
+ return {
7
+ dir: { input: ".", layouts: "_layouts", output: "_site" },
8
+ templateFormats: ["md", "njk"],
9
+ markdownTemplateEngine: "njk"
10
+ };
11
+ };
@@ -0,0 +1,5 @@
1
+ node_modules/
2
+ _site/
3
+ .DS_Store
4
+ _pdfs/
5
+ *.log
@@ -0,0 +1,26 @@
1
+ ---
2
+ title: My First Deck
3
+ description: A hello world presentation
4
+ transition: slide
5
+
6
+ slides:
7
+ - template: title
8
+ title: My First Deck
9
+ subtitle: Built with LazySlides
10
+
11
+ - template: content
12
+ title: Getting Started
13
+ lead: Edit this file to build your presentation
14
+ items:
15
+ - Each slide is a YAML object with a template field
16
+ - Choose from 17 templates for different slide types
17
+ - Run pnpm run dev to preview with hot reload
18
+
19
+ - template: center
20
+ title: Start Building!
21
+ text: "Edit presentations/my-first-deck/index.md to add your slides."
22
+
23
+ - template: title
24
+ title: Thank You!
25
+ subtitle: Questions?
26
+ ---
package/scaffold/nvmrc ADDED
@@ -0,0 +1 @@
1
+ 22
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "{{name}}",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "lazyslides validate && concurrently \"pnpm:watch:*\"",
7
+ "watch:css": "tailwindcss -i src/styles.css -o _site/assets/css/styles.css --watch",
8
+ "watch:11ty": "eleventy --serve",
9
+ "build": "lazyslides validate && pnpm run build:css && pnpm run build:11ty",
10
+ "build:css": "tailwindcss -i src/styles.css -o _site/assets/css/styles.css",
11
+ "build:11ty": "eleventy",
12
+ "validate": "lazyslides validate",
13
+ "renumber": "lazyslides renumber",
14
+ "pdf": "lazyslides pdf"
15
+ },
16
+ "dependencies": {
17
+ "lazyslides": "^2.0.0"
18
+ },
19
+ "devDependencies": {
20
+ "@11ty/eleventy": "^3.0.0",
21
+ "@tailwindcss/cli": "^4.0.0",
22
+ "concurrently": "^9.0.0",
23
+ "tailwindcss": "^4.1.18"
24
+ }
25
+ }
@@ -0,0 +1,11 @@
1
+ export default {
2
+ layout: "presentation.njk",
3
+ eleventyComputed: {
4
+ permalink(data) {
5
+ if (data.page.filePathStem.endsWith("/index")) {
6
+ return `/presentations/${data.page.fileSlug}/`;
7
+ }
8
+ return false;
9
+ },
10
+ },
11
+ };
@@ -0,0 +1,3 @@
1
+ @import "lazyslides/styles.css";
2
+ @source "../presentations/**/*.md";
3
+ /* custom styles below */