kitfly 0.2.1 → 0.2.3

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 (108) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +25 -10
  3. package/VERSION +1 -1
  4. package/dist/_raw/content/guide/branding.md +146 -0
  5. package/dist/_raw/content/guide/data-driven-content.md +204 -0
  6. package/dist/_raw/content/reference/configuration.md +145 -7
  7. package/dist/_raw/content/reference/environment-variables.md +26 -1
  8. package/dist/_raw/content/reference/glossary.md +25 -1
  9. package/dist/_raw/content/reference/key-concepts.md +30 -2
  10. package/dist/_raw/content/reference/plugins.md +14 -0
  11. package/dist/_raw/docs/decisions/ADR-0006-data-driven-content.md +350 -0
  12. package/dist/content/deployment/preflight.html +10 -6
  13. package/dist/content/deployment/recipes/aws-s3.html +10 -6
  14. package/dist/content/deployment/recipes/cloudflare-pages.html +10 -6
  15. package/dist/content/deployment/recipes/cloudflare-r2.html +10 -6
  16. package/dist/content/deployment/recipes/fly-io.html +10 -6
  17. package/dist/content/deployment/recipes/github-pages.html +10 -6
  18. package/dist/content/deployment/recipes/netlify.html +10 -6
  19. package/dist/content/deployment/recipes/vercel.html +10 -6
  20. package/dist/content/deployment/secrets-and-env-vars.html +10 -6
  21. package/dist/content/deployment.html +10 -6
  22. package/dist/content/guide/approaches.html +10 -6
  23. package/dist/content/guide/branding.html +510 -0
  24. package/dist/content/guide/data-driven-content.html +543 -0
  25. package/dist/content/guide/features.html +10 -6
  26. package/dist/content/guide/getting-started.html +10 -6
  27. package/dist/content/guide/kitfly-overview.html +10 -6
  28. package/dist/content/reference/configuration.html +135 -9
  29. package/dist/content/reference/design-catalog.html +10 -6
  30. package/dist/content/reference/environment-variables.html +50 -8
  31. package/dist/content/reference/glossary.html +24 -8
  32. package/dist/content/reference/key-concepts.html +33 -9
  33. package/dist/content/reference/plugins.html +22 -7
  34. package/dist/content/reference/slides-authoring-guidelines.html +10 -6
  35. package/dist/content/reference/structure.html +10 -6
  36. package/dist/content/reference.html +10 -6
  37. package/dist/content/templates/crucible.html +10 -6
  38. package/dist/content/templates/handbook.html +10 -6
  39. package/dist/content/templates/minimal.html +10 -6
  40. package/dist/content/templates/overview.html +10 -6
  41. package/dist/content/templates/pipeline.html +10 -6
  42. package/dist/content/templates/productbook.html +10 -6
  43. package/dist/content/templates/runbook.html +10 -6
  44. package/dist/content/templates/servicebook.html +10 -6
  45. package/dist/content-index.json +29 -2
  46. package/dist/docs/decisions/ADR-0001-minimalist-site-code.html +10 -6
  47. package/dist/docs/decisions/ADR-0002-ai-accessibility.html +10 -6
  48. package/dist/docs/decisions/ADR-0003-single-file-bundle.html +10 -6
  49. package/dist/docs/decisions/ADR-0004-bun-runtime.html +10 -6
  50. package/dist/docs/decisions/ADR-0005-plugin-contract-and-distribution.html +10 -6
  51. package/dist/docs/decisions/ADR-0006-data-driven-content.html +752 -0
  52. package/dist/docs/decisions/DDR-0001-viewport-locked-layout.html +10 -6
  53. package/dist/docs/decisions/DDR-0002-theme-system.html +10 -6
  54. package/dist/docs/decisions/DDR-0003-bounded-logo-slot.html +10 -6
  55. package/dist/docs/decisions/DDR-0004-slides-rendering-model.html +10 -6
  56. package/dist/docs/decisions/DDR-0005-deterministic-layout-boundary.html +10 -6
  57. package/dist/docs/userguide/cli/build.html +10 -6
  58. package/dist/docs/userguide/cli/bundle.html +10 -6
  59. package/dist/docs/userguide/cli/dev.html +10 -6
  60. package/dist/docs/userguide/cli/init.html +10 -6
  61. package/dist/docs/userguide/cli/servers.html +10 -6
  62. package/dist/docs/userguide/cli/stop.html +10 -6
  63. package/dist/docs/userguide/cli/update.html +10 -6
  64. package/dist/docs/userguide/cli/version.html +10 -6
  65. package/dist/docs/userguide/cli.html +10 -6
  66. package/dist/docs/userguide/sharing.html +10 -6
  67. package/dist/index.html +10 -6
  68. package/dist/llms.txt +3 -3
  69. package/dist/provenance.json +4 -4
  70. package/dist/schemas/plugin-registry.schema.html +10 -6
  71. package/dist/schemas/plugin-schemas-notes.html +10 -6
  72. package/dist/schemas/plugin.schema.html +10 -6
  73. package/dist/schemas/plugins.schema.html +10 -6
  74. package/dist/schemas/v0/common.schema.html +14 -10
  75. package/dist/schemas/v0/plugin-registry.schema.html +13 -9
  76. package/dist/schemas/v0/plugin.schema.html +13 -9
  77. package/dist/schemas/v0/plugins.schema.html +13 -9
  78. package/dist/schemas/v0/site.schema.html +67 -7
  79. package/dist/schemas/v0/theme.schema.html +21 -17
  80. package/dist/schemas.html +10 -6
  81. package/dist/styles.css +39 -4
  82. package/package.json +1 -1
  83. package/plugins-dist/latex-runtime.js +140 -0
  84. package/plugins-dist/latex.js +178 -0
  85. package/plugins-dist/slides-charts-lite-runtime.js +179 -0
  86. package/plugins-dist/slides-charts-lite.js +198 -0
  87. package/registry/plugins.yaml +25 -0
  88. package/schemas/v0/site.schema.json +56 -0
  89. package/scripts/build.ts +191 -69
  90. package/scripts/bundle.ts +118 -10
  91. package/scripts/dev.ts +245 -166
  92. package/src/__tests__/brief.test.ts +151 -0
  93. package/src/__tests__/build.test.ts +169 -1
  94. package/src/__tests__/bundle.test.ts +134 -0
  95. package/src/__tests__/init.test.ts +51 -2
  96. package/src/__tests__/latex-runtime.bun.test.ts +35 -0
  97. package/src/__tests__/shared.test.ts +598 -1
  98. package/src/__tests__/slides-charts-lite-runtime.bun.test.ts +45 -0
  99. package/src/cli.ts +11 -4
  100. package/src/commands/init.ts +1 -1
  101. package/src/shared.ts +725 -18
  102. package/src/site/styles.css +39 -4
  103. package/src/site/template.html +5 -2
  104. package/src/templates/brief.ts +486 -0
  105. package/src/templates/deck.ts +59 -0
  106. package/src/templates/driver.ts +46 -13
  107. package/src/templates/handbook.ts +32 -0
  108. package/src/templates/runbook.ts +32 -0
