@anvpx/motion-templates 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +9 -0
- package/dist/roots.d.ts +41 -0
- package/dist/roots.js +81 -0
- package/package.json +34 -3
- package/shared/themes/README.md +5 -0
- package/shared/themes/bold-dark.json +362 -0
- package/shared/themes/bold-light.json +362 -0
- package/shared/themes/calm-dark.json +362 -0
- package/shared/themes/calm-light.json +362 -0
- package/shared/themes/data-dark.json +360 -0
- package/shared/themes/data-light.json +360 -0
- package/shared/themes/editorial-dark.json +353 -0
- package/shared/themes/editorial-light.json +353 -0
- package/shared/themes/fjord-dark.json +124 -0
- package/shared/themes/fjord-light.json +124 -0
- package/shared/themes/playful-dark.json +362 -0
- package/shared/themes/playful-light.json +362 -0
- package/shared/themes/pop-dark.json +352 -0
- package/shared/themes/pop-light.json +352 -0
- package/shared/themes/tech-dark.json +360 -0
- package/shared/themes/tech-light.json +360 -0
- package/shared/themes/warm-dark.json +368 -0
- package/shared/themes/warm-light.json +368 -0
- package/stopwords.json +65 -0
- package/templates/compare/blueprints/versus.json +79 -0
- package/templates/compare/copy.md +18 -0
- package/templates/compare/pacing.json +15 -0
- package/templates/compare/previews/versus.png +0 -0
- package/templates/compare/styles/editorial.json +6 -0
- package/templates/compare/styles/punchy.json +6 -0
- package/templates/compare/styles/tidy.json +6 -0
- package/templates/compare/template.json +52 -0
- package/templates/datastory/blueprints/data-story.json +95 -0
- package/templates/datastory/blueprints/infographic.json +106 -0
- package/templates/datastory/blueprints/trend.json +93 -0
- package/templates/datastory/copy.md +16 -0
- package/templates/datastory/pacing.json +17 -0
- package/templates/datastory/previews/data-story.png +0 -0
- package/templates/datastory/previews/infographic.png +0 -0
- package/templates/datastory/previews/trend.png +0 -0
- package/templates/datastory/styles/clear.json +6 -0
- package/templates/datastory/styles/editorial.json +6 -0
- package/templates/datastory/styles/pop.json +7 -0
- package/templates/datastory/template.json +57 -0
- package/templates/event/blueprints/promo.json +71 -0
- package/templates/event/blueprints/save-the-date.json +61 -0
- package/templates/event/copy.md +16 -0
- package/templates/event/pacing.json +15 -0
- package/templates/event/previews/promo.png +0 -0
- package/templates/event/previews/save-the-date.png +0 -0
- package/templates/event/styles/bright.json +6 -0
- package/templates/event/styles/pop.json +6 -0
- package/templates/event/template.json +37 -0
- package/templates/explain/blueprints/architecture.json +76 -0
- package/templates/explain/blueprints/concept.json +89 -0
- package/templates/explain/blueprints/howto.json +56 -0
- package/templates/explain/blueprints/overview.json +126 -0
- package/templates/explain/copy.md +19 -0
- package/templates/explain/pacing.json +19 -0
- package/templates/explain/previews/architecture.png +0 -0
- package/templates/explain/previews/concept.png +0 -0
- package/templates/explain/previews/howto.png +0 -0
- package/templates/explain/previews/overview.png +0 -0
- package/templates/explain/styles/calm.json +6 -0
- package/templates/explain/styles/crisp.json +6 -0
- package/templates/explain/template.json +64 -0
- package/templates/guide/blueprints/lesson.json +173 -0
- package/templates/guide/blueprints/onboarding.json +80 -0
- package/templates/guide/blueprints/tutorial.json +102 -0
- package/templates/guide/copy.md +17 -0
- package/templates/guide/pacing.json +59 -0
- package/templates/guide/previews/lesson.png +0 -0
- package/templates/guide/previews/onboarding.png +0 -0
- package/templates/guide/previews/tutorial.png +0 -0
- package/templates/guide/styles/calm.json +15 -0
- package/templates/guide/styles/friendly.json +15 -0
- package/templates/guide/styles/techdark.json +15 -0
- package/templates/guide/template.json +95 -0
- package/templates/pitch/blueprints/feature.json +134 -0
- package/templates/pitch/blueprints/launch.json +173 -0
- package/templates/pitch/blueprints/pricing.json +141 -0
- package/templates/pitch/copy.md +18 -0
- package/templates/pitch/pacing.json +59 -0
- package/templates/pitch/previews/feature.png +0 -0
- package/templates/pitch/previews/launch.png +0 -0
- package/templates/pitch/previews/pricing.png +0 -0
- package/templates/pitch/styles/polished.json +6 -0
- package/templates/pitch/styles/punchy.json +6 -0
- package/templates/pitch/styles/teaser.json +12 -0
- package/templates/pitch/template.json +45 -0
- package/templates/recap/blueprints/news-recap.json +62 -0
- package/templates/recap/blueprints/timeline-story.json +94 -0
- package/templates/recap/copy.md +16 -0
- package/templates/recap/pacing.json +16 -0
- package/templates/recap/previews/news-recap.png +0 -0
- package/templates/recap/previews/timeline-story.png +0 -0
- package/templates/recap/styles/editorial.json +6 -0
- package/templates/recap/styles/editorialdark.json +6 -0
- package/templates/recap/template.json +50 -0
- package/templates/report/blueprints/kpi-review.json +116 -0
- package/templates/report/blueprints/status.json +78 -0
- package/templates/report/copy.md +17 -0
- package/templates/report/pacing.json +16 -0
- package/templates/report/previews/kpi-review.png +0 -0
- package/templates/report/previews/status.png +0 -0
- package/templates/report/styles/exec.json +6 -0
- package/templates/report/styles/memo.json +6 -0
- package/templates/report/styles/walkthrough.json +6 -0
- package/templates/report/template.json +56 -0
- package/templates/social/blueprints/announce.json +109 -0
- package/templates/social/blueprints/listicle.json +117 -0
- package/templates/social/blueprints/tip.json +114 -0
- package/templates/social/copy.md +18 -0
- package/templates/social/pacing.json +49 -0
- package/templates/social/previews/announce.png +0 -0
- package/templates/social/previews/listicle.png +0 -0
- package/templates/social/previews/tip.png +0 -0
- package/templates/social/styles/captioned.json +18 -0
- package/templates/social/styles/hook-first.json +15 -0
- package/templates/social/styles/techcut.json +15 -0
- package/templates/social/template.json +94 -0
- package/templates/update/blueprints/announcement.json +57 -0
- package/templates/update/blueprints/changelog.json +157 -0
- package/templates/update/blueprints/release-notes.json +151 -0
- package/templates/update/blueprints/weekly-update.json +88 -0
- package/templates/update/copy.md +17 -0
- package/templates/update/pacing.json +64 -0
- package/templates/update/previews/announcement.png +0 -0
- package/templates/update/previews/changelog.png +0 -0
- package/templates/update/previews/release-notes.png +0 -0
- package/templates/update/previews/weekly-update.png +0 -0
- package/templates/update/styles/punchy.json +15 -0
- package/templates/update/styles/techdark.json +6 -0
- package/templates/update/styles/tidy.json +6 -0
- package/templates/update/template.json +67 -0
- package/templates/vista/blueprints/spotlight.json +68 -0
- package/templates/vista/blueprints/tour.json +84 -0
- package/templates/vista/copy.md +18 -0
- package/templates/vista/pacing.json +14 -0
- package/templates/vista/previews/spotlight.png +0 -0
- package/templates/vista/previews/tour.png +0 -0
- package/templates/vista/styles/bright.json +6 -0
- package/templates/vista/styles/cinematic.json +6 -0
- package/templates/vista/template.json +42 -0
- package/templates/walkthrough/blueprints/product-tour.json +107 -0
- package/templates/walkthrough/copy.md +16 -0
- package/templates/walkthrough/pacing.json +16 -0
- package/templates/walkthrough/previews/product-tour.png +0 -0
- package/templates/walkthrough/styles/calm.json +6 -0
- package/templates/walkthrough/styles/deep.json +6 -0
- package/templates/walkthrough/template.json +37 -0
- package/README.md +0 -3
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "architecture",
|
|
3
|
+
"purpose": "Show how a system fits together: a node-and-arrow diagram, up to four notes, one optional number, a close.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Show how a system works: its components and how data flows between them.",
|
|
7
|
+
"Walk a new teammate through an architecture in under a minute.",
|
|
8
|
+
"Give a reviewer a quick map of the parts and their links before a design talk."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["engineers", "stakeholders", "new-hires"],
|
|
11
|
+
"goodFor": "A system of 2-8 parts with arrows between them and a few notes.",
|
|
12
|
+
"notFor": "Procedures (howto), persuasion (pitch), numeric analysis (datastory).",
|
|
13
|
+
"tags": ["explain", "architecture", "diagram", "dev", "process"],
|
|
14
|
+
"tone": ["technical", "calm"],
|
|
15
|
+
"aspects": ["16:9"],
|
|
16
|
+
"lengths": { "min": 40, "max": 90 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"title": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"nodes": { "type": "text[]", "min": 2, "max": 8, "itemMax": 24, "required": true },
|
|
21
|
+
"edges": { "type": "text[]", "max": 12, "itemMax": 60, "optional": true },
|
|
22
|
+
"notes": { "type": "text[]", "max": 4, "itemMax": 70, "optional": true },
|
|
23
|
+
"stat": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"fields": { "value": "number", "unit": "text", "label": "text" },
|
|
26
|
+
"optional": true
|
|
27
|
+
},
|
|
28
|
+
"takeaway": { "type": "text", "max": 80, "optional": true },
|
|
29
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
30
|
+
"style": { "type": "enum", "values": ["calm", "crisp"], "default": "calm" }
|
|
31
|
+
},
|
|
32
|
+
"example": {
|
|
33
|
+
"title": "How a request reaches the data",
|
|
34
|
+
"nodes": ["Client", "API gateway", "Auth service", "Database"],
|
|
35
|
+
"edges": [
|
|
36
|
+
"Client>API gateway|request",
|
|
37
|
+
"API gateway>Auth service|check token",
|
|
38
|
+
"API gateway>Database|query"
|
|
39
|
+
],
|
|
40
|
+
"notes": ["The gateway is the only public entry", "Every request is authenticated first"],
|
|
41
|
+
"stat": { "value": 120, "unit": "ms", "label": "median response time" },
|
|
42
|
+
"takeaway": "One public door, checked every time"
|
|
43
|
+
},
|
|
44
|
+
"meta": { "title": { "$slot": "title" }, "lang": "en" },
|
|
45
|
+
"scenes": [
|
|
46
|
+
{
|
|
47
|
+
"id": "intro",
|
|
48
|
+
"type": "title",
|
|
49
|
+
"props": { "kicker": "Architecture", "title": { "$slot": "title" } }
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "diagram",
|
|
53
|
+
"type": "flow",
|
|
54
|
+
"props": {
|
|
55
|
+
"nodes": { "$slot": "nodes", "as": "flow-nodes" },
|
|
56
|
+
"edges": {
|
|
57
|
+
"$slot": "edges",
|
|
58
|
+
"as": "flow-edges",
|
|
59
|
+
"orElse": { "$slot": "nodes", "as": "flow-chain" }
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"when": "notes",
|
|
65
|
+
"id": "notes",
|
|
66
|
+
"type": "bullets",
|
|
67
|
+
"props": { "title": "Design rules", "items": { "$slot": "notes" } }
|
|
68
|
+
},
|
|
69
|
+
{ "when": "stat", "id": "number", "type": "stat", "props": { "$spread": "stat" } },
|
|
70
|
+
{
|
|
71
|
+
"id": "end",
|
|
72
|
+
"type": "outro",
|
|
73
|
+
"props": { "title": { "$slot": "takeaway", "orElse": { "$slot": "title" } } }
|
|
74
|
+
}
|
|
75
|
+
]
|
|
76
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "concept",
|
|
3
|
+
"purpose": "Explain one concept in 30-60s: hook, one-line definition, 3-5 points, one number, one diagram, close.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Explain one idea to people who did not build it.",
|
|
7
|
+
"Introduce a term or technology with one number and one diagram.",
|
|
8
|
+
"Give newcomers a short lesson with a single takeaway."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["stakeholders", "new-hires", "customers", "students"],
|
|
11
|
+
"goodFor": "A single concept with a hook, 3-5 points and an optional number.",
|
|
12
|
+
"notFor": "Step-by-step procedures (howto), numeric deep dives (datastory).",
|
|
13
|
+
"tags": ["explain", "concept", "lesson", "onboarding", "education"],
|
|
14
|
+
"tone": ["calm"],
|
|
15
|
+
"aspects": ["16:9"],
|
|
16
|
+
"lengths": { "min": 30, "max": 60 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"title": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"hook": { "type": "text", "max": 90 },
|
|
21
|
+
"definition": { "type": "text", "max": 110, "optional": true },
|
|
22
|
+
"points": { "type": "text[]", "min": 3, "max": 5, "itemMax": 70 },
|
|
23
|
+
"stat": {
|
|
24
|
+
"type": "object",
|
|
25
|
+
"fields": { "value": "number", "unit": "text", "label": "text" },
|
|
26
|
+
"optional": true
|
|
27
|
+
},
|
|
28
|
+
"nodes": { "type": "text[]", "min": 2, "max": 6, "itemMax": 24, "optional": true },
|
|
29
|
+
"edges": { "type": "text[]", "max": 8, "itemMax": 60, "optional": true },
|
|
30
|
+
"takeaway": { "type": "text", "max": 80, "optional": true },
|
|
31
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
32
|
+
"style": { "type": "enum", "values": ["calm", "crisp"], "default": "calm" }
|
|
33
|
+
},
|
|
34
|
+
"example": {
|
|
35
|
+
"title": "How caching works",
|
|
36
|
+
"hook": "Fast answers by remembering recent work",
|
|
37
|
+
"definition": "A [cache] keeps a copy of recent answers so repeat requests skip the slow path",
|
|
38
|
+
"points": [
|
|
39
|
+
"A miss fetches from the origin",
|
|
40
|
+
"The cache keeps a copy",
|
|
41
|
+
"A hit answers instantly"
|
|
42
|
+
],
|
|
43
|
+
"stat": { "value": 90, "unit": "%", "label": "requests served from cache" },
|
|
44
|
+
"nodes": ["Client", "Cache", "Origin"],
|
|
45
|
+
"takeaway": "Remember work to skip work"
|
|
46
|
+
},
|
|
47
|
+
"meta": { "title": { "$slot": "title" }, "lang": "en" },
|
|
48
|
+
"scenes": [
|
|
49
|
+
{
|
|
50
|
+
"id": "intro",
|
|
51
|
+
"type": "title",
|
|
52
|
+
"props": {
|
|
53
|
+
"kicker": "Concept",
|
|
54
|
+
"title": { "$slot": "title" },
|
|
55
|
+
"subtitle": { "$slot": "hook" }
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"when": "definition",
|
|
60
|
+
"id": "definition",
|
|
61
|
+
"type": "callout",
|
|
62
|
+
"props": { "kind": "definition", "label": "In short", "text": { "$slot": "definition" } }
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"id": "points",
|
|
66
|
+
"type": "bullets",
|
|
67
|
+
"props": { "title": "How it works", "items": { "$slot": "points" } }
|
|
68
|
+
},
|
|
69
|
+
{ "when": "stat", "id": "number", "type": "stat", "props": { "$spread": "stat" } },
|
|
70
|
+
{
|
|
71
|
+
"when": "nodes",
|
|
72
|
+
"id": "diagram",
|
|
73
|
+
"type": "flow",
|
|
74
|
+
"props": {
|
|
75
|
+
"nodes": { "$slot": "nodes", "as": "flow-nodes" },
|
|
76
|
+
"edges": {
|
|
77
|
+
"$slot": "edges",
|
|
78
|
+
"as": "flow-edges",
|
|
79
|
+
"orElse": { "$slot": "nodes", "as": "flow-chain" }
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "end",
|
|
85
|
+
"type": "outro",
|
|
86
|
+
"props": { "title": { "$slot": "takeaway", "orElse": { "$slot": "title" } } }
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "howto",
|
|
3
|
+
"purpose": "Teach a procedure: an animated path of 3-6 steps with a detail under each, then the outcome.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Teach a procedure in 3-6 numbered steps.",
|
|
7
|
+
"Give a quick how-to with a stated outcome.",
|
|
8
|
+
"Show newcomers the order in which a routine task is done."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["new-hires", "customers", "students"],
|
|
11
|
+
"goodFor": "A procedure with 3-6 ordered steps and a clear outcome.",
|
|
12
|
+
"notFor": "Concept explanations (concept), system diagrams (architecture).",
|
|
13
|
+
"tags": ["howto", "tutorial", "steps", "explain", "onboarding", "process"],
|
|
14
|
+
"tone": ["calm"],
|
|
15
|
+
"aspects": ["16:9"],
|
|
16
|
+
"lengths": { "min": 15, "max": 50 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"title": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"steps": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"fields": { "label": "text", "detail": "text" },
|
|
23
|
+
"list": true,
|
|
24
|
+
"min": 3,
|
|
25
|
+
"max": 6,
|
|
26
|
+
"required": true
|
|
27
|
+
},
|
|
28
|
+
"outcome": { "type": "text", "max": 90, "required": true },
|
|
29
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
30
|
+
"style": { "type": "enum", "values": ["calm", "crisp"], "default": "calm" }
|
|
31
|
+
},
|
|
32
|
+
"example": {
|
|
33
|
+
"title": "Ship a change safely",
|
|
34
|
+
"steps": [
|
|
35
|
+
{ "label": "Branch", "detail": "Start from main" },
|
|
36
|
+
{ "label": "Test", "detail": "Write a failing test" },
|
|
37
|
+
{ "label": "Review", "detail": "One teammate reads it" },
|
|
38
|
+
{ "label": "Merge", "detail": "Squash and clean up" }
|
|
39
|
+
],
|
|
40
|
+
"outcome": "A small change merged with confidence"
|
|
41
|
+
},
|
|
42
|
+
"meta": { "title": { "$slot": "title" }, "lang": "en" },
|
|
43
|
+
"scenes": [
|
|
44
|
+
{
|
|
45
|
+
"id": "intro",
|
|
46
|
+
"type": "title",
|
|
47
|
+
"props": { "kicker": "How to", "title": { "$slot": "title" } }
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "procedure",
|
|
51
|
+
"type": "steps",
|
|
52
|
+
"props": { "title": { "$slot": "title" }, "layout": "path", "steps": { "$slot": "steps" } }
|
|
53
|
+
},
|
|
54
|
+
{ "id": "end", "type": "outro", "props": { "title": { "$slot": "outcome" } } }
|
|
55
|
+
]
|
|
56
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "overview",
|
|
3
|
+
"purpose": "Stakeholder overview of a system: goal, what it is made of, how it works in 3 steps, key numbers, architecture flow, close.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Give leadership a one-minute overview of a system or programme.",
|
|
7
|
+
"Introduce a platform to new stakeholders: goal, parts, process and headline numbers.",
|
|
8
|
+
"Brief a partner team on what something does and how it fits together."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["stakeholders", "new-hires", "customers"],
|
|
11
|
+
"goodFor": "A whole system or programme: a goal, 3-4 pillars, a 3-step flow and a few numbers.",
|
|
12
|
+
"notFor": "One narrow idea (concept), a procedure (howto), persuasion (pitch).",
|
|
13
|
+
"tags": ["explain", "architecture", "onboarding", "kpi", "diagram", "internal", "process"],
|
|
14
|
+
"tone": ["calm", "technical"],
|
|
15
|
+
"aspects": ["16:9"],
|
|
16
|
+
"lengths": { "min": 45, "max": 90 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"title": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"goal": { "type": "text", "max": 110, "required": true },
|
|
21
|
+
"pillars": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"fields": { "icon": "text", "label": "text", "detail": "text" },
|
|
24
|
+
"list": true,
|
|
25
|
+
"min": 3,
|
|
26
|
+
"max": 4,
|
|
27
|
+
"required": true
|
|
28
|
+
},
|
|
29
|
+
"steps": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"fields": { "label": "text", "detail": "text" },
|
|
32
|
+
"list": true,
|
|
33
|
+
"min": 3,
|
|
34
|
+
"max": 3,
|
|
35
|
+
"required": true
|
|
36
|
+
},
|
|
37
|
+
"numbers": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"fields": { "value": "text", "label": "text" },
|
|
40
|
+
"list": true,
|
|
41
|
+
"min": 2,
|
|
42
|
+
"max": 4,
|
|
43
|
+
"optional": true
|
|
44
|
+
},
|
|
45
|
+
"nodes": { "type": "text[]", "min": 3, "max": 6, "itemMax": 24, "optional": true },
|
|
46
|
+
"edges": { "type": "text[]", "max": 8, "itemMax": 60, "optional": true },
|
|
47
|
+
"ask": { "type": "text", "max": 90, "optional": true },
|
|
48
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
49
|
+
"style": { "type": "enum", "values": ["calm", "crisp"], "default": "calm" }
|
|
50
|
+
},
|
|
51
|
+
"example": {
|
|
52
|
+
"title": "Booking platform overview",
|
|
53
|
+
"goal": "Let customers book a slot in [under a minute] and let staff see it [instantly]",
|
|
54
|
+
"pillars": [
|
|
55
|
+
{ "icon": "calendar", "label": "Scheduling", "detail": "Live availability" },
|
|
56
|
+
{ "icon": "users", "label": "Accounts", "detail": "One profile each" },
|
|
57
|
+
{ "icon": "shield", "label": "Security", "detail": "Encrypted data" },
|
|
58
|
+
{ "icon": "chart-line", "label": "Reporting", "detail": "Daily usage" }
|
|
59
|
+
],
|
|
60
|
+
"steps": [
|
|
61
|
+
{ "label": "Choose", "detail": "Pick a service and time" },
|
|
62
|
+
{ "label": "Confirm", "detail": "Pay and get a receipt" },
|
|
63
|
+
{ "label": "Attend", "detail": "Staff see it on arrival" }
|
|
64
|
+
],
|
|
65
|
+
"numbers": [
|
|
66
|
+
{ "value": "40k", "label": "bookings a month" },
|
|
67
|
+
{ "value": "99.9%", "label": "uptime" },
|
|
68
|
+
{ "value": "52 s", "label": "median booking time" }
|
|
69
|
+
],
|
|
70
|
+
"nodes": ["Web app", "API gateway", "Booking service", "Payments", "Database"],
|
|
71
|
+
"edges": [
|
|
72
|
+
"Web app>API gateway",
|
|
73
|
+
"API gateway>Booking service",
|
|
74
|
+
"API gateway>Payments",
|
|
75
|
+
"Booking service>Database"
|
|
76
|
+
],
|
|
77
|
+
"ask": "Next step: pilot with two more sites"
|
|
78
|
+
},
|
|
79
|
+
"meta": { "title": { "$slot": "title" }, "lang": "en" },
|
|
80
|
+
"scenes": [
|
|
81
|
+
{
|
|
82
|
+
"id": "intro",
|
|
83
|
+
"type": "title",
|
|
84
|
+
"props": { "kicker": "Overview", "title": { "$slot": "title" } }
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"id": "goal",
|
|
88
|
+
"type": "callout",
|
|
89
|
+
"props": { "kind": "statement", "label": "Goal", "text": { "$slot": "goal" } }
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "pillars",
|
|
93
|
+
"type": "icon-grid",
|
|
94
|
+
"props": { "title": "What it is made of", "items": { "$slot": "pillars" } }
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "how",
|
|
98
|
+
"type": "steps",
|
|
99
|
+
"props": { "title": "How it works", "layout": "path", "steps": { "$slot": "steps" } }
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"when": "numbers",
|
|
103
|
+
"id": "numbers",
|
|
104
|
+
"type": "kpi-grid",
|
|
105
|
+
"props": { "title": "In numbers", "items": { "$slot": "numbers" } }
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"when": "nodes",
|
|
109
|
+
"id": "diagram",
|
|
110
|
+
"type": "flow",
|
|
111
|
+
"props": {
|
|
112
|
+
"nodes": { "$slot": "nodes", "as": "flow-nodes" },
|
|
113
|
+
"edges": {
|
|
114
|
+
"$slot": "edges",
|
|
115
|
+
"as": "flow-edges",
|
|
116
|
+
"orElse": { "$slot": "nodes", "as": "flow-chain" }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "end",
|
|
122
|
+
"type": "outro",
|
|
123
|
+
"props": { "title": { "$slot": "ask", "orElse": { "$slot": "title" } } }
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Explainer copy guide
|
|
2
|
+
|
|
3
|
+
Tone: calm, direct, plain English. Explain, do not sell.
|
|
4
|
+
|
|
5
|
+
Do
|
|
6
|
+
- One idea per scene. Lead with the subject, then the verb.
|
|
7
|
+
- Title: a topic or a question, at most 8 words.
|
|
8
|
+
- Points and steps: parallel phrases of 3-8 words; no full stops.
|
|
9
|
+
- Numbers: round them and say what they mean; one unit per number.
|
|
10
|
+
- Diagram labels: nouns, 1-3 words ("API gateway", "Order service").
|
|
11
|
+
- Branching diagrams: add `edges` as `from>to|label` items ("Gateway>Database|query"); without `edges` the nodes chain in order.
|
|
12
|
+
- Close with the outcome or the next step, not a recap.
|
|
13
|
+
|
|
14
|
+
Don't
|
|
15
|
+
- No jargon without a short gloss; spell out acronyms once.
|
|
16
|
+
- No more than 5 points, 8 nodes, 40 words per scene.
|
|
17
|
+
- No exclamation marks, emoji, or marketing adjectives (seamless, powerful).
|
|
18
|
+
|
|
19
|
+
Vocabulary: "service" not "microservice", "request" not "payload", "step" not "stage".
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"wordsPerSecond": 2.5,
|
|
3
|
+
"sceneSeconds": {
|
|
4
|
+
"title": { "short": 3, "standard": 4, "long": 5 },
|
|
5
|
+
"bullets": { "short": 6, "standard": 8, "long": 11 },
|
|
6
|
+
"stat": { "short": 4, "standard": 5, "long": 6 },
|
|
7
|
+
"flow": { "short": 4, "standard": 5, "long": 11 },
|
|
8
|
+
"callout": { "short": 4, "standard": 6, "long": 8 },
|
|
9
|
+
"steps": { "short": 6, "standard": 11, "long": 14 },
|
|
10
|
+
"icon-grid": { "short": 5, "standard": 7, "long": 10 },
|
|
11
|
+
"kpi-grid": { "short": 4, "standard": 6, "long": 8 },
|
|
12
|
+
"outro": { "short": 3, "standard": 4, "long": 5 }
|
|
13
|
+
},
|
|
14
|
+
"lengths": {
|
|
15
|
+
"short": { "scenes": [3, 6], "totalSec": [10, 40] },
|
|
16
|
+
"standard": { "scenes": [3, 8], "totalSec": [18, 60] },
|
|
17
|
+
"long": { "scenes": [4, 10], "totalSec": [30, 90] }
|
|
18
|
+
}
|
|
19
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
{
|
|
2
|
+
"templateVersion": 1,
|
|
3
|
+
"id": "explain",
|
|
4
|
+
"version": "2.1.0",
|
|
5
|
+
"title": "Explainer",
|
|
6
|
+
"summary": "Concepts, architectures, how-tos and stakeholder overviews. 16:9, calm, diagram-led.",
|
|
7
|
+
"domains": ["tech", "architecture", "tutorial", "internal-comms"],
|
|
8
|
+
"discover": {
|
|
9
|
+
"useCases": [
|
|
10
|
+
"Explain a concept or technology to people outside the team.",
|
|
11
|
+
"Show how the components of a system connect.",
|
|
12
|
+
"Teach a short how-to in numbered steps.",
|
|
13
|
+
"Give leadership a one-minute overview of a system or programme."
|
|
14
|
+
],
|
|
15
|
+
"audience": ["engineers", "stakeholders", "new-hires", "customers", "students"],
|
|
16
|
+
"goodFor": "One concept, system or process with 3-5 points and one diagram.",
|
|
17
|
+
"notFor": "Heavy numeric analysis (datastory), persuasion (pitch).",
|
|
18
|
+
"tags": [
|
|
19
|
+
"explain",
|
|
20
|
+
"concept",
|
|
21
|
+
"architecture",
|
|
22
|
+
"howto",
|
|
23
|
+
"tutorial",
|
|
24
|
+
"onboarding",
|
|
25
|
+
"diagram",
|
|
26
|
+
"internal"
|
|
27
|
+
],
|
|
28
|
+
"tone": ["calm", "technical"],
|
|
29
|
+
"aspects": ["16:9"]
|
|
30
|
+
},
|
|
31
|
+
"requires": {
|
|
32
|
+
"storyboard": 1,
|
|
33
|
+
"scenes": [
|
|
34
|
+
"title",
|
|
35
|
+
"bullets",
|
|
36
|
+
"flow",
|
|
37
|
+
"stat",
|
|
38
|
+
"outro",
|
|
39
|
+
"callout",
|
|
40
|
+
"steps",
|
|
41
|
+
"icon-grid",
|
|
42
|
+
"kpi-grid"
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"themes": [
|
|
46
|
+
{ "id": "calm-light", "file": "@shared/calm-light.json", "mode": "light", "pair": "calm-dark" },
|
|
47
|
+
{ "id": "calm-dark", "file": "@shared/calm-dark.json", "mode": "dark", "pair": "calm-light" },
|
|
48
|
+
{ "id": "tech-light", "file": "@shared/tech-light.json", "mode": "light", "pair": "tech-dark" },
|
|
49
|
+
{ "id": "tech-dark", "file": "@shared/tech-dark.json", "mode": "dark", "pair": "tech-light" }
|
|
50
|
+
],
|
|
51
|
+
"styles": [
|
|
52
|
+
{ "id": "calm", "file": "styles/calm.json" },
|
|
53
|
+
{ "id": "crisp", "file": "styles/crisp.json" }
|
|
54
|
+
],
|
|
55
|
+
"blueprints": [
|
|
56
|
+
{ "id": "concept", "file": "blueprints/concept.json" },
|
|
57
|
+
{ "id": "architecture", "file": "blueprints/architecture.json" },
|
|
58
|
+
{ "id": "howto", "file": "blueprints/howto.json" },
|
|
59
|
+
{ "id": "overview", "file": "blueprints/overview.json" }
|
|
60
|
+
],
|
|
61
|
+
"pacing": "pacing.json",
|
|
62
|
+
"copy": "copy.md",
|
|
63
|
+
"license": "Apache-2.0"
|
|
64
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "lesson",
|
|
3
|
+
"purpose": "Teach one idea: objectives, a bold definition or rule, an optional code example, and a checked recap.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Teach a lesson in four beats: objectives, concept, example and recap.",
|
|
7
|
+
"Make one definition, rule or formula memorable with a short worked example.",
|
|
8
|
+
"Close a course unit with a checklist of what learners can now do."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["learners", "students", "developers", "new-hires"],
|
|
11
|
+
"goodFor": "One concept with 2-4 objectives, a one-line definition and a recap.",
|
|
12
|
+
"notFor": "Ordered procedures (tutorial), product tours (onboarding), data stories (datastory).",
|
|
13
|
+
"tags": ["lesson", "education", "concept", "explain", "code", "tutorial"],
|
|
14
|
+
"tone": ["calm", "friendly"],
|
|
15
|
+
"aspects": ["16:9"],
|
|
16
|
+
"lengths": {
|
|
17
|
+
"min": 35,
|
|
18
|
+
"max": 90
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"slots": {
|
|
22
|
+
"topic": {
|
|
23
|
+
"type": "text",
|
|
24
|
+
"max": 60,
|
|
25
|
+
"required": true
|
|
26
|
+
},
|
|
27
|
+
"objectives": {
|
|
28
|
+
"type": "text[]",
|
|
29
|
+
"min": 2,
|
|
30
|
+
"max": 4,
|
|
31
|
+
"itemMax": 45,
|
|
32
|
+
"required": true
|
|
33
|
+
},
|
|
34
|
+
"concept": {
|
|
35
|
+
"type": "text",
|
|
36
|
+
"max": 110,
|
|
37
|
+
"required": true
|
|
38
|
+
},
|
|
39
|
+
"label": {
|
|
40
|
+
"type": "text",
|
|
41
|
+
"max": 30,
|
|
42
|
+
"default": "Key idea"
|
|
43
|
+
},
|
|
44
|
+
"code": {
|
|
45
|
+
"type": "text[]",
|
|
46
|
+
"min": 1,
|
|
47
|
+
"max": 14,
|
|
48
|
+
"itemMax": 60,
|
|
49
|
+
"optional": true
|
|
50
|
+
},
|
|
51
|
+
"lang": {
|
|
52
|
+
"type": "enum",
|
|
53
|
+
"values": ["js", "ts", "json", "py", "sh", "plain"],
|
|
54
|
+
"default": "js"
|
|
55
|
+
},
|
|
56
|
+
"file": {
|
|
57
|
+
"type": "text",
|
|
58
|
+
"max": 40,
|
|
59
|
+
"optional": true
|
|
60
|
+
},
|
|
61
|
+
"recap": {
|
|
62
|
+
"type": "text[]",
|
|
63
|
+
"min": 2,
|
|
64
|
+
"max": 4,
|
|
65
|
+
"itemMax": 45,
|
|
66
|
+
"required": true
|
|
67
|
+
},
|
|
68
|
+
"next": {
|
|
69
|
+
"type": "text",
|
|
70
|
+
"max": 60,
|
|
71
|
+
"default": "Next lesson: put it to work"
|
|
72
|
+
},
|
|
73
|
+
"length": {
|
|
74
|
+
"type": "enum",
|
|
75
|
+
"values": ["short", "standard", "long"],
|
|
76
|
+
"default": "standard"
|
|
77
|
+
},
|
|
78
|
+
"style": {
|
|
79
|
+
"type": "enum",
|
|
80
|
+
"values": ["calm", "techdark", "friendly"],
|
|
81
|
+
"default": "calm"
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
"example": {
|
|
85
|
+
"topic": "What is a function",
|
|
86
|
+
"objectives": ["Name the parts of a function", "Call one with inputs", "Use the result"],
|
|
87
|
+
"concept": "A [function] takes [inputs], does one job and returns an [output].",
|
|
88
|
+
"label": "Key idea",
|
|
89
|
+
"code": ["function add(a, b) {", " return a + b", "}", "add(2, 3) // 5"],
|
|
90
|
+
"lang": "js",
|
|
91
|
+
"file": "example.js",
|
|
92
|
+
"recap": ["A function has a name", "Inputs go in brackets", "It returns one result"],
|
|
93
|
+
"next": "Next lesson: put it to work"
|
|
94
|
+
},
|
|
95
|
+
"meta": {
|
|
96
|
+
"title": {
|
|
97
|
+
"$slot": "topic"
|
|
98
|
+
},
|
|
99
|
+
"lang": "en"
|
|
100
|
+
},
|
|
101
|
+
"scenes": [
|
|
102
|
+
{
|
|
103
|
+
"id": "intro",
|
|
104
|
+
"type": "title",
|
|
105
|
+
"props": {
|
|
106
|
+
"kicker": "Lesson",
|
|
107
|
+
"title": {
|
|
108
|
+
"$slot": "topic"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "goals",
|
|
114
|
+
"type": "bullets",
|
|
115
|
+
"props": {
|
|
116
|
+
"title": "You will learn to",
|
|
117
|
+
"items": {
|
|
118
|
+
"$slot": "objectives"
|
|
119
|
+
},
|
|
120
|
+
"marker": "dot"
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "idea",
|
|
125
|
+
"type": "callout",
|
|
126
|
+
"props": {
|
|
127
|
+
"text": {
|
|
128
|
+
"$slot": "concept"
|
|
129
|
+
},
|
|
130
|
+
"kind": "definition",
|
|
131
|
+
"label": {
|
|
132
|
+
"$slot": "label"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"when": "code",
|
|
138
|
+
"id": "example",
|
|
139
|
+
"type": "code",
|
|
140
|
+
"props": {
|
|
141
|
+
"lines": {
|
|
142
|
+
"$slot": "code"
|
|
143
|
+
},
|
|
144
|
+
"lang": {
|
|
145
|
+
"$slot": "lang"
|
|
146
|
+
},
|
|
147
|
+
"file": {
|
|
148
|
+
"$slot": "file"
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "recap",
|
|
154
|
+
"type": "bullets",
|
|
155
|
+
"props": {
|
|
156
|
+
"title": "Recap",
|
|
157
|
+
"items": {
|
|
158
|
+
"$slot": "recap"
|
|
159
|
+
},
|
|
160
|
+
"marker": "check"
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "end",
|
|
165
|
+
"type": "outro",
|
|
166
|
+
"props": {
|
|
167
|
+
"title": {
|
|
168
|
+
"$slot": "next"
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
]
|
|
173
|
+
}
|