@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,274 @@
|
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
*,
|
|
4
|
+
*::before,
|
|
5
|
+
*::after {
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
html,
|
|
10
|
+
body {
|
|
11
|
+
margin: 0;
|
|
12
|
+
padding: 0;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
height: 100vh;
|
|
15
|
+
width: 100vw;
|
|
16
|
+
background: var(--color-background);
|
|
17
|
+
color: var(--color-text);
|
|
18
|
+
-webkit-font-smoothing: antialiased;
|
|
19
|
+
-moz-osx-font-smoothing: grayscale;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Slide engine */
|
|
23
|
+
[data-slide] {
|
|
24
|
+
position: absolute;
|
|
25
|
+
inset: 0;
|
|
26
|
+
display: none;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
overflow: hidden;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
[data-slide].active {
|
|
33
|
+
display: flex;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
[data-slide] > * {
|
|
37
|
+
min-height: 100%;
|
|
38
|
+
width: 100%;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[data-notes] {
|
|
42
|
+
display: none;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/* ==========================================================================
|
|
46
|
+
STEP ANIMATIONS (click-to-reveal, controlled by runtime)
|
|
47
|
+
Add these classes to data-step elements. Runtime adds step-visible on click.
|
|
48
|
+
========================================================================== */
|
|
49
|
+
|
|
50
|
+
[data-step], [data-auto-step] {
|
|
51
|
+
visibility: hidden;
|
|
52
|
+
opacity: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[data-step].step-fade, [data-auto-step].step-fade {
|
|
56
|
+
transition:
|
|
57
|
+
opacity 350ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
58
|
+
visibility 350ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
[data-step].step-move-up, [data-auto-step].step-move-up {
|
|
62
|
+
transform: translateY(24px);
|
|
63
|
+
transition:
|
|
64
|
+
opacity 400ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
65
|
+
transform 400ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
66
|
+
visibility 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
[data-step].step-scale-in, [data-auto-step].step-scale-in {
|
|
70
|
+
transform: scale(0.92);
|
|
71
|
+
transition:
|
|
72
|
+
opacity 350ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
73
|
+
transform 350ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
74
|
+
visibility 350ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
[data-step].step-move-left, [data-auto-step].step-move-left {
|
|
78
|
+
transform: translateX(-30px);
|
|
79
|
+
transition:
|
|
80
|
+
opacity 400ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
81
|
+
transform 400ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
82
|
+
visibility 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
[data-step].step-pop, [data-auto-step].step-pop {
|
|
86
|
+
transform: scale(0.6);
|
|
87
|
+
transition:
|
|
88
|
+
opacity 400ms cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
89
|
+
transform 400ms cubic-bezier(0.34, 1.56, 0.64, 1),
|
|
90
|
+
visibility 400ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
[data-step].step-wipe-right, [data-auto-step].step-wipe-right {
|
|
94
|
+
clip-path: inset(0 100% 0 0);
|
|
95
|
+
transition:
|
|
96
|
+
clip-path 500ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
97
|
+
opacity 300ms cubic-bezier(0.4, 0, 0.2, 1),
|
|
98
|
+
visibility 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* Visible state applied by runtime */
|
|
102
|
+
.step-visible {
|
|
103
|
+
visibility: visible !important;
|
|
104
|
+
opacity: 1 !important;
|
|
105
|
+
transform: translateY(0) translateX(0) scale(1) !important;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.step-wipe-right.step-visible {
|
|
109
|
+
clip-path: inset(0 0 0 0) !important;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* Emphasis entrance for big stats */
|
|
113
|
+
.step-emphasis.step-visible {
|
|
114
|
+
animation: emphasis-land 500ms cubic-bezier(0.16, 1, 0.3, 1) 1;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@keyframes emphasis-land {
|
|
118
|
+
0% { transform: scale(0.85); opacity: 0; }
|
|
119
|
+
60% { transform: scale(1.03); }
|
|
120
|
+
100% { transform: scale(1); opacity: 1; }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* ==========================================================================
|
|
124
|
+
AUTO-BUILD ANIMATIONS (trigger on slide load, no click needed)
|
|
125
|
+
Add these classes directly to elements. They animate when the parent
|
|
126
|
+
slide gets the .active class. Use style={{ animationDelay }} for stagger.
|
|
127
|
+
========================================================================== */
|
|
128
|
+
|
|
129
|
+
.auto-fade {
|
|
130
|
+
opacity: 0;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
[data-slide].active .auto-fade {
|
|
134
|
+
animation: auto-fade-in 350ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@keyframes auto-fade-in {
|
|
138
|
+
0% { opacity: 0; }
|
|
139
|
+
100% { opacity: 1; }
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.auto-pop {
|
|
143
|
+
opacity: 0;
|
|
144
|
+
transform: scale(0.6);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
[data-slide].active .auto-pop {
|
|
148
|
+
animation: pop-in 400ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@keyframes pop-in {
|
|
152
|
+
0% { transform: scale(0.6); opacity: 0; }
|
|
153
|
+
70% { transform: scale(1.08); }
|
|
154
|
+
100% { transform: scale(1); opacity: 1; }
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.auto-wipe-right {
|
|
158
|
+
clip-path: inset(0 100% 0 0);
|
|
159
|
+
opacity: 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
[data-slide].active .auto-wipe-right {
|
|
163
|
+
animation: wipe-right-in 500ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
@keyframes wipe-right-in {
|
|
167
|
+
0% { clip-path: inset(0 100% 0 0); opacity: 0; }
|
|
168
|
+
1% { opacity: 1; }
|
|
169
|
+
100% { clip-path: inset(0 0 0 0); opacity: 1; }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.auto-slide-down {
|
|
173
|
+
opacity: 0;
|
|
174
|
+
transform: translateY(-30px);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
[data-slide].active .auto-slide-down {
|
|
178
|
+
animation: slide-down-in 500ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@keyframes slide-down-in {
|
|
182
|
+
0% { transform: translateY(-30px); opacity: 0; }
|
|
183
|
+
100% { transform: translateY(0); opacity: 1; }
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.auto-slide-up {
|
|
187
|
+
opacity: 0;
|
|
188
|
+
transform: translateY(30px);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
[data-slide].active .auto-slide-up {
|
|
192
|
+
animation: slide-up-in 500ms cubic-bezier(0.4, 0, 0.2, 1) forwards;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@keyframes slide-up-in {
|
|
196
|
+
0% { transform: translateY(30px); opacity: 0; }
|
|
197
|
+
100% { transform: translateY(0); opacity: 1; }
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* ==========================================================================
|
|
201
|
+
EXIT ANIMATIONS (trigger when leaving a slide)
|
|
202
|
+
Add these classes to elements. They animate when the parent slide gets
|
|
203
|
+
the .exiting class (added by runtime before slide transition).
|
|
204
|
+
Author-controlled exits use data-exit-step + exit-visible class.
|
|
205
|
+
========================================================================== */
|
|
206
|
+
|
|
207
|
+
[data-exit-step] {
|
|
208
|
+
/* Exit steps are visible by default, hidden when exit-visible is applied */
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.exit-fade {
|
|
212
|
+
transition: opacity 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
[data-slide].exiting .exit-fade {
|
|
216
|
+
opacity: 0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.exit-scale-out {
|
|
220
|
+
transition: opacity 400ms cubic-bezier(0.4, 0, 0.2, 1), transform 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
[data-slide].exiting .exit-scale-out {
|
|
224
|
+
opacity: 0;
|
|
225
|
+
transform: scale(0.92);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.exit-slide-up {
|
|
229
|
+
transition: opacity 400ms cubic-bezier(0.4, 0, 0.2, 1), transform 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
[data-slide].exiting .exit-slide-up {
|
|
233
|
+
opacity: 0;
|
|
234
|
+
transform: translateY(-30px);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.exit-slide-down {
|
|
238
|
+
transition: opacity 400ms cubic-bezier(0.4, 0, 0.2, 1), transform 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
[data-slide].exiting .exit-slide-down {
|
|
242
|
+
opacity: 0;
|
|
243
|
+
transform: translateY(30px);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.exit-wipe-left {
|
|
247
|
+
transition: clip-path 400ms cubic-bezier(0.4, 0, 0.2, 1), opacity 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
[data-slide].exiting .exit-wipe-left {
|
|
251
|
+
clip-path: inset(0 0 0 100%);
|
|
252
|
+
opacity: 0;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/* Author-controlled exit steps: runtime adds exit-visible to trigger */
|
|
256
|
+
[data-exit-step].exit-visible {
|
|
257
|
+
opacity: 0 !important;
|
|
258
|
+
transform: scale(0.95) !important;
|
|
259
|
+
transition: opacity 300ms ease, transform 300ms ease;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/* ==========================================================================
|
|
263
|
+
BRAND LOGO WATERMARK
|
|
264
|
+
Place a small logo in the corner of each slide.
|
|
265
|
+
========================================================================== */
|
|
266
|
+
|
|
267
|
+
.slide-logo {
|
|
268
|
+
position: absolute;
|
|
269
|
+
bottom: 1.75rem;
|
|
270
|
+
right: 2rem;
|
|
271
|
+
z-index: 10;
|
|
272
|
+
opacity: 0.25;
|
|
273
|
+
pointer-events: none;
|
|
274
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Metadata } from 'next'
|
|
2
|
+
import { SlideRuntime } from '@strategicnerds/slide-nerds'
|
|
3
|
+
import brandConfig from '../brand.config'
|
|
4
|
+
import './globals.css'
|
|
5
|
+
|
|
6
|
+
export const metadata: Metadata = {
|
|
7
|
+
title: '{{PROJECT_NAME}}',
|
|
8
|
+
description: 'A presentation built with slidenerds',
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const brandVars = {
|
|
12
|
+
'--color-primary': brandConfig.colors.primary,
|
|
13
|
+
'--color-accent': brandConfig.colors.accent,
|
|
14
|
+
'--color-background': brandConfig.colors.background,
|
|
15
|
+
'--color-surface': brandConfig.colors.surface,
|
|
16
|
+
'--color-text': brandConfig.colors.text,
|
|
17
|
+
'--slide-padding': brandConfig.spacing.slide,
|
|
18
|
+
'--font-heading': brandConfig.fonts.heading,
|
|
19
|
+
'--font-body': brandConfig.fonts.body,
|
|
20
|
+
'--font-mono': brandConfig.fonts.mono,
|
|
21
|
+
} as React.CSSProperties
|
|
22
|
+
|
|
23
|
+
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
24
|
+
return (
|
|
25
|
+
<html lang="en" style={brandVars}>
|
|
26
|
+
<body>
|
|
27
|
+
<SlideRuntime>{children}</SlideRuntime>
|
|
28
|
+
</body>
|
|
29
|
+
</html>
|
|
30
|
+
)
|
|
31
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export default function Home() {
|
|
2
|
+
return (
|
|
3
|
+
<main>
|
|
4
|
+
<section data-slide="">
|
|
5
|
+
<div style={{ padding: 'var(--slide-padding, 4rem)' }}>
|
|
6
|
+
<h1 style={{ fontSize: '3rem', fontWeight: 700 }}>{{PROJECT_NAME}}</h1>
|
|
7
|
+
<p style={{ fontSize: '1.25rem', marginTop: '1rem', opacity: 0.7 }}>
|
|
8
|
+
A presentation built with slidenerds
|
|
9
|
+
</p>
|
|
10
|
+
</div>
|
|
11
|
+
</section>
|
|
12
|
+
|
|
13
|
+
<section data-slide="">
|
|
14
|
+
<div style={{ padding: 'var(--slide-padding, 4rem)' }}>
|
|
15
|
+
<h2 style={{ fontSize: '2rem', fontWeight: 600 }}>Getting started</h2>
|
|
16
|
+
<ul style={{ marginTop: '1rem', fontSize: '1.125rem', lineHeight: 2 }}>
|
|
17
|
+
<li data-step="">Open another terminal and start talking to Claude Code</li>
|
|
18
|
+
<li data-step="">Use arrow keys or space to navigate</li>
|
|
19
|
+
<li data-step="">Press P for presenter mode, L for light table</li>
|
|
20
|
+
</ul>
|
|
21
|
+
<div data-notes="">
|
|
22
|
+
This slide demonstrates the data-step progressive reveal convention.
|
|
23
|
+
Each bullet appears on click or keypress.
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</section>
|
|
27
|
+
|
|
28
|
+
<section data-slide="">
|
|
29
|
+
<div style={{ padding: 'var(--slide-padding, 4rem)', textAlign: 'center' }}>
|
|
30
|
+
<p style={{ fontSize: '4rem', fontWeight: 700 }}>42</p>
|
|
31
|
+
<p style={{ fontSize: '1.25rem', marginTop: '0.5rem', opacity: 0.7 }}>
|
|
32
|
+
Big stat slide example
|
|
33
|
+
</p>
|
|
34
|
+
</div>
|
|
35
|
+
</section>
|
|
36
|
+
</main>
|
|
37
|
+
)
|
|
38
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { BrandConfig } from '@strategicnerds/slide-nerds'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Brand configuration for {{PROJECT_NAME}}.
|
|
5
|
+
*
|
|
6
|
+
* Change these values to match your brand. The layout template reads
|
|
7
|
+
* these and injects them as CSS custom properties on the <html> element,
|
|
8
|
+
* so every slide automatically picks up your palette, fonts, and spacing.
|
|
9
|
+
*/
|
|
10
|
+
export default {
|
|
11
|
+
colors: {
|
|
12
|
+
primary: '#0d0d0f',
|
|
13
|
+
accent: '#f59e0b',
|
|
14
|
+
background: '#111114',
|
|
15
|
+
surface: '#1a1a1f',
|
|
16
|
+
text: '#e8e6e3',
|
|
17
|
+
},
|
|
18
|
+
fonts: {
|
|
19
|
+
heading: 'system-ui, -apple-system, sans-serif',
|
|
20
|
+
body: 'system-ui, -apple-system, sans-serif',
|
|
21
|
+
mono: 'ui-monospace, monospace',
|
|
22
|
+
},
|
|
23
|
+
spacing: {
|
|
24
|
+
slide: '5rem',
|
|
25
|
+
section: '2rem',
|
|
26
|
+
element: '1rem',
|
|
27
|
+
},
|
|
28
|
+
// logo: {
|
|
29
|
+
// src: '/logo.svg', // Path to your brand logo in public/
|
|
30
|
+
// height: 28, // Height in pixels for the slide watermark
|
|
31
|
+
// },
|
|
32
|
+
} satisfies BrandConfig
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{PROJECT_NAME}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "next dev",
|
|
7
|
+
"build": "next build",
|
|
8
|
+
"start": "next start",
|
|
9
|
+
"lint": "next lint"
|
|
10
|
+
},
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@strategicnerds/slide-nerds": "^0.1.0",
|
|
13
|
+
"@tailwindcss/postcss": "^4.0.0",
|
|
14
|
+
"next": "^15.0.0",
|
|
15
|
+
"react": "^19.0.0",
|
|
16
|
+
"react-dom": "^19.0.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^22.0.0",
|
|
20
|
+
"@types/react": "^19.0.0",
|
|
21
|
+
"@types/react-dom": "^19.0.0",
|
|
22
|
+
"typescript": "^5.7.0",
|
|
23
|
+
"tailwindcss": "^4.0.0"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
+
"allowJs": true,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "preserve",
|
|
15
|
+
"incremental": true,
|
|
16
|
+
"plugins": [{ "name": "next" }],
|
|
17
|
+
"paths": { "@/*": ["./*"] }
|
|
18
|
+
},
|
|
19
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
20
|
+
"exclude": ["node_modules"]
|
|
21
|
+
}
|