@gradial/aci 0.1.52-rc.3 → 0.1.52-rc.34-e2e.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 (276) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +86 -5
  3. package/dist/astro/error-page.js +1 -0
  4. package/dist/astro/index.js +4 -0
  5. package/dist/astro/page.d.ts +5 -2
  6. package/dist/astro/page.js +35 -23
  7. package/dist/astro/preview.js +2 -17
  8. package/dist/audience-data-models.d.ts +308 -194
  9. package/dist/audience-data-models.js +314 -51
  10. package/dist/cli/compile-registry.d.mts +5 -1
  11. package/dist/cli/compile-registry.mjs +31 -46
  12. package/dist/cli/mintlify-render.mjs +8 -0
  13. package/dist/cli/validate-content.d.mts +31 -1
  14. package/dist/cli/validate-content.mjs +50 -12
  15. package/dist/collect/aci.js +1 -1
  16. package/dist/collect/aci.js.sha256 +1 -1
  17. package/dist/collect/api.d.ts +6 -7
  18. package/dist/collect/api.js +21 -8
  19. package/dist/collect/assignments.d.ts +7 -9
  20. package/dist/collect/assignments.js +23 -32
  21. package/dist/collect/batcher.d.ts +9 -7
  22. package/dist/collect/batcher.js +6 -5
  23. package/dist/collect/consent/envelope.d.ts +7 -1
  24. package/dist/collect/consent/envelope.js +3 -1
  25. package/dist/collect/consent/mapping.d.ts +2 -0
  26. package/dist/collect/consent/mapping.js +1 -0
  27. package/dist/collect/consenthold.d.ts +38 -0
  28. package/dist/collect/consenthold.js +82 -0
  29. package/dist/collect/declarative.js +7 -5
  30. package/dist/collect/gapbuffer.d.ts +13 -4
  31. package/dist/collect/gapbuffer.js +21 -10
  32. package/dist/collect/index.js +67 -20
  33. package/dist/collect/pageviews.d.ts +11 -11
  34. package/dist/collect/pageviews.js +27 -22
  35. package/dist/consent-banner/index.d.ts +17 -0
  36. package/dist/consent-banner/index.js +23 -0
  37. package/dist/content/index.d.ts +2 -1
  38. package/dist/content/index.js +4 -1
  39. package/dist/content/provider.d.ts +16 -2
  40. package/dist/content/provider.js +5 -1
  41. package/dist/content/resolve-slots.d.ts +33 -4
  42. package/dist/content/resolve-slots.js +127 -19
  43. package/dist/content/types.d.ts +7 -1
  44. package/dist/edge/expression-capabilities.v1.d.ts +106 -0
  45. package/dist/edge/expression-capabilities.v1.js +165 -0
  46. package/dist/index.d.ts +1 -2
  47. package/dist/index.js +0 -1
  48. package/dist/internal/domain/edge/compose.d.ts +24 -0
  49. package/dist/internal/domain/edge/compose.js +89 -0
  50. package/dist/internal/domain/edge/identity.d.ts +5 -0
  51. package/dist/internal/domain/edge/identity.js +50 -14
  52. package/dist/internal/domain/edge/index.d.ts +2 -0
  53. package/dist/internal/domain/edge/index.js +2 -0
  54. package/dist/internal/domain/edge/mimic_token.d.ts +14 -0
  55. package/dist/internal/domain/edge/mimic_token.js +125 -0
  56. package/dist/internal/domain/edge/personalization-core.d.ts +61 -22
  57. package/dist/internal/domain/edge/personalization-core.js +789 -198
  58. package/dist/internal/domain/edge/personalization_index.d.ts +17 -0
  59. package/dist/internal/domain/edge/personalization_index.js +56 -0
  60. package/dist/internal/domain/edge/record/codec.d.ts +6 -32
  61. package/dist/internal/domain/edge/record/codec.js +86 -168
  62. package/dist/internal/domain/edge/resolve.js +76 -39
  63. package/dist/internal/domain/edge/testdata/flat_only_validator_v1.d.ts +10 -0
  64. package/dist/internal/domain/edge/testdata/flat_only_validator_v1.js +253 -0
  65. package/dist/internal/domain/edge/types.d.ts +93 -41
  66. package/dist/internal/domain/edge/types.js +3 -3
  67. package/dist/internal/domain/edge/variant_key.d.ts +3 -0
  68. package/dist/internal/domain/edge/variant_key.js +44 -0
  69. package/dist/internal/platform/collectionstore/errors.d.ts +24 -0
  70. package/dist/internal/platform/collectionstore/errors.js +48 -0
  71. package/dist/mimic/core.d.ts +2 -0
  72. package/dist/mimic/core.js +31 -0
  73. package/dist/mintlify/blocks.d.ts +6 -0
  74. package/dist/mintlify/blocks.js +201 -0
  75. package/dist/mintlify/config.d.ts +3 -0
  76. package/dist/mintlify/config.js +77 -0
  77. package/dist/mintlify/index.d.ts +3 -0
  78. package/dist/mintlify/index.js +2 -0
  79. package/dist/mintlify/json.d.ts +8 -0
  80. package/dist/mintlify/json.js +37 -0
  81. package/dist/mintlify/materialize.d.ts +14 -0
  82. package/dist/mintlify/materialize.js +254 -0
  83. package/dist/mintlify/types.d.ts +74 -0
  84. package/dist/mintlify/types.js +1 -0
  85. package/dist/mintlify/validate.d.ts +7 -0
  86. package/dist/mintlify/validate.js +256 -0
  87. package/dist/next/assignments-navigation.d.ts +4 -0
  88. package/dist/next/assignments-navigation.js +18 -0
  89. package/dist/next/assignments-script.d.ts +3 -2
  90. package/dist/next/assignments-script.js +5 -5
  91. package/dist/next/error-pages.d.ts +4 -0
  92. package/dist/next/error-pages.js +4 -0
  93. package/dist/next/error-seat-payload.d.ts +2 -1
  94. package/dist/next/error-seat-payload.js +14 -24
  95. package/dist/next/error-seat.js +7 -2
  96. package/dist/next/hosted-page-target.d.ts +7 -0
  97. package/dist/next/hosted-page-target.js +39 -0
  98. package/dist/next/index.d.ts +1 -1
  99. package/dist/next/index.js +3 -1
  100. package/dist/next/page.d.ts +29 -6
  101. package/dist/next/page.js +47 -25
  102. package/dist/next/release-context.d.ts +29 -0
  103. package/dist/next/release-context.js +55 -0
  104. package/dist/next/render.d.ts +1 -1
  105. package/dist/next/render.js +15 -5
  106. package/dist/next/server.d.ts +8 -0
  107. package/dist/next/server.js +44 -3
  108. package/dist/next/vercel-edge-projection-v1.d.ts +0 -9
  109. package/dist/next/vercel-edge-projection-v1.js +9 -539
  110. package/dist/preview/core.d.ts +1 -0
  111. package/dist/preview/core.js +27 -0
  112. package/dist/react/VideoPlayer.d.ts +3 -3
  113. package/dist/react/VideoPlayer.js +2 -2
  114. package/dist/react/index.d.ts +4 -4
  115. package/dist/react/index.js +2 -3
  116. package/dist/registry.d.ts +4 -2
  117. package/dist/testing/conformance/checks.d.ts +2 -2
  118. package/dist/testing/conformance/checks.js +2 -0
  119. package/dist/testing/conformance/index.d.ts +1 -0
  120. package/dist/testing/conformance/index.js +1 -0
  121. package/dist/testing/conformance/next-stubs.d.ts +6 -0
  122. package/dist/testing/conformance/next-stubs.js +9 -0
  123. package/dist/testing/conformance/preset.d.ts +3 -2
  124. package/dist/testing/conformance/preset.js +15 -8
  125. package/dist/testing/conformance/root-identity.d.ts +31 -0
  126. package/dist/testing/conformance/root-identity.js +361 -0
  127. package/dist/testing/conformance/stubs/next-image.d.ts +7 -0
  128. package/dist/testing/conformance/stubs/next-image.js +5 -0
  129. package/dist/testing/conformance/stubs/next-link.d.ts +7 -0
  130. package/dist/testing/conformance/stubs/next-link.js +4 -0
  131. package/dist/testing/conformance/types.d.ts +5 -2
  132. package/dist/testing/index.d.ts +1 -1
  133. package/dist/testing/index.js +4 -3
  134. package/dist/types/block-ref.d.ts +2 -0
  135. package/dist/types/block-ref.js +3 -2
  136. package/dist/types/component.d.ts +9 -0
  137. package/dist/types/config.d.ts +0 -1
  138. package/dist/types/image.d.ts +54 -17
  139. package/dist/types/image.js +102 -18
  140. package/dist/types/index.d.ts +0 -1
  141. package/dist/types/index.js +0 -1
  142. package/dist/types/media.d.ts +14 -6
  143. package/dist/types/page.d.ts +0 -1
  144. package/dist/types/video.d.ts +7 -3
  145. package/migrations/conformance-registry.md +22 -0
  146. package/package.json +21 -7
  147. package/src/cli/compile-registry.mjs +30 -42
  148. package/src/cli/mintlify-render.mjs +9 -0
  149. package/src/cli/validate-content.mjs +52 -13
  150. package/src/types/block-ref.test.ts +60 -0
  151. package/src/types/block-ref.ts +4 -2
  152. package/src/types/component.ts +10 -0
  153. package/src/types/config.ts +0 -1
  154. package/src/types/image.ts +133 -29
  155. package/src/types/index.ts +0 -1
  156. package/src/types/page.ts +0 -1
  157. package/src/types/video.ts +1 -1
  158. package/templates/astro/starter-content/src/components/chrome/Footer.astro +5 -3
  159. package/templates/astro/starter-content/src/components/chrome/Header.astro +5 -3
  160. package/templates/astro/starter-content/src/components/elements/Button.astro +5 -2
  161. package/templates/astro/starter-content/src/components/elements/ButtonBlock.astro +5 -3
  162. package/templates/astro/starter-content/src/components/sections/ContainerSection.astro +4 -3
  163. package/templates/astro/starter-content/src/components/sections/FeatureCard.astro +4 -3
  164. package/templates/astro/starter-content/src/components/sections/FeatureGrid.astro +4 -3
  165. package/templates/astro/starter-content/src/components/sections/HomeHero.astro +5 -3
  166. package/templates/astro/starter-content/src/components/sections/PersonalizationChoice.astro +4 -3
  167. package/templates/astro/starter-content/src/components/sections/StatsBar.astro +4 -3
  168. package/templates/astro/starter-content/src/fixtures/atomicBlocks.ts +7 -6
  169. package/templates/astro/starter-content/src/fixtures/composition.ts +3 -2
  170. package/templates/astro/starter-content/src/fixtures/sections.ts +3 -3
  171. package/templates/astro/starter-content/src/stories/CompositionStoryFrame.astro +7 -2
  172. package/templates/astro/template/.aci.yaml.tmpl +0 -1
  173. package/templates/astro/template/package.json.tmpl +5 -5
  174. package/templates/astro/template/src/layouts/SiteLayout.astro +2 -2
  175. package/templates/common/.agents/skills/aci/SKILL.md +58 -1
  176. package/templates/common/.agents/skills/authoring/SKILL.md +203 -43
  177. package/templates/common/.agents/skills/authoring/references/block-registry.md +19 -3
  178. package/templates/common/.agents/skills/authoring/references/block-slots.md +3 -0
  179. package/templates/common/.agents/skills/authoring/references/contracts.md +9 -30
  180. package/templates/common/.agents/skills/authoring/references/repo-structure.md +5 -4
  181. package/templates/common/.agents/skills/authoring/references/sdk-server-functions.md +3 -3
  182. package/templates/common/.agents/skills/dam-delivery/SKILL.md +217 -0
  183. package/templates/common/.agents/skills/dam-delivery/references/permalink-grammar.md +167 -0
  184. package/templates/common/.agents/skills/migration/references/canon-migration.md +18 -67
  185. package/templates/common/.agents/skills/migration/references/selector-map.md +1 -1
  186. package/templates/common/.content/fragments/navbar/_index.json +24 -0
  187. package/templates/common/.content/fragments/site-footer/_index.json +61 -0
  188. package/templates/common/.content/pages/404/_index.json +4 -2
  189. package/templates/common/.content/pages/{home/_index.json → _index.json} +10 -1
  190. package/templates/common/.content/pages/error/_index.json +4 -2
  191. package/templates/common/.content/schemas/site.schema.json +11 -1
  192. package/templates/common/.content/templates/error.json +24 -0
  193. package/templates/common/.content/templates/home.json +28 -0
  194. package/templates/common/.content/templates/site.json +8 -0
  195. package/templates/common/.content/templates/standard.json +24 -0
  196. package/templates/common/.nvmrc +1 -1
  197. package/templates/common/starter-content/.content/.rules-baseline.json +8 -0
  198. package/templates/common/starter-content/.content/config/site.json +1 -1
  199. package/templates/common/starter-content/.content/content-rules/no-public-resource-paths.json +6 -0
  200. package/templates/common/starter-content/.content/dam/README.md +74 -0
  201. package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_home_hero → 000000000000000000000000101}/asset.json +1 -1
  202. package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_about_hero → 000000000000000000000000101}/governance.json +2 -1
  203. package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_about_hero → 000000000000000000000000102}/asset.json +1 -1
  204. package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_home_hero → 000000000000000000000000102}/governance.json +2 -1
  205. package/templates/common/starter-content/.content/fragments/navbar/_index.json +23 -20
  206. package/templates/common/starter-content/.content/fragments/site-footer/_index.json +59 -56
  207. package/templates/common/starter-content/.content/pages/404/_index.json +2 -2
  208. package/templates/common/starter-content/.content/pages/{home/_index.json → _index.json} +23 -3
  209. package/templates/common/starter-content/.content/pages/about/_index.json +5 -2
  210. package/templates/common/starter-content/.content/pages/error/_index.json +2 -2
  211. package/templates/common/starter-content/.content/patterns/components/button.json +55 -0
  212. package/templates/common/starter-content/.content/patterns/components/container.json +67 -0
  213. package/templates/common/starter-content/.content/patterns/components/feature_card.json +30 -0
  214. package/templates/common/starter-content/.content/patterns/components/feature_grid.json +59 -0
  215. package/templates/common/starter-content/.content/patterns/components/home_hero.json +151 -0
  216. package/templates/common/starter-content/.content/patterns/components/personalization_choice.json +42 -0
  217. package/templates/common/starter-content/.content/patterns/components/site-footer.json +203 -0
  218. package/templates/common/starter-content/.content/patterns/components/site-navigation.json +115 -0
  219. package/templates/common/starter-content/.content/patterns/components/stats_bar.json +45 -0
  220. package/templates/common/starter-content/.content/schemas/site.schema.json +11 -1
  221. package/templates/nextjs/starter-content/src/components/chrome/Footer.tsx +4 -3
  222. package/templates/nextjs/starter-content/src/components/chrome/Header.tsx +4 -3
  223. package/templates/nextjs/starter-content/src/components/elements/Button.tsx +4 -3
  224. package/templates/nextjs/starter-content/src/components/elements/ButtonBlock.tsx +4 -3
  225. package/templates/nextjs/starter-content/src/components/sections/ContainerSection.tsx +4 -2
  226. package/templates/nextjs/starter-content/src/components/sections/FeatureCard.tsx +4 -3
  227. package/templates/nextjs/starter-content/src/components/sections/FeatureGrid.tsx +4 -2
  228. package/templates/nextjs/starter-content/src/components/sections/HomeHero.tsx +4 -3
  229. package/templates/nextjs/starter-content/src/components/sections/PersonalizationChoice.tsx +4 -2
  230. package/templates/nextjs/starter-content/src/components/sections/StatsBar.tsx +4 -3
  231. package/templates/nextjs/template/.aci.yaml +9 -0
  232. package/templates/nextjs/template/.aci.yaml.tmpl +0 -1
  233. package/templates/nextjs/template/package.json.tmpl +4 -3
  234. package/templates/nextjs/template/src/app/_components/c15t-bridge.ts +30 -0
  235. package/templates/nextjs/template/src/app/_components/c15t-consent-ui.tsx +37 -0
  236. package/templates/nextjs/template/src/app/_components/consent-manager.css +63 -0
  237. package/templates/nextjs/template/src/app/_components/consent-manager.tsx +76 -0
  238. package/templates/nextjs/template/src/app/fonts/inter/OFL.txt +93 -0
  239. package/templates/nextjs/template/src/app/fonts/inter/inter-latin.woff2 +0 -0
  240. package/templates/nextjs/template/src/app/fonts/space-grotesk/OFL.txt +93 -0
  241. package/templates/nextjs/template/src/app/fonts/space-grotesk/space-grotesk-latin.woff2 +0 -0
  242. package/templates/nextjs/template/src/app/layout.tsx +12 -7
  243. package/templates/nextjs/template/tests/conformance.test.ts.tmpl +1 -0
  244. package/dist/define-layout.d.ts +0 -6
  245. package/dist/define-layout.js +0 -14
  246. package/dist/edge/personalization-core.d.ts +0 -11
  247. package/dist/edge/personalization-core.js +0 -269
  248. package/dist/next/collect-route.d.ts +0 -19
  249. package/dist/next/collect-route.js +0 -459
  250. package/dist/next/envelope-digest.d.ts +0 -21
  251. package/dist/next/envelope-digest.js +0 -58
  252. package/dist/next/middleware.d.ts +0 -40
  253. package/dist/next/middleware.js +0 -475
  254. package/dist/next/personalization-host.d.ts +0 -134
  255. package/dist/next/personalization-host.js +0 -270
  256. package/dist/next/root-layout.d.ts +0 -4
  257. package/dist/next/root-layout.js +0 -5
  258. package/dist/next/vercel-collect-sdk-route.d.ts +0 -27
  259. package/dist/next/vercel-collect-sdk-route.js +0 -181
  260. package/dist/next/vercel-personalization.d.ts +0 -4
  261. package/dist/next/vercel-personalization.js +0 -4
  262. package/dist/next/vercel-s3-personalization.d.ts +0 -79
  263. package/dist/next/vercel-s3-personalization.js +0 -570
  264. package/dist/types/layout.d.ts +0 -24
  265. package/src/types/layout.ts +0 -29
  266. package/templates/astro/starter-content/src/render/RenderPage.astro +0 -67
  267. package/templates/astro/template/src/cms/contracts/layouts/index.ts +0 -18
  268. package/templates/nextjs/starter-content/src/components/elements/AtomicBlock.tsx +0 -13
  269. package/templates/nextjs/template/src/cms/contracts/layouts/index.ts +0 -16
  270. /package/dist/{types/layout.js → cli/mintlify-render.d.mts} +0 -0
  271. /package/templates/common/.content/overlays/audience/preference-blue/pages/{home/_index.json → _index.json} +0 -0
  272. /package/templates/common/.content/overlays/audience/preference-red/pages/{home/_index.json → _index.json} +0 -0
  273. /package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_home_hero → 000000000000000000000000101}/editorial.json +0 -0
  274. /package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_home_hero → 000000000000000000000000101}/versions/v0001.json +0 -0
  275. /package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_about_hero → 000000000000000000000000102}/editorial.json +0 -0
  276. /package/templates/common/starter-content/.content/dam/folders/seed/{ast_site_about_hero → 000000000000000000000000102}/versions/v0001.json +0 -0
