@anvpx/motion 0.0.0-stage → 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.
Files changed (225) hide show
  1. package/CATALOG.md +301 -0
  2. package/LICENSE +21 -0
  3. package/README.md +93 -2
  4. package/assets.json +37 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +1 -0
  7. package/dist/main.d.ts +2 -0
  8. package/dist/main.js +46 -0
  9. package/icons/LICENSE-lucide +43 -0
  10. package/icons/icons.json +2711 -0
  11. package/icons/licences.json +1521 -0
  12. package/luts/LICENSE-CC0.txt +20 -0
  13. package/luts/cool.cube +520 -0
  14. package/luts/noir.cube +520 -0
  15. package/luts/warm.cube +520 -0
  16. package/music/LICENSE-CC0.txt +32 -0
  17. package/music/bed-full.wav +0 -0
  18. package/music/bed.wav +0 -0
  19. package/package.json +69 -3
  20. package/packs/INDEX.md +22 -0
  21. package/packs/painted/checklist.md +30 -0
  22. package/packs/painted/examples/dry-ink/storyboard.json +88 -0
  23. package/packs/painted/examples/oil/storyboard.json +89 -0
  24. package/packs/painted/examples/shape-carry/storyboard.json +112 -0
  25. package/packs/painted/examples/stacked-beat/storyboard.json +106 -0
  26. package/packs/painted/examples/staged-read/storyboard.json +105 -0
  27. package/packs/painted/examples/watercolour/storyboard.json +79 -0
  28. package/packs/painted/look.md +71 -0
  29. package/packs/painted/pack.json +46 -0
  30. package/packs/painted/review.md +12 -0
  31. package/packs/painted/voice.md +30 -0
  32. package/plugins/motion-kit/.claude-plugin/plugin.json +5 -0
  33. package/plugins/motion-kit/README.md +31 -0
  34. package/plugins/motion-kit/commands/mk-draft.md +13 -0
  35. package/plugins/motion-kit/commands/mk-new.md +15 -0
  36. package/plugins/motion-kit/commands/mk-render.md +14 -0
  37. package/plugins/motion-kit/skills/motion-kit/SKILL.md +77 -0
  38. package/plugins/motion-kit/skills/motion-kit/references/authoring-scene.md +37 -0
  39. package/plugins/motion-kit/skills/motion-kit/references/authoring-style.md +17 -0
  40. package/plugins/motion-kit/skills/motion-kit/references/common-mistakes.md +73 -0
  41. package/plugins/motion-kit/skills/motion-kit/references/content-pack.md +81 -0
  42. package/plugins/motion-kit/skills/motion-kit/references/faux-ui.md +39 -0
  43. package/plugins/motion-kit/skills/motion-kit/references/free-storyboard.md +15 -0
  44. package/plugins/motion-kit/skills/motion-kit/references/intake.md +18 -0
  45. package/plugins/motion-kit/skills/motion-kit/references/knowledge-routing.md +32 -0
  46. package/plugins/motion-kit/skills/motion-kit/references/outline.md +24 -0
  47. package/plugins/motion-kit/skills/motion-kit/references/patching.md +50 -0
  48. package/plugins/motion-kit/skills/motion-kit/references/patterns.md +55 -0
  49. package/plugins/motion-kit/skills/motion-kit/references/quality-bar.md +61 -0
  50. package/plugins/motion-kit/skills/motion-kit/references/review.md +8 -0
  51. package/plugins/motion-kit/skills/motion-kit/references/scene-recipes.md +300 -0
  52. package/plugins/motion-kit/skills/motion-kit/references/setup.md +16 -0
  53. package/plugins/motion-kit/skills/motion-kit/references/slop.md +38 -0
  54. package/plugins/motion-kit/skills/motion-kit/references/storyboard-json.md +121 -0
  55. package/plugins/motion-kit/skills/motion-kit/references/troubleshooting.md +55 -0
  56. package/plugins/motion-kit/skills/motion-kit/references/voice.md +40 -0
  57. package/plugins/motion-kit/skills/motion-kit/references/worked-example.md +170 -0
  58. package/shared/themes/README.md +5 -0
  59. package/shared/themes/bold-dark.json +362 -0
  60. package/shared/themes/bold-light.json +362 -0
  61. package/shared/themes/calm-dark.json +362 -0
  62. package/shared/themes/calm-light.json +362 -0
  63. package/shared/themes/data-dark.json +360 -0
  64. package/shared/themes/data-light.json +360 -0
  65. package/shared/themes/editorial-dark.json +353 -0
  66. package/shared/themes/editorial-light.json +353 -0
  67. package/shared/themes/fjord-dark.json +124 -0
  68. package/shared/themes/fjord-light.json +124 -0
  69. package/shared/themes/playful-dark.json +362 -0
  70. package/shared/themes/playful-light.json +362 -0
  71. package/shared/themes/pop-dark.json +352 -0
  72. package/shared/themes/pop-light.json +352 -0
  73. package/shared/themes/tech-dark.json +360 -0
  74. package/shared/themes/tech-light.json +360 -0
  75. package/shared/themes/warm-dark.json +368 -0
  76. package/shared/themes/warm-light.json +368 -0
  77. package/skills/motion-kit/SKILL.md +77 -0
  78. package/skills/motion-kit/references/authoring-scene.md +37 -0
  79. package/skills/motion-kit/references/authoring-style.md +17 -0
  80. package/skills/motion-kit/references/common-mistakes.md +73 -0
  81. package/skills/motion-kit/references/content-pack.md +81 -0
  82. package/skills/motion-kit/references/faux-ui.md +39 -0
  83. package/skills/motion-kit/references/free-storyboard.md +15 -0
  84. package/skills/motion-kit/references/intake.md +18 -0
  85. package/skills/motion-kit/references/knowledge-routing.md +32 -0
  86. package/skills/motion-kit/references/outline.md +24 -0
  87. package/skills/motion-kit/references/patching.md +50 -0
  88. package/skills/motion-kit/references/patterns.md +55 -0
  89. package/skills/motion-kit/references/quality-bar.md +61 -0
  90. package/skills/motion-kit/references/review.md +8 -0
  91. package/skills/motion-kit/references/scene-recipes.md +300 -0
  92. package/skills/motion-kit/references/setup.md +16 -0
  93. package/skills/motion-kit/references/slop.md +38 -0
  94. package/skills/motion-kit/references/storyboard-json.md +121 -0
  95. package/skills/motion-kit/references/troubleshooting.md +55 -0
  96. package/skills/motion-kit/references/voice.md +40 -0
  97. package/skills/motion-kit/references/worked-example.md +170 -0
  98. package/stopwords.json +65 -0
  99. package/templates/compare/blueprints/versus.json +79 -0
  100. package/templates/compare/copy.md +18 -0
  101. package/templates/compare/pacing.json +15 -0
  102. package/templates/compare/previews/versus.png +0 -0
  103. package/templates/compare/styles/editorial.json +6 -0
  104. package/templates/compare/styles/punchy.json +6 -0
  105. package/templates/compare/styles/tidy.json +6 -0
  106. package/templates/compare/template.json +52 -0
  107. package/templates/datastory/blueprints/data-story.json +95 -0
  108. package/templates/datastory/blueprints/infographic.json +106 -0
  109. package/templates/datastory/blueprints/trend.json +93 -0
  110. package/templates/datastory/copy.md +16 -0
  111. package/templates/datastory/pacing.json +17 -0
  112. package/templates/datastory/previews/data-story.png +0 -0
  113. package/templates/datastory/previews/infographic.png +0 -0
  114. package/templates/datastory/previews/trend.png +0 -0
  115. package/templates/datastory/styles/clear.json +6 -0
  116. package/templates/datastory/styles/editorial.json +6 -0
  117. package/templates/datastory/styles/pop.json +7 -0
  118. package/templates/datastory/template.json +57 -0
  119. package/templates/event/blueprints/promo.json +71 -0
  120. package/templates/event/blueprints/save-the-date.json +61 -0
  121. package/templates/event/copy.md +16 -0
  122. package/templates/event/pacing.json +15 -0
  123. package/templates/event/previews/promo.png +0 -0
  124. package/templates/event/previews/save-the-date.png +0 -0
  125. package/templates/event/styles/bright.json +6 -0
  126. package/templates/event/styles/pop.json +6 -0
  127. package/templates/event/template.json +37 -0
  128. package/templates/explain/blueprints/architecture.json +76 -0
  129. package/templates/explain/blueprints/concept.json +89 -0
  130. package/templates/explain/blueprints/howto.json +56 -0
  131. package/templates/explain/blueprints/overview.json +126 -0
  132. package/templates/explain/copy.md +19 -0
  133. package/templates/explain/pacing.json +19 -0
  134. package/templates/explain/previews/architecture.png +0 -0
  135. package/templates/explain/previews/concept.png +0 -0
  136. package/templates/explain/previews/howto.png +0 -0
  137. package/templates/explain/previews/overview.png +0 -0
  138. package/templates/explain/styles/calm.json +6 -0
  139. package/templates/explain/styles/crisp.json +6 -0
  140. package/templates/explain/template.json +64 -0
  141. package/templates/guide/blueprints/lesson.json +173 -0
  142. package/templates/guide/blueprints/onboarding.json +80 -0
  143. package/templates/guide/blueprints/tutorial.json +102 -0
  144. package/templates/guide/copy.md +17 -0
  145. package/templates/guide/pacing.json +59 -0
  146. package/templates/guide/previews/lesson.png +0 -0
  147. package/templates/guide/previews/onboarding.png +0 -0
  148. package/templates/guide/previews/tutorial.png +0 -0
  149. package/templates/guide/styles/calm.json +15 -0
  150. package/templates/guide/styles/friendly.json +15 -0
  151. package/templates/guide/styles/techdark.json +15 -0
  152. package/templates/guide/template.json +95 -0
  153. package/templates/pitch/blueprints/feature.json +134 -0
  154. package/templates/pitch/blueprints/launch.json +173 -0
  155. package/templates/pitch/blueprints/pricing.json +141 -0
  156. package/templates/pitch/copy.md +18 -0
  157. package/templates/pitch/pacing.json +59 -0
  158. package/templates/pitch/previews/feature.png +0 -0
  159. package/templates/pitch/previews/launch.png +0 -0
  160. package/templates/pitch/previews/pricing.png +0 -0
  161. package/templates/pitch/styles/polished.json +6 -0
  162. package/templates/pitch/styles/punchy.json +6 -0
  163. package/templates/pitch/styles/teaser.json +12 -0
  164. package/templates/pitch/template.json +45 -0
  165. package/templates/recap/blueprints/news-recap.json +62 -0
  166. package/templates/recap/blueprints/timeline-story.json +94 -0
  167. package/templates/recap/copy.md +16 -0
  168. package/templates/recap/pacing.json +16 -0
  169. package/templates/recap/previews/news-recap.png +0 -0
  170. package/templates/recap/previews/timeline-story.png +0 -0
  171. package/templates/recap/styles/editorial.json +6 -0
  172. package/templates/recap/styles/editorialdark.json +6 -0
  173. package/templates/recap/template.json +50 -0
  174. package/templates/report/blueprints/kpi-review.json +116 -0
  175. package/templates/report/blueprints/status.json +78 -0
  176. package/templates/report/copy.md +17 -0
  177. package/templates/report/pacing.json +16 -0
  178. package/templates/report/previews/kpi-review.png +0 -0
  179. package/templates/report/previews/status.png +0 -0
  180. package/templates/report/styles/exec.json +6 -0
  181. package/templates/report/styles/memo.json +6 -0
  182. package/templates/report/styles/walkthrough.json +6 -0
  183. package/templates/report/template.json +56 -0
  184. package/templates/social/blueprints/announce.json +109 -0
  185. package/templates/social/blueprints/listicle.json +117 -0
  186. package/templates/social/blueprints/tip.json +114 -0
  187. package/templates/social/copy.md +18 -0
  188. package/templates/social/pacing.json +49 -0
  189. package/templates/social/previews/announce.png +0 -0
  190. package/templates/social/previews/listicle.png +0 -0
  191. package/templates/social/previews/tip.png +0 -0
  192. package/templates/social/styles/captioned.json +18 -0
  193. package/templates/social/styles/hook-first.json +15 -0
  194. package/templates/social/styles/techcut.json +15 -0
  195. package/templates/social/template.json +94 -0
  196. package/templates/update/blueprints/announcement.json +57 -0
  197. package/templates/update/blueprints/changelog.json +157 -0
  198. package/templates/update/blueprints/release-notes.json +151 -0
  199. package/templates/update/blueprints/weekly-update.json +88 -0
  200. package/templates/update/copy.md +17 -0
  201. package/templates/update/pacing.json +64 -0
  202. package/templates/update/previews/announcement.png +0 -0
  203. package/templates/update/previews/changelog.png +0 -0
  204. package/templates/update/previews/release-notes.png +0 -0
  205. package/templates/update/previews/weekly-update.png +0 -0
  206. package/templates/update/styles/punchy.json +15 -0
  207. package/templates/update/styles/techdark.json +6 -0
  208. package/templates/update/styles/tidy.json +6 -0
  209. package/templates/update/template.json +67 -0
  210. package/templates/vista/blueprints/spotlight.json +68 -0
  211. package/templates/vista/blueprints/tour.json +84 -0
  212. package/templates/vista/copy.md +18 -0
  213. package/templates/vista/pacing.json +14 -0
  214. package/templates/vista/previews/spotlight.png +0 -0
  215. package/templates/vista/previews/tour.png +0 -0
  216. package/templates/vista/styles/bright.json +6 -0
  217. package/templates/vista/styles/cinematic.json +6 -0
  218. package/templates/vista/template.json +42 -0
  219. package/templates/walkthrough/blueprints/product-tour.json +107 -0
  220. package/templates/walkthrough/copy.md +16 -0
  221. package/templates/walkthrough/pacing.json +16 -0
  222. package/templates/walkthrough/previews/product-tour.png +0 -0
  223. package/templates/walkthrough/styles/calm.json +6 -0
  224. package/templates/walkthrough/styles/deep.json +6 -0
  225. package/templates/walkthrough/template.json +37 -0