@@ -161,14 +161,33 @@ body {
161
161
  }
162
162
 
163
163
  /* Logo dark mode - brighten for visibility */
164
- [data-theme="dark"] .logo-img,
165
- [data-theme="dark"] .logo-icon img {
164
+ .logo-dark {
165
+ display: none;
166
+ }
167
+
168
+ [data-theme="dark"] .logo-light {
169
+ display: none;
170
+ }
171
+
172
+ [data-theme="dark"] .logo-dark {
173
+ display: block;
174
+ }
175
+
176
+ /* Logo dark mode - brighten for visibility (only when no dark variant provided) */
177
+ [data-theme="dark"] .logo-img:not(.logo-light):not(.logo-dark),
178
+ [data-theme="dark"] .logo-icon img:not(.logo-light):not(.logo-dark) {
166
179
  filter: brightness(1.3) saturate(1.2);
167
180
  }
168
181
 
169
182
  @media (prefers-color-scheme: dark) {
170
- :root:not([data-theme="light"]) .logo-img,
171
- :root:not([data-theme="light"]) .logo-icon img {
183
+ :root:not([data-theme="light"]) .logo-light {
184
+ display: none;
185
+ }
186
+ :root:not([data-theme="light"]) .logo-dark {
187
+ display: block;
188
+ }
189
+ :root:not([data-theme="light"]) .logo-img:not(.logo-light):not(.logo-dark),
190
+ :root:not([data-theme="light"]) .logo-icon img:not(.logo-light):not(.logo-dark) {
172
191
  filter: brightness(1.3) saturate(1.2);
173
192
  }
174
193
  }
@@ -945,6 +964,22 @@ body {
945
964
  color: var(--color-link);
946
965
  }
947
966
 
967
+ .footer-logo-link {
968
+ display: inline-flex;
969
+ align-items: center;
970
+ }
971
+
972
+ .footer-logo-img {
973
+ height: auto;
974
+ width: auto;
975
+ vertical-align: middle;
976
+ opacity: 0.8;
977
+ }
978
+
979
+ .footer-logo-img:hover {
980
+ opacity: 1;
981
+ }
982
+
948
983
  /* Mermaid diagrams */
949
984
  .mermaid {
950
985
  background: transparent;
@@ -37,7 +37,7 @@
37
37
  </svg>
38
38
  </button>
39
39
  <a href="{{PATH_PREFIX}}" class="mobile-logo" title="Home" data-initial="{{BRAND_INITIAL}}">
40
- <img src="{{PATH_PREFIX}}{{BRAND_LOGO}}" alt="{{BRAND_NAME}}" class="logo-img {{BRAND_LOGO_CLASS}}" onerror="this.onerror=null;this.style.display='none';this.parentElement.classList.add('logo-fallback')"/>
40
+ {{MOBILE_BRAND_LOGO_IMG}}
41
41
  </a>
42
42
  <button class="mobile-theme-toggle" onclick="toggleTheme()" title="Toggle theme" aria-label="Toggle theme">
43
43
  <svg class="icon-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -54,7 +54,7 @@
54
54
  <div class="sidebar-header">
55
55
  <div class="logo {{BRAND_LOGO_CLASS}}">
56
56
  <a href="{{BRAND_URL}}" class="logo-icon" data-initial="{{BRAND_INITIAL}}"{{BRAND_TARGET}}>
57
- <img src="{{PATH_PREFIX}}{{BRAND_LOGO}}" alt="{{BRAND_NAME}}" class="logo-img" onerror="this.onerror=null;this.style.display='none';this.parentElement.classList.add('logo-fallback')"/>
57
+ {{SIDEBAR_BRAND_LOGO_IMG}}
58
58
  </a>
59
59
  <span class="logo-text">
60
60
  <a href="{{BRAND_URL}}" class="brand"{{BRAND_TARGET}}>{{BRAND_NAME}}</a>
@@ -159,6 +159,9 @@
159
159
  if (window.reinitMermaid) {
160
160
  window.reinitMermaid();
161
161
  }
162
+ if (window.reinitCharts) {
163
+ window.reinitCharts();
164
+ }
162
165
  }
163
166
 
164
167
  // Slides mode hash routing
@@ -0,0 +1,486 @@
1
+ /**
2
+ * Brief Template
3
+ *
4
+ * Extends minimal with structured sections for external-facing backgrounders.
5
+ * Sections: Product, Use Cases, Getting Started, Reference
6
+ */
7
+
8
+ import type { TemplateContext, TemplateDef } from "./schema.ts";
9
+
10
+ export const brief: TemplateDef = {
11
+ id: "brief",
12
+ name: "Brief",
13
+ description: "External-facing product, platform, or service brief for clients and partners",
14
+ version: 1,
15
+ extends: "minimal",
16
+ sections: [
17
+ {
18
+ name: "Product",
19
+ path: "content/product",
20
+ description: "What it is and what it does",
21
+ },
22
+ {
23
+ name: "Use Cases",
24
+ path: "content/use-cases",
25
+ description: "Why it matters to the reader",
26
+ },
27
+ {
28
+ name: "Getting Started",
29
+ path: "content/getting-started",
30
+ description: "What adoption looks like",
31
+ },
32
+ {
33
+ name: "Reference",
34
+ path: "content/reference",
35
+ description: "Look-up material and contacts",
36
+ },
37
+ ],
38
+ files: [
39
+ {
40
+ path: "site.yaml",
41
+ content: (ctx: TemplateContext) => `# ${ctx.branding.siteName} - Site Configuration
42
+ # Documentation: https://github.com/3leaps/kitfly
43
+
44
+ title: "${ctx.branding.siteName}"
45
+
46
+ # ← CUSTOMIZE: Your brand settings
47
+ brand:
48
+ name: "${ctx.branding.brandName}"
49
+ url: "${ctx.branding.brandUrl}"
50
+ # external: false # Set true if brand URL is external
51
+
52
+ # Content sections
53
+ sections:
54
+ - name: "Product"
55
+ path: "content/product"
56
+ - name: "Use Cases"
57
+ path: "content/use-cases"
58
+ - name: "Getting Started"
59
+ path: "content/getting-started"
60
+ - name: "Reference"
61
+ path: "content/reference"
62
+
63
+ # Home page
64
+ home: "index.md"
65
+ `,
66
+ },
67
+ {
68
+ path: "index.md",
69
+ content: (ctx: TemplateContext) => `---
70
+ title: Home
71
+ description: ${ctx.branding.siteName}
72
+ ---
73
+
74
+ # ${ctx.branding.siteName}
75
+
76
+ <!-- ← CUSTOMIZE: Replace with your product/platform executive summary -->
77
+
78
+ A brief introduction to [Product Name] - what it does, who it serves, and why it matters.
79
+
80
+ ## At a Glance
81
+
82
+ | | |
83
+ |---|---|
84
+ | **What** | One-line description of the product/platform |
85
+ | **For** | Target audience or customer segments |
86
+ | **Key Value** | Primary benefit or differentiator |
87
+
88
+ ## Sections
89
+
90
+ ### [Product](/content/product/overview)
91
+ What it is, what it does, and how it works.
92
+
93
+ ### [Use Cases](/content/use-cases/overview)
94
+ How different customer types benefit from the platform.
95
+
96
+ ### [Getting Started](/content/getting-started/overview)
97
+ What adoption and onboarding look like.
98
+
99
+ ### [Reference](/content/reference/architecture)
100
+ Technical architecture, integrations, FAQ, and contacts.
101
+ `,
102
+ },
103
+ {
104
+ path: "content/product/overview.md",
105
+ content: (ctx: TemplateContext) => `---
106
+ title: Overview
107
+ description: What ${ctx.branding.siteName} is and who it's for
108
+ ---
109
+
110
+ # Product Overview
111
+
112
+ <!-- ← CUSTOMIZE: Replace with your product description -->
113
+
114
+ ## What It Is
115
+
116
+ Describe the product or platform in 2-3 sentences. Focus on what it does
117
+ for the customer, not how it's built.
118
+
119
+ ## Who It's For
120
+
121
+ | Audience | How They Use It |
122
+ |----------|----------------|
123
+ | Business leaders | Strategic dashboards and trend analysis |
124
+ | Operations teams | Day-to-day monitoring and alerting |
125
+ | Technical staff | Integration, configuration, data access |
126
+
127
+ ## Key Differentiators
128
+
129
+ - **Differentiator 1**: Brief explanation
130
+ - **Differentiator 2**: Brief explanation
131
+ - **Differentiator 3**: Brief explanation
132
+ `,
133
+ },
134
+ {
135
+ path: "content/product/capabilities.md",
136
+ content: (ctx: TemplateContext) => `---
137
+ title: Capabilities
138
+ description: ${ctx.branding.siteName} capability areas
139
+ ---
140
+
141
+ # Capabilities
142
+
143
+ <!-- ← CUSTOMIZE: Replace with your product's capability areas -->
144
+
145
+ ## Capability Area 1
146
+
147
+ What this capability does and what business outcome it enables.
148
+
149
+ **Key features:**
150
+ - Feature A
151
+ - Feature B
152
+ - Feature C
153
+
154
+ ## Capability Area 2
155
+
156
+ What this capability does and what business outcome it enables.
157
+
158
+ **Key features:**
159
+ - Feature D
160
+ - Feature E
161
+
162
+ ## Capability Area 3
163
+
164
+ What this capability does and what business outcome it enables.
165
+ `,
166
+ },
167
+ {
168
+ path: "content/use-cases/overview.md",
169
+ content: (ctx: TemplateContext) => `---
170
+ title: Use Cases
171
+ description: How different customer types benefit from ${ctx.branding.siteName}
172
+ ---
173
+
174
+ # Use Cases
175
+
176
+ <!-- ← CUSTOMIZE: Replace with your actual use cases -->
177
+
178
+ ## Who Benefits
179
+
180
+ | Customer Profile | Primary Use Case | Key Outcome |
181
+ |-----------------|-----------------|-------------|
182
+ | Profile A | What they do with it | What they gain |
183
+ | Profile B | What they do with it | What they gain |
184
+ | Profile C | What they do with it | What they gain |
185
+
186
+ ## Explore Use Cases
187
+
188
+ - [Example Use Case](/content/use-cases/example-use-case) - Detailed walkthrough
189
+ `,
190
+ },
191
+ {
192
+ path: "content/use-cases/example-use-case.md",
193
+ content: (ctx: TemplateContext) => `---
194
+ title: Example Use Case
195
+ description: A sample use case for ${ctx.branding.siteName}
196
+ ---
197
+
198
+ # Example Use Case
199
+
200
+ <!-- ← CUSTOMIZE: Replace with a real use case. Duplicate this file for each use case. -->
201
+
202
+ ## Scenario
203
+
204
+ Describe the customer situation and challenge.
205
+
206
+ ## How ${ctx.branding.brandName} Helps
207
+
208
+ Walk through how the product addresses this scenario.
209
+
210
+ ## Outcome
211
+
212
+ What the customer achieves - quantify where possible.
213
+
214
+ | Metric | Before | After |
215
+ |--------|--------|-------|
216
+ | Metric 1 | Baseline | Improved |
217
+ | Metric 2 | Baseline | Improved |
218
+ `,
219
+ },
220
+ {
221
+ path: "content/getting-started/overview.md",
222
+ content: (ctx: TemplateContext) => `---
223
+ title: Getting Started
224
+ description: What onboarding looks like for ${ctx.branding.siteName}
225
+ ---
226
+
227
+ # Getting Started
228
+
229
+ <!-- ← CUSTOMIZE: Replace with your onboarding process -->
230
+
231
+ ## Onboarding Process
232
+
233
+ A typical implementation follows these phases:
234
+
235
+ | Phase | Duration | What Happens |
236
+ |-------|----------|--------------|
237
+ | Discovery | 1-2 weeks | Requirements gathering, scope alignment |
238
+ | Setup | 2-4 weeks | Environment provisioning, data integration |
239
+ | Validation | 1-2 weeks | Testing, user acceptance |
240
+ | Go-Live | 1 week | Launch, training, handoff |
241
+
242
+ ## What You'll Need
243
+
244
+ See [Requirements](/content/getting-started/requirements) for prerequisites
245
+ and integration details.
246
+ `,
247
+ },
248
+ {
249
+ path: "content/getting-started/requirements.md",
250
+ content: (ctx: TemplateContext) => `---
251
+ title: Requirements
252
+ description: Prerequisites and integration requirements for ${ctx.branding.siteName}
253
+ ---
254
+
255
+ # Requirements
256
+
257
+ <!-- ← CUSTOMIZE: Replace with your actual requirements -->
258
+
259
+ ## Prerequisites
260
+
261
+ - [ ] Prerequisite 1
262
+ - [ ] Prerequisite 2
263
+ - [ ] Prerequisite 3
264
+
265
+ ## Integrations
266
+
267
+ | System | Purpose | Required? |
268
+ |--------|---------|-----------|
269
+ | System A | Data source | Yes |
270
+ | System B | Authentication | Yes |
271
+ | System C | Reporting export | Optional |
272
+
273
+ ## Timeline
274
+
275
+ Typical implementation takes **4-8 weeks** depending on scope and
276
+ data integration complexity.
277
+ `,
278
+ },
279
+ {
280
+ path: "content/reference/architecture.md",
281
+ content: (ctx: TemplateContext) => `---
282
+ title: Architecture
283
+ description: High-level technical architecture of ${ctx.branding.siteName}
284
+ ---
285
+
286
+ # Architecture
287
+
288
+ <!-- ← CUSTOMIZE: Replace with your actual architecture overview -->
289
+
290
+ ## High-Level Overview
291
+
292
+ Describe the major components and how they connect at a level appropriate
293
+ for a technical audience evaluating the platform.
294
+
295
+ ## Key Design Principles
296
+
297
+ - **Principle 1**: Brief explanation
298
+ - **Principle 2**: Brief explanation
299
+
300
+ ## Data Flow
301
+
302
+ Describe how data moves through the system at a high level.
303
+
304
+ ## Security and Compliance
305
+
306
+ Summarize the security posture and any compliance certifications.
307
+ `,
308
+ },
309
+ {
310
+ path: "content/reference/faq.md",
311
+ content: (ctx: TemplateContext) => `---
312
+ title: FAQ
313
+ description: Frequently asked questions about ${ctx.branding.siteName}
314
+ ---
315
+
316
+ # Frequently Asked Questions
317
+
318
+ <!-- ← CUSTOMIZE: Replace with your actual FAQs -->
319
+
320
+ ## General
321
+
322
+ **Q: What is ${ctx.branding.brandName}?**
323
+ A: One-sentence answer.
324
+
325
+ **Q: Who is it for?**
326
+ A: Target audience description.
327
+
328
+ ## Technical
329
+
330
+ **Q: What are the system requirements?**
331
+ A: See [Requirements](/content/getting-started/requirements).
332
+
333
+ **Q: How does it integrate with our existing systems?**
334
+ A: Brief answer with link to architecture page.
335
+
336
+ ## Getting Started
337
+
338
+ **Q: How long does implementation take?**
339
+ A: Typical timelines and what affects them.
340
+
341
+ **Q: What support is available?**
342
+ A: Support model description.
343
+ `,
344
+ },
345
+ {
346
+ path: "content/reference/contacts.md",
347
+ content: (ctx: TemplateContext) => `---
348
+ title: Contacts
349
+ description: Who to talk to about ${ctx.branding.siteName}
350
+ ---
351
+
352
+ # Contacts
353
+
354
+ <!-- ← CUSTOMIZE: Replace with your actual contacts -->
355
+
356
+ | Role | Name | Email | When to Contact |
357
+ |------|------|-------|-----------------|
358
+ | Account Lead | Name | email@example.com | General inquiries, commercial |
359
+ | Technical Lead | Name | email@example.com | Architecture, integrations |
360
+ | Support | Team | support@example.com | Issues, troubleshooting |
361
+
362
+ ## Additional Resources
363
+
364
+ - **Documentation**: Link to detailed technical docs (if separate)
365
+ - **Support Portal**: Link to ticketing system
366
+ - **Status Page**: Link to uptime/status monitoring
367
+ `,
368
+ },
369
+ {
370
+ path: "CUSTOMIZING.md",
371
+ content: (ctx: TemplateContext) => `---
372
+ template: brief
373
+ template_version: 1
374
+ created: ${new Date().toISOString().split("T")[0]}
375
+ ---
376
+
377
+ # Customizing ${ctx.branding.siteName}
378
+
379
+ This guide helps you customize this brief for external audiences.
380
+
381
+ ## Template Purpose
382
+
383
+ The \`brief\` template is designed for clients, prospects, and partners.
384
+ Use it to communicate what you offer, why it matters, and how to get started.
385
+
386
+ Tone guidance:
387
+ - Informational and professional
388
+ - Clear and specific
389
+ - Not sales copy and not internal jargon
390
+
391
+ ## Section Structure
392
+
393
+ This template ships with four sections:
394
+
395
+ 1. **Product** - What it is and what it does
396
+ 2. **Use Cases** - Why it matters for different customer profiles
397
+ 3. **Getting Started** - Requirements and onboarding timeline
398
+ 4. **Reference** - Architecture, FAQ, and contacts
399
+
400
+ ## Starter Files
401
+
402
+ Use these as working templates, not final content:
403
+
404
+ - \`content/product/overview.md\`
405
+ - \`content/product/capabilities.md\`
406
+ - \`content/use-cases/overview.md\`
407
+ - \`content/use-cases/example-use-case.md\` (duplicate per use case)
408
+ - \`content/getting-started/overview.md\`
409
+ - \`content/getting-started/requirements.md\`
410
+ - \`content/reference/architecture.md\`
411
+ - \`content/reference/faq.md\`
412
+ - \`content/reference/contacts.md\`
413
+
414
+ All placeholders are marked with \`<!-- ← CUSTOMIZE -->\`.
415
+
416
+ ## Adding Use Cases
417
+
418
+ To add a new use case:
419
+
420
+ 1. Duplicate \`content/use-cases/example-use-case.md\`
421
+ 2. Rename it to match the customer scenario
422
+ 3. Use this structure: problem -> solution -> outcome
423
+ 4. Add a link from \`content/use-cases/overview.md\`
424
+
425
+ ## Visual Content
426
+
427
+ For external readers, visuals improve understanding:
428
+
429
+ - Product screenshots for key workflows
430
+ - Simple architecture diagrams for technical evaluators
431
+ - Tables for timelines, requirements, and measurable outcomes
432
+
433
+ Store assets in \`assets/\` and reference them with root-relative paths.
434
+
435
+ ## Brand Assets
436
+
437
+ | Asset | Location | Recommended Size |
438
+ |-------|----------|------------------|
439
+ | Logo | \`assets/brand/logo.png\` | 200x50px (or SVG) |
440
+ | Logo (dark) | \`assets/brand/logo-dark.png\` | Same as logo, for dark backgrounds |
441
+ | Favicon | \`assets/brand/favicon.ico\` | 32x32px |
442
+ | Footer logo | \`assets/brand/footer-logo.png\` | Max height 20px |
443
+
444
+ ### Header Logo
445
+
446
+ Single logo — kitfly auto-adjusts brightness in dark mode:
447
+
448
+ \`\`\`yaml
449
+ brand:
450
+ logo: "assets/brand/logo.png"
451
+ \`\`\`
452
+
453
+ Light + dark variants — no automatic filters applied:
454
+
455
+ \`\`\`yaml
456
+ brand:
457
+ logo: "assets/brand/logo.png"
458
+ logoDark: "assets/brand/logo-dark.png"
459
+ \`\`\`
460
+
461
+ ### Footer Logo
462
+
463
+ Add a separate logo to the footer ribbon (e.g. a parent company or client logo):
464
+
465
+ \`\`\`yaml
466
+ footer:
467
+ logo: "assets/brand/footer-logo.png"
468
+ logoUrl: "https://example.com" # optional link
469
+ logoAlt: "Company Name" # optional alt text
470
+ logoHeight: 20 # optional max height in px
471
+ logoDark: "assets/brand/footer-logo-dark.png" # optional dark variant
472
+ \`\`\`
473
+
474
+ ## Final Review Checklist
475
+
476
+ Before sharing this brief:
477
+
478
+ - [ ] Replace all placeholder text and examples
479
+ - [ ] Validate audience-specific use cases and outcomes
480
+ - [ ] Confirm onboarding steps and timeline are accurate
481
+ - [ ] Verify contacts and support links
482
+ - [ ] Check tone: factual, concise, and non-promotional
483
+ `,
484
+ },
485
+ ],
486
+ };
@@ -180,6 +180,65 @@ Built-in classes:
180
180
 
181
181
  For markdown-only content, \`two-column\` will flow content into columns.
182
182
  For strict side-by-side control, use explicit HTML wrappers inside the slide body.
183
+
184
+ ## Content Organization
185
+
186
+ Slides in the same section can be organized into subfolders:
187
+
188
+ \`\`\`
189
+ content/
190
+ ├── overview/
191
+ │ └── slides.md
192
+ ├── deep-dive/
193
+ │ ├── architecture/
194
+ │ │ └── slides.md
195
+ │ ├── data-flow/
196
+ │ │ └── slides.md
197
+ │ └── slides.md
198
+ \`\`\`
199
+
200
+ Subfolders produce nested, collapsible navigation groups in the sidebar. When all slides are at the root level (no subfolders), the nav stays flat — no change from the default.
201
+
202
+ Arrow keys and prev/next still navigate linearly through all slides regardless of nesting.
203
+
204
+ ## Brand Assets
205
+
206
+ | Asset | Location | Recommended Size |
207
+ |-------|----------|------------------|
208
+ | Logo | \`assets/brand/logo.png\` | 200x50px (or SVG) |
209
+ | Logo (dark) | \`assets/brand/logo-dark.png\` | Same as logo, for dark backgrounds |
210
+ | Favicon | \`assets/brand/favicon.png\` | 32x32px |
211
+ | Footer logo | \`assets/brand/footer-logo.png\` | Max height 20px |
212
+
213
+ ### Header Logo
214
+
215
+ Single logo — kitfly auto-adjusts brightness in dark mode:
216
+
217
+ \`\`\`yaml
218
+ brand:
219
+ logo: "assets/brand/logo.png"
220
+ \`\`\`
221
+
222
+ Light + dark variants — no automatic filters applied:
223
+
224
+ \`\`\`yaml
225
+ brand:
226
+ logo: "assets/brand/logo.png"
227
+ logoDark: "assets/brand/logo-dark.png"
228
+ \`\`\`
229
+
230
+ ### Footer Logo
231
+
232
+ Add a separate logo to the footer ribbon (e.g. a parent company or client logo):
233
+
234
+ \`\`\`yaml
235
+ footer:
236
+ logo: "assets/brand/footer-logo.png"
237
+ logoUrl: "https://example.com" # optional link
238
+ logoAlt: "Company Name" # optional alt text
239
+ logoHeight: 20 # optional max height in px
240
+ logoDark: "assets/brand/footer-logo-dark.png" # optional dark variant
241
+ \`\`\`
183
242
  `,
184
243
  },
185
244
  ],