@contractspec/bundle.marketing 3.7.6 → 3.7.7

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 (163) hide show
  1. package/.turbo/turbo-build.log +84 -84
  2. package/AGENTS.md +29 -21
  3. package/README.md +36 -49
  4. package/dist/browser/components/marketing/ChangelogPage.js +8 -8
  5. package/dist/browser/components/marketing/CofounderPage.js +167 -523
  6. package/dist/browser/components/marketing/ContactClient.js +200 -207
  7. package/dist/browser/components/marketing/ContributePage.js +211 -463
  8. package/dist/browser/components/marketing/DesignPartnerPage.js +165 -218
  9. package/dist/browser/components/marketing/LandingPage.js +464 -568
  10. package/dist/browser/components/marketing/PricingClient.js +213 -839
  11. package/dist/browser/components/marketing/ProductClientPage.js +265 -463
  12. package/dist/browser/components/marketing/index.js +2007 -3338
  13. package/dist/browser/components/marketing/pricing-thinking-modal.js +12 -12
  14. package/dist/browser/components/marketing/sections/AudienceSection.js +2 -2
  15. package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
  16. package/dist/browser/components/marketing/sections/CtaSection.js +3 -3
  17. package/dist/browser/components/marketing/sections/FearsSection.js +3 -3
  18. package/dist/browser/components/marketing/sections/HeroMarketingSection.js +6 -6
  19. package/dist/browser/components/marketing/sections/IconGridSection.js +2 -2
  20. package/dist/browser/components/marketing/sections/OutputsSection.js +2 -2
  21. package/dist/browser/components/marketing/sections/ProblemSection.js +2 -2
  22. package/dist/browser/components/marketing/sections/SolutionSection.js +2 -2
  23. package/dist/browser/components/marketing/sections/StepsSection.js +4 -4
  24. package/dist/browser/components/marketing/studio-signup-section.js +25 -41
  25. package/dist/browser/components/templates/TemplatesClientPage.js +2324 -3578
  26. package/dist/browser/components/templates/TemplatesPage.js +1 -1
  27. package/dist/browser/components/templates/TemplatesPreviewModal.js +3 -3
  28. package/dist/browser/components/templates/index.js +2361 -3615
  29. package/dist/browser/index.js +2363 -3617
  30. package/dist/browser/libs/email/client.js +1 -1
  31. package/dist/browser/libs/email/contact.js +1 -1
  32. package/dist/browser/libs/email/newsletter.js +1 -1
  33. package/dist/browser/libs/email/waitlist-application.js +1 -1
  34. package/dist/browser/libs/email/waitlist.js +1 -1
  35. package/dist/browser/registry/engine.js +2003 -3334
  36. package/dist/browser/registry/index.js +2003 -3334
  37. package/dist/browser/registry/registry-docs.js +2 -2
  38. package/dist/browser/registry/registry-landing.js +2007 -3338
  39. package/dist/browser/registry/registry.js +2003 -3334
  40. package/dist/browser/registry/utils.js +2003 -3334
  41. package/dist/components/marketing/ChangelogPage.js +8 -8
  42. package/dist/components/marketing/CofounderPage.js +167 -523
  43. package/dist/components/marketing/ContactClient.js +200 -207
  44. package/dist/components/marketing/ContributePage.d.ts +0 -2
  45. package/dist/components/marketing/ContributePage.js +211 -463
  46. package/dist/components/marketing/DesignPartnerPage.js +165 -218
  47. package/dist/components/marketing/LandingPage.js +464 -568
  48. package/dist/components/marketing/PricingClient.js +213 -839
  49. package/dist/components/marketing/ProductClientPage.js +265 -463
  50. package/dist/components/marketing/index.d.ts +5 -5
  51. package/dist/components/marketing/index.js +2007 -3338
  52. package/dist/components/marketing/pricing-thinking-modal.js +12 -12
  53. package/dist/components/marketing/sections/AudienceSection.js +2 -2
  54. package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
  55. package/dist/components/marketing/sections/CtaSection.js +3 -3
  56. package/dist/components/marketing/sections/FearsSection.js +3 -3
  57. package/dist/components/marketing/sections/HeroMarketingSection.js +6 -6
  58. package/dist/components/marketing/sections/IconGridSection.d.ts +3 -3
  59. package/dist/components/marketing/sections/IconGridSection.js +2 -2
  60. package/dist/components/marketing/sections/OutputsSection.js +2 -2
  61. package/dist/components/marketing/sections/ProblemSection.js +2 -2
  62. package/dist/components/marketing/sections/SolutionSection.js +2 -2
  63. package/dist/components/marketing/sections/StepsSection.js +4 -4
  64. package/dist/components/marketing/studio-signup-section.js +25 -41
  65. package/dist/components/templates/TemplatesClientPage.js +2324 -3578
  66. package/dist/components/templates/TemplatesPage.js +1 -1
  67. package/dist/components/templates/TemplatesPreviewModal.js +3 -3
  68. package/dist/components/templates/index.js +2361 -3615
  69. package/dist/index.js +2363 -3617
  70. package/dist/libs/email/client.js +1 -1
  71. package/dist/libs/email/contact.js +1 -1
  72. package/dist/libs/email/newsletter.js +1 -1
  73. package/dist/libs/email/waitlist-application.js +1 -1
  74. package/dist/libs/email/waitlist.js +1 -1
  75. package/dist/node/components/marketing/ChangelogPage.js +8 -8
  76. package/dist/node/components/marketing/CofounderPage.js +167 -523
  77. package/dist/node/components/marketing/ContactClient.js +200 -207
  78. package/dist/node/components/marketing/ContributePage.js +211 -463
  79. package/dist/node/components/marketing/DesignPartnerPage.js +165 -218
  80. package/dist/node/components/marketing/LandingPage.js +464 -568
  81. package/dist/node/components/marketing/PricingClient.js +213 -839
  82. package/dist/node/components/marketing/ProductClientPage.js +265 -463
  83. package/dist/node/components/marketing/index.js +2007 -3338
  84. package/dist/node/components/marketing/pricing-thinking-modal.js +12 -12
  85. package/dist/node/components/marketing/sections/AudienceSection.js +2 -2
  86. package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
  87. package/dist/node/components/marketing/sections/CtaSection.js +3 -3
  88. package/dist/node/components/marketing/sections/FearsSection.js +3 -3
  89. package/dist/node/components/marketing/sections/HeroMarketingSection.js +6 -6
  90. package/dist/node/components/marketing/sections/IconGridSection.js +2 -2
  91. package/dist/node/components/marketing/sections/OutputsSection.js +2 -2
  92. package/dist/node/components/marketing/sections/ProblemSection.js +2 -2
  93. package/dist/node/components/marketing/sections/SolutionSection.js +2 -2
  94. package/dist/node/components/marketing/sections/StepsSection.js +4 -4
  95. package/dist/node/components/marketing/studio-signup-section.js +25 -41
  96. package/dist/node/components/templates/TemplatesClientPage.js +2324 -3578
  97. package/dist/node/components/templates/TemplatesPage.js +1 -1
  98. package/dist/node/components/templates/TemplatesPreviewModal.js +3 -3
  99. package/dist/node/components/templates/index.js +2361 -3615
  100. package/dist/node/index.js +2363 -3617
  101. package/dist/node/libs/email/client.js +1 -1
  102. package/dist/node/libs/email/contact.js +1 -1
  103. package/dist/node/libs/email/newsletter.js +1 -1
  104. package/dist/node/libs/email/waitlist-application.js +1 -1
  105. package/dist/node/libs/email/waitlist.js +1 -1
  106. package/dist/node/registry/engine.js +2003 -3334
  107. package/dist/node/registry/index.js +2003 -3334
  108. package/dist/node/registry/registry-docs.js +2 -2
  109. package/dist/node/registry/registry-landing.js +2007 -3338
  110. package/dist/node/registry/registry.js +2003 -3334
  111. package/dist/node/registry/utils.js +2003 -3334
  112. package/dist/registry/engine.js +2003 -3334
  113. package/dist/registry/index.js +2003 -3334
  114. package/dist/registry/registry-docs.js +2 -2
  115. package/dist/registry/registry-landing.js +2007 -3338
  116. package/dist/registry/registry.js +2003 -3334
  117. package/dist/registry/utils.js +2003 -3334
  118. package/package.json +22 -22
  119. package/src/bundles/MarketingBundle.ts +273 -273
  120. package/src/components/marketing/ChangelogPage.tsx +72 -100
  121. package/src/components/marketing/CofounderPage.tsx +120 -384
  122. package/src/components/marketing/ContactClient.tsx +164 -154
  123. package/src/components/marketing/ContributePage.tsx +139 -313
  124. package/src/components/marketing/DesignPartnerPage.tsx +133 -171
  125. package/src/components/marketing/LandingPage.tsx +353 -25
  126. package/src/components/marketing/PricingClient.tsx +192 -437
  127. package/src/components/marketing/ProductClientPage.tsx +255 -377
  128. package/src/components/marketing/index.ts +5 -5
  129. package/src/components/marketing/pricing-thinking-modal.tsx +197 -197
  130. package/src/components/marketing/sections/AudienceSection.tsx +55 -56
  131. package/src/components/marketing/sections/CorePositioningSection.tsx +37 -37
  132. package/src/components/marketing/sections/CtaSection.tsx +49 -50
  133. package/src/components/marketing/sections/DevelopersSection.tsx +26 -27
  134. package/src/components/marketing/sections/FearsSection.tsx +36 -37
  135. package/src/components/marketing/sections/HeroMarketingSection.tsx +59 -59
  136. package/src/components/marketing/sections/IconGridSection.tsx +71 -71
  137. package/src/components/marketing/sections/OutputsSection.tsx +51 -52
  138. package/src/components/marketing/sections/ProblemSection.tsx +39 -40
  139. package/src/components/marketing/sections/SolutionSection.tsx +39 -40
  140. package/src/components/marketing/sections/StepsSection.tsx +47 -48
  141. package/src/components/marketing/studio-signup-section.tsx +39 -41
  142. package/src/components/templates/TemplatesClientPage.tsx +727 -685
  143. package/src/components/templates/TemplatesPage.tsx +110 -110
  144. package/src/components/templates/TemplatesPreviewModal.tsx +197 -198
  145. package/src/index.ts +4 -4
  146. package/src/libs/email/client.test.ts +81 -81
  147. package/src/libs/email/client.ts +111 -111
  148. package/src/libs/email/contact.ts +35 -35
  149. package/src/libs/email/newsletter.ts +46 -46
  150. package/src/libs/email/types.ts +29 -29
  151. package/src/libs/email/utils.ts +5 -5
  152. package/src/libs/email/waitlist-application.ts +72 -72
  153. package/src/libs/email/waitlist.ts +46 -46
  154. package/src/libs/pricing-examples.ts +12 -12
  155. package/src/registry/engine.ts +16 -16
  156. package/src/registry/factory.ts +57 -57
  157. package/src/registry/registry-docs.ts +656 -666
  158. package/src/registry/registry-landing.ts +94 -95
  159. package/src/registry/registry.ts +36 -37
  160. package/src/registry/types.ts +2 -2
  161. package/src/registry/utils.ts +56 -56
  162. package/tsconfig.json +11 -11
  163. package/tsdown.config.js +5 -5
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@contractspec/bundle.marketing",
3
- "version": "3.7.6",
3
+ "version": "3.7.7",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "clean": "rm -rf dist",
7
7
  "lint": "bun run lint:fix",