@@ -0,0 +1,6 @@
1
+ {
2
+ "direction": { "ease": "out", "move": "push-in", "shot": "medium", "transition": "crossfade" },
3
+ "frame": { "fps": 30, "height": 1080, "width": 1920 },
4
+ "id": "bright",
5
+ "theme": "pop-light"
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "direction": { "ease": "out", "move": "push-in", "shot": "medium", "transition": "cut" },
3
+ "frame": { "fps": 30, "height": 1080, "width": 1920 },
4
+ "id": "pop",
5
+ "theme": "pop-dark"
6
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "blueprints": [
3
+ { "file": "blueprints/promo.json", "id": "promo" },
4
+ { "file": "blueprints/save-the-date.json", "id": "save-the-date" }
5
+ ],
6
+ "copy": "copy.md",
7
+ "discover": {
8
+ "aspects": ["16:9", "1:1"],
9
+ "audience": ["attendees", "community", "customers"],
10
+ "goodFor": "An event with a date, a hook and a short agenda.",
11
+ "notFor": "Recaps of past events (recap), status reports (update).",
12
+ "tags": ["event", "announce", "promo", "marketing", "countdown"],
13
+ "tone": ["punchy", "friendly"],
14
+ "useCases": [
15
+ "Announce an event with its date, place and one hook.",
16
+ "Count down to a launch or a date worth waiting for.",
17
+ "Share a short agenda so guests know what to expect."
18
+ ]
19
+ },
20
+ "domains": ["event", "marketing", "announce"],
21
+ "id": "event",
22
+ "license": "Apache-2.0",
23
+ "pacing": "pacing.json",
24
+ "requires": { "scenes": ["title", "kinetic", "icon-grid", "timeline", "outro"], "storyboard": 1 },
25
+ "styles": [
26
+ { "file": "styles/pop.json", "id": "pop" },
27
+ { "file": "styles/bright.json", "id": "bright" }
28
+ ],
29
+ "summary": "Event announcements: hooks, agendas and countdowns with a clear call to action.",
30
+ "templateVersion": 1,
31
+ "themes": [
32
+ { "file": "@shared/pop-dark.json", "id": "pop-dark", "mode": "dark", "pair": "pop-light" },
33
+ { "file": "@shared/pop-light.json", "id": "pop-light", "mode": "light", "pair": "pop-dark" }
34
+ ],
35
+ "title": "Event",
36
+ "version": "1.0.0"
37
+ }
@@ -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
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "calm",
3
+ "theme": "calm-light",
4
+ "frame": { "width": 1920, "height": 1080, "fps": 30 },
5
+ "direction": { "shot": "medium", "move": "push-in", "ease": "out", "transition": "crossfade" }
6
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "id": "crisp",
3
+ "theme": "tech-dark",
4
+ "frame": { "width": 1920, "height": 1080, "fps": 30 },
5
+ "direction": { "shot": "close", "move": "static", "ease": "spring-snappy", "transition": "cut" }
6
+ }
@@ -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
+ }