@@ -2,7 +2,6 @@
2
2
  "$type": "page",
3
3
  "id": "meridian-home",
4
4
  "status": "published",
5
- "layout": "default",
6
5
  "metadata": {
7
6
  "title": "Meridian — Global Satellite Internet",
8
7
  "description": "Connect from anywhere on Earth. Low-latency satellite internet for homes, businesses, and beyond.",
@@ -11,6 +10,7 @@
11
10
  "regions": {
12
11
  "main": [
13
12
  {
13
+ "$type": "component",
14
14
  "id": "hero",
15
15
  "component": "home_hero",
16
16
  "props": {
@@ -27,6 +27,7 @@
27
27
  }
28
28
  },
29
29
  {
30
+ "$type": "component",
30
31
  "id": "why-meridian",
31
32
  "component": "feature_grid",
32
33
  "props": {
@@ -34,6 +35,7 @@
34
35
  "subtitle": "Engineered for the edges of the world.",
35
36
  "features": [
36
37
  {
38
+ "$type": "component",
37
39
  "id": "global-coverage",
38
40
  "component": "feature_card",
39
41
  "props": {
@@ -43,6 +45,7 @@
43
45
  }
44
46
  },
45
47
  {
48
+ "$type": "component",
46
49
  "id": "low-latency",
47
50
  "component": "feature_card",
48
51
  "props": {
@@ -52,6 +55,7 @@
52
55
  }
53
56
  },
54
57
  {
58
+ "$type": "component",
55
59
  "id": "easy-setup",
56
60
  "component": "feature_card",
57
61
  "props": {
@@ -64,6 +68,7 @@
64
68
  }
65
69
  },
66
70
  {
71
+ "$type": "component",
67
72
  "id": "personalization-choice",
68
73
  "component": "personalization_choice",
69
74
  "props": {
@@ -75,6 +80,7 @@
75
80
  }
76
81
  },
77
82
  {
83
+ "$type": "component",
78
84
  "id": "stats",
79
85
  "component": "stats_bar",
80
86
  "props": {
@@ -87,6 +93,7 @@
87
93
  }
88
94
  },
89
95
  {
96
+ "$type": "component",
90
97
  "id": "cta",
91
98
  "component": "container",
92
99
  "props": {
@@ -94,6 +101,7 @@
94
101
  "className": "items-center justify-center text-center",
95
102
  "content": [
96
103
  {
104
+ "$type": "component",
97
105
  "id": "cta-primary",
98
106
  "component": "button",
99
107
  "props": {
@@ -105,6 +113,7 @@
105
113
  }
106
114
  },
107
115
  {
116
+ "$type": "component",
108
117
  "id": "cta-secondary",
109
118
  "component": "button",
110
119
  "props": {
@@ -2,15 +2,17 @@
2
2
  "$type": "page",
3
3
  "id": "meridian-error",
4
4
  "status": "published",
5
- "layout": "default",
6
5
  "metadata": {
7
6
  "title": "Something went wrong — Meridian",
8
7
  "description": "An unexpected error occurred while serving this page.",
9
- "sitemap": { "visible": false }
8
+ "sitemap": {
9
+ "visible": false
10
+ }
10
11
  },
11
12
  "regions": {
12
13
  "main": [
13
14
  {
15
+ "$type": "component",
14
16
  "id": "error-hero",
15
17
  "component": "home_hero",
16
18
  "props": {
@@ -27,7 +27,17 @@
27
27
  },
28
28
  "overlayResolution": {
29
29
  "type": "array",
30
- "items": { "enum": ["locale", "audience"] }
30
+ "items": {
31
+ "type": "string",
32
+ "minLength": 1,
33
+ "pattern": "^[^;=/\u0009-\u000d\u0020\u0085\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000]+$",
34
+ "not": {
35
+ "anyOf": [
36
+ { "enum": [".", "..", "experiment", "experimentArm"] },
37
+ { "pattern": "^experiment\\." }
38
+ ]
39
+ }
40
+ }
31
41
  },
32
42
  "brandHref": { "type": "string" },
33
43
  "brandLogo": {
@@ -0,0 +1,24 @@
1
+ {
2
+ "$type": "pageTemplate",
3
+ "name": "error",
4
+ "description": "Error pages are a single hero that points visitors back home.",
5
+ "routes": ["/404", "/error"],
6
+ "regions": [
7
+ {
8
+ "name": "header",
9
+ "defaults": ["navbar"],
10
+ "sequence": [{ "id": "navbar", "fragment": ["navbar"] }]
11
+ },
12
+ {
13
+ "name": "main",
14
+ "sequence": [
15
+ { "id": "hero", "component": "home_hero" }
16
+ ]
17
+ },
18
+ {
19
+ "name": "footer",
20
+ "defaults": ["site-footer"],
21
+ "sequence": [{ "id": "site-footer", "fragment": ["site-footer"] }]
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$type": "pageTemplate",
3
+ "name": "home",
4
+ "description": "The home page: a hero, the feature grid, the personalization choice, the stats bar, and the closing call-to-action container, in that order.",
5
+ "routes": ["/"],
6
+ "regions": [
7
+ {
8
+ "name": "header",
9
+ "defaults": ["navbar"],
10
+ "sequence": [{ "id": "navbar", "fragment": ["navbar"] }]
11
+ },
12
+ {
13
+ "name": "main",
14
+ "sequence": [
15
+ { "id": "hero", "component": "home_hero", "lock": "structure" },
16
+ { "id": "features", "component": "feature_grid" },
17
+ { "id": "choice", "component": "personalization_choice" },
18
+ { "id": "stats", "component": "stats_bar" },
19
+ { "id": "cta", "component": "container" }
20
+ ]
21
+ },
22
+ {
23
+ "name": "footer",
24
+ "defaults": ["site-footer"],
25
+ "sequence": [{ "id": "site-footer", "fragment": ["site-footer"] }]
26
+ }
27
+ ]
28
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "$type": "globalPolicy",
3
+ "name": "site",
4
+ "description": "No page carries more than two buttons, including nested blocks and rendered fragments.",
5
+ "counts": [
6
+ { "component": "button", "max": 2 }
7
+ ]
8
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$type": "pageTemplate",
3
+ "name": "standard",
4
+ "description": "Interior pages declare this template: a hero first, then any blocks the page needs.",
5
+ "regions": [
6
+ {
7
+ "name": "header",
8
+ "defaults": ["navbar"],
9
+ "sequence": [{ "id": "navbar", "fragment": ["navbar"] }]
10
+ },
11
+ {
12
+ "name": "main",
13
+ "closed": false,
14
+ "sequence": [
15
+ { "id": "hero", "component": "home_hero" }
16
+ ]
17
+ },
18
+ {
19
+ "name": "footer",
20
+ "defaults": ["site-footer"],
21
+ "sequence": [{ "id": "site-footer", "fragment": ["site-footer"] }]
22
+ }
23
+ ]
24
+ }
@@ -1 +1 @@
1
- 22
1
+ 24
@@ -0,0 +1,8 @@
1
+ {
2
+ "version": 1,
3
+ "rules": {
4
+ "no-public-resource-paths": [
5
+ "/assets/meridian-logo.svg"
6
+ ]
7
+ }
8
+ }
@@ -10,7 +10,7 @@
10
10
  "notFound": "/404/",
11
11
  "catchAll": "/error/"
12
12
  },
13
- "overlayResolution": ["locale", "audience"],
13
+ "overlayResolution": ["locale", "audience", "segment"],
14
14
  "brandHref": "/",
15
15
  "brandLogo": {
16
16
  "src": "/assets/meridian-logo.svg",
@@ -0,0 +1,6 @@
1
+ {
2
+ "kind": "forbid-string-pattern",
3
+ "pattern": "^/[^\\s]+\\.(png|jpe?g|webp|gif|svg|avif|mp4|webm|ico)$",
4
+ "appliesTo": "all-string-props",
5
+ "message": "Content must not reference front-end public/ resources."
6
+ }
@@ -0,0 +1,74 @@
1
+ # Seed DAM assets
2
+
3
+ This folder is a local, file-based copy of two DAM assets. The sample pages
4
+ reference them so the starter renders images without a running DAM service.
5
+ Copy one of the seed folders to mock a new asset for a page.
6
+
7
+ ## How a page references an asset
8
+
9
+ A component prop holds a `dam.assetRef` object. The home page hero uses it:
10
+
11
+ ```json
12
+ "image": {
13
+ "$type": "dam.assetRef",
14
+ "assetId": "000000000000000000000000101",
15
+ "alt": "Light abstract hero background with satellite constellation"
16
+ }
17
+ ```
18
+
19
+ - `assetId` — must match the `assetId` in one `asset.json` under `folders/`
20
+ - `alt` — optional; omit it to use the `altText` from `editorial.json`
21
+ - `version` — optional; omit it to use the newest approved version
22
+
23
+ The component schema (see `patterns/components/home_hero.json`) declares the
24
+ prop as `gradial.image`, not `dam.assetRef`. That is expected. The content
25
+ build resolves the ref and writes the `gradial.image` shape, with `sources`
26
+ filled in, into the compiled page. You author the ref; the build materializes
27
+ the image.
28
+
29
+ ## What one seed asset contains
30
+
31
+ Each asset is one folder under `folders/<group>/<assetId>/` plus one
32
+ content-addressed blob under `blobs/`. The local build scans every
33
+ `asset.json` under `folders/`, so the group name (`seed`) does not matter
34
+ for rendering. `aci content push` does use it: the path under `folders/`
35
+ becomes the folder path in the remote DAM.
36
+
37
+ ```
38
+ folders/seed/<assetId>/asset.json dam.asset: id and audit fields
39
+ folders/seed/<assetId>/editorial.json dam.editorial: title, altText, tags
40
+ folders/seed/<assetId>/governance.json dam.governance: asset status and per-version approval
41
+ folders/seed/<assetId>/versions/v0001.json dam.assetVersion: blob key, sha256, mime, dimensions
42
+ blobs/sha256/<aa>/<bb>/<sha256> the raw image bytes
43
+ ```
44
+
45
+ ## Add a new mocked asset
46
+
47
+ This is a step-by-step procedure.
48
+
49
+ 1. Pick an asset ID. Use 27 base62 characters. The seed IDs pad a small
50
+ number with leading zeros, for example `000000000000000000000000103`.
51
+ 2. Compute the SHA-256 of the image file. Copy the file to
52
+ `blobs/sha256/<first 2 hex>/<next 2 hex>/<full sha256>` with no extension.
53
+ 3. Copy `folders/seed/000000000000000000000000101/` to a new folder named
54
+ after the new asset ID.
55
+ 4. In `asset.json`, set `assetId` to the new ID.
56
+ 5. In `versions/v0001.json`, set `blob.sha256`, `blob.key`, `blob.byteSize`,
57
+ `blob.mime`, `blob.originalFilename`, and `technical.dimensions`.
58
+ 6. In `editorial.json`, set `altText`. The build fails on an empty alt text
59
+ when the page ref does not supply its own `alt`.
60
+ 7. In `governance.json`, keep `asset.status` as `active` and the version
61
+ `status` as `approved`. The build applies the same eligibility gate as
62
+ production and rejects a draft, embargoed, or restricted version.
63
+ 8. Reference the new ID from a page prop with `"$type": "dam.assetRef"`.
64
+
65
+ ## Serving bytes locally
66
+
67
+ The content build only needs the metadata files to compile a page. To serve
68
+ the image bytes from the local object store, run from the repo root:
69
+
70
+ ```sh
71
+ scripts/seed-local-dam-minio.sh packages/sdk/templates/common/starter-content/.content
72
+ ```
73
+
74
+ The script uploads every blob referenced by a `versions/*.json` file.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$type": "dam.asset",
3
3
  "schemaVersion": 1,
4
- "assetId": "ast_site_home_hero",
4
+ "assetId": "000000000000000000000000101",
5
5
  "createdAt": "2026-06-01T00:00:00Z",
6
6
  "createdBy": "local-seed",
7
7
  "updatedAt": "2026-06-01T00:00:00Z",
@@ -17,7 +17,8 @@
17
17
  "license": {
18
18
  "kind": "unsplash-local-fixture"
19
19
  },
20
- "publicationRestriction": "none"
20
+ "publicationRestriction": "none",
21
+ "deliveryTier": "public"
21
22
  }
22
23
  }
23
24
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$type": "dam.asset",
3
3
  "schemaVersion": 1,
4
- "assetId": "ast_site_about_hero",
4
+ "assetId": "000000000000000000000000102",
5
5
  "createdAt": "2026-06-01T00:00:00Z",
6
6
  "createdBy": "local-seed",
7
7
  "updatedAt": "2026-06-01T00:00:00Z",
@@ -17,7 +17,8 @@
17
17
  "license": {
18
18
  "kind": "unsplash-local-fixture"
19
19
  },
20
- "publicationRestriction": "none"
20
+ "publicationRestriction": "none",
21
+ "deliveryTier": "public"
21
22
  }
22
23
  }
23
24
  }
@@ -1,25 +1,28 @@
1
1
  {
2
2
  "$type": "fragment",
3
3
  "fragmentId": "navbar",
4
- "component": "site-navigation",
5
- "props": {
6
- "brandHref": "/",
7
- "brandLabel": "Meridian",
8
- "brandLogo": {
9
- "src": "/assets/meridian-logo.svg",
10
- "alt": "Meridian"
11
- },
12
- "navigation": [
13
- { "id": "home", "label": "Home", "href": "/" },
14
- { "id": "plans", "label": "Plans", "href": "/plans/" },
15
- { "id": "devices", "label": "Devices", "href": "/devices/" },
16
- { "id": "business", "label": "Business", "href": "/business/" },
17
- { "id": "blog", "label": "Blog", "href": "/blog/" },
18
- { "id": "about", "label": "About", "href": "/about/" }
19
- ],
20
- "utilities": [
21
- { "id": "sign-in", "label": "Sign in", "href": "/sign-in/", "variant": "ghost" },
22
- { "id": "contact-sales", "label": "Contact sales", "href": "/contact-sales/", "variant": "primary" }
23
- ]
4
+ "block": {
5
+ "$type": "component",
6
+ "component": "site-navigation",
7
+ "props": {
8
+ "brandHref": "/",
9
+ "brandLabel": "Meridian",
10
+ "brandLogo": {
11
+ "src": "/assets/meridian-logo.svg",
12
+ "alt": "Meridian"
13
+ },
14
+ "navigation": [
15
+ { "id": "home", "label": "Home", "href": "/" },
16
+ { "id": "plans", "label": "Plans", "href": "/plans/" },
17
+ { "id": "devices", "label": "Devices", "href": "/devices/" },
18
+ { "id": "business", "label": "Business", "href": "/business/" },
19
+ { "id": "blog", "label": "Blog", "href": "/blog/" },
20
+ { "id": "about", "label": "About", "href": "/about/" }
21
+ ],
22
+ "utilities": [
23
+ { "id": "sign-in", "label": "Sign in", "href": "/sign-in/", "variant": "ghost" },
24
+ { "id": "contact-sales", "label": "Contact sales", "href": "/contact-sales/", "variant": "primary" }
25
+ ]
26
+ }
24
27
  }
25
28
  }
@@ -1,62 +1,65 @@
1
1
  {
2
2
  "$type": "fragment",
3
3
  "fragmentId": "site-footer",
4
- "component": "site-footer",
5
- "props": {
6
- "brandHref": "/",
7
- "brandLabel": "Meridian",
8
- "brandLogo": {
9
- "src": "/assets/meridian-logo.svg",
10
- "alt": "Meridian"
11
- },
12
- "columns": [
13
- {
14
- "id": "products",
15
- "title": "Products",
16
- "links": [
17
- { "id": "plans", "label": "Plans", "href": "/plans/" },
18
- { "id": "devices", "label": "Devices", "href": "/devices/" },
19
- { "id": "coverage", "label": "Coverage", "href": "/coverage/" }
20
- ]
4
+ "block": {
5
+ "$type": "component",
6
+ "component": "site-footer",
7
+ "props": {
8
+ "brandHref": "/",
9
+ "brandLabel": "Meridian",
10
+ "brandLogo": {
11
+ "src": "/assets/meridian-logo.svg",
12
+ "alt": "Meridian"
21
13
  },
22
- {
23
- "id": "solutions",
24
- "title": "Solutions",
25
- "links": [
26
- { "id": "business", "label": "Business", "href": "/business/" },
27
- { "id": "maritime", "label": "Maritime", "href": "/business/maritime/" },
28
- { "id": "aerospace", "label": "Aerospace", "href": "/business/aerospace/" }
29
- ]
30
- },
31
- {
32
- "id": "resources",
33
- "title": "Resources",
34
- "links": [
35
- { "id": "blog", "label": "Blog", "href": "/blog/" },
36
- { "id": "documentation", "label": "Documentation", "href": "/docs/" },
37
- { "id": "support", "label": "Support", "href": "/support/" }
38
- ]
39
- },
40
- {
41
- "id": "company",
42
- "title": "Company",
43
- "links": [
44
- { "id": "about", "label": "About us", "href": "/about/" },
45
- { "id": "careers", "label": "Careers", "href": "/careers/" },
46
- { "id": "contact", "label": "Contact", "href": "/contact/" }
47
- ]
48
- }
49
- ],
50
- "social": [
51
- { "id": "x", "label": "X", "href": "https://x.com/meridian", "icon": "X" },
52
- { "id": "linkedin", "label": "LinkedIn", "href": "https://www.linkedin.com/company/meridian", "icon": "in" },
53
- { "id": "youtube", "label": "YouTube", "href": "https://www.youtube.com/meridian", "icon": "YT" }
54
- ],
55
- "legalLinks": [
56
- { "id": "terms", "label": "Terms of Service", "href": "/terms/" },
57
- { "id": "privacy", "label": "Privacy Policy", "href": "/privacy/" },
58
- { "id": "security", "label": "Security", "href": "/security/" }
59
- ],
60
- "copyright": "Copyright (c) 2026 Meridian Satellite Networks, Inc. All rights reserved."
14
+ "columns": [
15
+ {
16
+ "id": "products",
17
+ "title": "Products",
18
+ "links": [
19
+ { "id": "plans", "label": "Plans", "href": "/plans/" },
20
+ { "id": "devices", "label": "Devices", "href": "/devices/" },
21
+ { "id": "coverage", "label": "Coverage", "href": "/coverage/" }
22
+ ]
23
+ },
24
+ {
25
+ "id": "solutions",
26
+ "title": "Solutions",
27
+ "links": [
28
+ { "id": "business", "label": "Business", "href": "/business/" },
29
+ { "id": "maritime", "label": "Maritime", "href": "/business/maritime/" },
30
+ { "id": "aerospace", "label": "Aerospace", "href": "/business/aerospace/" }
31
+ ]
32
+ },
33
+ {
34
+ "id": "resources",
35
+ "title": "Resources",
36
+ "links": [
37
+ { "id": "blog", "label": "Blog", "href": "/blog/" },
38
+ { "id": "documentation", "label": "Documentation", "href": "/docs/" },
39
+ { "id": "support", "label": "Support", "href": "/support/" }
40
+ ]
41
+ },
42
+ {
43
+ "id": "company",
44
+ "title": "Company",
45
+ "links": [
46
+ { "id": "about", "label": "About us", "href": "/about/" },
47
+ { "id": "careers", "label": "Careers", "href": "/careers/" },
48
+ { "id": "contact", "label": "Contact", "href": "/contact/" }
49
+ ]
50
+ }
51
+ ],
52
+ "social": [
53
+ { "id": "x", "label": "X", "href": "https://x.com/meridian", "icon": "X" },
54
+ { "id": "linkedin", "label": "LinkedIn", "href": "https://www.linkedin.com/company/meridian", "icon": "in" },
55
+ { "id": "youtube", "label": "YouTube", "href": "https://www.youtube.com/meridian", "icon": "YT" }
56
+ ],
57
+ "legalLinks": [
58
+ { "id": "terms", "label": "Terms of Service", "href": "/terms/" },
59
+ { "id": "privacy", "label": "Privacy Policy", "href": "/privacy/" },
60
+ { "id": "security", "label": "Security", "href": "/security/" }
61
+ ],
62
+ "copyright": "Copyright (c) 2026 Meridian Satellite Networks, Inc. All rights reserved."
63
+ }
61
64
  }
62
65
  }
@@ -2,7 +2,6 @@
2
2
  "$type": "page",
3
3
  "id": "meridian-not-found",
4
4
  "status": "published",
5
- "layout": "default",
6
5
  "metadata": {
7
6
  "title": "Page not found — Meridian",
8
7
  "description": "The page you are looking for does not exist.",
@@ -11,6 +10,7 @@
11
10
  "regions": {
12
11
  "main": [
13
12
  {
13
+ "$type": "component",
14
14
  "id": "not-found-hero",
15
15
  "component": "home_hero",
16
16
  "props": {
@@ -21,7 +21,7 @@
21
21
  "ctaHref": "/",
22
22
  "image": {
23
23
  "$type": "dam.assetRef",
24
- "assetId": "ast_site_home_hero",
24
+ "assetId": "000000000000000000000000101",
25
25
  "alt": "Light abstract background with satellite constellation"
26
26
  }
27
27
  }