@anvpx/motion 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.
Files changed (249) hide show
  1. package/CATALOG.md +301 -0
  2. package/LICENSE +21 -0
  3. package/README.md +95 -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 +39 -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 +81 -0
  38. package/plugins/motion-kit/skills/motion-kit/references/authoring-scene.md +48 -0
  39. package/plugins/motion-kit/skills/motion-kit/references/authoring-style.md +19 -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 +69 -0
  42. package/plugins/motion-kit/skills/motion-kit/references/craft-color.md +50 -0
  43. package/plugins/motion-kit/skills/motion-kit/references/craft-composition.md +52 -0
  44. package/plugins/motion-kit/skills/motion-kit/references/craft-critique.md +68 -0
  45. package/plugins/motion-kit/skills/motion-kit/references/craft-motion.md +55 -0
  46. package/plugins/motion-kit/skills/motion-kit/references/craft-narrative.md +54 -0
  47. package/plugins/motion-kit/skills/motion-kit/references/craft-sound.md +53 -0
  48. package/plugins/motion-kit/skills/motion-kit/references/craft-type.md +54 -0
  49. package/plugins/motion-kit/skills/motion-kit/references/critique-repair.md +46 -0
  50. package/plugins/motion-kit/skills/motion-kit/references/decision-packet.md +59 -0
  51. package/plugins/motion-kit/skills/motion-kit/references/direction.md +84 -0
  52. package/plugins/motion-kit/skills/motion-kit/references/faux-ui.md +39 -0
  53. package/plugins/motion-kit/skills/motion-kit/references/free-storyboard.md +15 -0
  54. package/plugins/motion-kit/skills/motion-kit/references/intake.md +44 -0
  55. package/plugins/motion-kit/skills/motion-kit/references/knowledge-routing.md +58 -0
  56. package/plugins/motion-kit/skills/motion-kit/references/outline.md +34 -0
  57. package/plugins/motion-kit/skills/motion-kit/references/patching.md +50 -0
  58. package/plugins/motion-kit/skills/motion-kit/references/patterns.md +55 -0
  59. package/plugins/motion-kit/skills/motion-kit/references/quality-bar.md +61 -0
  60. package/plugins/motion-kit/skills/motion-kit/references/review.md +8 -0
  61. package/plugins/motion-kit/skills/motion-kit/references/scene-recipes.md +300 -0
  62. package/plugins/motion-kit/skills/motion-kit/references/setup.md +16 -0
  63. package/plugins/motion-kit/skills/motion-kit/references/slop.md +40 -0
  64. package/plugins/motion-kit/skills/motion-kit/references/storyboard-json.md +121 -0
  65. package/plugins/motion-kit/skills/motion-kit/references/themes.md +15 -0
  66. package/plugins/motion-kit/skills/motion-kit/references/troubleshooting.md +55 -0
  67. package/plugins/motion-kit/skills/motion-kit/references/voice.md +61 -0
  68. package/plugins/motion-kit/skills/motion-kit/references/worked-decisions.md +178 -0
  69. package/plugins/motion-kit/skills/motion-kit/references/worked-example.md +170 -0
  70. package/shared/themes/README.md +5 -0
  71. package/shared/themes/bold-dark.json +362 -0
  72. package/shared/themes/bold-light.json +362 -0
  73. package/shared/themes/calm-dark.json +362 -0
  74. package/shared/themes/calm-light.json +362 -0
  75. package/shared/themes/data-dark.json +360 -0
  76. package/shared/themes/data-light.json +360 -0
  77. package/shared/themes/editorial-dark.json +353 -0
  78. package/shared/themes/editorial-light.json +353 -0
  79. package/shared/themes/fjord-dark.json +124 -0
  80. package/shared/themes/fjord-light.json +124 -0
  81. package/shared/themes/playful-dark.json +362 -0
  82. package/shared/themes/playful-light.json +362 -0
  83. package/shared/themes/pop-dark.json +352 -0
  84. package/shared/themes/pop-light.json +352 -0
  85. package/shared/themes/tech-dark.json +360 -0
  86. package/shared/themes/tech-light.json +360 -0
  87. package/shared/themes/warm-dark.json +368 -0
  88. package/shared/themes/warm-light.json +368 -0
  89. package/skills/motion-kit/SKILL.md +81 -0
  90. package/skills/motion-kit/references/authoring-scene.md +48 -0
  91. package/skills/motion-kit/references/authoring-style.md +19 -0
  92. package/skills/motion-kit/references/common-mistakes.md +73 -0
  93. package/skills/motion-kit/references/content-pack.md +69 -0
  94. package/skills/motion-kit/references/craft-color.md +50 -0
  95. package/skills/motion-kit/references/craft-composition.md +52 -0
  96. package/skills/motion-kit/references/craft-critique.md +68 -0
  97. package/skills/motion-kit/references/craft-motion.md +55 -0
  98. package/skills/motion-kit/references/craft-narrative.md +54 -0
  99. package/skills/motion-kit/references/craft-sound.md +53 -0
  100. package/skills/motion-kit/references/craft-type.md +54 -0
  101. package/skills/motion-kit/references/critique-repair.md +46 -0
  102. package/skills/motion-kit/references/decision-packet.md +59 -0
  103. package/skills/motion-kit/references/direction.md +84 -0
  104. package/skills/motion-kit/references/faux-ui.md +39 -0
  105. package/skills/motion-kit/references/free-storyboard.md +15 -0
  106. package/skills/motion-kit/references/intake.md +44 -0
  107. package/skills/motion-kit/references/knowledge-routing.md +58 -0
  108. package/skills/motion-kit/references/outline.md +34 -0
  109. package/skills/motion-kit/references/patching.md +50 -0
  110. package/skills/motion-kit/references/patterns.md +55 -0
  111. package/skills/motion-kit/references/quality-bar.md +61 -0
  112. package/skills/motion-kit/references/review.md +8 -0
  113. package/skills/motion-kit/references/scene-recipes.md +300 -0
  114. package/skills/motion-kit/references/setup.md +16 -0
  115. package/skills/motion-kit/references/slop.md +40 -0
  116. package/skills/motion-kit/references/storyboard-json.md +121 -0
  117. package/skills/motion-kit/references/themes.md +15 -0
  118. package/skills/motion-kit/references/troubleshooting.md +55 -0
  119. package/skills/motion-kit/references/voice.md +61 -0
  120. package/skills/motion-kit/references/worked-decisions.md +178 -0
  121. package/skills/motion-kit/references/worked-example.md +170 -0
  122. package/stopwords.json +65 -0
  123. package/templates/compare/blueprints/versus.json +79 -0
  124. package/templates/compare/copy.md +18 -0
  125. package/templates/compare/pacing.json +15 -0
  126. package/templates/compare/previews/versus.png +0 -0
  127. package/templates/compare/styles/editorial.json +6 -0
  128. package/templates/compare/styles/punchy.json +6 -0
  129. package/templates/compare/styles/tidy.json +6 -0
  130. package/templates/compare/template.json +52 -0
  131. package/templates/datastory/blueprints/data-story.json +95 -0
  132. package/templates/datastory/blueprints/infographic.json +106 -0
  133. package/templates/datastory/blueprints/trend.json +93 -0
  134. package/templates/datastory/copy.md +16 -0
  135. package/templates/datastory/pacing.json +17 -0
  136. package/templates/datastory/previews/data-story.png +0 -0
  137. package/templates/datastory/previews/infographic.png +0 -0
  138. package/templates/datastory/previews/trend.png +0 -0
  139. package/templates/datastory/styles/clear.json +6 -0
  140. package/templates/datastory/styles/editorial.json +6 -0
  141. package/templates/datastory/styles/pop.json +7 -0
  142. package/templates/datastory/template.json +57 -0
  143. package/templates/event/blueprints/promo.json +71 -0
  144. package/templates/event/blueprints/save-the-date.json +61 -0
  145. package/templates/event/copy.md +16 -0
  146. package/templates/event/pacing.json +15 -0
  147. package/templates/event/previews/promo.png +0 -0
  148. package/templates/event/previews/save-the-date.png +0 -0
  149. package/templates/event/styles/bright.json +6 -0
  150. package/templates/event/styles/pop.json +6 -0
  151. package/templates/event/template.json +37 -0
  152. package/templates/explain/blueprints/architecture.json +76 -0
  153. package/templates/explain/blueprints/concept.json +89 -0
  154. package/templates/explain/blueprints/howto.json +56 -0
  155. package/templates/explain/blueprints/overview.json +126 -0
  156. package/templates/explain/copy.md +19 -0
  157. package/templates/explain/pacing.json +19 -0
  158. package/templates/explain/previews/architecture.png +0 -0
  159. package/templates/explain/previews/concept.png +0 -0
  160. package/templates/explain/previews/howto.png +0 -0
  161. package/templates/explain/previews/overview.png +0 -0
  162. package/templates/explain/styles/calm.json +6 -0
  163. package/templates/explain/styles/crisp.json +6 -0
  164. package/templates/explain/template.json +64 -0
  165. package/templates/guide/blueprints/lesson.json +173 -0
  166. package/templates/guide/blueprints/onboarding.json +80 -0
  167. package/templates/guide/blueprints/tutorial.json +102 -0
  168. package/templates/guide/copy.md +17 -0
  169. package/templates/guide/pacing.json +59 -0
  170. package/templates/guide/previews/lesson.png +0 -0
  171. package/templates/guide/previews/onboarding.png +0 -0
  172. package/templates/guide/previews/tutorial.png +0 -0
  173. package/templates/guide/styles/calm.json +15 -0
  174. package/templates/guide/styles/friendly.json +15 -0
  175. package/templates/guide/styles/techdark.json +15 -0
  176. package/templates/guide/template.json +95 -0
  177. package/templates/pitch/blueprints/feature.json +134 -0
  178. package/templates/pitch/blueprints/launch.json +173 -0
  179. package/templates/pitch/blueprints/pricing.json +141 -0
  180. package/templates/pitch/copy.md +18 -0
  181. package/templates/pitch/pacing.json +59 -0
  182. package/templates/pitch/previews/feature.png +0 -0
  183. package/templates/pitch/previews/launch.png +0 -0
  184. package/templates/pitch/previews/pricing.png +0 -0
  185. package/templates/pitch/styles/polished.json +6 -0
  186. package/templates/pitch/styles/punchy.json +6 -0
  187. package/templates/pitch/styles/teaser.json +12 -0
  188. package/templates/pitch/template.json +45 -0
  189. package/templates/recap/blueprints/news-recap.json +62 -0
  190. package/templates/recap/blueprints/timeline-story.json +94 -0
  191. package/templates/recap/copy.md +16 -0
  192. package/templates/recap/pacing.json +16 -0
  193. package/templates/recap/previews/news-recap.png +0 -0
  194. package/templates/recap/previews/timeline-story.png +0 -0
  195. package/templates/recap/styles/editorial.json +6 -0
  196. package/templates/recap/styles/editorialdark.json +6 -0
  197. package/templates/recap/template.json +50 -0
  198. package/templates/report/blueprints/kpi-review.json +116 -0
  199. package/templates/report/blueprints/status.json +78 -0
  200. package/templates/report/copy.md +17 -0
  201. package/templates/report/pacing.json +16 -0
  202. package/templates/report/previews/kpi-review.png +0 -0
  203. package/templates/report/previews/status.png +0 -0
  204. package/templates/report/styles/exec.json +6 -0
  205. package/templates/report/styles/memo.json +6 -0
  206. package/templates/report/styles/walkthrough.json +6 -0
  207. package/templates/report/template.json +56 -0
  208. package/templates/social/blueprints/announce.json +109 -0
  209. package/templates/social/blueprints/listicle.json +117 -0
  210. package/templates/social/blueprints/tip.json +114 -0
  211. package/templates/social/copy.md +18 -0
  212. package/templates/social/pacing.json +49 -0
  213. package/templates/social/previews/announce.png +0 -0
  214. package/templates/social/previews/listicle.png +0 -0
  215. package/templates/social/previews/tip.png +0 -0
  216. package/templates/social/styles/captioned.json +18 -0
  217. package/templates/social/styles/hook-first.json +15 -0
  218. package/templates/social/styles/techcut.json +15 -0
  219. package/templates/social/template.json +94 -0
  220. package/templates/update/blueprints/announcement.json +57 -0
  221. package/templates/update/blueprints/changelog.json +157 -0
  222. package/templates/update/blueprints/release-notes.json +151 -0
  223. package/templates/update/blueprints/weekly-update.json +88 -0
  224. package/templates/update/copy.md +17 -0
  225. package/templates/update/pacing.json +64 -0
  226. package/templates/update/previews/announcement.png +0 -0
  227. package/templates/update/previews/changelog.png +0 -0
  228. package/templates/update/previews/release-notes.png +0 -0
  229. package/templates/update/previews/weekly-update.png +0 -0
  230. package/templates/update/styles/punchy.json +15 -0
  231. package/templates/update/styles/techdark.json +6 -0
  232. package/templates/update/styles/tidy.json +6 -0
  233. package/templates/update/template.json +67 -0
  234. package/templates/vista/blueprints/spotlight.json +68 -0
  235. package/templates/vista/blueprints/tour.json +84 -0
  236. package/templates/vista/copy.md +18 -0
  237. package/templates/vista/pacing.json +14 -0
  238. package/templates/vista/previews/spotlight.png +0 -0
  239. package/templates/vista/previews/tour.png +0 -0
  240. package/templates/vista/styles/bright.json +6 -0
  241. package/templates/vista/styles/cinematic.json +6 -0
  242. package/templates/vista/template.json +42 -0
  243. package/templates/walkthrough/blueprints/product-tour.json +107 -0
  244. package/templates/walkthrough/copy.md +16 -0
  245. package/templates/walkthrough/pacing.json +16 -0
  246. package/templates/walkthrough/previews/product-tour.png +0 -0
  247. package/templates/walkthrough/styles/calm.json +6 -0
  248. package/templates/walkthrough/styles/deep.json +6 -0
  249. package/templates/walkthrough/template.json +37 -0