8
- "lint:fix": "eslint src --fix",
9
- "lint:check": "eslint src",
8
+ "lint:fix": "biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .",
9
+ "lint:check": "biome check .",
10
10
  "build": "bun run prebuild && bun run build:bundle && bun run build:types",
11
11
  "build:bundle": "contractspec-bun-build transpile",
12
12
  "build:types": "contractspec-bun-build types",
@@ -340,34 +340,34 @@
340
340
  },
341
341
  "types": "./dist/index.d.ts",
342
342
  "dependencies": {
343
- "@contractspec/bundle.library": "3.7.6",
344
- "@contractspec/lib.surface-runtime": "0.5.6",
345
- "@contractspec/example.agent-console": "3.7.6",
346
- "@contractspec/example.analytics-dashboard": "3.7.6",
347
- "@contractspec/example.crm-pipeline": "3.7.6",
348
- "@contractspec/example.integration-hub": "3.7.6",
349
- "@contractspec/example.marketplace": "3.7.6",
350
- "@contractspec/example.saas-boilerplate": "3.7.6",
351
- "@contractspec/example.workflow-system": "3.7.6",
352
- "@contractspec/lib.contracts-spec": "3.7.6",
353
- "@contractspec/lib.contracts-runtime-client-react": "3.7.6",
354
- "@contractspec/lib.design-system": "3.7.6",
343
+ "@contractspec/bundle.library": "3.7.7",
344
+ "@contractspec/lib.surface-runtime": "0.5.7",
345
+ "@contractspec/example.agent-console": "3.7.7",
346
+ "@contractspec/example.analytics-dashboard": "3.8.0",
347
+ "@contractspec/example.crm-pipeline": "3.7.7",
348
+ "@contractspec/example.integration-hub": "3.7.7",
349
+ "@contractspec/example.marketplace": "3.7.7",
350
+ "@contractspec/example.saas-boilerplate": "3.7.7",
351
+ "@contractspec/example.workflow-system": "3.7.7",
352
+ "@contractspec/lib.contracts-spec": "4.0.0",
353
+ "@contractspec/lib.contracts-runtime-client-react": "3.7.7",
354
+ "@contractspec/lib.design-system": "3.8.0",
355
355
  "@contractspec/lib.email": "3.7.6",
356
- "@contractspec/lib.example-shared-ui": "6.0.6",
356
+ "@contractspec/lib.example-shared-ui": "6.0.7",
357
357
  "@contractspec/lib.logger": "3.7.6",
358
358
  "@contractspec/lib.runtime-sandbox": "2.7.6",
359
359
  "@contractspec/lib.ui-kit-core": "3.7.6",
360
- "@contractspec/lib.ui-kit-web": "3.7.6",
360
+ "@contractspec/lib.ui-kit-web": "3.8.0",
361
361
  "@contractspec/lib.ui-link": "3.7.6",
362
- "@contractspec/module.examples": "3.7.6",
363
- "@electric-sql/pglite": "^0.3.14",
362
+ "@contractspec/module.examples": "3.7.7",
363
+ "@electric-sql/pglite": "^0.4.1",
364
364
  "@hookform/resolvers": "^5.2.2",
365
- "@scaleway/sdk": "^3.3.1",
365
+ "@scaleway/sdk": "^3.4.1",
366
366
  "@scaleway/sdk-client": "^2.2.1",
367
367
  "class-variance-authority": "^0.7.1",
368
- "framer-motion": "^12.35.1",
368
+ "framer-motion": "^12.38.0",
369
369
  "lucide-react": "^0.577.0",
370
- "next": "16.1.6",
370
+ "next": "16.2.0",
371
371
  "react": "19.2.0",
372
372
  "react-hook-form": "^7.71.2",
373
373
  "zod": "^4.3.5"
@@ -6,279 +6,279 @@
6
6
  import { defineModuleBundle } from '@contractspec/lib.surface-runtime/spec';
7
7
 
8
8
  export const MarketingBundle = defineModuleBundle({
9
- meta: {
10
- key: 'marketing.pages',
11
- version: '0.1.0',
12
- title: 'Marketing Pages',
13
- description:
14
- 'Adaptive surfaces for landing, template gallery, changelog, and product pages',
15
- owners: ['team-platform'],
16
- tags: ['marketing', 'landing', 'templates', 'changelog'],
17
- stability: 'experimental',
18
- },
9
+ meta: {
10
+ key: 'marketing.pages',
11
+ version: '0.1.0',
12
+ title: 'Marketing Pages',
13
+ description:
14
+ 'Adaptive surfaces for landing, template gallery, changelog, and product pages',
15
+ owners: ['team-platform'],
16
+ tags: ['marketing', 'landing', 'templates', 'changelog'],
17
+ stability: 'experimental',
18
+ },
19
19
 
20
- routes: [
21
- {
22
- routeId: 'landing',
23
- path: '/',
24
- defaultSurface: 'landing',
25
- },
26
- {
27
- routeId: 'product',
28
- path: '/product',
29
- defaultSurface: 'product',
30
- },
31
- {
32
- routeId: 'templates',
33
- path: '/templates',
34
- defaultSurface: 'template-gallery',
35
- },
36
- {
37
- routeId: 'changelog',
38
- path: '/changelog',
39
- defaultSurface: 'changelog',
40
- },
41
- {
42
- routeId: 'contact',
43
- path: '/contact',
44
- defaultSurface: 'contact',
45
- },
46
- ],
20
+ routes: [
21
+ {
22
+ routeId: 'landing',
23
+ path: '/',
24
+ defaultSurface: 'landing',
25
+ },
26
+ {
27
+ routeId: 'product',
28
+ path: '/product',
29
+ defaultSurface: 'product',
30
+ },
31
+ {
32
+ routeId: 'templates',
33
+ path: '/templates',
34
+ defaultSurface: 'template-gallery',
35
+ },
36
+ {
37
+ routeId: 'changelog',
38
+ path: '/changelog',
39
+ defaultSurface: 'changelog',
40
+ },
41
+ {
42
+ routeId: 'contact',
43
+ path: '/contact',
44
+ defaultSurface: 'contact',
45
+ },
46
+ ],
47
47
 
48
- surfaces: {
49
- landing: {
50
- surfaceId: 'landing',
51
- kind: 'overview',
52
- title: 'Landing Page',
53
- slots: [
54
- {
55
- slotId: 'header',
56
- role: 'header',
57
- accepts: ['action-bar'],
58
- cardinality: 'many',
59
- },
60
- {
61
- slotId: 'primary',
62
- role: 'primary',
63
- accepts: ['entity-section', 'custom-widget'],
64
- cardinality: 'many',
65
- },
66
- ],
67
- layouts: [
68
- {
69
- layoutId: 'single-column',
70
- title: 'Single column',
71
- root: {
72
- type: 'panel-group',
73
- direction: 'vertical',
74
- persistKey: 'marketing.landing',
75
- children: [
76
- { type: 'slot', slotId: 'header' },
77
- { type: 'slot', slotId: 'primary' },
78
- ],
79
- },
80
- },
81
- ],
82
- data: [],
83
- verification: {
84
- dimensions: {
85
- guidance:
86
- 'Can reveal product tour, feature highlights, and contextual CTAs.',
87
- density: 'Can select compact hero or detailed multi-section layouts.',
88
- dataDepth: 'Controls section depth and inline expansion.',
89
- control: 'Shows advanced navigation when allowed.',
90
- media: 'Supports text-first, visual hero, and hybrid modes.',
91
- pace: 'Maps to scroll and transition behavior.',
92
- narrative:
93
- 'Can order hero before or after problem/solution sections.',
94
- },
95
- },
96
- },
97
- 'template-gallery': {
98
- surfaceId: 'template-gallery',
99
- kind: 'list',
100
- title: 'Template Gallery',
101
- slots: [
102
- {
103
- slotId: 'header',
104
- role: 'header',
105
- accepts: ['action-bar'],
106
- cardinality: 'many',
107
- },
108
- {
109
- slotId: 'primary',
110
- role: 'primary',
111
- accepts: ['entity-section', 'table', 'custom-widget'],
112
- cardinality: 'many',
113
- },
114
- ],
115
- layouts: [
116
- {
117
- layoutId: 'gallery',
118
- title: 'Gallery',
119
- root: {
120
- type: 'panel-group',
121
- direction: 'vertical',
122
- persistKey: 'marketing.templates',
123
- children: [
124
- { type: 'slot', slotId: 'header' },
125
- { type: 'slot', slotId: 'primary' },
126
- ],
127
- },
128
- },
129
- ],
130
- data: [],
131
- verification: {
132
- dimensions: {
133
- guidance:
134
- 'Can reveal template descriptions, filters, and preview hints.',
135
- density:
136
- 'Can select grid density (compact, standard, detailed cards).',
137
- dataDepth: 'Controls template metadata and preview depth.',
138
- control: 'Shows filters and sort when allowed.',
139
- media: 'Supports card grid, list, and preview modes.',
140
- pace: 'Maps to modal and transition behavior.',
141
- narrative: 'Can order featured templates before or after full list.',
142
- },
143
- },
144
- },
145
- changelog: {
146
- surfaceId: 'changelog',
147
- kind: 'timeline',
148
- title: 'Changelog',
149
- slots: [
150
- {
151
- slotId: 'header',
152
- role: 'header',
153
- accepts: ['action-bar'],
154
- cardinality: 'many',
155
- },
156
- {
157
- slotId: 'primary',
158
- role: 'primary',
159
- accepts: ['entity-section', 'timeline', 'custom-widget'],
160
- cardinality: 'many',
161
- },
162
- ],
163
- layouts: [
164
- {
165
- layoutId: 'timeline',
166
- title: 'Timeline',
167
- root: {
168
- type: 'panel-group',
169
- direction: 'vertical',
170
- persistKey: 'marketing.changelog',
171
- children: [
172
- { type: 'slot', slotId: 'header' },
173
- { type: 'slot', slotId: 'primary' },
174
- ],
175
- },
176
- },
177
- ],
178
- data: [],
179
- verification: {
180
- dimensions: {
181
- guidance: 'Can reveal version notes and migration hints.',
182
- density: 'Can select compact or detailed changelog entries.',
183
- dataDepth: 'Controls entry expansion and diff visibility.',
184
- control: 'Shows filters and version navigation when allowed.',
185
- media: 'Supports text-first and code-highlight modes.',
186
- pace: 'Maps to scroll and expand behavior.',
187
- narrative: 'Can order newest-first or oldest-first chronology.',
188
- },
189
- },
190
- },
191
- product: {
192
- surfaceId: 'product',
193
- kind: 'overview',
194
- title: 'Product Page',
195
- slots: [
196
- {
197
- slotId: 'header',
198
- role: 'header',
199
- accepts: ['action-bar'],
200
- cardinality: 'many',
201
- },
202
- {
203
- slotId: 'primary',
204
- role: 'primary',
205
- accepts: ['entity-section', 'custom-widget'],
206
- cardinality: 'many',
207
- },
208
- ],
209
- layouts: [
210
- {
211
- layoutId: 'product-layout',
212
- title: 'Product',
213
- root: {
214
- type: 'panel-group',
215
- direction: 'vertical',
216
- persistKey: 'marketing.product',
217
- children: [
218
- { type: 'slot', slotId: 'header' },
219
- { type: 'slot', slotId: 'primary' },
220
- ],
221
- },
222
- },
223
- ],
224
- data: [],
225
- verification: {
226
- dimensions: {
227
- guidance: 'Can reveal product features and comparison hints.',
228
- density: 'Can select compact or detailed product sections.',
229
- dataDepth: 'Controls feature depth and comparison tables.',
230
- control: 'Shows pricing and plan details when allowed.',
231
- media: 'Supports text-first and visual feature modes.',
232
- pace: 'Maps to section transitions.',
233
- narrative: 'Can order value prop before or after feature details.',
234
- },
235
- },
236
- },
237
- contact: {
238
- surfaceId: 'contact',
239
- kind: 'detail',
240
- title: 'Contact',
241
- slots: [
242
- {
243
- slotId: 'header',
244
- role: 'header',
245
- accepts: ['action-bar'],
246
- cardinality: 'many',
247
- },
248
- {
249
- slotId: 'primary',
250
- role: 'primary',
251
- accepts: ['form', 'entity-section', 'custom-widget'],
252
- cardinality: 'many',
253
- },
254
- ],
255
- layouts: [
256
- {
257
- layoutId: 'contact-layout',
258
- title: 'Contact',
259
- root: {
260
- type: 'panel-group',
261
- direction: 'vertical',
262
- persistKey: 'marketing.contact',
263
- children: [
264
- { type: 'slot', slotId: 'header' },
265
- { type: 'slot', slotId: 'primary' },
266
- ],
267
- },
268
- },
269
- ],
270
- data: [],
271
- verification: {
272
- dimensions: {
273
- guidance: 'Can reveal form hints and validation help.',
274
- density: 'Can select compact or detailed form layout.',
275
- dataDepth: 'Controls field visibility and validation depth.',
276
- control: 'Shows additional contact options when allowed.',
277
- media: 'Supports text-first form and hybrid modes.',
278
- pace: 'Maps to validation and submit feedback.',
279
- narrative: 'Can order form before or after contact info.',
280
- },
281
- },
282
- },
283
- },
48
+ surfaces: {
49
+ landing: {
50
+ surfaceId: 'landing',
51
+ kind: 'overview',
52
+ title: 'Landing Page',
53
+ slots: [
54
+ {
55
+ slotId: 'header',
56
+ role: 'header',
57
+ accepts: ['action-bar'],
58
+ cardinality: 'many',
59
+ },
60
+ {
61
+ slotId: 'primary',
62
+ role: 'primary',
63
+ accepts: ['entity-section', 'custom-widget'],
64
+ cardinality: 'many',
65
+ },
66
+ ],
67
+ layouts: [
68
+ {
69
+ layoutId: 'single-column',
70
+ title: 'Single column',
71
+ root: {
72
+ type: 'panel-group',
73
+ direction: 'vertical',
74
+ persistKey: 'marketing.landing',
75
+ children: [
76
+ { type: 'slot', slotId: 'header' },
77
+ { type: 'slot', slotId: 'primary' },
78
+ ],
79
+ },
80
+ },
81
+ ],
82
+ data: [],
83
+ verification: {
84
+ dimensions: {
85
+ guidance:
86
+ 'Can reveal product tour, feature highlights, and contextual CTAs.',
87
+ density: 'Can select compact hero or detailed multi-section layouts.',
88
+ dataDepth: 'Controls section depth and inline expansion.',
89
+ control: 'Shows advanced navigation when allowed.',
90
+ media: 'Supports text-first, visual hero, and hybrid modes.',
91
+ pace: 'Maps to scroll and transition behavior.',
92
+ narrative:
93
+ 'Can order hero before or after problem/solution sections.',
94
+ },
95
+ },
96
+ },
97
+ 'template-gallery': {
98
+ surfaceId: 'template-gallery',
99
+ kind: 'list',
100
+ title: 'Template Gallery',
101
+ slots: [
102
+ {
103
+ slotId: 'header',
104
+ role: 'header',
105
+ accepts: ['action-bar'],
106
+ cardinality: 'many',
107
+ },
108
+ {
109
+ slotId: 'primary',
110
+ role: 'primary',
111
+ accepts: ['entity-section', 'table', 'custom-widget'],
112
+ cardinality: 'many',
113
+ },
114
+ ],
115
+ layouts: [
116
+ {
117
+ layoutId: 'gallery',
118
+ title: 'Gallery',
119
+ root: {
120
+ type: 'panel-group',
121
+ direction: 'vertical',
122
+ persistKey: 'marketing.templates',
123
+ children: [
124
+ { type: 'slot', slotId: 'header' },
125
+ { type: 'slot', slotId: 'primary' },
126
+ ],
127
+ },
128
+ },
129
+ ],
130
+ data: [],
131
+ verification: {
132
+ dimensions: {
133
+ guidance:
134
+ 'Can reveal template descriptions, filters, and preview hints.',
135
+ density:
136
+ 'Can select grid density (compact, standard, detailed cards).',
137
+ dataDepth: 'Controls template metadata and preview depth.',
138
+ control: 'Shows filters and sort when allowed.',
139
+ media: 'Supports card grid, list, and preview modes.',
140
+ pace: 'Maps to modal and transition behavior.',
141
+ narrative: 'Can order featured templates before or after full list.',
142
+ },
143
+ },
144
+ },
145
+ changelog: {
146
+ surfaceId: 'changelog',
147
+ kind: 'timeline',
148
+ title: 'Changelog',
149
+ slots: [
150
+ {
151
+ slotId: 'header',
152
+ role: 'header',
153
+ accepts: ['action-bar'],
154
+ cardinality: 'many',
155
+ },
156
+ {
157
+ slotId: 'primary',
158
+ role: 'primary',
159
+ accepts: ['entity-section', 'timeline', 'custom-widget'],
160
+ cardinality: 'many',
161
+ },
162
+ ],
163
+ layouts: [
164
+ {
165
+ layoutId: 'timeline',
166
+ title: 'Timeline',
167
+ root: {
168
+ type: 'panel-group',
169
+ direction: 'vertical',
170
+ persistKey: 'marketing.changelog',
171
+ children: [
172
+ { type: 'slot', slotId: 'header' },
173
+ { type: 'slot', slotId: 'primary' },
174
+ ],
175
+ },
176
+ },
177
+ ],
178
+ data: [],
179
+ verification: {
180
+ dimensions: {
181
+ guidance: 'Can reveal version notes and migration hints.',
182
+ density: 'Can select compact or detailed changelog entries.',
183
+ dataDepth: 'Controls entry expansion and diff visibility.',
184
+ control: 'Shows filters and version navigation when allowed.',
185
+ media: 'Supports text-first and code-highlight modes.',
186
+ pace: 'Maps to scroll and expand behavior.',
187
+ narrative: 'Can order newest-first or oldest-first chronology.',
188
+ },
189
+ },
190
+ },
191
+ product: {
192
+ surfaceId: 'product',
193
+ kind: 'overview',
194
+ title: 'Product Page',
195
+ slots: [
196
+ {
197
+ slotId: 'header',
198
+ role: 'header',
199
+ accepts: ['action-bar'],
200
+ cardinality: 'many',
201
+ },
202
+ {
203
+ slotId: 'primary',
204
+ role: 'primary',
205
+ accepts: ['entity-section', 'custom-widget'],
206
+ cardinality: 'many',
207
+ },
208
+ ],
209
+ layouts: [
210
+ {
211
+ layoutId: 'product-layout',
212
+ title: 'Product',
213
+ root: {
214
+ type: 'panel-group',
215
+ direction: 'vertical',
216
+ persistKey: 'marketing.product',
217
+ children: [
218
+ { type: 'slot', slotId: 'header' },
219
+ { type: 'slot', slotId: 'primary' },
220
+ ],
221
+ },
222
+ },
223
+ ],
224
+ data: [],
225
+ verification: {
226
+ dimensions: {
227
+ guidance: 'Can reveal product features and comparison hints.',
228
+ density: 'Can select compact or detailed product sections.',
229
+ dataDepth: 'Controls feature depth and comparison tables.',
230
+ control: 'Shows pricing and plan details when allowed.',
231
+ media: 'Supports text-first and visual feature modes.',
232
+ pace: 'Maps to section transitions.',
233
+ narrative: 'Can order value prop before or after feature details.',
234
+ },
235
+ },
236
+ },
237
+ contact: {
238
+ surfaceId: 'contact',
239
+ kind: 'detail',
240
+ title: 'Contact',
241
+ slots: [
242
+ {
243
+ slotId: 'header',
244
+ role: 'header',
245
+ accepts: ['action-bar'],
246
+ cardinality: 'many',
247
+ },
248
+ {
249
+ slotId: 'primary',
250
+ role: 'primary',
251
+ accepts: ['form', 'entity-section', 'custom-widget'],
252
+ cardinality: 'many',
253
+ },
254
+ ],
255
+ layouts: [
256
+ {
257
+ layoutId: 'contact-layout',
258
+ title: 'Contact',
259
+ root: {
260
+ type: 'panel-group',
261
+ direction: 'vertical',
262
+ persistKey: 'marketing.contact',
263
+ children: [
264
+ { type: 'slot', slotId: 'header' },
265
+ { type: 'slot', slotId: 'primary' },
266
+ ],
267
+ },
268
+ },
269
+ ],
270
+ data: [],
271
+ verification: {
272
+ dimensions: {
273
+ guidance: 'Can reveal form hints and validation help.',
274
+ density: 'Can select compact or detailed form layout.',
275
+ dataDepth: 'Controls field visibility and validation depth.',
276
+ control: 'Shows additional contact options when allowed.',
277
+ media: 'Supports text-first form and hybrid modes.',
278
+ pace: 'Maps to validation and submit feedback.',
279
+ narrative: 'Can order form before or after contact info.',
280
+ },
281
+ },
282
+ },
283
+ },
284
284
  });