@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.
- package/CATALOG.md +301 -0
- package/LICENSE +21 -0
- package/README.md +93 -2
- package/assets.json +37 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +46 -0
- package/icons/LICENSE-lucide +43 -0
- package/icons/icons.json +2711 -0
- package/icons/licences.json +1521 -0
- package/luts/LICENSE-CC0.txt +20 -0
- package/luts/cool.cube +520 -0
- package/luts/noir.cube +520 -0
- package/luts/warm.cube +520 -0
- package/music/LICENSE-CC0.txt +32 -0
- package/music/bed-full.wav +0 -0
- package/music/bed.wav +0 -0
- package/package.json +69 -3
- package/packs/INDEX.md +22 -0
- package/packs/painted/checklist.md +30 -0
- package/packs/painted/examples/dry-ink/storyboard.json +88 -0
- package/packs/painted/examples/oil/storyboard.json +89 -0
- package/packs/painted/examples/shape-carry/storyboard.json +112 -0
- package/packs/painted/examples/stacked-beat/storyboard.json +106 -0
- package/packs/painted/examples/staged-read/storyboard.json +105 -0
- package/packs/painted/examples/watercolour/storyboard.json +79 -0
- package/packs/painted/look.md +71 -0
- package/packs/painted/pack.json +46 -0
- package/packs/painted/review.md +12 -0
- package/packs/painted/voice.md +30 -0
- package/plugins/motion-kit/.claude-plugin/plugin.json +5 -0
- package/plugins/motion-kit/README.md +31 -0
- package/plugins/motion-kit/commands/mk-draft.md +13 -0
- package/plugins/motion-kit/commands/mk-new.md +15 -0
- package/plugins/motion-kit/commands/mk-render.md +14 -0
- package/plugins/motion-kit/skills/motion-kit/SKILL.md +77 -0
- package/plugins/motion-kit/skills/motion-kit/references/authoring-scene.md +37 -0
- package/plugins/motion-kit/skills/motion-kit/references/authoring-style.md +17 -0
- package/plugins/motion-kit/skills/motion-kit/references/common-mistakes.md +73 -0
- package/plugins/motion-kit/skills/motion-kit/references/content-pack.md +81 -0
- package/plugins/motion-kit/skills/motion-kit/references/faux-ui.md +39 -0
- package/plugins/motion-kit/skills/motion-kit/references/free-storyboard.md +15 -0
- package/plugins/motion-kit/skills/motion-kit/references/intake.md +18 -0
- package/plugins/motion-kit/skills/motion-kit/references/knowledge-routing.md +32 -0
- package/plugins/motion-kit/skills/motion-kit/references/outline.md +24 -0
- package/plugins/motion-kit/skills/motion-kit/references/patching.md +50 -0
- package/plugins/motion-kit/skills/motion-kit/references/patterns.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/quality-bar.md +61 -0
- package/plugins/motion-kit/skills/motion-kit/references/review.md +8 -0
- package/plugins/motion-kit/skills/motion-kit/references/scene-recipes.md +300 -0
- package/plugins/motion-kit/skills/motion-kit/references/setup.md +16 -0
- package/plugins/motion-kit/skills/motion-kit/references/slop.md +38 -0
- package/plugins/motion-kit/skills/motion-kit/references/storyboard-json.md +121 -0
- package/plugins/motion-kit/skills/motion-kit/references/troubleshooting.md +55 -0
- package/plugins/motion-kit/skills/motion-kit/references/voice.md +40 -0
- package/plugins/motion-kit/skills/motion-kit/references/worked-example.md +170 -0
- 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/skills/motion-kit/SKILL.md +77 -0
- package/skills/motion-kit/references/authoring-scene.md +37 -0
- package/skills/motion-kit/references/authoring-style.md +17 -0
- package/skills/motion-kit/references/common-mistakes.md +73 -0
- package/skills/motion-kit/references/content-pack.md +81 -0
- package/skills/motion-kit/references/faux-ui.md +39 -0
- package/skills/motion-kit/references/free-storyboard.md +15 -0
- package/skills/motion-kit/references/intake.md +18 -0
- package/skills/motion-kit/references/knowledge-routing.md +32 -0
- package/skills/motion-kit/references/outline.md +24 -0
- package/skills/motion-kit/references/patching.md +50 -0
- package/skills/motion-kit/references/patterns.md +55 -0
- package/skills/motion-kit/references/quality-bar.md +61 -0
- package/skills/motion-kit/references/review.md +8 -0
- package/skills/motion-kit/references/scene-recipes.md +300 -0
- package/skills/motion-kit/references/setup.md +16 -0
- package/skills/motion-kit/references/slop.md +38 -0
- package/skills/motion-kit/references/storyboard-json.md +121 -0
- package/skills/motion-kit/references/troubleshooting.md +55 -0
- package/skills/motion-kit/references/voice.md +40 -0
- package/skills/motion-kit/references/worked-example.md +170 -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
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"templateVersion": 1,
|
|
3
|
+
"id": "compare",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"title": "Compare",
|
|
6
|
+
"summary": "Two options side by side with a clear verdict. Calm, editorial or punchy.",
|
|
7
|
+
"domains": ["decision", "product", "analysis"],
|
|
8
|
+
"discover": {
|
|
9
|
+
"useCases": [
|
|
10
|
+
"Put two options side by side and name a winner.",
|
|
11
|
+
"Weigh alternatives for a buying or planning decision with a clear verdict.",
|
|
12
|
+
"Back a recommendation with two to four headline numbers."
|
|
13
|
+
],
|
|
14
|
+
"audience": ["buyers", "teams", "readers", "stakeholders"],
|
|
15
|
+
"goodFor": "Two options with one to five points each and a one-line verdict.",
|
|
16
|
+
"notFor": "Persuading an audience (pitch), long data analysis (datastory).",
|
|
17
|
+
"tags": ["compare", "versus", "review", "before-after", "kpi", "sales"],
|
|
18
|
+
"tone": ["calm", "balanced"],
|
|
19
|
+
"aspects": ["16:9", "1:1"]
|
|
20
|
+
},
|
|
21
|
+
"requires": {
|
|
22
|
+
"storyboard": 1,
|
|
23
|
+
"scenes": ["title", "compare", "kpi-grid", "callout", "outro"]
|
|
24
|
+
},
|
|
25
|
+
"themes": [
|
|
26
|
+
{ "id": "calm-light", "file": "@shared/calm-light.json", "mode": "light", "pair": "calm-dark" },
|
|
27
|
+
{ "id": "calm-dark", "file": "@shared/calm-dark.json", "mode": "dark", "pair": "calm-light" },
|
|
28
|
+
{
|
|
29
|
+
"id": "editorial-light",
|
|
30
|
+
"file": "@shared/editorial-light.json",
|
|
31
|
+
"mode": "light",
|
|
32
|
+
"pair": "editorial-dark"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "editorial-dark",
|
|
36
|
+
"file": "@shared/editorial-dark.json",
|
|
37
|
+
"mode": "dark",
|
|
38
|
+
"pair": "editorial-light"
|
|
39
|
+
},
|
|
40
|
+
{ "id": "tech-light", "file": "@shared/tech-light.json", "mode": "light", "pair": "tech-dark" },
|
|
41
|
+
{ "id": "tech-dark", "file": "@shared/tech-dark.json", "mode": "dark", "pair": "tech-light" }
|
|
42
|
+
],
|
|
43
|
+
"styles": [
|
|
44
|
+
{ "id": "tidy", "file": "styles/tidy.json" },
|
|
45
|
+
{ "id": "editorial", "file": "styles/editorial.json" },
|
|
46
|
+
{ "id": "punchy", "file": "styles/punchy.json" }
|
|
47
|
+
],
|
|
48
|
+
"blueprints": [{ "id": "versus", "file": "blueprints/versus.json" }],
|
|
49
|
+
"pacing": "pacing.json",
|
|
50
|
+
"copy": "copy.md",
|
|
51
|
+
"license": "Apache-2.0"
|
|
52
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "data-story",
|
|
3
|
+
"purpose": "Tell one finding: a hook number, a bar or donut chart of 2-6 values, a takeaway sentence and the implication.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Tell one insight with a hook number, a chart and a single takeaway sentence.",
|
|
7
|
+
"Show a share or composition of a whole and say what it implies.",
|
|
8
|
+
"Compare a few items by value and highlight the one that matters."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["general-public", "readers", "stakeholders"],
|
|
11
|
+
"goodFor": "One finding with a hook number and a chart of 2-6 values.",
|
|
12
|
+
"notFor": "Change over time (trend), several statistics at once (infographic).",
|
|
13
|
+
"tags": ["data", "chart", "ranking", "news", "recap", "social"],
|
|
14
|
+
"tone": ["clear", "confident"],
|
|
15
|
+
"aspects": ["16:9", "9:16"],
|
|
16
|
+
"lengths": { "min": 20, "max": 55 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"headline": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"hook": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"fields": { "value": "text", "unit": "text", "label": "text", "context": "text" },
|
|
23
|
+
"required": true
|
|
24
|
+
},
|
|
25
|
+
"kind": { "type": "enum", "values": ["bar", "donut"], "default": "bar" },
|
|
26
|
+
"chartTitle": { "type": "text", "max": 50, "required": true },
|
|
27
|
+
"unit": { "type": "text", "max": 12, "default": "%" },
|
|
28
|
+
"data": {
|
|
29
|
+
"type": "object",
|
|
30
|
+
"fields": { "label": "text", "value": "number" },
|
|
31
|
+
"list": true,
|
|
32
|
+
"min": 2,
|
|
33
|
+
"max": 6,
|
|
34
|
+
"required": true
|
|
35
|
+
},
|
|
36
|
+
"highlight": { "type": "number", "min": 0, "max": 5, "int": true, "default": 0 },
|
|
37
|
+
"takeaway": { "type": "text", "max": 110, "required": true },
|
|
38
|
+
"implication": { "type": "text", "max": 60, "required": true },
|
|
39
|
+
"source": { "type": "text", "max": 70, "required": true },
|
|
40
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
41
|
+
"style": { "type": "enum", "values": ["clear", "editorial", "pop"], "default": "clear" }
|
|
42
|
+
},
|
|
43
|
+
"example": {
|
|
44
|
+
"headline": "Where the time goes",
|
|
45
|
+
"hook": {
|
|
46
|
+
"value": "62",
|
|
47
|
+
"unit": "%",
|
|
48
|
+
"label": "of the workday",
|
|
49
|
+
"context": "is spent outside focused work"
|
|
50
|
+
},
|
|
51
|
+
"kind": "donut",
|
|
52
|
+
"chartTitle": "Share of the day by activity",
|
|
53
|
+
"unit": "%",
|
|
54
|
+
"data": [
|
|
55
|
+
{ "label": "Meetings", "value": 30 },
|
|
56
|
+
{ "label": "Messages", "value": 20 },
|
|
57
|
+
{ "label": "Focus work", "value": 38 },
|
|
58
|
+
{ "label": "Admin", "value": 12 }
|
|
59
|
+
],
|
|
60
|
+
"highlight": 2,
|
|
61
|
+
"takeaway": "Only [38%] of the day goes to focused work",
|
|
62
|
+
"implication": "Protect two focus blocks a day",
|
|
63
|
+
"source": "Illustrative sample data"
|
|
64
|
+
},
|
|
65
|
+
"meta": { "title": { "$slot": "headline" }, "lang": "en" },
|
|
66
|
+
"scenes": [
|
|
67
|
+
{
|
|
68
|
+
"id": "intro",
|
|
69
|
+
"type": "title",
|
|
70
|
+
"props": { "kicker": "Data story", "title": { "$slot": "headline" } }
|
|
71
|
+
},
|
|
72
|
+
{ "id": "hook", "type": "stat", "props": { "$spread": "hook" } },
|
|
73
|
+
{
|
|
74
|
+
"id": "chart",
|
|
75
|
+
"type": "chart",
|
|
76
|
+
"props": {
|
|
77
|
+
"kind": { "$slot": "kind" },
|
|
78
|
+
"title": { "$slot": "chartTitle" },
|
|
79
|
+
"unit": { "$slot": "unit" },
|
|
80
|
+
"data": { "$slot": "data" },
|
|
81
|
+
"highlight": { "$slot": "highlight" }
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": "takeaway",
|
|
86
|
+
"type": "callout",
|
|
87
|
+
"props": { "text": { "$slot": "takeaway" }, "kind": "statement", "label": "Takeaway" }
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "end",
|
|
91
|
+
"type": "outro",
|
|
92
|
+
"props": { "title": { "$slot": "implication" }, "lines": [{ "$slot": "source" }] }
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "infographic",
|
|
3
|
+
"purpose": "A shareable infographic: 2-3 big numbers, an optional share-of-whole donut, 2-4 icon facts and a source.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Turn a handful of statistics into a shareable infographic with a share-of-whole chart.",
|
|
7
|
+
"Present two or three big numbers and the facts that explain them.",
|
|
8
|
+
"Summarise a survey or study for readers who skim."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["general-public", "readers", "customers"],
|
|
11
|
+
"goodFor": "2-3 big numbers, an optional breakdown of 2-6 parts and 2-4 facts.",
|
|
12
|
+
"notFor": "A single finding told with one visual (data-story), periodic results (report).",
|
|
13
|
+
"tags": ["infographic", "data", "chart", "survey", "social", "kpi"],
|
|
14
|
+
"tone": ["clear", "confident"],
|
|
15
|
+
"aspects": ["16:9", "9:16"],
|
|
16
|
+
"lengths": { "min": 25, "max": 70 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"headline": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"big": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"fields": { "value": "text", "unit": "text", "label": "text" },
|
|
23
|
+
"list": true,
|
|
24
|
+
"min": 2,
|
|
25
|
+
"max": 3,
|
|
26
|
+
"required": true
|
|
27
|
+
},
|
|
28
|
+
"partsTitle": { "type": "text", "max": 50, "default": "How it breaks down" },
|
|
29
|
+
"parts": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"fields": { "label": "text", "value": "number" },
|
|
32
|
+
"list": true,
|
|
33
|
+
"min": 2,
|
|
34
|
+
"max": 6,
|
|
35
|
+
"optional": true
|
|
36
|
+
},
|
|
37
|
+
"facts": {
|
|
38
|
+
"type": "object",
|
|
39
|
+
"fields": { "icon": "text", "label": "text", "detail": "text" },
|
|
40
|
+
"list": true,
|
|
41
|
+
"min": 2,
|
|
42
|
+
"max": 4,
|
|
43
|
+
"required": true
|
|
44
|
+
},
|
|
45
|
+
"highlight": { "type": "number", "min": 0, "max": 5, "int": true, "default": 0 },
|
|
46
|
+
"source": { "type": "text", "max": 70, "required": true },
|
|
47
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
48
|
+
"style": { "type": "enum", "values": ["clear", "editorial", "pop"], "default": "clear" }
|
|
49
|
+
},
|
|
50
|
+
"example": {
|
|
51
|
+
"headline": "A year of remote work",
|
|
52
|
+
"big": [
|
|
53
|
+
{ "value": "72", "unit": "%", "label": "Prefer hybrid" },
|
|
54
|
+
{ "value": "5", "unit": "days", "label": "Saved a month" },
|
|
55
|
+
{ "value": "3", "unit": "x", "label": "More async chat" }
|
|
56
|
+
],
|
|
57
|
+
"partsTitle": "Preferred work setup",
|
|
58
|
+
"parts": [
|
|
59
|
+
{ "label": "Hybrid", "value": 72 },
|
|
60
|
+
{ "label": "Remote", "value": 18 },
|
|
61
|
+
{ "label": "Office", "value": 10 }
|
|
62
|
+
],
|
|
63
|
+
"highlight": 0,
|
|
64
|
+
"facts": [
|
|
65
|
+
{ "icon": "clock", "label": "Commute", "detail": "Time saved" },
|
|
66
|
+
{ "icon": "users", "label": "Meetings", "detail": "Fewer" },
|
|
67
|
+
{ "icon": "house", "label": "Focus", "detail": "Quiet home" }
|
|
68
|
+
],
|
|
69
|
+
"source": "Illustrative sample data"
|
|
70
|
+
},
|
|
71
|
+
"meta": { "title": { "$slot": "headline" }, "lang": "en" },
|
|
72
|
+
"scenes": [
|
|
73
|
+
{
|
|
74
|
+
"id": "intro",
|
|
75
|
+
"type": "title",
|
|
76
|
+
"props": { "kicker": "In numbers", "title": { "$slot": "headline" } }
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"id": "numbers",
|
|
80
|
+
"type": "kpi-grid",
|
|
81
|
+
"props": { "title": "The big numbers", "items": { "$slot": "big" } }
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"when": "parts",
|
|
85
|
+
"id": "mix",
|
|
86
|
+
"type": "chart",
|
|
87
|
+
"props": {
|
|
88
|
+
"kind": "donut",
|
|
89
|
+
"title": { "$slot": "partsTitle" },
|
|
90
|
+
"unit": "%",
|
|
91
|
+
"data": { "$slot": "parts" },
|
|
92
|
+
"highlight": { "$slot": "highlight" }
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"id": "facts",
|
|
97
|
+
"type": "icon-grid",
|
|
98
|
+
"props": { "title": "Behind the numbers", "items": { "$slot": "facts" } }
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": "end",
|
|
102
|
+
"type": "outro",
|
|
103
|
+
"props": { "title": "Source", "lines": [{ "$slot": "source" }] }
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "trend",
|
|
3
|
+
"purpose": "Show change over time: a hook number, a column chart of 3-8 periods, a takeaway sentence and the implication.",
|
|
4
|
+
"discover": {
|
|
5
|
+
"useCases": [
|
|
6
|
+
"Show how a measure changed over time and what the change implies.",
|
|
7
|
+
"Explain a rise or fall with one column chart and a single sentence of meaning.",
|
|
8
|
+
"Recap a period's trajectory for readers who only have half a minute."
|
|
9
|
+
],
|
|
10
|
+
"audience": ["general-public", "readers", "stakeholders"],
|
|
11
|
+
"goodFor": "One measure over 3-8 periods with a clear direction.",
|
|
12
|
+
"notFor": "Share of a whole or a ranking (data-story), many statistics (infographic).",
|
|
13
|
+
"tags": ["data", "chart", "news", "recap", "timeline", "kpi"],
|
|
14
|
+
"tone": ["clear", "confident"],
|
|
15
|
+
"aspects": ["16:9", "9:16"],
|
|
16
|
+
"lengths": { "min": 20, "max": 55 }
|
|
17
|
+
},
|
|
18
|
+
"slots": {
|
|
19
|
+
"headline": { "type": "text", "max": 60, "required": true },
|
|
20
|
+
"hook": {
|
|
21
|
+
"type": "object",
|
|
22
|
+
"fields": { "value": "text", "unit": "text", "label": "text", "context": "text" },
|
|
23
|
+
"required": true
|
|
24
|
+
},
|
|
25
|
+
"chartTitle": { "type": "text", "max": 50, "required": true },
|
|
26
|
+
"unit": { "type": "text", "max": 12, "default": "" },
|
|
27
|
+
"data": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"fields": { "label": "text", "value": "number" },
|
|
30
|
+
"list": true,
|
|
31
|
+
"min": 3,
|
|
32
|
+
"max": 8,
|
|
33
|
+
"required": true
|
|
34
|
+
},
|
|
35
|
+
"takeaway": { "type": "text", "max": 110, "required": true },
|
|
36
|
+
"implication": { "type": "text", "max": 60, "required": true },
|
|
37
|
+
"source": { "type": "text", "max": 70, "required": true },
|
|
38
|
+
"length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
|
|
39
|
+
"style": { "type": "enum", "values": ["clear", "editorial", "pop"], "default": "clear" }
|
|
40
|
+
},
|
|
41
|
+
"example": {
|
|
42
|
+
"headline": "Reading time is shrinking",
|
|
43
|
+
"hook": {
|
|
44
|
+
"value": "9",
|
|
45
|
+
"unit": "min",
|
|
46
|
+
"label": "a day",
|
|
47
|
+
"context": "average reading time, down from 15"
|
|
48
|
+
},
|
|
49
|
+
"chartTitle": "Average minutes read per day",
|
|
50
|
+
"unit": "min",
|
|
51
|
+
"data": [
|
|
52
|
+
{ "label": "2019", "value": 15 },
|
|
53
|
+
{ "label": "2020", "value": 14 },
|
|
54
|
+
{ "label": "2021", "value": 12 },
|
|
55
|
+
{ "label": "2022", "value": 11 },
|
|
56
|
+
{ "label": "2023", "value": 9 }
|
|
57
|
+
],
|
|
58
|
+
"takeaway": "Daily reading time [fell by 40%] in five years",
|
|
59
|
+
"implication": "Shorter formats now win attention",
|
|
60
|
+
"source": "Illustrative sample data"
|
|
61
|
+
},
|
|
62
|
+
"meta": { "title": { "$slot": "headline" }, "lang": "en" },
|
|
63
|
+
"scenes": [
|
|
64
|
+
{
|
|
65
|
+
"id": "intro",
|
|
66
|
+
"type": "title",
|
|
67
|
+
"props": { "kicker": "Trend", "title": { "$slot": "headline" } }
|
|
68
|
+
},
|
|
69
|
+
{ "id": "hook", "type": "stat", "props": { "$spread": "hook" } },
|
|
70
|
+
{
|
|
71
|
+
"id": "chart",
|
|
72
|
+
"type": "chart",
|
|
73
|
+
"props": {
|
|
74
|
+
"kind": "bar",
|
|
75
|
+
"orient": "v",
|
|
76
|
+
"sort": "none",
|
|
77
|
+
"title": { "$slot": "chartTitle" },
|
|
78
|
+
"unit": { "$slot": "unit" },
|
|
79
|
+
"data": { "$slot": "data" }
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "takeaway",
|
|
84
|
+
"type": "callout",
|
|
85
|
+
"props": { "text": { "$slot": "takeaway" }, "kind": "statement", "label": "Takeaway" }
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "end",
|
|
89
|
+
"type": "outro",
|
|
90
|
+
"props": { "title": { "$slot": "implication" }, "lines": [{ "$slot": "source" }] }
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Data story copy guide
|
|
2
|
+
|
|
3
|
+
Tone: clear, confident, plain. One finding per video. The number is the hook; the chart is the proof; the takeaway is the point.
|
|
4
|
+
|
|
5
|
+
Do
|
|
6
|
+
- Hook: one number with its unit and a 2-5 word label ("62%", "of orders arrive late").
|
|
7
|
+
- Takeaway: one sentence, the finding in words, with the key term in [brackets] to be accented.
|
|
8
|
+
- Chart: 2-6 values, labels 1-2 words, unit stated once; highlight the item the story is about.
|
|
9
|
+
- Close with the implication ("what this means"), then the source line exactly as cited.
|
|
10
|
+
|
|
11
|
+
Don't
|
|
12
|
+
- No chart without a takeaway sentence; no takeaway that repeats the chart title.
|
|
13
|
+
- No more than 3 big numbers or 4 facts; split into a second story instead.
|
|
14
|
+
- No invented figures; mark illustrative data as illustrative.
|
|
15
|
+
|
|
16
|
+
Vocabulary: "share" not "proportion", "rose/fell" not "experienced a change".
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"wordsPerSecond": 2.5,
|
|
3
|
+
"sceneSeconds": {
|
|
4
|
+
"title": { "short": 3, "standard": 4, "long": 5 },
|
|
5
|
+
"stat": { "short": 4, "standard": 5, "long": 6 },
|
|
6
|
+
"chart": { "short": 5, "standard": 6, "long": 8 },
|
|
7
|
+
"callout": { "short": 4, "standard": 6, "long": 8 },
|
|
8
|
+
"kpi-grid": { "short": 5, "standard": 6, "long": 7 },
|
|
9
|
+
"icon-grid": { "short": 6, "standard": 8, "long": 10 },
|
|
10
|
+
"outro": { "short": 3, "standard": 4, "long": 5 }
|
|
11
|
+
},
|
|
12
|
+
"lengths": {
|
|
13
|
+
"short": { "scenes": [4, 5], "totalSec": [12, 35] },
|
|
14
|
+
"standard": { "scenes": [4, 6], "totalSec": [20, 50] },
|
|
15
|
+
"long": { "scenes": [5, 6], "totalSec": [35, 70] }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
+
}
|
|
Binary file
|
|
Binary file
|