@anvpx/motion-templates 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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +8 -0
  3. package/dist/index.js +9 -0
  4. package/dist/roots.d.ts +41 -0
  5. package/dist/roots.js +81 -0
  6. package/package.json +34 -3
  7. package/shared/themes/README.md +5 -0
  8. package/shared/themes/bold-dark.json +362 -0
  9. package/shared/themes/bold-light.json +362 -0
  10. package/shared/themes/calm-dark.json +362 -0
  11. package/shared/themes/calm-light.json +362 -0
  12. package/shared/themes/data-dark.json +360 -0
  13. package/shared/themes/data-light.json +360 -0
  14. package/shared/themes/editorial-dark.json +353 -0
  15. package/shared/themes/editorial-light.json +353 -0
  16. package/shared/themes/fjord-dark.json +124 -0
  17. package/shared/themes/fjord-light.json +124 -0
  18. package/shared/themes/playful-dark.json +362 -0
  19. package/shared/themes/playful-light.json +362 -0
  20. package/shared/themes/pop-dark.json +352 -0
  21. package/shared/themes/pop-light.json +352 -0
  22. package/shared/themes/tech-dark.json +360 -0
  23. package/shared/themes/tech-light.json +360 -0
  24. package/shared/themes/warm-dark.json +368 -0
  25. package/shared/themes/warm-light.json +368 -0
  26. package/stopwords.json +65 -0
  27. package/templates/compare/blueprints/versus.json +79 -0
  28. package/templates/compare/copy.md +18 -0
  29. package/templates/compare/pacing.json +15 -0
  30. package/templates/compare/previews/versus.png +0 -0
  31. package/templates/compare/styles/editorial.json +6 -0
  32. package/templates/compare/styles/punchy.json +6 -0
  33. package/templates/compare/styles/tidy.json +6 -0
  34. package/templates/compare/template.json +52 -0
  35. package/templates/datastory/blueprints/data-story.json +95 -0
  36. package/templates/datastory/blueprints/infographic.json +106 -0
  37. package/templates/datastory/blueprints/trend.json +93 -0
  38. package/templates/datastory/copy.md +16 -0
  39. package/templates/datastory/pacing.json +17 -0
  40. package/templates/datastory/previews/data-story.png +0 -0
  41. package/templates/datastory/previews/infographic.png +0 -0
  42. package/templates/datastory/previews/trend.png +0 -0
  43. package/templates/datastory/styles/clear.json +6 -0
  44. package/templates/datastory/styles/editorial.json +6 -0
  45. package/templates/datastory/styles/pop.json +7 -0
  46. package/templates/datastory/template.json +57 -0
  47. package/templates/event/blueprints/promo.json +71 -0
  48. package/templates/event/blueprints/save-the-date.json +61 -0
  49. package/templates/event/copy.md +16 -0
  50. package/templates/event/pacing.json +15 -0
  51. package/templates/event/previews/promo.png +0 -0
  52. package/templates/event/previews/save-the-date.png +0 -0
  53. package/templates/event/styles/bright.json +6 -0
  54. package/templates/event/styles/pop.json +6 -0
  55. package/templates/event/template.json +37 -0
  56. package/templates/explain/blueprints/architecture.json +76 -0
  57. package/templates/explain/blueprints/concept.json +89 -0
  58. package/templates/explain/blueprints/howto.json +56 -0
  59. package/templates/explain/blueprints/overview.json +126 -0
  60. package/templates/explain/copy.md +19 -0
  61. package/templates/explain/pacing.json +19 -0
  62. package/templates/explain/previews/architecture.png +0 -0
  63. package/templates/explain/previews/concept.png +0 -0
  64. package/templates/explain/previews/howto.png +0 -0
  65. package/templates/explain/previews/overview.png +0 -0
  66. package/templates/explain/styles/calm.json +6 -0
  67. package/templates/explain/styles/crisp.json +6 -0
  68. package/templates/explain/template.json +64 -0
  69. package/templates/guide/blueprints/lesson.json +173 -0
  70. package/templates/guide/blueprints/onboarding.json +80 -0
  71. package/templates/guide/blueprints/tutorial.json +102 -0
  72. package/templates/guide/copy.md +17 -0
  73. package/templates/guide/pacing.json +59 -0
  74. package/templates/guide/previews/lesson.png +0 -0
  75. package/templates/guide/previews/onboarding.png +0 -0
  76. package/templates/guide/previews/tutorial.png +0 -0
  77. package/templates/guide/styles/calm.json +15 -0
  78. package/templates/guide/styles/friendly.json +15 -0
  79. package/templates/guide/styles/techdark.json +15 -0
  80. package/templates/guide/template.json +95 -0
  81. package/templates/pitch/blueprints/feature.json +134 -0
  82. package/templates/pitch/blueprints/launch.json +173 -0
  83. package/templates/pitch/blueprints/pricing.json +141 -0
  84. package/templates/pitch/copy.md +18 -0
  85. package/templates/pitch/pacing.json +59 -0
  86. package/templates/pitch/previews/feature.png +0 -0
  87. package/templates/pitch/previews/launch.png +0 -0
  88. package/templates/pitch/previews/pricing.png +0 -0
  89. package/templates/pitch/styles/polished.json +6 -0
  90. package/templates/pitch/styles/punchy.json +6 -0
  91. package/templates/pitch/styles/teaser.json +12 -0
  92. package/templates/pitch/template.json +45 -0
  93. package/templates/recap/blueprints/news-recap.json +62 -0
  94. package/templates/recap/blueprints/timeline-story.json +94 -0
  95. package/templates/recap/copy.md +16 -0
  96. package/templates/recap/pacing.json +16 -0
  97. package/templates/recap/previews/news-recap.png +0 -0
  98. package/templates/recap/previews/timeline-story.png +0 -0
  99. package/templates/recap/styles/editorial.json +6 -0
  100. package/templates/recap/styles/editorialdark.json +6 -0
  101. package/templates/recap/template.json +50 -0
  102. package/templates/report/blueprints/kpi-review.json +116 -0
  103. package/templates/report/blueprints/status.json +78 -0
  104. package/templates/report/copy.md +17 -0
  105. package/templates/report/pacing.json +16 -0
  106. package/templates/report/previews/kpi-review.png +0 -0
  107. package/templates/report/previews/status.png +0 -0
  108. package/templates/report/styles/exec.json +6 -0
  109. package/templates/report/styles/memo.json +6 -0
  110. package/templates/report/styles/walkthrough.json +6 -0
  111. package/templates/report/template.json +56 -0
  112. package/templates/social/blueprints/announce.json +109 -0
  113. package/templates/social/blueprints/listicle.json +117 -0
  114. package/templates/social/blueprints/tip.json +114 -0
  115. package/templates/social/copy.md +18 -0
  116. package/templates/social/pacing.json +49 -0
  117. package/templates/social/previews/announce.png +0 -0
  118. package/templates/social/previews/listicle.png +0 -0
  119. package/templates/social/previews/tip.png +0 -0
  120. package/templates/social/styles/captioned.json +18 -0
  121. package/templates/social/styles/hook-first.json +15 -0
  122. package/templates/social/styles/techcut.json +15 -0
  123. package/templates/social/template.json +94 -0
  124. package/templates/update/blueprints/announcement.json +57 -0
  125. package/templates/update/blueprints/changelog.json +157 -0
  126. package/templates/update/blueprints/release-notes.json +151 -0
  127. package/templates/update/blueprints/weekly-update.json +88 -0
  128. package/templates/update/copy.md +17 -0
  129. package/templates/update/pacing.json +64 -0
  130. package/templates/update/previews/announcement.png +0 -0
  131. package/templates/update/previews/changelog.png +0 -0
  132. package/templates/update/previews/release-notes.png +0 -0
  133. package/templates/update/previews/weekly-update.png +0 -0
  134. package/templates/update/styles/punchy.json +15 -0
  135. package/templates/update/styles/techdark.json +6 -0
  136. package/templates/update/styles/tidy.json +6 -0
  137. package/templates/update/template.json +67 -0
  138. package/templates/vista/blueprints/spotlight.json +68 -0
  139. package/templates/vista/blueprints/tour.json +84 -0
  140. package/templates/vista/copy.md +18 -0
  141. package/templates/vista/pacing.json +14 -0
  142. package/templates/vista/previews/spotlight.png +0 -0
  143. package/templates/vista/previews/tour.png +0 -0
  144. package/templates/vista/styles/bright.json +6 -0
  145. package/templates/vista/styles/cinematic.json +6 -0
  146. package/templates/vista/template.json +42 -0
  147. package/templates/walkthrough/blueprints/product-tour.json +107 -0
  148. package/templates/walkthrough/copy.md +16 -0
  149. package/templates/walkthrough/pacing.json +16 -0
  150. package/templates/walkthrough/previews/product-tour.png +0 -0
  151. package/templates/walkthrough/styles/calm.json +6 -0
  152. package/templates/walkthrough/styles/deep.json +6 -0
  153. package/templates/walkthrough/template.json +37 -0
  154. package/README.md +0 -3
