create-ailk 0.7.0 → 0.9.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 (310) hide show
  1. package/README.md +112 -10
  2. package/component-catalog.json +798 -49
  3. package/component-catalog.md +9 -6
  4. package/dist/add-module.d.ts +20 -0
  5. package/dist/add-module.js +43 -7
  6. package/dist/add-route.d.ts +56 -0
  7. package/dist/add-route.js +286 -0
  8. package/dist/apply-design-md.d.ts +7 -0
  9. package/dist/apply-design-md.js +50 -0
  10. package/dist/apply-design.d.ts +64 -0
  11. package/dist/apply-design.js +273 -0
  12. package/dist/claude-md.d.ts +111 -0
  13. package/dist/claude-md.js +334 -0
  14. package/dist/cli.js +114 -28
  15. package/dist/derive-architecture.js +41 -36
  16. package/dist/design-compile.d.ts +71 -0
  17. package/dist/design-compile.js +98 -0
  18. package/dist/design-package.d.ts +83 -0
  19. package/dist/design-package.js +468 -0
  20. package/dist/design-presets.d.ts +86 -0
  21. package/dist/design-presets.js +642 -0
  22. package/dist/design-scaffold.d.ts +76 -0
  23. package/dist/design-scaffold.js +220 -0
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.js +4 -1
  26. package/dist/legacy-nav-renderers.d.ts +45 -0
  27. package/dist/legacy-nav-renderers.js +545 -0
  28. package/dist/lib/auth-secret-file.d.ts +19 -0
  29. package/dist/lib/auth-secret-file.js +112 -0
  30. package/dist/lib/design-checks.d.ts +78 -0
  31. package/dist/lib/design-checks.js +174 -0
  32. package/dist/lib/extract-module-bundle.js +5 -1
  33. package/dist/lib/license-key-files.d.ts +9 -0
  34. package/dist/lib/license-key-files.js +2 -2
  35. package/dist/lib/module-license-gate.d.ts +89 -0
  36. package/dist/lib/module-license-gate.js +171 -12
  37. package/dist/lib/module-tier.d.ts +45 -16
  38. package/dist/lib/module-tier.js +76 -0
  39. package/dist/lib/pro-callout.js +10 -2
  40. package/dist/lib/render-verdict.d.ts +52 -0
  41. package/dist/lib/render-verdict.js +77 -0
  42. package/dist/lib/scaffold-render-sweep.d.ts +105 -0
  43. package/dist/lib/scaffold-render-sweep.js +236 -0
  44. package/dist/module-architecture.d.ts +19 -16
  45. package/dist/module-architecture.js +64 -21
  46. package/dist/parse-args.d.ts +88 -10
  47. package/dist/parse-args.js +272 -21
  48. package/dist/programmatic.d.ts +66 -12
  49. package/dist/programmatic.js +361 -34
  50. package/dist/site-chrome.d.ts +19 -9
  51. package/dist/site-chrome.js +23 -13
  52. package/dist/site-manifest.d.ts +25 -0
  53. package/dist/site-manifest.js +254 -0
  54. package/dist/site-roster.d.ts +41 -0
  55. package/dist/site-roster.js +149 -11
  56. package/dist/starter-grid.d.ts +232 -0
  57. package/dist/starter-grid.js +545 -0
  58. package/dist/surfaces.d.ts +41 -9
  59. package/dist/surfaces.js +268 -92
  60. package/dist/template-manifest.d.ts +65 -29
  61. package/dist/template-manifest.js +161 -382
  62. package/dist/template-names.d.ts +14 -12
  63. package/dist/template-names.js +13 -17
  64. package/package.json +5 -4
  65. package/site-templates/_base/content/en/Feature/feature-1.mdx +69 -0
  66. package/site-templates/_base/content/en/Feature/feature-2.mdx +69 -0
  67. package/site-templates/_base/content/en/Feature/feature-3.mdx +69 -0
  68. package/site-templates/_base/content/en/FeaturesList/features.mdx +91 -0
  69. package/site-templates/_base/content/en/GlossaryList/glossary.mdx +0 -1
  70. package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +0 -1
  71. package/site-templates/_base/content/en/PortfolioItem/sample-four.mdx +105 -0
  72. package/site-templates/_base/content/en/PortfolioItem/sample-one.mdx +34 -0
  73. package/site-templates/_base/content/en/PortfolioItem/sample-three.mdx +94 -0
  74. package/site-templates/_base/content/en/PortfolioItem/sample-two.mdx +45 -0
  75. package/site-templates/_base/content/en/PortfolioList/portfolio.mdx +169 -0
  76. package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +15 -0
  77. package/site-templates/_base/content/en/UseCase/persona-1.mdx +70 -0
  78. package/site-templates/_base/content/en/UseCase/persona-2.mdx +70 -0
  79. package/site-templates/_base/content/en/UseCase/persona-3.mdx +70 -0
  80. package/site-templates/{minimalism-site/TEMPLATE-MANIFEST.json → aliases/minimalism-site.TEMPLATE-MANIFEST.json} +72 -40
  81. package/site-templates/designs/minimalism/DESIGN.md +98 -6
  82. package/site-templates/designs/minimalism/sample/README.md +48 -0
  83. package/site-templates/designs/standard/DESIGN.md +103 -6
  84. package/site-templates/marketing-site/DESIGN.md +103 -6
  85. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +144 -47
  86. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +82 -41
  87. package/site-templates/marketing-site-free/DESIGN.md +103 -6
  88. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +150 -48
  89. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +114 -67
  90. package/site-templates/marketing-site-free/ailk-template.json +1 -1
  91. package/site-templates/marketing-site-free/content/en/NewsletterSignup/newsletter.mdx +59 -0
  92. package/site-templates/marketing-site-free/content/en/Pricing/pricing.mdx +199 -0
  93. package/site-templates/saas-product/DESIGN.md +103 -6
  94. package/site-templates/saas-product/TEMPLATE-MANIFEST.md +9 -1
  95. package/site-templates/{simple-service → shapes/local-business-service}/TEMPLATE-MANIFEST.json +210 -81
  96. package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +356 -0
  97. package/site-templates/shapes/local-business-service/ailk-template.json +10 -0
  98. package/site-templates/{simple-service → shapes/local-business-service}/content/en/AboutPage/about.mdx +4 -4
  99. package/site-templates/shapes/local-business-service/content/en/HomePage/home.mdx +70 -0
  100. package/site-templates/shapes/local-business-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
  101. package/site-templates/shapes/local-business-service/content/en/PortfolioList/portfolio.mdx +171 -0
  102. package/site-templates/{minimalism-site → shapes/local-business-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +7 -8
  103. package/site-templates/shapes/local-business-service/content/en/Service/first-job.mdx +39 -0
  104. package/site-templates/shapes/local-business-service/content/en/Service/second-job.mdx +39 -0
  105. package/site-templates/shapes/local-business-service/content/en/Service/third-job.mdx +39 -0
  106. package/site-templates/shapes/local-business-service/content/en/ServicesList/services.mdx +61 -0
  107. package/site-templates/shapes/local-business-service/provenance.json +4 -0
  108. package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.json +471 -0
  109. package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +354 -0
  110. package/site-templates/shapes/organization-service/ailk-template.json +10 -0
  111. package/site-templates/shapes/organization-service/content/en/AboutPage/about.mdx +38 -0
  112. package/site-templates/shapes/organization-service/content/en/HomePage/home.mdx +85 -0
  113. package/site-templates/shapes/organization-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
  114. package/site-templates/shapes/organization-service/content/en/PortfolioList/portfolio.mdx +171 -0
  115. package/site-templates/shapes/organization-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
  116. package/site-templates/{minimalism-site → shapes/organization-service}/content/en/ServicesList/services.mdx +3 -4
  117. package/site-templates/shapes/organization-service/provenance.json +4 -0
  118. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +478 -0
  119. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +353 -0
  120. package/site-templates/shapes/person-service/ailk-template.json +10 -0
  121. package/site-templates/shapes/person-service/content/_site.mdx +85 -0
  122. package/site-templates/shapes/person-service/content/en/AboutPage/about.mdx +39 -0
  123. package/site-templates/shapes/person-service/content/en/HomePage/home.mdx +97 -0
  124. package/site-templates/shapes/person-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
  125. package/site-templates/shapes/person-service/content/en/PortfolioList/portfolio.mdx +171 -0
  126. package/site-templates/{simple-service → shapes/person-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +10 -11
  127. package/site-templates/shapes/person-service/content/en/Service/first-engagement.mdx +38 -0
  128. package/site-templates/shapes/person-service/content/en/Service/second-engagement.mdx +38 -0
  129. package/site-templates/shapes/person-service/content/en/Service/third-engagement.mdx +38 -0
  130. package/site-templates/{simple-service → shapes/person-service}/content/en/ServicesList/services.mdx +16 -16
  131. package/site-templates/shapes/person-service/provenance.json +4 -0
  132. package/templates/.claude/rules/architecture.md +7 -0
  133. package/templates/.claude/skills/README.md +5 -3
  134. package/templates/.claude/skills/add-auth/references/env-vars.md +22 -15
  135. package/templates/.claude/skills/add-auth/references/oauth-app-setup.md +3 -2
  136. package/templates/.claude/skills/add-page/SKILL.md +241 -238
  137. package/templates/.claude/skills/add-page/references/page-types.md +85 -72
  138. package/templates/.claude/skills/add-page/scripts/site-pages.mjs +87 -0
  139. package/templates/.claude/skills/add-page/templates/comparison-page.mdx.tmpl +99 -0
  140. package/templates/.claude/skills/add-page/templates/content.mdx.tmpl +8 -18
  141. package/templates/.claude/skills/add-page/templates/flow-landing-page.mdx.tmpl +43 -0
  142. package/templates/.claude/skills/add-page/templates/report-page.mdx.tmpl +52 -0
  143. package/templates/.claude/skills/add-page/templates/reports-list.mdx.tmpl +38 -0
  144. package/templates/.claude/skills/check-site/SKILL.md +23 -0
  145. package/templates/.claude/skills/fill-page/SKILL.md +26 -7
  146. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +1 -1
  147. package/templates/.claude/skills/setup-database/SKILL.md +156 -0
  148. package/templates/.claude/skills/setup-database/scripts/verify-inbox.ts +154 -0
  149. package/templates/.claude/skills/setup-deploy/SKILL.md +64 -32
  150. package/templates/.claude/skills/setup-deploy/references/env-vars-template.md +44 -36
  151. package/templates/.claude/skills/setup-deploy/references/runbook-template.md +58 -102
  152. package/templates/.claude/skills/update-page/SKILL.md +117 -0
  153. package/templates/.claude/skills/update-page/scripts/update-page.ts +640 -0
  154. package/templates/.claude/skills/update-page/templates/redirects.mjs.tmpl +31 -0
  155. package/templates/.claude/skills/upgrade-plan/SKILL.md +12 -8
  156. package/templates/.github/workflows/ci.yml +4 -0
  157. package/templates/.prettierignore +1 -0
  158. package/templates/CLAUDE.md +146 -103
  159. package/templates/DESIGN.md +103 -6
  160. package/templates/README.md +63 -43
  161. package/templates/apps/api/.env.example +2 -1
  162. package/templates/apps/api/CLAUDE.md +3 -2
  163. package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +2 -0
  164. package/templates/apps/api/src/__tests__/server.test.ts +116 -0
  165. package/templates/apps/api/src/config/__tests__/index.test.ts +115 -14
  166. package/templates/apps/api/src/config/index.ts +35 -16
  167. package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +30 -0
  168. package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +96 -0
  169. package/templates/apps/api/src/lib/lead-capture-store.ts +12 -0
  170. package/templates/apps/api/src/lib/lead-delivery.ts +52 -0
  171. package/templates/apps/api/src/lib/stripe.ts +9 -0
  172. package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +140 -0
  173. package/templates/apps/api/src/middleware/auth.ts +54 -0
  174. package/templates/apps/api/src/openapi/spec.ts +63 -12
  175. package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +5 -2
  176. package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +628 -0
  177. package/templates/apps/api/src/routes/checkout/sessions.ts +222 -24
  178. package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +88 -0
  179. package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +100 -0
  180. package/templates/apps/api/src/routes/leads/index.ts +46 -1
  181. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +1 -1
  182. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +5 -1
  183. package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +521 -20
  184. package/templates/apps/api/src/routes/webhooks/stripe.ts +124 -32
  185. package/templates/apps/api/src/server.ts +35 -0
  186. package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +194 -0
  187. package/templates/apps/api/src/services/__tests__/leads-inbox.test.ts +124 -0
  188. package/templates/apps/api/src/services/__tests__/revalidation.test.ts +90 -15
  189. package/templates/apps/api/src/services/checkout-buyer.ts +72 -0
  190. package/templates/apps/api/src/services/lead-routing.ts +140 -30
  191. package/templates/apps/api/src/services/leads-inbox.ts +48 -11
  192. package/templates/apps/api/src/services/revalidation.ts +60 -15
  193. package/templates/apps/mcp/__tests__/parity.test.ts +5 -4
  194. package/templates/apps/mcp/__tests__/tools/create_project.test.ts +30 -24
  195. package/templates/apps/mcp/src/tools/create_project.ts +21 -6
  196. package/templates/apps/mcp/src/tools/purchase.ts +4 -2
  197. package/templates/apps/web/.env.example +13 -0
  198. package/templates/apps/web/CLAUDE.md +22 -28
  199. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +1 -1
  200. package/templates/apps/web/app/[locale]/(authed)/leads/__tests__/page.test.tsx +24 -0
  201. package/templates/apps/web/app/[locale]/(authed)/leads/page.tsx +17 -6
  202. package/templates/apps/web/app/[locale]/[slug]/[detail]/__tests__/page.test.tsx +110 -0
  203. package/templates/apps/web/app/[locale]/[slug]/[detail]/page.tsx +60 -0
  204. package/templates/apps/web/app/[locale]/[slug]/page.tsx +1 -1
  205. package/templates/apps/web/app/[locale]/alternatives/__tests__/page.test.tsx +161 -0
  206. package/templates/apps/web/app/[locale]/alternatives/page.tsx +104 -0
  207. package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +14 -6
  208. package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +10 -9
  209. package/templates/apps/web/app/[locale]/contact/__tests__/contact-form-text.test.ts +32 -0
  210. package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +129 -0
  211. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +227 -84
  212. package/templates/apps/web/app/[locale]/contact/contact-form-text.ts +50 -0
  213. package/templates/apps/web/app/[locale]/contact/contact.actions.ts +73 -20
  214. package/templates/apps/web/app/[locale]/contact/page.tsx +105 -15
  215. package/templates/apps/web/app/[locale]/contact/site-contact-email.ts +54 -0
  216. package/templates/apps/web/app/[locale]/features/[slug]/page.tsx +64 -0
  217. package/templates/apps/web/app/[locale]/features/page.tsx +52 -0
  218. package/templates/apps/web/app/[locale]/{use-cases → for}/[slug]/page.tsx +21 -5
  219. package/templates/apps/web/app/[locale]/for/__tests__/page-renderer-migration.test.tsx +73 -0
  220. package/templates/apps/web/app/[locale]/{use-cases → for}/page.tsx +8 -7
  221. package/templates/apps/web/app/[locale]/glossary/page.tsx +1 -1
  222. package/templates/apps/web/app/[locale]/layout.tsx +65 -17
  223. package/templates/apps/web/app/[locale]/newsletter/__tests__/newsletter.actions.test.ts +75 -0
  224. package/templates/apps/web/app/[locale]/newsletter/__tests__/page.test.tsx +163 -0
  225. package/templates/apps/web/app/[locale]/newsletter/newsletter.actions.ts +66 -0
  226. package/templates/apps/web/app/[locale]/newsletter/page.tsx +106 -14
  227. package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +59 -0
  228. package/templates/apps/web/app/[locale]/{book-a-call → portfolio}/page.tsx +12 -13
  229. package/templates/apps/web/app/[locale]/vs/[slug]/__tests__/page.test.tsx +112 -0
  230. package/templates/apps/web/app/[locale]/vs/[slug]/page.tsx +70 -0
  231. package/templates/apps/web/app/api/revalidate/__tests__/route.test.ts +236 -44
  232. package/templates/apps/web/app/api/revalidate/route.ts +78 -36
  233. package/templates/apps/web/lib/__tests__/site-brand.test.ts +79 -0
  234. package/templates/apps/web/lib/__tests__/site-theme.test.ts +104 -11
  235. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +21 -4
  236. package/templates/apps/web/lib/locale-guard.ts +18 -0
  237. package/templates/apps/web/lib/meet-placeholder.ts +5 -0
  238. package/templates/apps/web/lib/nav-config.ts +50 -37
  239. package/templates/apps/web/lib/site-brand.tsx +13 -9
  240. package/templates/apps/web/lib/site-identity.ts +14 -0
  241. package/templates/apps/web/lib/site-logo.tsx +36 -0
  242. package/templates/apps/web/lib/site-theme.ts +46 -26
  243. package/templates/apps/web/messages/en.json +45 -5
  244. package/templates/apps/web/middleware.ts +28 -4
  245. package/templates/content/_site.mdx +4 -2
  246. package/templates/content/en/BlogList/blog.mdx +37 -16
  247. package/templates/content/en/BookCall/book-a-call.mdx +80 -0
  248. package/templates/content/en/BookCall/onsite-estimate.mdx +56 -0
  249. package/templates/content/en/BookCall/onsite-service.mdx +56 -0
  250. package/templates/content/en/BookCall/start-project.mdx +56 -0
  251. package/templates/content/en/ContactPage/contact.mdx +43 -34
  252. package/templates/content/en/HomePage/home.mdx +10 -22
  253. package/templates/content/en/LandingPage/meet.mdx +59 -0
  254. package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +0 -1
  255. package/templates/content/en/UseCasesList/{use-cases.mdx → for.mdx} +19 -18
  256. package/templates/database/CHANGELOG.md +14 -0
  257. package/templates/database/package.json +1 -1
  258. package/templates/package.json +2 -1
  259. package/templates/tools/check-claude-md.ts +128 -0
  260. package/versions.json +33 -33
  261. package/site-templates/_base/content/en/BookCall/book-call.mdx +0 -53
  262. package/site-templates/_base/content/en/UseCase/first-use-case.mdx +0 -23
  263. package/site-templates/_base/content/en/UseCase/second-use-case.mdx +0 -23
  264. package/site-templates/_base/content/en/UseCase/third-use-case.mdx +0 -23
  265. package/site-templates/minimalism-site/DESIGN.md +0 -162
  266. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +0 -470
  267. package/site-templates/minimalism-site/ailk-template.json +0 -23
  268. package/site-templates/minimalism-site/content/en/AboutPage/about.mdx +0 -110
  269. package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +0 -53
  270. package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +0 -34
  271. package/site-templates/minimalism-site/content/en/FAQPage/faq.mdx +0 -57
  272. package/site-templates/minimalism-site/content/en/LandingPage/referral.mdx +0 -77
  273. package/site-templates/minimalism-site/content/en/LandingPage/reports.mdx +0 -73
  274. package/site-templates/minimalism-site/content/en/ReportPage/annual-letter-2024.mdx +0 -52
  275. package/site-templates/minimalism-site/content/en/ReportPage/field-notes-2023.mdx +0 -52
  276. package/site-templates/minimalism-site/content/en/ReportPage/platform-shift-2025.mdx +0 -52
  277. package/site-templates/minimalism-site/content/en/ReportPage/state-of-the-market-2026.mdx +0 -52
  278. package/site-templates/minimalism-site/flows/referral.flow.json +0 -71
  279. package/site-templates/minimalism-site/provenance.json +0 -4
  280. package/site-templates/simple-service/DESIGN.md +0 -162
  281. package/site-templates/simple-service/TEMPLATE-MANIFEST.md +0 -333
  282. package/site-templates/simple-service/ailk-template.json +0 -11
  283. package/site-templates/simple-service/content/en/BookCall/book-call.mdx +0 -53
  284. package/site-templates/simple-service/content/en/ContactPage/contact.mdx +0 -32
  285. package/site-templates/simple-service/content/en/FAQPage/faq.mdx +0 -56
  286. package/site-templates/simple-service/content/en/HomePage/home.mdx +0 -85
  287. package/site-templates/simple-service/content/en/Service/landscape-design.mdx +0 -40
  288. package/site-templates/simple-service/content/en/Service/lawn-maintenance.mdx +0 -40
  289. package/site-templates/simple-service/content/en/Service/seasonal-cleanup.mdx +0 -40
  290. package/site-templates/simple-service/provenance.json +0 -4
  291. package/templates/.claude/skills/add-page/templates/route.tsx.tmpl +0 -28
  292. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +0 -211
  293. package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +0 -96
  294. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +0 -72
  295. package/templates/content/en/SoftwareProduct/product.mdx +0 -175
  296. /package/site-templates/{minimalism-site → designs/minimalism/sample}/content/en/HomePage/home.mdx +0 -0
  297. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-1.svg +0 -0
  298. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-2.svg +0 -0
  299. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-3.svg +0 -0
  300. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-4.svg +0 -0
  301. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-5.svg +0 -0
  302. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-6.svg +0 -0
  303. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/hero-backdrop.svg +0 -0
  304. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-1.svg +0 -0
  305. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-2.svg +0 -0
  306. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-3.svg +0 -0
  307. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/wordmark-placeholder.svg +0 -0
  308. /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/first-engagement.mdx +0 -0
  309. /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/second-engagement.mdx +0 -0
  310. /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/third-engagement.mdx +0 -0
@@ -1,23 +0,0 @@
1
- {
2
- "name": "minimalism-site",
3
- "requires": ["marketing", "scheduling", "signal-collectors"],
4
- "extends": "_base",
5
- "$comment": "The second Pro template (#5589) — the reports-first, scroll-snap deck site. NOT marketing-site plus a module: requires omits docs-blog, so this template and marketing-site are siblings under _base (#5618 D2), never a lineage. Composed base → modules → template: /privacy and /terms arrive with the _base layer this extends (its unrostered /pricing seed does not install, #6646); /meet, /meet/<slug> and /meet/confirmed with the scheduling bundle; the /flows/* routes, the /reports/<slug> reader route and the sample report PDF at apps/web/public/reports/sample-report.pdf with the signal-collectors bundle; the Free contact/faq/about compositions with the overlay, which this template's own /about, /contact and /faq files then override; the overlay's other seeds (/use-cases, the /software/product page, the /blog teaser) are unrostered here and do not install (#6646). This tree holds ONLY its own compositions, its placeholder copy and its generated placeholder assets. layout (nav mark-only, footer centered, announcementBanner off, home deck) is the minimalism design's, supplied by DESIGN_LAYOUTS from the TEMPLATE_MANIFESTS entry's design field (#6638), not declared here — the code registry is authoritative for a template create-ailk ships, and a block here would be a second authority for one fact. installMap: bundle-relative source -> scaffold-relative destination; the stager reads only installMap/postInstall/patches. Unmapped content/en/** lands at the scaffold root's content/, exactly as marketing-site-free's does.",
6
- "installMap": {
7
- "provenance.json": ".ailk-template.json",
8
- "TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json",
9
- "assets/hero-backdrop.svg": "apps/web/public/hero-backdrop.svg",
10
- "assets/wordmark-placeholder.svg": "apps/web/public/wordmark-placeholder.svg",
11
- "assets/logo-placeholder-1.svg": "apps/web/public/logo-placeholder-1.svg",
12
- "assets/logo-placeholder-2.svg": "apps/web/public/logo-placeholder-2.svg",
13
- "assets/logo-placeholder-3.svg": "apps/web/public/logo-placeholder-3.svg",
14
- "assets/avatar-placeholder-1.svg": "apps/web/public/avatar-placeholder-1.svg",
15
- "assets/avatar-placeholder-2.svg": "apps/web/public/avatar-placeholder-2.svg",
16
- "assets/avatar-placeholder-3.svg": "apps/web/public/avatar-placeholder-3.svg",
17
- "assets/avatar-placeholder-4.svg": "apps/web/public/avatar-placeholder-4.svg",
18
- "assets/avatar-placeholder-5.svg": "apps/web/public/avatar-placeholder-5.svg",
19
- "assets/avatar-placeholder-6.svg": "apps/web/public/avatar-placeholder-6.svg",
20
- "flows/referral.flow.json": "database/flows/referral.flow.json"
21
- },
22
- "postInstall": "Template minimalism-site installed. The home page is a NINE-SLIDE SCROLL-SNAP DECK (content/en/HomePage/home.mdx): one full-viewport panel per section, the brand mark hidden on slide 1 and revealed from slide 2 on, no nav items, and the footer bottom bar carrying Privacy, Terms, FAQ, the social row, the theme toggle and the locale switcher. Its module pages arrived with their bundles: the booker at /meet from scheduling, the report reader at /reports/<slug> and the flow routes from signal-collectors; /privacy, /terms, /glossary and /newsletter came with the base layer, and /book-a-call is this template's own override of the base seed, its call to action opening the /meet booker. This template adds the deck, /reports, /about, /services (+ three samples), /contact, /faq, /referral, four sample reports and the referral flow at /flows/referral/start. RENAMING /about: many sites want /partners, /team, /family or /company instead. That is a route rename in YOUR scaffold, never a content move - keep content/en/AboutPage/ (AboutPage is a schema type, not a URL), rename the route directory (git mv 'apps/web/app/[locale]/about' 'apps/web/app/[locale]/partners'), and update the one footer label that names it (messages/<locale>.json). Once the routes map ships in the scaffold it is one row: the /about row's route plus a legacyRoutes entry so the old path 301s. EVERY line of copy, all four sample reports, the three logo placeholders, the six portrait placeholders, the wordmark lockup on slide 1 and the hero backdrop are placeholders - replace them before you launch."
23
- }
@@ -1,110 +0,0 @@
1
- ---
2
- type: "AboutPage"
3
- slug: "about"
4
- title: "About"
5
- description: "The people behind {your company}. Placeholder copy and placeholder portraits — replace both before you launch."
6
- sections:
7
- [
8
- {
9
- "id": "intro",
10
- "type": "content-block",
11
- "data":
12
- {
13
- "variant": "narrow",
14
- "eyebrow": "About",
15
- "headline": "We work with a small number of {the people you serve}, for a long time",
16
- "body": "{Two or three sentences on how the practice started, what it does now, and what it refuses to do. Keep the paragraph short — this page is read standing up.}",
17
- },
18
- },
19
- {
20
- "id": "partners",
21
- "type": "team",
22
- "data":
23
- {
24
- "headline": "Partners",
25
- "variant": "with-large-images",
26
- "hoverReveal": true,
27
- "largePhotos": true,
28
- "members":
29
- [
30
- {
31
- "name": "{Name One}",
32
- "role": "{Role}",
33
- "bio": "{One line on what this person does here.}",
34
- "avatar":
35
- { "src": "/avatar-placeholder-1.svg", "alt": "{Name One}" },
36
- },
37
- {
38
- "name": "{Name Two}",
39
- "role": "{Role}",
40
- "bio": "{One line on what this person does here.}",
41
- "avatar":
42
- { "src": "/avatar-placeholder-2.svg", "alt": "{Name Two}" },
43
- },
44
- {
45
- "name": "{Name Three}",
46
- "role": "{Role}",
47
- "bio": "{One line on what this person does here.}",
48
- "avatar":
49
- { "src": "/avatar-placeholder-3.svg", "alt": "{Name Three}" },
50
- },
51
- {
52
- "name": "{Name Four}",
53
- "role": "{Role}",
54
- "bio": "{One line on what this person does here.}",
55
- "avatar":
56
- { "src": "/avatar-placeholder-4.svg", "alt": "{Name Four}" },
57
- },
58
- {
59
- "name": "{Name Five}",
60
- "role": "{Role}",
61
- "bio": "{One line on what this person does here.}",
62
- "avatar":
63
- { "src": "/avatar-placeholder-5.svg", "alt": "{Name Five}" },
64
- },
65
- {
66
- "name": "{Name Six}",
67
- "role": "{Role}",
68
- "bio": "{One line on what this person does here.}",
69
- "avatar":
70
- { "src": "/avatar-placeholder-6.svg", "alt": "{Name Six}" },
71
- },
72
- ],
73
- },
74
- },
75
- {
76
- "id": "closing",
77
- "type": "cta",
78
- "data":
79
- {
80
- "variant": "minimal",
81
- "headline": "Work with us",
82
- "primaryCta": { "label": "Hire me →", "href": "/meet" },
83
- "secondaryCta":
84
- {
85
- "label": "Contact me →",
86
- "href": "/contact",
87
- "variant": "outline",
88
- },
89
- },
90
- },
91
- ]
92
- ---
93
-
94
- {/\*
95
- RENAMING THIS PAGE. A site whose partners page should read `/partners`,
96
- `/team`, `/family` or `/company` renames it in two moves, both in the
97
- scaffold, neither of them here:
98
-
99
- 1. `git mv content/en/AboutPage content/en/<NewType>` is NOT one of them —
100
- `AboutPage` is a content TYPE in the schema registry, not a URL. Keep the
101
- directory. Rename the ROUTE:
102
- `git mv "apps/web/app/[locale]/about" "apps/web/app/[locale]/partners"`.
103
- 2. Point the renamed route at the same content and update the one nav/footer
104
- label that names it (`apps/web/lib/nav-config.ts`, `messages/<locale>.json`).
105
-
106
- Once #5572's routes map lands in the scaffold this collapses to ONE row —
107
- the `/about` row's `route` (and its `legacyRoutes` entry, so the old path
108
- 301s). Documented, never implemented here: a template declares pages, it does
109
- not move a customer's routes for them.
110
- \*/}
@@ -1,53 +0,0 @@
1
- ---
2
- type: "BookCall"
3
- slug: "book-call"
4
- title: "{Book a call: what a visitor gets from it}"
5
- description: "{One sentence on who the call is for and what they leave with}"
6
- placeholder: true
7
- schema:
8
- mainEntity:
9
- "@type": "Offer"
10
- name: "{Your call name}"
11
- price: 0
12
- priceCurrency: "USD"
13
- sections:
14
- [
15
- {
16
- "id": "hero",
17
- "type": "hero",
18
- "data":
19
- {
20
- "eyebrow": "Book a call",
21
- "headline": "{Book a call: what a visitor gets from it}",
22
- "subheadline": "{One sentence on who the call is for and what they leave with}",
23
- "primaryCta": { "label": "Book a time", "href": "/meet" },
24
- },
25
- },
26
- {
27
- "id": "what-happens-on-the-call",
28
- "type": "items",
29
- "data":
30
- {
31
- "headline": "What happens on the call?",
32
- "columns": 3,
33
- "items":
34
- [
35
- {
36
- "title": "{The first thing you cover}",
37
- "description": "{One or two sentences on what the visitor learns or decides here}",
38
- },
39
- {
40
- "title": "{The second thing you cover}",
41
- "description": "{One or two sentences on what the visitor learns or decides here}",
42
- },
43
- {
44
- "title": "{The next step you agree}",
45
- "description": "{One or two sentences on what happens after the call}",
46
- },
47
- ],
48
- },
49
- },
50
- ]
51
- ---
52
-
53
- {/* Rendered from frontmatter `sections[]` by the /book-a-call route. This template carries the scheduling module, so the call to action opens the /meet booker. It overrides the base layer's copy, which points at /contact. The `schema:` Offer is the page's JSON-LD main entity — a free call. Placeholder copy — replace every {brace} with your own words before you launch. */}
@@ -1,34 +0,0 @@
1
- ---
2
- type: "ContactPage"
3
- slug: "contact"
4
- title: "Contact"
5
- description: "One form, one field group, an inline confirmation. Placeholder copy — replace before you launch."
6
- sections:
7
- [
8
- {
9
- "id": "hero",
10
- "type": "hero",
11
- "data":
12
- {
13
- "variant": "centered",
14
- "eyebrow": "Contact",
15
- "headline": "Say what you are trying to do",
16
- "subheadline": "{One line on what happens after you send this, and how long it takes.}",
17
- },
18
- },
19
- {
20
- "id": "closing",
21
- "type": "cta",
22
- "data":
23
- {
24
- "variant": "minimal",
25
- "headline": "Would a call be faster?",
26
- "primaryCta": { "label": "Hire me →", "href": "/meet" },
27
- },
28
- },
29
- ]
30
- ---
31
-
32
- {/_ The /contact route mounts the page's one contact surface — the guided
33
- intake, with its fallback form — which posts to the site's own API
34
- (`/v1/leads/submit`) and confirms inline. Placeholder copy. _/}
@@ -1,57 +0,0 @@
1
- ---
2
- type: "FAQPage"
3
- slug: "faq"
4
- title: "FAQ"
5
- description: "The questions people ask before they get in touch. Placeholder copy — replace every answer before you launch."
6
- sections:
7
- [
8
- {
9
- "id": "faq",
10
- "type": "faq",
11
- "data":
12
- {
13
- "headline": "Questions",
14
- "variant": "centered",
15
- "initialOpen": "first",
16
- "items":
17
- [
18
- {
19
- "question": "{What exactly do you do?}",
20
- "answer": "{Answer in two or three sentences. Say the thing plainly; do not sell here.}",
21
- },
22
- {
23
- "question": "{Who is this for, and who is it not for?}",
24
- "answer": "{Name both. A reader who rules themselves out here is a reader you did not waste an hour on.}",
25
- },
26
- {
27
- "question": "{How long does it take?}",
28
- "answer": "{Give a real range and say what moves it.}",
29
- },
30
- {
31
- "question": "{What does it cost?}",
32
- "answer": "{Give the shape even if you cannot give the number — fixed fee, retainer, day rate — and what it excludes.}",
33
- },
34
- {
35
- "question": "{How do the reports work?}",
36
- "answer": "{One or two sentences on cadence, who gets them and whether they are public.}",
37
- },
38
- ],
39
- "supportLink":
40
- { "label": "Still stuck? Get in touch", "href": "/contact" },
41
- },
42
- },
43
- {
44
- "id": "closing",
45
- "type": "cta",
46
- "data":
47
- {
48
- "variant": "minimal",
49
- "headline": "Still have a question?",
50
- "primaryCta": { "label": "Contact me →", "href": "/contact" },
51
- },
52
- },
53
- ]
54
- ---
55
-
56
- {/_ Linked from the footer bottom bar, not from a nav item — this template
57
- renders no nav items (`layout.nav: "mark-only"`). Placeholder copy. _/}
@@ -1,77 +0,0 @@
1
- ---
2
- type: "LandingPage"
3
- slug: "referral"
4
- title: "Refer someone"
5
- description: "The referral magnet — what a referrer gets, and the one-step request that starts it. Placeholder copy; replace before you launch."
6
- sections:
7
- [
8
- {
9
- "id": "hero",
10
- "type": "hero",
11
- "data":
12
- {
13
- "variant": "centered",
14
- "eyebrow": "Referrals",
15
- "headline": "Know someone who should be on this list?",
16
- "subheadline": "{One line on why an introduction is worth making — what the person you refer gets, and what you get.}",
17
- "checklist":
18
- [
19
- "{What a good referral looks like}",
20
- "{What happens after you send one}",
21
- "{What you get when it lands}",
22
- ],
23
- "primaryCta":
24
- { "label": "Refer someone →", "href": "/flows/referral/start" },
25
- "ctaSize": "xl",
26
- },
27
- },
28
- {
29
- "id": "how-it-works",
30
- "type": "stair-steps",
31
- "data":
32
- {
33
- "headline": "Three steps, about a minute",
34
- "tiles":
35
- [
36
- {
37
- "title": "Send the introduction",
38
- "body": "{One line on what you tell us — a name, a way to reach them, one sentence of why.}",
39
- },
40
- {
41
- "title": "We reach out",
42
- "body": "{One line on the timeline and the tone of the first message.}",
43
- },
44
- {
45
- "title": "You hear back either way",
46
- "body": "{One line on what you are told, and when.}",
47
- },
48
- ],
49
- },
50
- },
51
- {
52
- "id": "request",
53
- "type": "cta",
54
- "data":
55
- {
56
- "variant": "minimal",
57
- "headline": "Make an introduction",
58
- "description": "{One line restating the ask. Keep it to a single sentence.}",
59
- "primaryCta":
60
- { "label": "Refer someone →", "href": "/flows/referral/start" },
61
- },
62
- },
63
- ]
64
- ---
65
-
66
- {/\*
67
- The magnet's pitch. Its bottom action opens the referral REQUEST, which is a
68
- `signal-collectors` flow at `/flows/referral/start` — `flows/referral.flow.json`
69
- in this tree, installed to `database/flows/referral.flow.json`.
70
-
71
- Why a flow and not a `/referral/request` route: the issue named that path, but
72
- it has no `ROUTES` row and no route directory, so serving it would mean
73
- shipping a `page.tsx` into every scaffold for one template's page — which a
74
- template may never do (a template is data and content, never code). The flow
75
- engine already serves exactly this shape at a route every signal-collectors
76
- scaffold has. Recorded on #5589 and in the PR body; Sam's call supersedes.
77
- \*/}
@@ -1,73 +0,0 @@
1
- ---
2
- type: "LandingPage"
3
- slug: "reports"
4
- title: "Reports"
5
- description: "Every report {your company} has published, newest first. Placeholder samples — replace before you launch."
6
- sections:
7
- [
8
- {
9
- "id": "hero",
10
- "type": "hero",
11
- "data":
12
- {
13
- "variant": "centered",
14
- "eyebrow": "Reports",
15
- "headline": "Research on {your field}, published in full",
16
- "subheadline": "{One line on the cadence: how often a report lands and who it is written for.}",
17
- },
18
- },
19
- {
20
- "id": "all-reports",
21
- "type": "reports-list",
22
- "data":
23
- {
24
- "variant": "cards",
25
- "reports":
26
- [
27
- {
28
- "slug": "state-of-the-market-2026",
29
- "title": "State of {Your Market} 2026",
30
- "date": "May 2026",
31
- "description": "{One line on the question this report answers.}",
32
- },
33
- {
34
- "slug": "platform-shift-2025",
35
- "title": "The {Platform Shift} Report",
36
- "date": "March 2025",
37
- "description": "{One line on the question this report answers.}",
38
- },
39
- {
40
- "slug": "annual-letter-2024",
41
- "title": "Annual Letter",
42
- "date": "December 2024",
43
- "description": "{One line on the question this report answers.}",
44
- },
45
- {
46
- "slug": "field-notes-2023",
47
- "title": "Field Notes",
48
- "date": "2023",
49
- "description": "{One line on the question this report answers.}",
50
- },
51
- ],
52
- },
53
- },
54
- {
55
- "id": "closing",
56
- "type": "cta",
57
- "data":
58
- {
59
- "variant": "minimal",
60
- "headline": "Want the next one as it lands?",
61
- "primaryCta": { "label": "Contact me →", "href": "/contact" },
62
- },
63
- },
64
- ]
65
- ---
66
-
67
- {/_
68
- `/reports` is served by the generic `[slug]` route over
69
- `content/<locale>/LandingPage/reports.mdx` (#5469 D2) — the same mechanism
70
- Free's `/how-it-works` uses, and the reason this row needs no route directory
71
- and no `GATEABLE_SURFACES` entry. Each card links to `/reports/<slug>`, the
72
- signal-collectors module's chrome-off reader (#5562).
73
- _/}
@@ -1,52 +0,0 @@
1
- ---
2
- type: "ReportPage"
3
- slug: "annual-letter-2024"
4
- title: "Annual Letter"
5
- description: "{One line on the question this report answers. Replace before you launch.}"
6
- schema:
7
- datePublished: "2024-12-09"
8
- author:
9
- "@type": Organization
10
- name: "Your Company"
11
- sections:
12
- [
13
- {
14
- "id": "header",
15
- "type": "report-header",
16
- "data":
17
- {
18
- "title": "Annual Letter",
19
- "eyebrow": "December 2024",
20
- "backHref": "/reports",
21
- "backLabel": "All reports",
22
- "tone": "on-dark",
23
- },
24
- },
25
- {
26
- "id": "document",
27
- "type": "document-viewer",
28
- "data":
29
- {
30
- "src": "/reports/sample-report.pdf",
31
- "geometry": "16:9",
32
- "pages": 8,
33
- "downloadFilename": "annual-letter-2024.pdf",
34
- "outline":
35
- [
36
- { "id": "opening", "label": "Opening", "startPage": 1 },
37
- { "id": "findings", "label": "Findings", "startPage": 3 },
38
- { "id": "outlook", "label": "Outlook", "startPage": 6 },
39
- ],
40
- },
41
- },
42
- ]
43
- ---
44
-
45
- {/_
46
- A PLACEHOLDER report. Its bytes are the signal-collectors module's own sample
47
- PDF (`apps/web/public/reports/sample-report.pdf`, installed by that module's
48
- bundle), shared by all four samples so the template ships no binary of its
49
- own. Point `src` at your real document and set `pages` to its real page
50
- count — the count reserves the reader's layout before the renderer loads, so
51
- a wrong number shows as a jump.
52
- _/}
@@ -1,52 +0,0 @@
1
- ---
2
- type: "ReportPage"
3
- slug: "field-notes-2023"
4
- title: "Field Notes"
5
- description: "{One line on the question this report answers. Replace before you launch.}"
6
- schema:
7
- datePublished: "2023-09-19"
8
- author:
9
- "@type": Organization
10
- name: "Your Company"
11
- sections:
12
- [
13
- {
14
- "id": "header",
15
- "type": "report-header",
16
- "data":
17
- {
18
- "title": "Field Notes",
19
- "eyebrow": "2023",
20
- "backHref": "/reports",
21
- "backLabel": "All reports",
22
- "tone": "on-dark",
23
- },
24
- },
25
- {
26
- "id": "document",
27
- "type": "document-viewer",
28
- "data":
29
- {
30
- "src": "/reports/sample-report.pdf",
31
- "geometry": "16:9",
32
- "pages": 8,
33
- "downloadFilename": "field-notes-2023.pdf",
34
- "outline":
35
- [
36
- { "id": "opening", "label": "Opening", "startPage": 1 },
37
- { "id": "findings", "label": "Findings", "startPage": 3 },
38
- { "id": "outlook", "label": "Outlook", "startPage": 6 },
39
- ],
40
- },
41
- },
42
- ]
43
- ---
44
-
45
- {/_
46
- A PLACEHOLDER report. Its bytes are the signal-collectors module's own sample
47
- PDF (`apps/web/public/reports/sample-report.pdf`, installed by that module's
48
- bundle), shared by all four samples so the template ships no binary of its
49
- own. Point `src` at your real document and set `pages` to its real page
50
- count — the count reserves the reader's layout before the renderer loads, so
51
- a wrong number shows as a jump.
52
- _/}
@@ -1,52 +0,0 @@
1
- ---
2
- type: "ReportPage"
3
- slug: "platform-shift-2025"
4
- title: "The {Platform Shift} Report"
5
- description: "{One line on the question this report answers. Replace before you launch.}"
6
- schema:
7
- datePublished: "2025-03-11"
8
- author:
9
- "@type": Organization
10
- name: "Your Company"
11
- sections:
12
- [
13
- {
14
- "id": "header",
15
- "type": "report-header",
16
- "data":
17
- {
18
- "title": "The {Platform Shift} Report",
19
- "eyebrow": "March 2025",
20
- "backHref": "/reports",
21
- "backLabel": "All reports",
22
- "tone": "on-dark",
23
- },
24
- },
25
- {
26
- "id": "document",
27
- "type": "document-viewer",
28
- "data":
29
- {
30
- "src": "/reports/sample-report.pdf",
31
- "geometry": "16:9",
32
- "pages": 8,
33
- "downloadFilename": "platform-shift-2025.pdf",
34
- "outline":
35
- [
36
- { "id": "opening", "label": "Opening", "startPage": 1 },
37
- { "id": "findings", "label": "Findings", "startPage": 3 },
38
- { "id": "outlook", "label": "Outlook", "startPage": 6 },
39
- ],
40
- },
41
- },
42
- ]
43
- ---
44
-
45
- {/_
46
- A PLACEHOLDER report. Its bytes are the signal-collectors module's own sample
47
- PDF (`apps/web/public/reports/sample-report.pdf`, installed by that module's
48
- bundle), shared by all four samples so the template ships no binary of its
49
- own. Point `src` at your real document and set `pages` to its real page
50
- count — the count reserves the reader's layout before the renderer loads, so
51
- a wrong number shows as a jump.
52
- _/}
@@ -1,52 +0,0 @@
1
- ---
2
- type: "ReportPage"
3
- slug: "state-of-the-market-2026"
4
- title: "State of {Your Market} 2026"
5
- description: "{One line on the question this report answers. Replace before you launch.}"
6
- schema:
7
- datePublished: "2026-05-14"
8
- author:
9
- "@type": Organization
10
- name: "Your Company"
11
- sections:
12
- [
13
- {
14
- "id": "header",
15
- "type": "report-header",
16
- "data":
17
- {
18
- "title": "State of {Your Market} 2026",
19
- "eyebrow": "May 2026",
20
- "backHref": "/reports",
21
- "backLabel": "All reports",
22
- "tone": "on-dark",
23
- },
24
- },
25
- {
26
- "id": "document",
27
- "type": "document-viewer",
28
- "data":
29
- {
30
- "src": "/reports/sample-report.pdf",
31
- "geometry": "16:9",
32
- "pages": 8,
33
- "downloadFilename": "state-of-the-market-2026.pdf",
34
- "outline":
35
- [
36
- { "id": "opening", "label": "Opening", "startPage": 1 },
37
- { "id": "findings", "label": "Findings", "startPage": 3 },
38
- { "id": "outlook", "label": "Outlook", "startPage": 6 },
39
- ],
40
- },
41
- },
42
- ]
43
- ---
44
-
45
- {/_
46
- A PLACEHOLDER report. Its bytes are the signal-collectors module's own sample
47
- PDF (`apps/web/public/reports/sample-report.pdf`, installed by that module's
48
- bundle), shared by all four samples so the template ships no binary of its
49
- own. Point `src` at your real document and set `pages` to its real page
50
- count — the count reserves the reader's layout before the renderer loads, so
51
- a wrong number shows as a jump.
52
- _/}