kitfly 0.2.0 → 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.
- package/CHANGELOG.md +68 -0
- package/README.md +25 -10
- package/VERSION +1 -1
- package/dist/_raw/content/guide/branding.md +146 -0
- package/dist/_raw/content/guide/data-driven-content.md +204 -0
- package/dist/_raw/content/reference/configuration.md +145 -7
- package/dist/_raw/content/reference/environment-variables.md +26 -1
- package/dist/_raw/content/reference/glossary.md +25 -1
- package/dist/_raw/content/reference/key-concepts.md +30 -2
- package/dist/_raw/content/reference/plugins.md +14 -0
- package/dist/_raw/content/reference/slides-authoring-guidelines.md +129 -0
- package/dist/_raw/content/reference.md +1 -0
- package/dist/_raw/docs/decisions/ADR-0006-data-driven-content.md +350 -0
- package/dist/content/deployment/preflight.html +10 -6
- package/dist/content/deployment/recipes/aws-s3.html +10 -6
- package/dist/content/deployment/recipes/cloudflare-pages.html +10 -6
- package/dist/content/deployment/recipes/cloudflare-r2.html +10 -6
- package/dist/content/deployment/recipes/fly-io.html +10 -6
- package/dist/content/deployment/recipes/github-pages.html +10 -6
- package/dist/content/deployment/recipes/netlify.html +10 -6
- package/dist/content/deployment/recipes/vercel.html +10 -6
- package/dist/content/deployment/secrets-and-env-vars.html +10 -6
- package/dist/content/deployment.html +10 -6
- package/dist/content/guide/approaches.html +10 -6
- package/dist/content/guide/branding.html +510 -0
- package/dist/content/guide/data-driven-content.html +543 -0
- package/dist/content/guide/features.html +10 -6
- package/dist/content/guide/getting-started.html +10 -6
- package/dist/content/guide/kitfly-overview.html +10 -6
- package/dist/content/reference/configuration.html +135 -9
- package/dist/content/reference/design-catalog.html +10 -6
- package/dist/content/reference/environment-variables.html +50 -8
- package/dist/content/reference/glossary.html +24 -8
- package/dist/content/reference/key-concepts.html +33 -9
- package/dist/content/reference/plugins.html +22 -7
- package/dist/content/reference/slides-authoring-guidelines.html +422 -0
- package/dist/content/reference/structure.html +10 -6
- package/dist/content/reference.html +11 -6
- package/dist/content/templates/crucible.html +10 -6
- package/dist/content/templates/handbook.html +10 -6
- package/dist/content/templates/minimal.html +10 -6
- package/dist/content/templates/overview.html +10 -6
- package/dist/content/templates/pipeline.html +10 -6
- package/dist/content/templates/productbook.html +10 -6
- package/dist/content/templates/runbook.html +10 -6
- package/dist/content/templates/servicebook.html +10 -6
- package/dist/content-index.json +38 -2
- package/dist/docs/decisions/ADR-0001-minimalist-site-code.html +10 -6
- package/dist/docs/decisions/ADR-0002-ai-accessibility.html +10 -6
- package/dist/docs/decisions/ADR-0003-single-file-bundle.html +10 -6
- package/dist/docs/decisions/ADR-0004-bun-runtime.html +10 -6
- package/dist/docs/decisions/ADR-0005-plugin-contract-and-distribution.html +10 -6
- package/dist/docs/decisions/ADR-0006-data-driven-content.html +752 -0
- package/dist/docs/decisions/DDR-0001-viewport-locked-layout.html +10 -6
- package/dist/docs/decisions/DDR-0002-theme-system.html +10 -6
- package/dist/docs/decisions/DDR-0003-bounded-logo-slot.html +10 -6
- package/dist/docs/decisions/DDR-0004-slides-rendering-model.html +10 -6
- package/dist/docs/decisions/DDR-0005-deterministic-layout-boundary.html +10 -6
- package/dist/docs/userguide/cli/build.html +10 -6
- package/dist/docs/userguide/cli/bundle.html +10 -6
- package/dist/docs/userguide/cli/dev.html +10 -6
- package/dist/docs/userguide/cli/init.html +10 -6
- package/dist/docs/userguide/cli/servers.html +10 -6
- package/dist/docs/userguide/cli/stop.html +10 -6
- package/dist/docs/userguide/cli/update.html +10 -6
- package/dist/docs/userguide/cli/version.html +10 -6
- package/dist/docs/userguide/cli.html +10 -6
- package/dist/docs/userguide/sharing.html +10 -6
- package/dist/index.html +10 -6
- package/dist/llms.txt +3 -3
- package/dist/provenance.json +4 -4
- package/dist/schemas/plugin-registry.schema.html +10 -6
- package/dist/schemas/plugin-schemas-notes.html +10 -6
- package/dist/schemas/plugin.schema.html +10 -6
- package/dist/schemas/plugins.schema.html +10 -6
- package/dist/schemas/v0/common.schema.html +14 -10
- package/dist/schemas/v0/plugin-registry.schema.html +13 -9
- package/dist/schemas/v0/plugin.schema.html +13 -9
- package/dist/schemas/v0/plugins.schema.html +13 -9
- package/dist/schemas/v0/site.schema.html +67 -7
- package/dist/schemas/v0/theme.schema.html +21 -17
- package/dist/schemas.html +10 -6
- package/dist/styles.css +39 -4
- package/package.json +1 -1
- package/plugins-dist/latex-runtime.js +140 -0
- package/plugins-dist/latex.js +178 -0
- package/plugins-dist/slides-charts-lite-runtime.js +179 -0
- package/plugins-dist/slides-charts-lite.js +198 -0
- package/plugins-dist/slides-visuals.css +166 -0
- package/plugins-dist/slides-visuals.js +124 -33
- package/registry/plugins.yaml +30 -5
- package/schemas/v0/site.schema.json +56 -0
- package/scripts/build.ts +195 -70
- package/scripts/bundle.ts +122 -11
- package/scripts/dev.ts +345 -178
- package/src/__tests__/brief.test.ts +151 -0
- package/src/__tests__/build.test.ts +234 -4
- package/src/__tests__/bundle.test.ts +134 -0
- package/src/__tests__/dev-plugin-errors.test.ts +20 -0
- package/src/__tests__/fixtures/fences/slides-visuals/invalid/flow-branching-no-source.md +5 -0
- package/src/__tests__/fixtures/fences/slides-visuals/invalid/flow-converging-no-target.md +6 -0
- package/src/__tests__/fixtures/fences/slides-visuals/invalid/staircase-empty-steps.md +3 -0
- package/src/__tests__/fixtures/fences/slides-visuals/invalid/timeline-horizontal-no-events.md +2 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/flow-branching-no-split.md +7 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/flow-branching.md +8 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/flow-converging-no-merge.md +7 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/flow-converging.md +8 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/staircase-down.md +7 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/staircase.md +8 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/timeline-horizontal.md +9 -0
- package/src/__tests__/fixtures/fences/slides-visuals/valid/timeline-vertical.md +10 -0
- package/src/__tests__/init.test.ts +51 -2
- package/src/__tests__/latex-runtime.bun.test.ts +35 -0
- package/src/__tests__/shared.test.ts +621 -1
- package/src/__tests__/slides-charts-lite-runtime.bun.test.ts +45 -0
- package/src/__tests__/slides-visuals-runtime-regressions.bun.test.ts +33 -0
- package/src/cli.ts +11 -4
- package/src/commands/init.ts +1 -1
- package/src/shared.ts +761 -18
- package/src/site/styles.css +39 -4
- package/src/site/template.html +5 -2
- package/src/templates/brief.ts +486 -0
- package/src/templates/deck.ts +59 -0
- package/src/templates/driver.ts +46 -13
- package/src/templates/handbook.ts +32 -0
- package/src/templates/runbook.ts +32 -0
package/src/site/styles.css
CHANGED
|
@@ -161,14 +161,33 @@ body {
|
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
/* Logo dark mode - brighten for visibility */
|
|
164
|
-
|
|
165
|
-
|
|
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-
|
|
171
|
-
|
|
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;
|
package/src/site/template.html
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
+
};
|
package/src/templates/deck.ts
CHANGED
|
@@ -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
|
],
|