@@ -0,0 +1,114 @@
1
+ {
2
+ "id": "tip",
3
+ "purpose": "A vertical tip clip: a big hook card, 2-4 short tip points, and a call to action.",
4
+ "discover": {
5
+ "useCases": [
6
+ "Share one quick tip as a short vertical clip for TikTok, Reels or Shorts.",
7
+ "Teach a habit or trick in under 30 seconds with a hook and three points.",
8
+ "Turn one piece of advice into a punchy clip that ends with a call to action."
9
+ ],
10
+ "audience": ["followers", "customers", "community"],
11
+ "goodFor": "One idea told as a hook and 2-4 points, 12-26 s, vertical.",
12
+ "notFor": "Step-by-step lessons (guide), long explanations (explain), news (announce).",
13
+ "tags": ["social", "vertical", "tip", "marketing", "lesson"],
14
+ "tone": ["punchy", "friendly"],
15
+ "aspects": ["9:16", "1:1"],
16
+ "lengths": {
17
+ "min": 12,
18
+ "max": 26
19
+ }
20
+ },
21
+ "slots": {
22
+ "hook": {
23
+ "type": "text",
24
+ "max": 50,
25
+ "required": true
26
+ },
27
+ "tips": {
28
+ "type": "text[]",
29
+ "min": 2,
30
+ "max": 4,
31
+ "itemMax": 26,
32
+ "required": true
33
+ },
34
+ "cta": {
35
+ "type": "text",
36
+ "max": 36,
37
+ "required": true
38
+ },
39
+ "handle": {
40
+ "type": "text",
41
+ "max": 24,
42
+ "optional": true
43
+ },
44
+ "platform": {
45
+ "type": "enum",
46
+ "values": ["tiktok", "reels", "shorts"],
47
+ "default": "tiktok"
48
+ },
49
+ "length": {
50
+ "type": "enum",
51
+ "values": ["short", "standard", "long"],
52
+ "default": "standard"
53
+ },
54
+ "style": {
55
+ "type": "enum",
56
+ "values": ["hook-first", "captioned", "techcut"],
57
+ "default": "hook-first"
58
+ }
59
+ },
60
+ "example": {
61
+ "hook": "Stop [doing this]",
62
+ "tips": ["Batch your tasks", "Mute alerts", "Plan tomorrow"],
63
+ "cta": "Follow for more",
64
+ "handle": "@briar.labs"
65
+ },
66
+ "meta": {
67
+ "title": {
68
+ "$slot": "cta"
69
+ },
70
+ "lang": "en"
71
+ },
72
+ "scenes": [
73
+ {
74
+ "id": "hook",
75
+ "type": "callout",
76
+ "props": {
77
+ "kind": "tip",
78
+ "text": {
79
+ "$slot": "hook"
80
+ }
81
+ }
82
+ },
83
+ {
84
+ "id": "tips",
85
+ "type": "bullets",
86
+ "props": {
87
+ "items": {
88
+ "$slot": "tips"
89
+ }
90
+ }
91
+ },
92
+ {
93
+ "id": "progress",
94
+ "layer": "overlay",
95
+ "type": "progress",
96
+ "over": "tips",
97
+ "props": {}
98
+ },
99
+ {
100
+ "id": "end",
101
+ "type": "icon-grid",
102
+ "props": {
103
+ "title": {
104
+ "$slot": "cta"
105
+ },
106
+ "cols": 2,
107
+ "items": [
108
+ { "icon": "bookmark", "label": "Save", "detail": "later" },
109
+ { "icon": "user-plus", "label": "Follow", "detail": { "$slot": "handle" } }
110
+ ]
111
+ }
112
+ }
113
+ ]
114
+ }
@@ -0,0 +1,18 @@
1
+ # Social copy guide
2
+
3
+ Tone: punchy, friendly, direct. Speak to one viewer. The hook is the whole promise.
4
+
5
+ Do
6
+ - Hook in 2-5 words, first second: a claim, a question or a number; wrap the 1-2 key words in [brackets] ("Stop [doing this]").
7
+ - One point per beat: 2-4 words, no full stop. Verbs first ("Batch your tasks").
8
+ - Number items when order matters ("3 habits"); one big number per announcement.
9
+ - End with one action in <= 5 words ("Follow for more", "Save this") and the handle in the optional `handle` slot; each blueprint ends on its own card (tip: save/share/follow; announce: handle + follow line; listicle: hook recap).
10
+ - <= 14 words on screen at once; keep text away from top, bottom and right edges.
11
+
12
+ Don't
13
+ - No hashtags, emoji, links or long sentences on screen.
14
+ - No clickbait you do not pay off; no invented figures.
15
+ - No more than 5 list items or 4 tips (more overflows the safe zone); split a longer list into two clips.
16
+ - 14 words or fewer per scene: labels 1-3 words, tips 2-4 words.
17
+
18
+ Vocabulary: "tip" not "best practice", "save this" not "bookmark for later".
@@ -0,0 +1,49 @@
1
+ {
2
+ "wordsPerSecond": 3,
3
+ "sceneSeconds": {
4
+ "callout": {
5
+ "short": 2,
6
+ "standard": 2.5,
7
+ "long": 3
8
+ },
9
+ "bullets": {
10
+ "short": 6,
11
+ "standard": 10,
12
+ "long": 13
13
+ },
14
+ "stat": {
15
+ "short": 4,
16
+ "standard": 5,
17
+ "long": 6
18
+ },
19
+ "icon-grid": {
20
+ "short": 3,
21
+ "standard": 4,
22
+ "long": 5
23
+ },
24
+ "title": {
25
+ "short": 3,
26
+ "standard": 4,
27
+ "long": 5
28
+ },
29
+ "outro": {
30
+ "short": 3,
31
+ "standard": 4,
32
+ "long": 5
33
+ }
34
+ },
35
+ "lengths": {
36
+ "short": {
37
+ "scenes": [3, 4],
38
+ "totalSec": [8, 18]
39
+ },
40
+ "standard": {
41
+ "scenes": [3, 4],
42
+ "totalSec": [10, 28]
43
+ },
44
+ "long": {
45
+ "scenes": [3, 4],
46
+ "totalSec": [14, 45]
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "captioned",
3
+ "theme": "bold-dark",
4
+ "direction": {
5
+ "shot": "close",
6
+ "move": "push-in",
7
+ "ease": "spring-snappy",
8
+ "transition": "push"
9
+ },
10
+ "props": {
11
+ "bullets": {
12
+ "marker": "number"
13
+ },
14
+ "progress": {
15
+ "color": "accent2"
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "hook-first",
3
+ "theme": "pop-dark",
4
+ "direction": {
5
+ "shot": "close",
6
+ "move": "push-in",
7
+ "ease": "spring-snappy",
8
+ "transition": "cut"
9
+ },
10
+ "props": {
11
+ "progress": {
12
+ "color": "accent"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "id": "techcut",
3
+ "theme": "tech-dark",
4
+ "direction": {
5
+ "shot": "close",
6
+ "move": "push-in",
7
+ "ease": "spring-snappy",
8
+ "transition": "cut"
9
+ },
10
+ "props": {
11
+ "progress": {
12
+ "color": "accent"
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "templateVersion": 1,
3
+ "id": "social",
4
+ "version": "1.1.0",
5
+ "title": "Social",
6
+ "summary": "Vertical short-form clips: a tip, an announcement or a numbered list. 9:16 and 1:1, hook in the first second.",
7
+ "domains": ["social", "marketing", "community"],
8
+ "discover": {
9
+ "useCases": [
10
+ "Share one quick tip as a short vertical clip for TikTok, Reels or Shorts.",
11
+ "Announce news or a launch with one big number and a call to action.",
12
+ "Post a numbered list of things followers should know."
13
+ ],
14
+ "audience": ["followers", "customers", "community"],
15
+ "goodFor": "Vertical clips of 12-30 s with a one-line hook, 2-4 short points and a call to action.",
16
+ "notFor": "Long or dense explanations (explain), step-by-step lessons (guide), data reviews (report).",
17
+ "tags": ["social", "vertical", "tip", "listicle", "announce", "promo", "marketing"],
18
+ "tone": ["punchy", "friendly"],
19
+ "aspects": ["9:16", "1:1"]
20
+ },
21
+ "requires": {
22
+ "storyboard": 1,
23
+ "scenes": ["callout", "bullets", "stat", "outro", "progress", "icon-grid", "title"]
24
+ },
25
+ "themes": [
26
+ {
27
+ "id": "pop-light",
28
+ "file": "@shared/pop-light.json",
29
+ "mode": "light",
30
+ "pair": "pop-dark"
31
+ },
32
+ {
33
+ "id": "pop-dark",
34
+ "file": "@shared/pop-dark.json",
35
+ "mode": "dark",
36
+ "pair": "pop-light"
37
+ },
38
+ {
39
+ "id": "bold-light",
40
+ "file": "@shared/bold-light.json",
41
+ "mode": "light",
42
+ "pair": "bold-dark"
43
+ },
44
+ {
45
+ "id": "bold-dark",
46
+ "file": "@shared/bold-dark.json",
47
+ "mode": "dark",
48
+ "pair": "bold-light"
49
+ },
50
+ {
51
+ "id": "tech-light",
52
+ "file": "@shared/tech-light.json",
53
+ "mode": "light",
54
+ "pair": "tech-dark"
55
+ },
56
+ {
57
+ "id": "tech-dark",
58
+ "file": "@shared/tech-dark.json",
59
+ "mode": "dark",
60
+ "pair": "tech-light"
61
+ }
62
+ ],
63
+ "styles": [
64
+ {
65
+ "id": "hook-first",
66
+ "file": "styles/hook-first.json"
67
+ },
68
+ {
69
+ "id": "captioned",
70
+ "file": "styles/captioned.json"
71
+ },
72
+ {
73
+ "id": "techcut",
74
+ "file": "styles/techcut.json"
75
+ }
76
+ ],
77
+ "blueprints": [
78
+ {
79
+ "id": "tip",
80
+ "file": "blueprints/tip.json"
81
+ },
82
+ {
83
+ "id": "announce",
84
+ "file": "blueprints/announce.json"
85
+ },
86
+ {
87
+ "id": "listicle",
88
+ "file": "blueprints/listicle.json"
89
+ }
90
+ ],
91
+ "pacing": "pacing.json",
92
+ "copy": "copy.md",
93
+ "license": "Apache-2.0"
94
+ }
@@ -0,0 +1,57 @@
1
+ {
2
+ "id": "announcement",
3
+ "purpose": "Announce one change: headline, the reason in one sentence, 2-4 things that change, and who to ask.",
4
+ "discover": {
5
+ "useCases": [
6
+ "Announce a change or policy with the reason and what happens next.",
7
+ "Tell a team or customer base about a date, a move or a new process.",
8
+ "Explain what changes for people and where to ask questions."
9
+ ],
10
+ "audience": ["teammates", "customers", "stakeholders"],
11
+ "goodFor": "One change with a reason, 2-4 consequences and a contact.",
12
+ "notFor": "Many changes (changelog), a product release (release-notes).",
13
+ "tags": ["update", "announce", "internal", "news", "status"],
14
+ "tone": ["calm", "direct"],
15
+ "aspects": ["16:9", "1:1"],
16
+ "lengths": { "min": 20, "max": 45 }
17
+ },
18
+ "slots": {
19
+ "headline": { "type": "text", "max": 60, "required": true },
20
+ "why": { "type": "text", "max": 110, "required": true },
21
+ "what": { "type": "text[]", "min": 2, "max": 4, "itemMax": 50, "required": true },
22
+ "date": { "type": "text", "max": 30, "optional": true },
23
+ "contact": { "type": "text", "max": 60, "default": "Questions? Ask in the help channel" },
24
+ "length": { "type": "enum", "values": ["short", "standard", "long"], "default": "standard" },
25
+ "style": { "type": "enum", "values": ["tidy", "punchy", "techdark"], "default": "tidy" }
26
+ },
27
+ "example": {
28
+ "headline": "A new review process",
29
+ "why": "Reviews are [slow] today; a shared [checklist] makes them faster and fairer.",
30
+ "what": ["One checklist for every review", "Two reviewers per change", "Replies within a day"],
31
+ "date": "Starts Nov 4",
32
+ "contact": "Questions? Ask in the help channel"
33
+ },
34
+ "meta": { "title": { "$slot": "headline" }, "lang": "en" },
35
+ "scenes": [
36
+ {
37
+ "id": "intro",
38
+ "type": "title",
39
+ "props": {
40
+ "kicker": "Announcement",
41
+ "title": { "$slot": "headline" },
42
+ "subtitle": { "$slot": "date" }
43
+ }
44
+ },
45
+ {
46
+ "id": "reason",
47
+ "type": "callout",
48
+ "props": { "text": { "$slot": "why" }, "kind": "statement", "label": "Why" }
49
+ },
50
+ {
51
+ "id": "changes",
52
+ "type": "bullets",
53
+ "props": { "title": "What changes", "items": { "$slot": "what" }, "marker": "check" }
54
+ },
55
+ { "id": "end", "type": "outro", "props": { "title": { "$slot": "contact" } } }
56
+ ]
57
+ }
@@ -0,0 +1,157 @@
1
+ {
2
+ "id": "changelog",
3
+ "purpose": "Show 3-7 dated versions on a timeline, optionally followed by a short code or command example.",
4
+ "discover": {
5
+ "useCases": [
6
+ "Turn a list of versioned changes into a skimmable timeline.",
7
+ "Recap what shipped over several releases, newest last, with dates.",
8
+ "Show a short command or snippet that goes with the latest change."
9
+ ],
10
+ "audience": ["users", "engineers", "customers"],
11
+ "goodFor": "3-7 versions or dates, each with one short summary.",
12
+ "notFor": "One big release (release-notes), progress with blockers (weekly-update).",
13
+ "tags": ["update", "changelog", "timeline", "release-notes", "dev", "history"],
14
+ "tone": ["calm", "technical"],
15
+ "aspects": ["16:9", "1:1"],
16
+ "lengths": {
17
+ "min": 25,
18
+ "max": 65
19
+ }
20
+ },
21
+ "slots": {
22
+ "product": {
23
+ "type": "text",
24
+ "max": 40,
25
+ "required": true
26
+ },
27
+ "entries": {
28
+ "type": "object",
29
+ "fields": {
30
+ "when": "text",
31
+ "label": "text",
32
+ "detail": "text"
33
+ },
34
+ "list": true,
35
+ "min": 3,
36
+ "max": 7,
37
+ "required": true
38
+ },
39
+ "code": {
40
+ "type": "text[]",
41
+ "min": 1,
42
+ "max": 14,
43
+ "itemMax": 60,
44
+ "optional": true
45
+ },
46
+ "lang": {
47
+ "type": "enum",
48
+ "values": ["js", "ts", "json", "py", "sh", "plain"],
49
+ "default": "sh"
50
+ },
51
+ "file": {
52
+ "type": "text",
53
+ "max": 40,
54
+ "optional": true
55
+ },
56
+ "length": {
57
+ "type": "enum",
58
+ "values": ["short", "standard", "long"],
59
+ "default": "standard"
60
+ },
61
+ "style": {
62
+ "type": "enum",
63
+ "values": ["tidy", "punchy", "techdark"],
64
+ "default": "tidy"
65
+ }
66
+ },
67
+ "example": {
68
+ "product": "Briar SDK",
69
+ "entries": [
70
+ {
71
+ "when": "Aug 12",
72
+ "label": "v2.0",
73
+ "detail": "Plugins"
74
+ },
75
+ {
76
+ "when": "Aug 30",
77
+ "label": "v2.1",
78
+ "detail": "Faster builds"
79
+ },
80
+ {
81
+ "when": "Sep 18",
82
+ "label": "v2.2",
83
+ "detail": "Dark mode"
84
+ },
85
+ {
86
+ "when": "Oct 07",
87
+ "label": "v2.3",
88
+ "detail": "Fixes"
89
+ },
90
+ {
91
+ "when": "Oct 28",
92
+ "label": "v2.4",
93
+ "detail": "Offline mode"
94
+ }
95
+ ],
96
+ "code": [
97
+ "$ briar upgrade --to 2.4",
98
+ "Resolving packages",
99
+ "Updated 5 packages in 3.1s",
100
+ "$ briar status",
101
+ "Version 2.4 is ready"
102
+ ],
103
+ "lang": "sh",
104
+ "file": "terminal"
105
+ },
106
+ "meta": {
107
+ "title": {
108
+ "$slot": "product"
109
+ },
110
+ "lang": "en"
111
+ },
112
+ "scenes": [
113
+ {
114
+ "id": "intro",
115
+ "type": "title",
116
+ "props": {
117
+ "kicker": "Changelog",
118
+ "title": {
119
+ "$slot": "product"
120
+ }
121
+ }
122
+ },
123
+ {
124
+ "id": "versions",
125
+ "type": "timeline",
126
+ "props": {
127
+ "title": "What shipped",
128
+ "items": {
129
+ "$slot": "entries"
130
+ }
131
+ }
132
+ },
133
+ {
134
+ "when": "code",
135
+ "id": "snippet",
136
+ "type": "code",
137
+ "props": {
138
+ "lines": {
139
+ "$slot": "code"
140
+ },
141
+ "lang": {
142
+ "$slot": "lang"
143
+ },
144
+ "file": {
145
+ "$slot": "file"
146
+ }
147
+ }
148
+ },
149
+ {
150
+ "id": "end",
151
+ "type": "outro",
152
+ "props": {
153
+ "title": "Read the full notes"
154
+ }
155
+ }
156
+ ]
157
+ }