@@ -0,0 +1,57 @@
1
+ {
2
+ "templateVersion": 1,
3
+ "id": "datastory",
4
+ "version": "1.0.1",
5
+ "title": "Data story",
6
+ "summary": "One insight told with a hook number, a chart and a takeaway; or a shareable infographic. 16:9 and 9:16.",
7
+ "domains": ["data", "media", "communication"],
8
+ "discover": {
9
+ "useCases": [
10
+ "Tell one insight with a hook number, a chart and a single takeaway sentence.",
11
+ "Turn a handful of statistics into a shareable infographic with a share-of-whole chart.",
12
+ "Show how a measure changed over time and what the change implies.",
13
+ "Compare a few items by value and highlight the one that matters."
14
+ ],
15
+ "audience": ["general-public", "readers", "customers", "stakeholders"],
16
+ "goodFor": "One finding or 2-3 statistics with a chart of 2-8 values and a clear implication.",
17
+ "notFor": "Periodic status or KPI reviews (report), step-by-step teaching (guide).",
18
+ "tags": ["data", "chart", "infographic", "ranking", "news", "recap", "kpi", "social"],
19
+ "tone": ["clear", "confident"],
20
+ "aspects": ["16:9", "9:16"]
21
+ },
22
+ "requires": {
23
+ "storyboard": 1,
24
+ "scenes": ["title", "stat", "chart", "callout", "kpi-grid", "icon-grid", "outro"]
25
+ },
26
+ "themes": [
27
+ { "id": "data-light", "file": "@shared/data-light.json", "mode": "light", "pair": "data-dark" },
28
+ { "id": "data-dark", "file": "@shared/data-dark.json", "mode": "dark", "pair": "data-light" },
29
+ {
30
+ "id": "editorial-light",
31
+ "file": "@shared/editorial-light.json",
32
+ "mode": "light",
33
+ "pair": "editorial-dark"
34
+ },
35
+ {
36
+ "id": "editorial-dark",
37
+ "file": "@shared/editorial-dark.json",
38
+ "mode": "dark",
39
+ "pair": "editorial-light"
40
+ },
41
+ { "id": "pop-light", "file": "@shared/pop-light.json", "mode": "light", "pair": "pop-dark" },
42
+ { "id": "pop-dark", "file": "@shared/pop-dark.json", "mode": "dark", "pair": "pop-light" }
43
+ ],
44
+ "styles": [
45
+ { "id": "clear", "file": "styles/clear.json" },
46
+ { "id": "editorial", "file": "styles/editorial.json" },
47
+ { "id": "pop", "file": "styles/pop.json" }
48
+ ],
49
+ "blueprints": [
50
+ { "id": "data-story", "file": "blueprints/data-story.json" },
51
+ { "id": "trend", "file": "blueprints/trend.json" },
52
+ { "id": "infographic", "file": "blueprints/infographic.json" }
53
+ ],
54
+ "pacing": "pacing.json",
55
+ "copy": "copy.md",
56
+ "license": "Apache-2.0"
57
+ }
@@ -0,0 +1,71 @@
1
+ {
2
+ "discover": {
3
+ "aspects": ["16:9", "1:1"],
4
+ "audience": ["attendees", "community", "customers"],
5
+ "goodFor": "One event hook, its highlights and where to go next.",
6
+ "lengths": { "max": 35, "min": 15 },
7
+ "notFor": "Timed agendas, look-backs (recap).",
8
+ "tags": ["event", "announce", "promo", "marketing", "launch"],
9
+ "tone": ["punchy", "friendly"],
10
+ "useCases": [
11
+ "Announce an event with a hook and two to four highlights.",
12
+ "Tell guests the date and place, then where to sign up.",
13
+ "Tease a launch with one promise and a call to action."
14
+ ]
15
+ },
16
+ "example": {
17
+ "cta": "Get tickets",
18
+ "date": "Saturday, May 16",
19
+ "event": "Spring community fair",
20
+ "highlights": [
21
+ { "detail": "Stalls from nearby growers", "icon": "users", "label": "Market" },
22
+ { "detail": "Sets all afternoon", "icon": "mic", "label": "Live stage" },
23
+ { "detail": "Draw at five", "icon": "sparkles", "label": "Raffle" }
24
+ ],
25
+ "hook": ["Fresh", "Local", "Together"],
26
+ "place": "Riverside park"
27
+ },
28
+ "id": "promo",
29
+ "meta": { "lang": "en", "title": { "$slot": "event" } },
30
+ "purpose": "Hype an event in 15-35s: a hook, highlights and the call to action.",
31
+ "scenes": [
32
+ {
33
+ "id": "intro",
34
+ "props": {
35
+ "kicker": { "$slot": "date" },
36
+ "subtitle": { "$slot": "place" },
37
+ "title": { "$slot": "event" }
38
+ },
39
+ "type": "title"
40
+ },
41
+ {
42
+ "id": "hook",
43
+ "props": { "mode": "slam", "words": { "$slot": "hook" } },
44
+ "type": "kinetic",
45
+ "when": "hook"
46
+ },
47
+ {
48
+ "id": "highlights",
49
+ "props": { "items": { "$slot": "highlights" }, "title": "What to expect" },
50
+ "type": "icon-grid"
51
+ },
52
+ { "id": "end", "props": { "title": { "$slot": "cta" } }, "type": "outro" }
53
+ ],
54
+ "slots": {
55
+ "cta": { "max": 36, "required": true, "type": "text" },
56
+ "date": { "max": 40, "required": true, "type": "text" },
57
+ "event": { "max": 40, "required": true, "type": "text" },
58
+ "highlights": {
59
+ "fields": { "detail": "text", "icon": "text", "label": "text" },
60
+ "list": true,
61
+ "max": 4,
62
+ "min": 2,
63
+ "required": true,
64
+ "type": "object"
65
+ },
66
+ "hook": { "itemMax": 14, "max": 4, "min": 1, "optional": true, "type": "text[]" },
67
+ "length": { "default": "standard", "type": "enum", "values": ["short", "standard", "long"] },
68
+ "place": { "max": 60, "optional": true, "type": "text" },
69
+ "style": { "default": "pop", "type": "enum", "values": ["pop", "bright"] }
70
+ }
71
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "discover": {
3
+ "aspects": ["16:9", "1:1"],
4
+ "audience": ["attendees", "community", "customers"],
5
+ "goodFor": "An event date with a 2-5 item timed agenda.",
6
+ "lengths": { "max": 40, "min": 20 },
7
+ "notFor": "Hype without details (promo), look-backs (recap).",
8
+ "tags": ["event", "announce", "timeline", "countdown"],
9
+ "tone": ["punchy", "friendly"],
10
+ "useCases": [
11
+ "Share an event date with a short timed agenda.",
12
+ "Tell guests when to arrive and what happens first.",
13
+ "Send a save-the-date that ends with a call to action."
14
+ ]
15
+ },
16
+ "example": {
17
+ "agenda": [
18
+ { "detail": "Food stalls and crafts", "label": "Gates open", "when": "10:00" },
19
+ { "detail": "Local bands play", "label": "Main stage", "when": "12:00" },
20
+ { "detail": "Prizes from neighbors", "label": "Raffle draw", "when": "15:00" }
21
+ ],
22
+ "cta": "See you there",
23
+ "date": "Saturday, May 16",
24
+ "event": "Spring community fair"
25
+ },
26
+ "id": "save-the-date",
27
+ "meta": { "lang": "en", "title": { "$slot": "event" } },
28
+ "purpose": "Share the essentials in 20-40s: the event, its date and a short agenda.",
29
+ "scenes": [
30
+ {
31
+ "id": "intro",
32
+ "props": {
33
+ "kicker": "Save the date",
34
+ "subtitle": { "$slot": "date" },
35
+ "title": { "$slot": "event" }
36
+ },
37
+ "type": "title"
38
+ },
39
+ {
40
+ "id": "agenda",
41
+ "props": { "items": { "$slot": "agenda" }, "title": "Agenda" },
42
+ "type": "timeline"
43
+ },
44
+ { "id": "end", "props": { "title": { "$slot": "cta" } }, "type": "outro" }
45
+ ],
46
+ "slots": {
47
+ "agenda": {
48
+ "fields": { "detail": "text", "label": "text", "when": "text" },
49
+ "list": true,
50
+ "max": 5,
51
+ "min": 2,
52
+ "required": true,
53
+ "type": "object"
54
+ },
55
+ "cta": { "max": 40, "required": true, "type": "text" },
56
+ "date": { "max": 40, "required": true, "type": "text" },
57
+ "event": { "max": 40, "required": true, "type": "text" },
58
+ "length": { "default": "standard", "type": "enum", "values": ["short", "standard", "long"] },
59
+ "style": { "default": "pop", "type": "enum", "values": ["pop", "bright"] }
60
+ }
61
+ }
@@ -0,0 +1,16 @@
1
+ # Event copy guide
2
+
3
+ Tone: punchy, friendly, concrete. Name the date and the place, then the hook.
4
+
5
+ Do
6
+ - Title: the event name in at most 8 words; date and place stay exact.
7
+ - Hook: one promise per beat, each beat at most 3 words.
8
+ - Highlights: each highlight is a label plus one short detail.
9
+ - Close with a call to action of 2-5 words.
10
+
11
+ Don't
12
+ - No more than 5 agenda items, one idea per highlight, no new facts at the close.
13
+ - No superlatives you cannot prove; no invented dates, venues or prices.
14
+ - No exclamation marks, emoji, or "simply", "just", "easy".
15
+
16
+ Vocabulary: "guests" not "users", "agenda" not "rundown", "join" not "leverage".
@@ -0,0 +1,15 @@
1
+ {
2
+ "lengths": {
3
+ "long": { "scenes": [4, 7], "totalSec": [25, 80] },
4
+ "short": { "scenes": [3, 5], "totalSec": [10, 35] },
5
+ "standard": { "scenes": [3, 6], "totalSec": [15, 55] }
6
+ },
7
+ "sceneSeconds": {
8
+ "icon-grid": { "long": 10, "short": 5, "standard": 7 },
9
+ "kinetic": { "long": 5, "short": 3, "standard": 4 },
10
+ "outro": { "long": 5, "short": 3, "standard": 4 },
11
+ "timeline": { "long": 14, "short": 7, "standard": 10 },
12
+ "title": { "long": 5, "short": 3, "standard": 4 }
13
+ },
14
+ "wordsPerSecond": 2.5
15
+ }
@@ -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
+ }