@strategicnerds/slide-nerds 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/dist/cli/commands/analytics.d.ts +6 -0
- package/dist/cli/commands/analytics.d.ts.map +1 -0
- package/dist/cli/commands/analytics.js +44 -0
- package/dist/cli/commands/analytics.js.map +1 -0
- package/dist/cli/commands/create.d.ts +4 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +87 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/export.d.ts +6 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +109 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +12 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/template-path.d.ts +4 -0
- package/dist/cli/template-path.d.ts.map +1 -0
- package/dist/cli/template-path.js +13 -0
- package/dist/cli/template-path.js.map +1 -0
- package/dist/runtime/export-api.d.ts +15 -0
- package/dist/runtime/export-api.d.ts.map +1 -0
- package/dist/runtime/export-api.js +21 -0
- package/dist/runtime/export-api.js.map +1 -0
- package/dist/runtime/index.d.ts +12 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +8 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/light-table.d.ts +8 -0
- package/dist/runtime/light-table.d.ts.map +1 -0
- package/dist/runtime/light-table.js +104 -0
- package/dist/runtime/light-table.js.map +1 -0
- package/dist/runtime/presenter-view.d.ts +7 -0
- package/dist/runtime/presenter-view.d.ts.map +1 -0
- package/dist/runtime/presenter-view.js +62 -0
- package/dist/runtime/presenter-view.js.map +1 -0
- package/dist/runtime/slide-context.d.ts +16 -0
- package/dist/runtime/slide-context.d.ts.map +1 -0
- package/dist/runtime/slide-context.js +18 -0
- package/dist/runtime/slide-context.js.map +1 -0
- package/dist/runtime/slide-controls.d.ts +3 -0
- package/dist/runtime/slide-controls.d.ts.map +1 -0
- package/dist/runtime/slide-controls.js +177 -0
- package/dist/runtime/slide-controls.js.map +1 -0
- package/dist/runtime/slide-dom.d.ts +17 -0
- package/dist/runtime/slide-dom.d.ts.map +1 -0
- package/dist/runtime/slide-dom.js +89 -0
- package/dist/runtime/slide-dom.js.map +1 -0
- package/dist/runtime/slide-runtime.d.ts +7 -0
- package/dist/runtime/slide-runtime.d.ts.map +1 -0
- package/dist/runtime/slide-runtime.js +125 -0
- package/dist/runtime/slide-runtime.js.map +1 -0
- package/dist/runtime/slide-shape.d.ts +21 -0
- package/dist/runtime/slide-shape.d.ts.map +1 -0
- package/dist/runtime/slide-shape.js +115 -0
- package/dist/runtime/slide-shape.js.map +1 -0
- package/dist/runtime/types.d.ts +150 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +38 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/use-presenter-mode.d.ts +14 -0
- package/dist/runtime/use-presenter-mode.d.ts.map +1 -0
- package/dist/runtime/use-presenter-mode.js +52 -0
- package/dist/runtime/use-presenter-mode.js.map +1 -0
- package/dist/runtime/use-slide-navigation.d.ts +13 -0
- package/dist/runtime/use-slide-navigation.d.ts.map +1 -0
- package/dist/runtime/use-slide-navigation.js +230 -0
- package/dist/runtime/use-slide-navigation.js.map +1 -0
- package/package.json +64 -0
- package/skills/accessibility/SKILL.md +236 -0
- package/skills/advanced-layouts/SKILL.md +429 -0
- package/skills/analytics/SKILL.md +97 -0
- package/skills/animation/SKILL.md +364 -0
- package/skills/brand/SKILL.md +200 -0
- package/skills/data-visualization/SKILL.md +533 -0
- package/skills/deck-templates/SKILL.md +93 -0
- package/skills/diagrams/SKILL.md +395 -0
- package/skills/export/SKILL.md +119 -0
- package/skills/interactive/SKILL.md +292 -0
- package/skills/layout/SKILL.md +178 -0
- package/skills/narrative-frameworks/SKILL.md +250 -0
- package/skills/react-component-embeds/SKILL.md +73 -0
- package/skills/slide-types/SKILL.md +384 -0
- package/skills/slidenerds-runtime/SKILL.md +163 -0
- package/skills/speaker-notes/SKILL.md +128 -0
- package/skills/strategic-frameworks/SKILL.md +392 -0
- package/skills/visual-design/SKILL.md +373 -0
- package/templates/analytics/custom.tsx.tmpl +20 -0
- package/templates/analytics/ga4.tsx.tmpl +15 -0
- package/templates/analytics/gtm.tsx.tmpl +9 -0
- package/templates/analytics/plausible.tsx.tmpl +10 -0
- package/templates/analytics/posthog.tsx.tmpl +14 -0
- package/templates/next-app/CLAUDE.md.tmpl +574 -0
- package/templates/next-app/README.md.tmpl +35 -0
- package/templates/next-app/app/globals.css.tmpl +274 -0
- package/templates/next-app/app/layout.tsx.tmpl +31 -0
- package/templates/next-app/app/page.tsx.tmpl +38 -0
- package/templates/next-app/brand.config.ts.tmpl +32 -0
- package/templates/next-app/package.json.tmpl +25 -0
- package/templates/next-app/postcss.config.mjs.tmpl +8 -0
- package/templates/next-app/tsconfig.json.tmpl +21 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: diagrams
|
|
3
|
+
description: Diagram patterns for slidenerds slides using Mermaid, custom SVG, and HTML/CSS
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Diagrams skill
|
|
7
|
+
|
|
8
|
+
Use this skill when a slide needs a diagram, flowchart, org chart, journey map, or any structural visualization. Every pattern here produces a slide-ready result using Mermaid syntax or HTML/CSS.
|
|
9
|
+
|
|
10
|
+
## Rendering Mermaid diagrams
|
|
11
|
+
|
|
12
|
+
Mermaid diagrams render client-side. Wrap the chart string in a component that calls `mermaid.render()`. Install `mermaid` as a dependency. Use a ref-based approach with safe DOM manipulation rather than raw HTML insertion. Sanitize Mermaid SVG output with DOMPurify before inserting into the DOM.
|
|
13
|
+
|
|
14
|
+
```tsx
|
|
15
|
+
'use client'
|
|
16
|
+
|
|
17
|
+
import { useEffect, useRef, useId } from 'react'
|
|
18
|
+
import mermaid from 'mermaid'
|
|
19
|
+
import DOMPurify from 'dompurify'
|
|
20
|
+
|
|
21
|
+
type MermaidDiagramProps = {
|
|
22
|
+
chart: string
|
|
23
|
+
className?: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
mermaid.initialize({
|
|
27
|
+
startOnLoad: false,
|
|
28
|
+
theme: 'dark',
|
|
29
|
+
themeVariables: {
|
|
30
|
+
primaryColor: 'var(--color-surface)',
|
|
31
|
+
primaryTextColor: 'var(--color-text)',
|
|
32
|
+
primaryBorderColor: 'var(--color-accent)',
|
|
33
|
+
lineColor: 'var(--color-accent)',
|
|
34
|
+
secondaryColor: 'var(--color-surface-elevated)',
|
|
35
|
+
tertiaryColor: 'var(--color-primary)',
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
export const MermaidDiagram: React.FC<MermaidDiagramProps> = ({ chart, className }) => {
|
|
40
|
+
const containerRef = useRef<HTMLDivElement>(null)
|
|
41
|
+
const id = useId().replace(/:/g, '_')
|
|
42
|
+
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
const render = async () => {
|
|
45
|
+
if (!containerRef.current) return
|
|
46
|
+
const { svg } = await mermaid.render(`mermaid-${id}`, chart)
|
|
47
|
+
const sanitized = DOMPurify.sanitize(svg, { USE_PROFILES: { svg: true } })
|
|
48
|
+
containerRef.current.replaceChildren()
|
|
49
|
+
const template = document.createElement('template')
|
|
50
|
+
template.innerHTML = sanitized
|
|
51
|
+
if (template.content.firstChild) {
|
|
52
|
+
containerRef.current.appendChild(template.content.firstChild)
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
render()
|
|
56
|
+
}, [chart, id])
|
|
57
|
+
|
|
58
|
+
return <div ref={containerRef} className={className} />
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Flowchart (process flow)
|
|
63
|
+
|
|
64
|
+
Use for: approval workflows, decision logic, system processes, user flows.
|
|
65
|
+
|
|
66
|
+
### Linear process (left to right)
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
graph LR
|
|
70
|
+
A[Request submitted] --> B[Manager review]
|
|
71
|
+
B --> C{Approved?}
|
|
72
|
+
C -->|Yes| D[Process payment]
|
|
73
|
+
C -->|No| E[Return to requester]
|
|
74
|
+
D --> F[Complete]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
<section data-slide="">
|
|
79
|
+
<div className="flex flex-col justify-center w-full min-h-screen"
|
|
80
|
+
style={{ padding: '4rem 6rem' }}>
|
|
81
|
+
<p className="section-label mb-3">Process</p>
|
|
82
|
+
<h2 className="text-[2.5rem] font-bold mb-12">Approval workflow</h2>
|
|
83
|
+
<div data-step="" className="step-fade">
|
|
84
|
+
<MermaidDiagram chart={`graph LR
|
|
85
|
+
A[Request] --> B[Review]
|
|
86
|
+
B --> C{Approved?}
|
|
87
|
+
C -->|Yes| D[Process]
|
|
88
|
+
C -->|No| E[Return]
|
|
89
|
+
D --> F[Complete]
|
|
90
|
+
`} />
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</section>
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Vertical decision tree
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
graph TD
|
|
100
|
+
A[Start] --> B{Condition 1}
|
|
101
|
+
B -->|Yes| C[Action A]
|
|
102
|
+
B -->|No| D{Condition 2}
|
|
103
|
+
D -->|Yes| E[Action B]
|
|
104
|
+
D -->|No| F[Action C]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Flowchart styling rules for slides
|
|
108
|
+
|
|
109
|
+
- Max 8-10 nodes per diagram. More than that and the text becomes unreadable at projection distance.
|
|
110
|
+
- Use `graph LR` for processes with 4-6 sequential steps.
|
|
111
|
+
- Use `graph TD` for decision trees with branching logic.
|
|
112
|
+
- Decision nodes use `{}` diamond shape. Process nodes use `[]` rectangles.
|
|
113
|
+
- Keep node labels under 3 words.
|
|
114
|
+
|
|
115
|
+
## Org chart
|
|
116
|
+
|
|
117
|
+
Use for: company structure, reporting lines, team hierarchy.
|
|
118
|
+
|
|
119
|
+
Mermaid does not have a native org chart type. Use a top-down graph with specific styling.
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
graph TD
|
|
123
|
+
CEO[CEO<br/>Alex Rivera] --> CTO[CTO<br/>Jordan Park]
|
|
124
|
+
CEO --> CRO[CRO<br/>Sam Chen]
|
|
125
|
+
CEO --> CFO[CFO<br/>Dana Lee]
|
|
126
|
+
CTO --> ENG1[Engineering<br/>Team A]
|
|
127
|
+
CTO --> ENG2[Engineering<br/>Team B]
|
|
128
|
+
CRO --> SALES[Sales]
|
|
129
|
+
CRO --> CS[Customer Success]
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### HTML/CSS org chart (when Mermaid styling is insufficient)
|
|
133
|
+
|
|
134
|
+
For polished org charts, build with HTML/CSS:
|
|
135
|
+
|
|
136
|
+
```tsx
|
|
137
|
+
<section data-slide="">
|
|
138
|
+
<div className="flex flex-col items-center justify-center w-full min-h-screen"
|
|
139
|
+
style={{ padding: '4rem 6rem' }}>
|
|
140
|
+
<h2 className="text-[2.5rem] font-bold mb-12">Organization</h2>
|
|
141
|
+
<div className="flex flex-col items-center gap-8">
|
|
142
|
+
{/* Level 1 */}
|
|
143
|
+
<div className="card-surface px-6 py-3 text-center">
|
|
144
|
+
<p className="font-semibold">Alex Rivera</p>
|
|
145
|
+
<p className="text-xs" style={{ color: 'var(--color-text-tertiary)' }}>CEO</p>
|
|
146
|
+
</div>
|
|
147
|
+
{/* Connector */}
|
|
148
|
+
<div className="w-px h-6" style={{ background: 'var(--color-border)' }} />
|
|
149
|
+
{/* Level 2 */}
|
|
150
|
+
<div className="flex gap-16">
|
|
151
|
+
<div className="flex flex-col items-center gap-2">
|
|
152
|
+
<div className="card-surface px-5 py-2.5 text-center">
|
|
153
|
+
<p className="font-semibold text-sm">Jordan Park</p>
|
|
154
|
+
<p className="text-xs" style={{ color: 'var(--color-text-tertiary)' }}>CTO</p>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
<div className="flex flex-col items-center gap-2">
|
|
158
|
+
<div className="card-surface px-5 py-2.5 text-center">
|
|
159
|
+
<p className="font-semibold text-sm">Sam Chen</p>
|
|
160
|
+
<p className="text-xs" style={{ color: 'var(--color-text-tertiary)' }}>CRO</p>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
<div className="flex flex-col items-center gap-2">
|
|
164
|
+
<div className="card-surface px-5 py-2.5 text-center">
|
|
165
|
+
<p className="font-semibold text-sm">Dana Lee</p>
|
|
166
|
+
<p className="text-xs" style={{ color: 'var(--color-text-tertiary)' }}>CFO</p>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
</div>
|
|
172
|
+
</section>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Sequence diagram
|
|
176
|
+
|
|
177
|
+
Use for: API flows, system interactions, user-service communication, authentication flows.
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
sequenceDiagram
|
|
181
|
+
participant U as User
|
|
182
|
+
participant A as API Gateway
|
|
183
|
+
participant S as Auth Service
|
|
184
|
+
participant D as Database
|
|
185
|
+
|
|
186
|
+
U->>A: POST /login
|
|
187
|
+
A->>S: Validate credentials
|
|
188
|
+
S->>D: Query user
|
|
189
|
+
D-->>S: User record
|
|
190
|
+
S-->>A: JWT token
|
|
191
|
+
A-->>U: 200 OK + token
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Sequence diagram rules for slides
|
|
195
|
+
|
|
196
|
+
- Max 4-5 participants (columns). More creates unreadable horizontal sprawl.
|
|
197
|
+
- Max 8-10 messages (rows). More becomes a spec document, not a slide.
|
|
198
|
+
- Use abbreviations for participant names.
|
|
199
|
+
- Group related messages with `rect` blocks for visual clarity.
|
|
200
|
+
|
|
201
|
+
## Journey map
|
|
202
|
+
|
|
203
|
+
Use for: customer experience, user onboarding, support workflow.
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
journey
|
|
207
|
+
title Customer onboarding journey
|
|
208
|
+
section Sign up
|
|
209
|
+
Visit website: 5: Customer
|
|
210
|
+
Create account: 4: Customer
|
|
211
|
+
Verify email: 3: Customer
|
|
212
|
+
section First use
|
|
213
|
+
Complete tutorial: 4: Customer
|
|
214
|
+
Import data: 2: Customer
|
|
215
|
+
Invite team: 3: Customer
|
|
216
|
+
section Activation
|
|
217
|
+
First dashboard: 5: Customer
|
|
218
|
+
Share report: 4: Customer
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The numbers (1-5) represent satisfaction/sentiment. Higher is better.
|
|
222
|
+
|
|
223
|
+
### Journey map rules
|
|
224
|
+
|
|
225
|
+
- 3-4 sections maximum.
|
|
226
|
+
- 3-4 steps per section.
|
|
227
|
+
- The sentiment score drives the visual. Low scores (1-2) should be called out as pain points.
|
|
228
|
+
|
|
229
|
+
## State diagram
|
|
230
|
+
|
|
231
|
+
Use for: workflow states, order lifecycle, subscription status, feature flags.
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
stateDiagram-v2
|
|
235
|
+
[*] --> Draft
|
|
236
|
+
Draft --> Review : Submit
|
|
237
|
+
Review --> Approved : Approve
|
|
238
|
+
Review --> Draft : Reject
|
|
239
|
+
Approved --> Published : Publish
|
|
240
|
+
Published --> Archived : Archive
|
|
241
|
+
Archived --> [*]
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Mind map
|
|
245
|
+
|
|
246
|
+
Use for: brainstorming output, feature mapping, topic exploration.
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
mindmap
|
|
250
|
+
root((Product Strategy))
|
|
251
|
+
Growth
|
|
252
|
+
PLG funnel
|
|
253
|
+
Sales-led
|
|
254
|
+
Partnerships
|
|
255
|
+
Retention
|
|
256
|
+
Onboarding
|
|
257
|
+
Feature adoption
|
|
258
|
+
Support quality
|
|
259
|
+
Expansion
|
|
260
|
+
Upsell
|
|
261
|
+
Cross-sell
|
|
262
|
+
Enterprise tier
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Mind map rules
|
|
266
|
+
|
|
267
|
+
- One root node.
|
|
268
|
+
- 3-4 primary branches.
|
|
269
|
+
- 2-4 leaves per branch.
|
|
270
|
+
- More than 20 total nodes makes the diagram unreadable on a slide.
|
|
271
|
+
|
|
272
|
+
## Architecture diagram (C4 model)
|
|
273
|
+
|
|
274
|
+
Use for: system context, container view, component view.
|
|
275
|
+
|
|
276
|
+
Mermaid supports C4 diagrams:
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
C4Context
|
|
280
|
+
title System Context Diagram
|
|
281
|
+
|
|
282
|
+
Person(user, "User", "A customer of the system")
|
|
283
|
+
System(app, "Acme Platform", "The main application")
|
|
284
|
+
System_Ext(payment, "Stripe", "Payment processing")
|
|
285
|
+
System_Ext(email, "SendGrid", "Email delivery")
|
|
286
|
+
|
|
287
|
+
Rel(user, app, "Uses", "HTTPS")
|
|
288
|
+
Rel(app, payment, "Processes payments", "API")
|
|
289
|
+
Rel(app, email, "Sends emails", "API")
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Architecture diagram rules
|
|
293
|
+
|
|
294
|
+
- Context level: max 5-7 boxes. Show the system boundary clearly.
|
|
295
|
+
- Container level: max 8-10 boxes. Show databases, APIs, frontends.
|
|
296
|
+
- Component level: rarely appropriate for slides. Use for technical deep-dives only.
|
|
297
|
+
|
|
298
|
+
## Cycle / circular diagram
|
|
299
|
+
|
|
300
|
+
Use for: recurring processes, feedback loops, product lifecycle, flywheel.
|
|
301
|
+
|
|
302
|
+
Mermaid does not support circular layouts. Build with CSS:
|
|
303
|
+
|
|
304
|
+
```tsx
|
|
305
|
+
<section data-slide="">
|
|
306
|
+
<div className="flex items-center justify-center w-full min-h-screen"
|
|
307
|
+
style={{ padding: '4rem 6rem' }}>
|
|
308
|
+
<div className="relative" style={{ width: 400, height: 400 }}>
|
|
309
|
+
{['Acquire', 'Activate', 'Retain', 'Expand'].map((label, i) => {
|
|
310
|
+
const angle = (Math.PI * 2 * i) / 4 - Math.PI / 2
|
|
311
|
+
const x = 200 + 150 * Math.cos(angle) - 50
|
|
312
|
+
const y = 200 + 150 * Math.sin(angle) - 25
|
|
313
|
+
return (
|
|
314
|
+
<div key={label} data-step="" className="step-scale-in absolute"
|
|
315
|
+
style={{ left: x, top: y, width: 100 }}>
|
|
316
|
+
<SlideShape shape="circle" size={80}
|
|
317
|
+
fill="var(--color-surface)" stroke="var(--color-accent)" strokeWidth={2}>
|
|
318
|
+
<p className="text-xs font-semibold">{label}</p>
|
|
319
|
+
</SlideShape>
|
|
320
|
+
</div>
|
|
321
|
+
)
|
|
322
|
+
})}
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
</section>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
## Venn diagram
|
|
329
|
+
|
|
330
|
+
Use for: overlap analysis, market positioning, skill intersection.
|
|
331
|
+
|
|
332
|
+
Build with custom SVG (overlapping circles with blend mode):
|
|
333
|
+
|
|
334
|
+
```tsx
|
|
335
|
+
<svg width={500} height={350} viewBox="0 0 500 350">
|
|
336
|
+
<circle cx={190} cy={175} r={130} fill="var(--color-accent)" opacity={0.2}
|
|
337
|
+
stroke="var(--color-accent)" strokeWidth={1.5} />
|
|
338
|
+
<circle cx={310} cy={175} r={130} fill="var(--color-surface)" opacity={0.3}
|
|
339
|
+
stroke="var(--color-border)" strokeWidth={1.5} />
|
|
340
|
+
<text x={140} y={175} fill="var(--color-text)" fontSize={14}
|
|
341
|
+
textAnchor="middle" dominantBaseline="middle">Engineering</text>
|
|
342
|
+
<text x={360} y={175} fill="var(--color-text)" fontSize={14}
|
|
343
|
+
textAnchor="middle" dominantBaseline="middle">Design</text>
|
|
344
|
+
<text x={250} y={175} fill="var(--color-accent)" fontSize={12}
|
|
345
|
+
textAnchor="middle" dominantBaseline="middle" fontWeight={600}>Product</text>
|
|
346
|
+
</svg>
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## Swim lane diagram
|
|
350
|
+
|
|
351
|
+
Use for: cross-functional processes, showing ownership per team.
|
|
352
|
+
|
|
353
|
+
Build with CSS grid. Each row represents a team/department. Steps flow left to right within each lane.
|
|
354
|
+
|
|
355
|
+
```tsx
|
|
356
|
+
<div className="grid grid-cols-[120px_1fr] gap-0 card-surface overflow-hidden">
|
|
357
|
+
<div className="p-3 font-semibold text-xs text-center"
|
|
358
|
+
style={{ background: 'var(--color-surface-elevated)',
|
|
359
|
+
borderBottom: '1px solid var(--color-border)' }}>
|
|
360
|
+
Customer
|
|
361
|
+
</div>
|
|
362
|
+
<div className="p-3 flex gap-4 items-center"
|
|
363
|
+
style={{ borderBottom: '1px solid var(--color-border)' }}>
|
|
364
|
+
<SlideShape shape="rounded-square" width={100} height={40}
|
|
365
|
+
fill="var(--color-accent-dim)" stroke="var(--color-accent)" strokeWidth={1}>
|
|
366
|
+
<p className="text-[10px]">Submit request</p>
|
|
367
|
+
</SlideShape>
|
|
368
|
+
</div>
|
|
369
|
+
{/* Additional lanes for Support, Engineering, etc. */}
|
|
370
|
+
</div>
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
## Diagram selection guide
|
|
374
|
+
|
|
375
|
+
| Need | Diagram type | Tool |
|
|
376
|
+
|---|---|---|
|
|
377
|
+
| Sequential process | Flowchart (LR) | Mermaid |
|
|
378
|
+
| Decision logic | Flowchart (TD) with diamonds | Mermaid |
|
|
379
|
+
| Company structure | Org chart | HTML/CSS or Mermaid graph TD |
|
|
380
|
+
| API / system interaction | Sequence diagram | Mermaid |
|
|
381
|
+
| User experience over time | Journey map | Mermaid |
|
|
382
|
+
| Lifecycle states | State diagram | Mermaid |
|
|
383
|
+
| Brainstorming / topic tree | Mind map | Mermaid |
|
|
384
|
+
| System architecture | C4 context/container | Mermaid |
|
|
385
|
+
| Recurring process | Cycle diagram | Custom SVG/CSS |
|
|
386
|
+
| Overlap / intersection | Venn diagram | Custom SVG |
|
|
387
|
+
| Cross-team process | Swim lane | CSS grid |
|
|
388
|
+
|
|
389
|
+
## Diagram quality rules
|
|
390
|
+
|
|
391
|
+
- Maximum complexity per slide: 10 nodes or 10 messages. Beyond that, split into multiple slides.
|
|
392
|
+
- Every node label must be readable at 18pt equivalent.
|
|
393
|
+
- Use the accent color for the primary flow path. Use muted colors for secondary paths.
|
|
394
|
+
- Reveal complex diagrams in steps using `data-step` to build understanding progressively.
|
|
395
|
+
- Always title the diagram slide with an action title that states the insight, not just the topic. "Data flows through three services before reaching the user" not "System architecture."
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: export
|
|
3
|
+
description: How to export slidenerds decks to PDF, PPTX, and Google Slides
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Export skill
|
|
7
|
+
|
|
8
|
+
How to run exports and what to expect from each format.
|
|
9
|
+
|
|
10
|
+
## Running exports
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# PDF (best fidelity)
|
|
14
|
+
npx slidenerds export --pdf
|
|
15
|
+
|
|
16
|
+
# PowerPoint
|
|
17
|
+
npx slidenerds export --pptx
|
|
18
|
+
|
|
19
|
+
# Google Slides
|
|
20
|
+
npx slidenerds export --gslides
|
|
21
|
+
|
|
22
|
+
# Custom dev server URL
|
|
23
|
+
npx slidenerds export --pdf --url http://localhost:3001
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Export runs locally. The dev server must be running (`npm run dev`). The CLI loads the page in a headless browser and captures each slide.
|
|
27
|
+
|
|
28
|
+
## PDF export
|
|
29
|
+
|
|
30
|
+
PDF produces the highest-fidelity output. What works and what doesn't:
|
|
31
|
+
|
|
32
|
+
### Works well
|
|
33
|
+
|
|
34
|
+
- All Tailwind CSS (flexbox, grid, colors, typography, spacing)
|
|
35
|
+
- SVG graphics
|
|
36
|
+
- Recharts charts (they render as SVG)
|
|
37
|
+
- Images (JPEG, PNG, WebP)
|
|
38
|
+
- CSS gradients
|
|
39
|
+
- Border radius, box shadows
|
|
40
|
+
- Custom fonts (if loaded before the snapshot)
|
|
41
|
+
|
|
42
|
+
### Breaks or degrades
|
|
43
|
+
|
|
44
|
+
- `backdrop-filter` (blur, brightness) -- not supported in print rendering
|
|
45
|
+
- Complex `mix-blend-mode` -- inconsistent across PDF renderers
|
|
46
|
+
- CSS `animation` with `infinite` -- creates a moving target; the snapshot captures a random frame
|
|
47
|
+
- `position: fixed` elements -- they may repeat on every page or disappear
|
|
48
|
+
- Video embeds -- captured as a blank rectangle
|
|
49
|
+
- `overflow: scroll` -- the scrollable area is captured at its current scroll position only
|
|
50
|
+
|
|
51
|
+
### Design for clean PDF export
|
|
52
|
+
|
|
53
|
+
- Use solid backgrounds instead of backdrop-filter blur
|
|
54
|
+
- Avoid infinite animations; use transitions that settle to a final state
|
|
55
|
+
- Test with `npx slidenerds export --pdf` early, not just before the deadline
|
|
56
|
+
|
|
57
|
+
## PowerPoint export
|
|
58
|
+
|
|
59
|
+
PPTX conversion is more lossy than PDF. Expectations:
|
|
60
|
+
|
|
61
|
+
### What survives
|
|
62
|
+
|
|
63
|
+
- Text content and basic formatting (bold, italic, font size)
|
|
64
|
+
- Simple layouts (centered, left-aligned)
|
|
65
|
+
- Images
|
|
66
|
+
- Basic colors
|
|
67
|
+
|
|
68
|
+
### What doesn't survive
|
|
69
|
+
|
|
70
|
+
- Complex CSS layouts (grid, flexbox alignment may shift)
|
|
71
|
+
- CSS transitions and animations (static snapshot only)
|
|
72
|
+
- Custom fonts (PowerPoint substitutes with system fonts unless embedded)
|
|
73
|
+
- SVG graphics (rasterized, may lose quality)
|
|
74
|
+
- Tailwind utility classes (converted to inline styles, some may be lost)
|
|
75
|
+
|
|
76
|
+
### Tips for PPTX-friendly slides
|
|
77
|
+
|
|
78
|
+
- Prefer simple, centered layouts
|
|
79
|
+
- Use standard fonts that exist on most systems
|
|
80
|
+
- Avoid complex grid arrangements
|
|
81
|
+
- Test with PPTX export if the audience needs to edit in PowerPoint
|
|
82
|
+
|
|
83
|
+
## Google Slides export
|
|
84
|
+
|
|
85
|
+
The most lossy of the three. Google Slides has the most limited rendering engine.
|
|
86
|
+
|
|
87
|
+
### Expectations
|
|
88
|
+
|
|
89
|
+
- Text and basic formatting transfer
|
|
90
|
+
- Images transfer
|
|
91
|
+
- Complex layouts are flattened or rearranged
|
|
92
|
+
- Custom fonts replaced with Google Fonts alternatives
|
|
93
|
+
- No animation of any kind
|
|
94
|
+
- Tables may lose formatting
|
|
95
|
+
|
|
96
|
+
### When to use Google Slides export
|
|
97
|
+
|
|
98
|
+
- When the audience needs to collaborate on the deck in Google Workspace
|
|
99
|
+
- When the deck will be edited by non-technical team members
|
|
100
|
+
- Accept that the exported deck is a starting point, not a final product
|
|
101
|
+
|
|
102
|
+
## The runtime export API
|
|
103
|
+
|
|
104
|
+
The runtime exposes `window.slidenerds.export()` for programmatic export:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
window.slidenerds.export({ format: 'pdf' })
|
|
108
|
+
window.slidenerds.export({ format: 'pptx' })
|
|
109
|
+
window.slidenerds.export({ format: 'gslides' })
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The CLI calls this API under the hood via Puppeteer. You don't need to call it directly unless building custom export tooling.
|
|
113
|
+
|
|
114
|
+
## General export advice
|
|
115
|
+
|
|
116
|
+
1. **Design for the most restrictive format you need.** If you need Google Slides output, keep layouts simple from the start.
|
|
117
|
+
2. **Test exports early.** Don't wait until the day of the presentation to discover that your fancy backdrop-filter doesn't render in PDF.
|
|
118
|
+
3. **PDF is almost always good enough.** Most presentation scenarios accept PDF. Only export to PPTX or Google Slides when the audience specifically needs to edit the deck.
|
|
119
|
+
4. **Progressive reveals become static.** All `data-step` elements are visible in exported formats. Design slides that still make sense when all content is visible at once.
|