create-ailk 0.6.1 → 0.8.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 (324) hide show
  1. package/README.md +87 -14
  2. package/component-catalog.json +735 -95
  3. package/component-catalog.md +13 -7
  4. package/dist/add-module-core.d.ts +22 -0
  5. package/dist/add-module-core.js +50 -0
  6. package/dist/add-module.d.ts +89 -0
  7. package/dist/add-module.js +334 -0
  8. package/dist/category-profile.d.ts +126 -0
  9. package/dist/category-profile.js +262 -0
  10. package/dist/cli.js +89 -29
  11. package/dist/index.d.ts +4 -2
  12. package/dist/index.js +6 -1
  13. package/dist/lib/extract-module-bundle.d.ts +56 -1
  14. package/dist/lib/extract-module-bundle.js +170 -14
  15. package/dist/lib/license-key-files.d.ts +15 -0
  16. package/dist/lib/license-key-files.js +102 -0
  17. package/dist/lib/module-license-gate.d.ts +79 -0
  18. package/dist/lib/module-license-gate.js +160 -12
  19. package/dist/lib/module-tier.d.ts +45 -16
  20. package/dist/lib/module-tier.js +76 -0
  21. package/dist/lib/pro-callout.d.ts +16 -10
  22. package/dist/lib/pro-callout.js +34 -3
  23. package/dist/license-set.d.ts +34 -0
  24. package/dist/license-set.js +194 -0
  25. package/dist/module-architecture.d.ts +20 -0
  26. package/dist/module-architecture.js +77 -19
  27. package/dist/modules/commerce/0.6.1.tar.gz +0 -0
  28. package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
  29. package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
  30. package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
  31. package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
  32. package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
  33. package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
  34. package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
  35. package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
  36. package/dist/modules/workspace/0.6.1.tar.gz +0 -0
  37. package/dist/parse-args.d.ts +85 -10
  38. package/dist/parse-args.js +227 -15
  39. package/dist/programmatic.d.ts +81 -5
  40. package/dist/programmatic.js +291 -32
  41. package/dist/site-chrome.d.ts +18 -7
  42. package/dist/site-chrome.js +32 -14
  43. package/dist/site-roster.d.ts +127 -0
  44. package/dist/site-roster.js +499 -0
  45. package/dist/starter-grid.d.ts +216 -0
  46. package/dist/starter-grid.js +449 -0
  47. package/dist/surfaces.d.ts +20 -7
  48. package/dist/surfaces.js +204 -24
  49. package/dist/sync-routes.d.ts +9 -0
  50. package/dist/sync-routes.js +2 -2
  51. package/dist/template-manifest.d.ts +94 -19
  52. package/dist/template-manifest.js +170 -289
  53. package/dist/template-names.d.ts +14 -12
  54. package/dist/template-names.js +13 -17
  55. package/package.json +6 -4
  56. package/site-templates/_base/content/en/BookCall/book-call.mdx +52 -0
  57. package/site-templates/_base/content/en/Feature/feature-1.mdx +69 -0
  58. package/site-templates/_base/content/en/Feature/feature-2.mdx +69 -0
  59. package/site-templates/_base/content/en/Feature/feature-3.mdx +69 -0
  60. package/site-templates/_base/content/en/FeaturesList/features.mdx +91 -0
  61. package/site-templates/_base/content/en/GlossaryList/glossary.mdx +65 -0
  62. package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +67 -0
  63. package/site-templates/_base/content/en/PortfolioItem/sample-four.mdx +105 -0
  64. package/site-templates/_base/content/en/PortfolioItem/sample-one.mdx +34 -0
  65. package/site-templates/_base/content/en/PortfolioItem/sample-three.mdx +94 -0
  66. package/site-templates/_base/content/en/PortfolioItem/sample-two.mdx +45 -0
  67. package/site-templates/_base/content/en/PortfolioList/portfolio.mdx +169 -0
  68. package/site-templates/_base/content/en/Pricing/pricing.mdx +71 -62
  69. package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +17 -3
  70. package/site-templates/_base/content/en/TermsPage/terms.mdx +2 -3
  71. package/site-templates/_base/content/en/UseCase/persona-1.mdx +69 -0
  72. package/site-templates/_base/content/en/UseCase/persona-2.mdx +69 -0
  73. package/site-templates/_base/content/en/UseCase/persona-3.mdx +69 -0
  74. package/site-templates/designs/minimalism/DESIGN.md +162 -0
  75. package/site-templates/designs/standard/DESIGN.md +167 -0
  76. package/site-templates/marketing-site/DESIGN.md +59 -40
  77. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +376 -57
  78. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +230 -90
  79. package/site-templates/marketing-site/ailk-template.json +1 -0
  80. package/site-templates/marketing-site-free/DESIGN.md +59 -40
  81. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +323 -63
  82. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +323 -113
  83. package/site-templates/marketing-site-free/ailk-template.json +3 -2
  84. package/site-templates/marketing-site-free/content/en/NewsletterSignup/newsletter.mdx +59 -0
  85. package/site-templates/marketing-site-free/content/en/Pricing/pricing.mdx +199 -0
  86. package/site-templates/minimalism-site/DESIGN.md +54 -40
  87. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +246 -19
  88. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +173 -51
  89. package/site-templates/minimalism-site/ailk-template.json +3 -2
  90. package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +52 -0
  91. package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +3 -37
  92. package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
  93. package/site-templates/saas-product/DESIGN.md +59 -40
  94. package/site-templates/saas-product/TEMPLATE-MANIFEST.md +9 -1
  95. package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.json +369 -0
  96. package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +302 -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/shapes/local-business-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
  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 +362 -0
  109. package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +300 -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/shapes/organization-service/content/en/Service/first-engagement.mdx +38 -0
  117. package/site-templates/shapes/organization-service/content/en/Service/second-engagement.mdx +38 -0
  118. package/site-templates/shapes/organization-service/content/en/Service/third-engagement.mdx +38 -0
  119. package/site-templates/shapes/organization-service/content/en/ServicesList/services.mdx +72 -0
  120. package/site-templates/shapes/organization-service/provenance.json +4 -0
  121. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +369 -0
  122. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +299 -0
  123. package/site-templates/shapes/person-service/ailk-template.json +10 -0
  124. package/site-templates/shapes/person-service/content/_site.mdx +85 -0
  125. package/site-templates/shapes/person-service/content/en/AboutPage/about.mdx +39 -0
  126. package/site-templates/shapes/person-service/content/en/HomePage/home.mdx +97 -0
  127. package/site-templates/shapes/person-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
  128. package/site-templates/shapes/person-service/content/en/PortfolioList/portfolio.mdx +169 -0
  129. package/site-templates/shapes/person-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
  130. package/site-templates/shapes/person-service/content/en/Service/first-engagement.mdx +38 -0
  131. package/site-templates/shapes/person-service/content/en/Service/second-engagement.mdx +38 -0
  132. package/site-templates/shapes/person-service/content/en/Service/third-engagement.mdx +38 -0
  133. package/site-templates/{simple-service → shapes/person-service}/content/en/ServicesList/services.mdx +16 -16
  134. package/site-templates/shapes/person-service/provenance.json +4 -0
  135. package/templates/.claude/settings.json +15 -0
  136. package/templates/.claude/skills/README.md +10 -9
  137. package/templates/.claude/skills/{scaffold-auth → add-auth}/SKILL.md +7 -7
  138. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/env-vars.md +2 -2
  139. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/oauth-app-setup.md +3 -3
  140. package/templates/.claude/skills/{scaffold-page → add-page}/SKILL.md +76 -62
  141. package/templates/.claude/skills/add-page/references/page-types.md +115 -0
  142. package/templates/.claude/skills/{scaffold-page → add-page}/templates/content.mdx.tmpl +4 -4
  143. package/templates/.claude/skills/{scaffold-page → add-page}/templates/route.tsx.tmpl +1 -1
  144. package/templates/.claude/skills/{audit-site → check-site}/SKILL.md +16 -17
  145. package/templates/.claude/skills/{audit-site → check-site}/references/common-errors.md +3 -3
  146. package/templates/.claude/skills/{audit-site → check-site}/references/findings-glossary.md +16 -14
  147. package/templates/.claude/skills/{audit-site → check-site}/references/severity-levels.md +1 -1
  148. package/templates/.claude/skills/fill-page/SKILL.md +180 -0
  149. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +80 -0
  150. package/templates/.claude/skills/fill-page/references/section-sources.md +41 -0
  151. package/templates/.claude/skills/setup-database/SKILL.md +156 -0
  152. package/templates/.claude/skills/setup-database/scripts/verify-inbox.ts +154 -0
  153. package/templates/.claude/skills/{provision-config → setup-deploy}/SKILL.md +73 -41
  154. package/templates/.claude/skills/{provision-config → setup-deploy}/references/env-vars-template.md +21 -30
  155. package/templates/.claude/skills/setup-deploy/references/runbook-template.md +204 -0
  156. package/templates/.claude/skills/{provision-config → setup-deploy}/references/vercel-json-template.md +1 -1
  157. package/templates/.claude/skills/upgrade-plan/SKILL.md +117 -0
  158. package/templates/.claude/skills/upgrade-plan/references/options.md +24 -0
  159. package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +527 -0
  160. package/templates/.github/workflows/ci.yml +5 -0
  161. package/templates/CLAUDE.md +8 -2
  162. package/templates/DESIGN.md +56 -44
  163. package/templates/README.md +116 -46
  164. package/templates/apps/api/.env.example +2 -1
  165. package/templates/apps/api/CLAUDE.md +3 -2
  166. package/templates/apps/api/package.json +1 -1
  167. package/templates/apps/api/src/config/__tests__/index.test.ts +146 -10
  168. package/templates/apps/api/src/config/index.ts +46 -14
  169. package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +30 -0
  170. package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +96 -0
  171. package/templates/apps/api/src/lib/lead-capture-store.ts +12 -0
  172. package/templates/apps/api/src/lib/lead-delivery.ts +52 -0
  173. package/templates/apps/api/src/lib/license-key-store.ts +45 -0
  174. package/templates/apps/api/src/lib/site.ts +5 -3
  175. package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +97 -0
  176. package/templates/apps/api/src/middleware/auth.ts +9 -0
  177. package/templates/apps/api/src/openapi/spec.ts +63 -12
  178. package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +127 -5
  179. package/templates/apps/api/src/routes/content/get-page.ts +86 -2
  180. package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +88 -0
  181. package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +100 -0
  182. package/templates/apps/api/src/routes/leads/index.ts +46 -1
  183. package/templates/apps/api/src/server.ts +13 -0
  184. package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +194 -0
  185. package/templates/apps/api/src/services/__tests__/leads-inbox.test.ts +124 -0
  186. package/templates/apps/api/src/services/lead-routing.ts +140 -30
  187. package/templates/apps/api/src/services/leads-inbox.ts +48 -11
  188. package/templates/apps/mcp/__tests__/audit-single-page.test.ts +75 -1
  189. package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +57 -9
  190. package/templates/apps/mcp/__tests__/parity.test.ts +5 -4
  191. package/templates/apps/mcp/package.json +2 -1
  192. package/templates/apps/mcp/src/index.ts +7 -0
  193. package/templates/apps/mcp/src/lib/audit-single-page.ts +36 -10
  194. package/templates/apps/mcp/src/lib/license-key-store.ts +45 -0
  195. package/templates/apps/mcp/src/tools/create_project.ts +21 -6
  196. package/templates/apps/web/__tests__/setup.ts +18 -0
  197. package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +10 -2
  198. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +2 -2
  199. package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +10 -4
  200. package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +22 -14
  201. package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +26 -18
  202. package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +12 -4
  203. package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +35 -4
  204. package/templates/apps/web/app/[locale]/[slug]/page.tsx +49 -9
  205. package/templates/apps/web/app/[locale]/book-a-call/page.tsx +50 -0
  206. package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
  207. package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
  208. package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +3 -4
  209. package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +67 -29
  210. package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +94 -11
  211. package/templates/apps/web/app/[locale]/contact/__tests__/contact-form-text.test.ts +32 -0
  212. package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +129 -0
  213. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +228 -86
  214. package/templates/apps/web/app/[locale]/contact/contact-form-text.ts +50 -0
  215. package/templates/apps/web/app/[locale]/contact/contact.actions.ts +73 -20
  216. package/templates/apps/web/app/[locale]/contact/page.tsx +115 -7
  217. package/templates/apps/web/app/[locale]/contact/site-contact-email.ts +54 -0
  218. package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
  219. package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +3 -4
  220. package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +4 -5
  221. package/templates/apps/web/app/[locale]/features/[slug]/page.tsx +64 -0
  222. package/templates/apps/web/app/[locale]/features/page.tsx +52 -0
  223. package/templates/apps/web/app/[locale]/glossary/page.tsx +50 -0
  224. package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
  225. package/templates/apps/web/app/[locale]/how-to/page.tsx +25 -15
  226. package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
  227. package/templates/apps/web/app/[locale]/layout.tsx +146 -52
  228. package/templates/apps/web/app/[locale]/newsletter/__tests__/newsletter.actions.test.ts +75 -0
  229. package/templates/apps/web/app/[locale]/newsletter/__tests__/page.test.tsx +163 -0
  230. package/templates/apps/web/app/[locale]/newsletter/newsletter.actions.ts +66 -0
  231. package/templates/apps/web/app/[locale]/newsletter/page.tsx +142 -0
  232. package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
  233. package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +59 -0
  234. package/templates/apps/web/app/[locale]/portfolio/page.tsx +49 -0
  235. package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
  236. package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +4 -5
  237. package/templates/apps/web/app/[locale]/{cancellation → purchase-policy}/page.tsx +15 -10
  238. package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +4 -5
  239. package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
  240. package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +14 -1
  241. package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
  242. package/templates/apps/web/app/[locale]/software/page.tsx +25 -15
  243. package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
  244. package/templates/apps/web/app/[locale]/tech-articles/page.tsx +25 -15
  245. package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +3 -4
  246. package/templates/apps/web/app/[locale]/use-cases/[slug]/page.tsx +63 -0
  247. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +3 -4
  248. package/templates/apps/web/app/[locale]/use-cases/page.tsx +15 -2
  249. package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
  250. package/templates/apps/web/app/[locale]/whitepapers/page.tsx +25 -15
  251. package/templates/apps/web/app/error-fallback.tsx +17 -45
  252. package/templates/apps/web/app/not-found.tsx +14 -38
  253. package/templates/apps/web/app/og/route.tsx +6 -0
  254. package/templates/apps/web/eslint.config.mjs +3 -0
  255. package/templates/apps/web/instrumentation.ts +14 -0
  256. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +38 -0
  257. package/templates/apps/web/lib/license-key-store.ts +52 -0
  258. package/templates/apps/web/lib/nav-config.ts +82 -18
  259. package/templates/apps/web/lib/prisma-for-auth.ts +9 -6
  260. package/templates/apps/web/lib/site-brand.tsx +1 -1
  261. package/templates/apps/web/lib/site-chrome.ts +3 -3
  262. package/templates/apps/web/lib/site-identity.ts +148 -0
  263. package/templates/apps/web/lib/site-theme.ts +11 -0
  264. package/templates/apps/web/messages/en.json +78 -37
  265. package/templates/apps/web/public/android-chrome-192x192.png +0 -0
  266. package/templates/apps/web/public/android-chrome-512x512.png +0 -0
  267. package/templates/apps/web/public/apple-touch-icon.png +0 -0
  268. package/templates/apps/web/public/favicon-16x16.png +0 -0
  269. package/templates/apps/web/public/favicon-32x32.png +0 -0
  270. package/templates/apps/web/public/favicon.ico +0 -0
  271. package/templates/apps/web/public/favicon.svg +3 -3
  272. package/templates/apps/web/public/logomark.svg +6 -3
  273. package/templates/apps/web/public/logos/ai-launch-kit-light.svg +4 -0
  274. package/templates/apps/web/public/logos/ai-launch-kit.svg +4 -0
  275. package/templates/apps/web/public/logos/atomic-agent-light.svg +4 -0
  276. package/templates/apps/web/public/logos/atomic-agent.svg +4 -0
  277. package/templates/apps/web/public/logos/salessmyth-light.svg +4 -0
  278. package/templates/apps/web/public/logos/salessmyth.svg +4 -0
  279. package/templates/apps/web/public/site.webmanifest +4 -4
  280. package/templates/apps/web/public/wordmark-light.svg +4 -0
  281. package/templates/apps/web/public/wordmark.svg +3 -3
  282. package/templates/apps/web/security-headers.config.ts +5 -1
  283. package/templates/content/_site.mdx +25 -0
  284. package/templates/content/en/AboutPage/about.mdx +150 -144
  285. package/templates/content/en/BlogList/blog.mdx +126 -0
  286. package/templates/content/en/ContactPage/contact.mdx +21 -92
  287. package/templates/content/en/FAQPage/faq.mdx +86 -57
  288. package/templates/content/en/HomePage/home.mdx +268 -217
  289. package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +181 -0
  290. package/templates/content/en/UseCasesList/use-cases.mdx +170 -0
  291. package/templates/database/CHANGELOG.md +14 -0
  292. package/templates/database/package.json +1 -1
  293. package/templates/package.json +3 -1
  294. package/templates/tools/lint-architecture.ts +315 -0
  295. package/templates/tools/tsconfig.json +14 -0
  296. package/versions.json +33 -33
  297. package/site-templates/simple-service/DESIGN.md +0 -148
  298. package/site-templates/simple-service/TEMPLATE-MANIFEST.json +0 -240
  299. package/site-templates/simple-service/TEMPLATE-MANIFEST.md +0 -278
  300. package/site-templates/simple-service/ailk-template.json +0 -10
  301. package/site-templates/simple-service/content/en/ContactPage/contact.mdx +0 -67
  302. package/site-templates/simple-service/content/en/FAQPage/faq.mdx +0 -56
  303. package/site-templates/simple-service/content/en/HomePage/home.mdx +0 -85
  304. package/site-templates/simple-service/content/en/Service/landscape-design.mdx +0 -40
  305. package/site-templates/simple-service/content/en/Service/lawn-maintenance.mdx +0 -40
  306. package/site-templates/simple-service/content/en/Service/seasonal-cleanup.mdx +0 -40
  307. package/site-templates/simple-service/provenance.json +0 -4
  308. package/templates/.claude/skills/add-schema/SKILL.md +0 -277
  309. package/templates/.claude/skills/add-schema/references/conflict-handling.md +0 -200
  310. package/templates/.claude/skills/add-schema/references/file-finding.md +0 -123
  311. package/templates/.claude/skills/add-schema/references/schema-types.md +0 -234
  312. package/templates/.claude/skills/provision-config/references/runbook-template.md +0 -248
  313. package/templates/.claude/skills/scaffold-page/references/page-types.md +0 -169
  314. package/templates/.claude/skills/suggest-site-pages/SKILL.md +0 -242
  315. package/templates/.claude/skills/suggest-site-pages/references/categories.md +0 -287
  316. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +0 -150
  317. package/templates/apps/web/app/[locale]/returns/page.tsx +0 -44
  318. package/templates/apps/web/app/[locale]/shipping/page.tsx +0 -44
  319. package/templates/content/en/CancellationPolicyPage/cancellation.mdx +0 -108
  320. package/templates/content/en/LandingPage/blog.mdx +0 -83
  321. package/templates/content/en/LandingPage/features.mdx +0 -103
  322. package/templates/content/en/LandingPage/how-it-works.mdx +0 -143
  323. package/templates/content/en/ReturnsPolicyPage/returns.mdx +0 -108
  324. package/templates/content/en/ShippingPolicyPage/shipping.mdx +0 -108
@@ -14,7 +14,7 @@
14
14
 
15
15
  ## 1. Chrome
16
16
 
17
- This template is the first to declare a non-default `layout` block (#5612). The deck is the reason: a nine-panel scroll-snap home with a revealed brand mark has no room for a nav row, an announcement bar or a four-column footer.
17
+ This template's chrome is the `minimalism` design's (#6638), not a `layout` block of its own; it was the first non-default chrome (#5612). The deck is the reason: a nine-panel scroll-snap home with a revealed brand mark has no room for a nav row, an announcement bar or a four-column footer.
18
18
 
19
19
  | Piece | Value |
20
20
  | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -25,7 +25,7 @@ This template is the first to declare a non-default `layout` block (#5612). The
25
25
 
26
26
  ### Layout knobs (#5612)
27
27
 
28
- The template's `layout` block — resolved with `resolveSiteChrome`, defaults filled.
28
+ The `minimalism` design's knobs (#6638) — the template declares no `layout` block of its own; `design: minimalism` supplies these through `DESIGN_LAYOUTS`, resolved with `resolveSiteChrome(layout, design)`, defaults filled. Any shape that names this design gets the same chrome.
29
29
 
30
30
  <!-- generated:begin layout -->
31
31
 
@@ -38,6 +38,39 @@ The template's `layout` block — resolved with `resolveSiteChrome`, defaults fi
38
38
 
39
39
  <!-- generated:end -->
40
40
 
41
+ ### Theme (locked)
42
+
43
+ The template's `theme:` block as `_site.mdx` declares it — the shape knobs and the colour overlay. Generated, so a change to a locked template's look is a red `manifest:check`, not a silent drift (starter-template contract R3.5).
44
+
45
+ <!-- generated:begin theme -->
46
+
47
+ | Setting | Value |
48
+ | ------------------------ | ---------- |
49
+ | `corners` | `square` |
50
+ | `eyebrowCase` | `sentence` |
51
+ | `placeholders` | `fill` |
52
+ | `checkmarks` | `plain` |
53
+ | `colors.light.bg` | `#ffffff` |
54
+ | `colors.light.bgMuted` | `#ffffff` |
55
+ | `colors.light.surface` | `#ffffff` |
56
+ | `colors.light.border` | `#000000` |
57
+ | `colors.light.text` | `#000000` |
58
+ | `colors.light.textMuted` | `#333333` |
59
+ | `colors.light.primary` | `#000000` |
60
+ | `colors.light.primaryFg` | `#ffffff` |
61
+ | `colors.light.accent` | `#000000` |
62
+ | `colors.dark.bg` | `#000000` |
63
+ | `colors.dark.bgMuted` | `#000000` |
64
+ | `colors.dark.surface` | `#000000` |
65
+ | `colors.dark.border` | `#ffffff` |
66
+ | `colors.dark.text` | `#ffffff` |
67
+ | `colors.dark.textMuted` | `#cccccc` |
68
+ | `colors.dark.primary` | `#ffffff` |
69
+ | `colors.dark.primaryFg` | `#000000` |
70
+ | `colors.dark.accent` | `#ffffff` |
71
+
72
+ <!-- generated:end -->
73
+
41
74
  ## 2. The home deck — nine slides
42
75
 
43
76
  `layout.home: "deck"` makes every direct section child of `home.mdx` one full-viewport snap target, in order. The mark is hidden on slide 1 (the deck-hero landing state) and revealed from slide 2 on.
@@ -84,17 +117,17 @@ One `page=<route>` region per roster row, generated from the seed file the compo
84
117
 
85
118
  <!-- generated:begin page=/ -->
86
119
 
87
- | # | Section | Component | Copy (first line) |
88
- | --- | ----------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
89
- | 1 | `hero` (centered · 1 CTA) | `Hero` | Your Company |
90
- | 2 | `content-block` (narrow) | `ContentBlock` | A working partnership with the teams building {what your market needs… |
91
- | 3 | `logoCloud` (logos ×3 · 1 CTA) | `LogoCloud` | Our community |
92
- | 4 | `content-block` (narrow) | `ContentBlock` | Research on {your field}, and on where the next decade of it is going |
93
- | 5 | `reports-list` (list) | `ReportsList` | Special reports |
94
- | 6 | `reports-list` (list) | `ReportsList` | Favorites |
95
- | 7 | `content-block` (narrow · 1 CTA) | `ContentBlock` | Trusted work for the people who carry {the outcome you deliver} |
96
- | 8 | `team` (with-large-images · members ×6 · 1 CTA) | `Team` | Partners |
97
- | 9 | `cta` (minimal · 1 CTA) | `CTA` | Your Company |
120
+ | # | Section | Component | Copy (first line) |
121
+ | --- | ------------------------------------------------------------------ | -------------- | ---------------------------------------------------------------------- |
122
+ | 1 | `hero` (centered · surface=gradient-brand · fill=viewport · 1 CTA) | `Hero` | Your Company |
123
+ | 2 | `content-block` (narrow · align=center · fill=viewport) | `ContentBlock` | A working partnership with the teams building {what your market needs… |
124
+ | 3 | `logoCloud` (layout=grid · logos ×3 · 1 CTA) | `LogoCloud` | Our community |
125
+ | 4 | `content-block` (narrow · align=center · fill=viewport) | `ContentBlock` | Research on {your field}, and on where the next decade of it is going |
126
+ | 5 | `reports-list` (list · surface=gradient-dark · tone=on-dark) | `ReportsList` | Special reports |
127
+ | 6 | `reports-list` (list · surface=gradient-dark · tone=on-dark) | `ReportsList` | Favorites |
128
+ | 7 | `content-block` (narrow · align=center · fill=viewport · 1 CTA) | `ContentBlock` | Trusted work for the people who carry {the outcome you deliver} |
129
+ | 8 | `team` (with-large-images · members ×6 · 1 CTA) | `Team` | Partners |
130
+ | 9 | `cta` (minimal · 1 CTA) | `CTA` | Your Company |
98
131
 
99
132
  <!-- generated:end -->
100
133
 
@@ -129,7 +162,7 @@ One `page=<route>` region per roster row, generated from the seed file the compo
129
162
  | # | Section | Component | Copy (first line) |
130
163
  | --- | -------------------------------------- | --------- | --------------------------- |
131
164
  | 1 | `hero` (centered · eyebrow "Services") | `Hero` | Three ways to work together |
132
- | 2 | `items` (items ×3) | `Items` | Engagements |
165
+ | 2 | `items` (columns=3 · items ×3) | `Items` | Engagements |
133
166
  | 3 | `cta` (minimal · 1 CTA) | `CTA` | Not sure which one? |
134
167
 
135
168
  <!-- generated:end -->
@@ -138,18 +171,17 @@ One `page=<route>` region per roster row, generated from the seed file the compo
138
171
 
139
172
  <!-- generated:begin page=/services/[slug] -->
140
173
 
141
- _Code route — no content, no sections._
174
+ _Detail route over `content/en/Service/` — 3 seed pages: `first-engagement.mdx`, `second-engagement.mdx`, `third-engagement.mdx`._
142
175
  <!-- generated:end -->
143
176
 
144
177
  `/contact`:
145
178
 
146
179
  <!-- generated:begin page=/contact -->
147
180
 
148
- | # | Section | Component | Copy (first line) |
149
- | --- | ------------------------------------- | ------------- | ----------------------------------------- |
150
- | 1 | `hero` (centered · eyebrow "Contact") | `Hero` | Say what you are trying to do |
151
- | 2 | `contact-form` (card · fields ×3) | `ContactForm` | Name · Email · What are you trying to do? |
152
- | 3 | `cta` (minimal · 1 CTA) | `CTA` | Would a call be faster? |
181
+ | # | Section | Component | Copy (first line) |
182
+ | --- | ------------------------------------- | --------- | ----------------------------- |
183
+ | 1 | `hero` (centered · eyebrow "Contact") | `Hero` | Say what you are trying to do |
184
+ | 2 | `cta` (minimal · 1 CTA) | `CTA` | Would a call be faster? |
153
185
 
154
186
  <!-- generated:end -->
155
187
 
@@ -176,13 +208,45 @@ _Code route — no content, no sections._
176
208
 
177
209
  <!-- generated:end -->
178
210
 
211
+ `/glossary`, `/newsletter` (base-layer seeds every starter carries, #6658 D5):
212
+
213
+ <!-- generated:begin page=/glossary -->
214
+
215
+ | # | Section | Component | Copy (first line) |
216
+ | --- | ----------------------------------- | --------------- | -------------------------------------------- |
217
+ | 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
218
+ | 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
219
+
220
+ <!-- generated:end -->
221
+
222
+ <!-- generated:begin page=/newsletter -->
223
+
224
+ | # | Section | Component | Copy (first line) |
225
+ | --- | ------------------------------------- | ------------ | ------------------------------------------------ |
226
+ | 1 | `hero` (eyebrow "Newsletter" · 1 CTA) | `Hero` | {Newsletter: what subscribers get and how often} |
227
+ | 2 | `newsletter` | `Newsletter` | Subscribe |
228
+ | 3 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
229
+
230
+ <!-- generated:end -->
231
+
232
+ `/book-a-call` (this template's own override of the base seed — the call to action opens the `/meet` booker the scheduling module supplies, not `/contact`):
233
+
234
+ <!-- generated:begin page=/book-a-call -->
235
+
236
+ | # | Section | Component | Copy (first line) |
237
+ | --- | -------------------------------------- | --------- | ------------------------------------------ |
238
+ | 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
239
+ | 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
240
+
241
+ <!-- generated:end -->
242
+
179
243
  `/privacy`:
180
244
 
181
245
  <!-- generated:begin page=/privacy -->
182
246
 
183
- | # | Section | Component | Copy (first line) |
184
- | --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
185
- | 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Privacy Policy |
247
+ | # | Section | Component | Copy (first line) |
248
+ | --- | ----------------------------------- | ----------------- | ----------------- |
249
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
186
250
 
187
251
  <!-- generated:end -->
188
252
 
@@ -190,9 +254,19 @@ _Code route — no content, no sections._
190
254
 
191
255
  <!-- generated:begin page=/terms -->
192
256
 
193
- | # | Section | Component | Copy (first line) |
194
- | --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
195
- | 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Terms of Service |
257
+ | # | Section | Component | Copy (first line) |
258
+ | --- | ----------------------------------- | ----------------- | ----------------- |
259
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
260
+
261
+ <!-- generated:end -->
262
+
263
+ `/purchase-policy`:
264
+
265
+ <!-- generated:begin page=/purchase-policy -->
266
+
267
+ | # | Section | Component | Copy (first line) |
268
+ | --- | ----------------------------------- | ----------------- | ----------------- |
269
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
196
270
 
197
271
  <!-- generated:end -->
198
272
 
@@ -249,12 +323,51 @@ _Code route — no content, no sections._
249
323
 
250
324
  <!-- generated:begin page=/reports/[slug] -->
251
325
 
252
- _Code route — no content, no sections._
326
+ _Detail route over `content/en/ReportPage/` — 4 seed pages: `annual-letter-2024.mdx`, `field-notes-2023.mdx`, `platform-shift-2025.mdx`, `state-of-the-market-2026.mdx`._
327
+ <!-- generated:end -->
328
+
329
+ The signal-collectors bundle's sample pages — the project listing, two projects and three thank-you pages — are this template's own roster rows (#6646), so the roster lists every page the scaffold installs.
330
+
331
+ <!-- generated:begin page=/projects -->
332
+
333
+ | # | Section | Component | Copy (first line) |
334
+ | --- | ------------------------------ | --------- | -------------------------- |
335
+ | 1 | `hero` (centered) | `Hero` | Projects |
336
+ | 2 | `items` (columns=2 · items ×2) | `Items` | Selected engagements |
337
+ | 3 | `cta` (2 CTAs) | `CTA` | Have a project like these? |
338
+
339
+ <!-- generated:end -->
340
+
341
+ <!-- generated:begin page=/projects/[slug] -->
342
+
343
+ _Detail route over `content/en/Project/` — 2 seed pages: `fit-check-funnel.mdx`, `launch-site-in-fourteen-days.mdx`._
344
+ <!-- generated:end -->
345
+
346
+ <!-- generated:begin page=/thanks/[slug] -->
347
+
348
+ _Detail route over `content/en/ThankYouPage/` — 3 seed pages: `apply.mdx`, `contact.mdx`, `newsletter.mdx`._
253
349
  <!-- generated:end -->
254
350
 
351
+ ### 3a. Differences from the organization-service shape roster
352
+
353
+ This template is the `organization-service` shape (`shape: organization-service`) rendered in the `minimalism` design (`design: minimalism`). Since #6757 that shape carries its own standard roster (fifteen rows: `HomePage`, `AboutPage`, `ServicesList`, `Service`, `ContactPage`, `FAQPage`, `GlossaryList`, `NewsletterSignup`, `BookCall`, `PrivacyPage`, `TermsPage`, `PurchasePolicyPage`, `BlogList`, `PortfolioList`, `PortfolioItem`) — its own deviations from the raw `derive-roster.py` derivation are recorded in `site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md` § 3a, not repeated here. This template's differences are additions and drops from THAT roster only:
354
+
355
+ | Row dropped | Why |
356
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
357
+ | `PortfolioList` · `PortfolioItem` | the reports are the proof, not a portfolio (§ 2) |
358
+ | `BlogList` | the `/blog` teaser upsells Pro and Fumadocs; a Pro alias does not carry an upsell to its own level (`marketing-site` and `saas-product` already drop the same row, #6753 D4, for the same reason of degree) |
359
+
360
+ | Row added | Why |
361
+ | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
362
+ | `/reports` | the site is reports-first: the deck's landing CTA and slides 5–6 lead here, and it indexes the `signal-collectors` reader at `/reports/<slug>` (§ 2) |
363
+ | `/referral` | the referral magnet — the pitch and what a referrer gets, opening the `referral` flow (§ 6); slide 3's action leads here. Both rows are `LandingPage` slugs, not new types |
364
+ | the three signal-collectors sample rows (`/projects`, `/projects/[slug]`, `/thanks/[slug]`) | the module's own sample content this template declares as its own rows (#6646) |
365
+
366
+ Every kept row of the shape roster (`HomePage`, `AboutPage`, `ServicesList`, `Service`, `ContactPage`, `FAQPage`, `GlossaryList`, `NewsletterSignup`, `BookCall`, `PrivacyPage`, `TermsPage`, `PurchasePolicyPage`) is unchanged: this template's own `/about`, `/contact` and `/book-a-call` seeds override the shared ones (its `/book-a-call` seed points at the `/meet` booker), and the rest ride the shared layers exactly as the shape roster declares them.
367
+
255
368
  ## 4. Roster, as the registry declares it
256
369
 
257
- `minimalism-site` is the one declared template that does not reuse `TEMPLATE_BASE_ROSTER`: the deck replaces the document-scroll home, and `/how-it-works`, `/features`, `/pricing` and `/sign-in` are not pages this site has. `/pricing`'s absence is not a missing file — the `_base` layer still lands `content/en/Pricing/pricing.mdx`; the roster is what the template IS, so an unrostered page simply has no route directory copied. The merged roster, as the registry composes it:
370
+ `minimalism-site` composes the `organization-service` shape roster plus the § 3a differences: the deck replaces the document-scroll home, and `/how-it-works`, the product page (`/software/product`), `/pricing` and `/sign-in` are not pages this site has. The roster is what the template IS, so an unrostered page has neither a route directory nor its seed: `scaffold()` installs a `_base` or overlay seed only for a row that names it (#6646), so `content/en/Pricing/pricing.mdx` does not land. The merged roster, as the registry composes it:
258
371
 
259
372
  <!-- generated:begin roster -->
260
373
 
@@ -262,25 +375,34 @@ _Code route — no content, no sections._
262
375
  minimalism-site:
263
376
  requires: [marketing, scheduling, signal-collectors]
264
377
  categories: [real-estate, technology, legal]
378
+ shape: organization-service
379
+ design: minimalism
265
380
  roster:
266
- - { route: "/", content: ["content/en/HomePage/home.mdx"] }
267
- - { route: "/reports", content: ["content/en/LandingPage/reports.mdx"] }
268
- - { route: "/about", content: ["content/en/AboutPage/about.mdx"] }
269
- - { route: "/services", content: ["content/en/ServicesList/services.mdx"] }
270
- - { route: "/services/[slug]" }
271
- - { route: "/contact", content: ["content/en/ContactPage/contact.mdx"] }
272
- - { route: "/referral", content: ["content/en/LandingPage/referral.mdx"] }
273
- - { route: "/faq", content: ["content/en/FAQPage/faq.mdx"] }
274
- - { route: "/privacy", content: ["content/en/PrivacyPage/privacy.mdx"] }
275
- - { route: "/terms", content: ["content/en/TermsPage/terms.mdx"] }
276
- - { route: "/meet" }
277
- - { route: "/meet/[slug]" }
278
- - { route: "/meet/confirmed" }
279
- - { route: "/appointments" }
280
- - { route: "/flows/[slug]" }
281
- - { route: "/flows/[slug]/start" }
282
- - { route: "/flows/[slug]/results/[payload]" }
283
- - { route: "/reports/[slug]" }
381
+ - { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
382
+ - { route: "/reports", kind: page, content: ["content/en/LandingPage/reports.mdx"] }
383
+ - { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
384
+ - { route: "/services", kind: page, content: ["content/en/ServicesList/services.mdx"] }
385
+ - { route: "/services/[slug]", kind: page, contentDir: "content/en/Service" }
386
+ - { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
387
+ - { route: "/referral", kind: page, content: ["content/en/LandingPage/referral.mdx"] }
388
+ - { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
389
+ - { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
390
+ - { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
391
+ - { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
392
+ - { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
393
+ - { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
394
+ - { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
395
+ - { route: "/projects", kind: page, content: ["content/en/ProjectsList/projects.mdx"] }
396
+ - { route: "/projects/[slug]", kind: page, contentDir: "content/en/Project" }
397
+ - { route: "/thanks/[slug]", kind: page, contentDir: "content/en/ThankYouPage" }
398
+ - { route: "/meet", kind: route }
399
+ - { route: "/meet/[slug]", kind: route }
400
+ - { route: "/meet/confirmed", kind: route }
401
+ - { route: "/appointments", kind: route }
402
+ - { route: "/flows/[slug]", kind: route }
403
+ - { route: "/flows/[slug]/start", kind: route }
404
+ - { route: "/flows/[slug]/results/[payload]", kind: route }
405
+ - { route: "/reports/[slug]", kind: page, contentDir: "content/en/ReportPage" }
284
406
  ```
285
407
 
286
408
  <!-- generated:end -->
@@ -319,11 +441,11 @@ Every component the roster rows' seed content composes today (generated):
319
441
 
320
442
  <!-- generated:begin inventory -->
321
443
 
322
- | Tier | Used by this template |
323
- | -------- | --------------------------------------------------------------------------------------------------------------------------------- |
324
- | Shell | `MarketingShell` |
325
- | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
326
- | Sections | `ContactForm`, `ContentBlock`, `CTA`, `DocumentChassis`, `FAQ`, `Hero`, `Items`, `LogoCloud`, `ReportsList`, `StairSteps`, `Team` |
444
+ | Tier | Used by this template |
445
+ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
446
+ | Shell | `MarketingShell` |
447
+ | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
448
+ | Sections | `ContentBlock`, `CTA`, `DocumentChassis`, `FAQ`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `Newsletter`, `ReportsList`, `StairSteps`, `Team` |
327
449
 
328
450
  <!-- generated:end -->
329
451
 
@@ -2,9 +2,10 @@
2
2
  "name": "minimalism-site",
3
3
  "requires": ["marketing", "scheduling", "signal-collectors"],
4
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: /pricing (unrostered), /privacy and /terms arrive with the _base layer this extends; /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; /how-it-works, /features, /sign-in and the Free contact/faq/about compositions with the always-copied overlay, which this template's own /about, /contact and /faq files then override. 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 declared on the TEMPLATE_MANIFESTS entry, not here — the code registry is authoritative for a template create-ailk ships, and a duplicate 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.",
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
6
  "installMap": {
7
7
  "provenance.json": ".ailk-template.json",
8
+ "TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json",
8
9
  "assets/hero-backdrop.svg": "apps/web/public/hero-backdrop.svg",
9
10
  "assets/wordmark-placeholder.svg": "apps/web/public/wordmark-placeholder.svg",
10
11
  "assets/logo-placeholder-1.svg": "apps/web/public/logo-placeholder-1.svg",
@@ -18,5 +19,5 @@
18
19
  "assets/avatar-placeholder-6.svg": "apps/web/public/avatar-placeholder-6.svg",
19
20
  "flows/referral.flow.json": "database/flows/referral.flow.json"
20
21
  },
21
- "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 and /terms came with the base layer. 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."
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."
22
23
  }
@@ -0,0 +1,52 @@
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
+ schema:
7
+ mainEntity:
8
+ "@type": "Offer"
9
+ name: "{Your call name}"
10
+ price: 0
11
+ priceCurrency: "USD"
12
+ sections:
13
+ [
14
+ {
15
+ "id": "hero",
16
+ "type": "hero",
17
+ "data":
18
+ {
19
+ "eyebrow": "Book a call",
20
+ "headline": "{Book a call: what a visitor gets from it}",
21
+ "subheadline": "{One sentence on who the call is for and what they leave with}",
22
+ "primaryCta": { "label": "Book a time", "href": "/meet" },
23
+ },
24
+ },
25
+ {
26
+ "id": "what-happens-on-the-call",
27
+ "type": "items",
28
+ "data":
29
+ {
30
+ "headline": "What happens on the call?",
31
+ "columns": 3,
32
+ "items":
33
+ [
34
+ {
35
+ "title": "{The first thing you cover}",
36
+ "description": "{One or two sentences on what the visitor learns or decides here}",
37
+ },
38
+ {
39
+ "title": "{The second thing you cover}",
40
+ "description": "{One or two sentences on what the visitor learns or decides here}",
41
+ },
42
+ {
43
+ "title": "{The next step you agree}",
44
+ "description": "{One or two sentences on what happens after the call}",
45
+ },
46
+ ],
47
+ },
48
+ },
49
+ ]
50
+ ---
51
+
52
+ {/* 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. */}
@@ -16,41 +16,6 @@ sections:
16
16
  "subheadline": "{One line on what happens after you send this, and how long it takes.}",
17
17
  },
18
18
  },
19
- {
20
- "id": "contact-form",
21
- "type": "contact-form",
22
- "data":
23
- {
24
- "variant": "card",
25
- "source": "contact",
26
- "fields":
27
- [
28
- {
29
- "name": "name",
30
- "label": "Name",
31
- "type": "text",
32
- "required": true,
33
- },
34
- {
35
- "name": "email",
36
- "label": "Email",
37
- "type": "email",
38
- "required": true,
39
- },
40
- {
41
- "name": "message",
42
- "label": "What are you trying to do?",
43
- "type": "textarea",
44
- "required": true,
45
- },
46
- ],
47
- "submitLabel": "Send →",
48
- "consentText": "I accept the Terms",
49
- "consentLink": { "label": "Terms", "href": "/terms" },
50
- "successMessage": "Thank you — your message is in. You will hear back within {time amount}.",
51
- "action": "/v1/leads/submit",
52
- },
53
- },
54
19
  {
55
20
  "id": "closing",
56
21
  "type": "cta",
@@ -64,5 +29,6 @@ sections:
64
29
  ]
65
30
  ---
66
31
 
67
- {/_ The form posts to the site's own API (`/v1/leads/submit`) and confirms
68
- inline — no redirect, no thank-you page. Placeholder copy. _/}
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. _/}
@@ -0,0 +1,123 @@
1
+ ---
2
+ type: "PurchasePolicyPage"
3
+ slug: "purchase-policy"
4
+ title: "Purchase Policy"
5
+ description: "How cancellations, reschedules and refunds work for bookings made on this site. Placeholder policy — replace every section before you launch."
6
+ sections:
7
+ [
8
+ {
9
+ "id": "purchase-policy-document",
10
+ "type": "document-chassis",
11
+ "data":
12
+ {
13
+ "headline": "Purchase Policy",
14
+ "layout": "article",
15
+ "updated": "Last updated {Month Day, Year}",
16
+ "navGroupLabel": "Contents",
17
+ "sections":
18
+ [
19
+ {
20
+ "id": "cancellation",
21
+ "heading": "Cancellation",
22
+ "blocks":
23
+ [
24
+ {
25
+ "kind": "paragraph",
26
+ "text": "This page is starter content that shipped with your site. It is not a purchase policy, it makes no commitment on behalf of Your Company, and it is not legal advice. Replace every section with the policy you actually operate, and have someone qualified read it before you publish.",
27
+ },
28
+ {
29
+ "kind": "paragraph",
30
+ "text": "This section explains how cancellations and reschedules work for bookings made on this site. The headings are the ones a customer and an agent both look for, so keep them and fill in your own terms.",
31
+ },
32
+ ],
33
+ "subsections":
34
+ [
35
+ {
36
+ "id": "notice",
37
+ "heading": "How much notice is required",
38
+ "blocks":
39
+ [
40
+ {
41
+ "kind": "paragraph",
42
+ "text": "State the notice period in hours before the appointment, and say how it is measured. A customer reading at midnight should be able to work out, without arithmetic you have not shown them, whether they are still inside it.",
43
+ },
44
+ ],
45
+ },
46
+ {
47
+ "id": "how-to-cancel",
48
+ "heading": "How to cancel or reschedule",
49
+ "blocks":
50
+ [
51
+ {
52
+ "kind": "paragraph",
53
+ "text": "Give one route to cancel and one to reschedule, and say whether a reschedule inside the notice period counts as a cancellation. If a booking confirmation carries a self-service link, name it here.",
54
+ },
55
+ ],
56
+ },
57
+ {
58
+ "id": "fees",
59
+ "heading": "Late cancellations and no-shows",
60
+ "blocks":
61
+ [
62
+ {
63
+ "kind": "paragraph",
64
+ "text": "Say what a late cancellation costs and what a no-show costs, as a figure or a share of the booking, and when each is charged. If you hold a deposit, say what happens to it in each case.",
65
+ },
66
+ ],
67
+ },
68
+ {
69
+ "id": "our-cancellations",
70
+ "heading": "If we cancel",
71
+ "blocks":
72
+ [
73
+ {
74
+ "kind": "paragraph",
75
+ "text": "Set out what a customer gets if you cancel or move an appointment — a full refund, a rebooking, or both — and how quickly you tell them. A policy that only binds one side reads as one.",
76
+ },
77
+ ],
78
+ },
79
+ {
80
+ "id": "exceptions",
81
+ "heading": "Exceptions",
82
+ "blocks":
83
+ [
84
+ {
85
+ "kind": "paragraph",
86
+ "text": "Name the circumstances in which you waive a fee — illness, bereavement, severe weather — and say what you need from the customer to apply the waiver. Vague discretion is worse for you than a short written list.",
87
+ },
88
+ ],
89
+ },
90
+ ],
91
+ },
92
+ {
93
+ "id": "refunds",
94
+ "heading": "Refunds",
95
+ "blocks":
96
+ [
97
+ {
98
+ "kind": "paragraph",
99
+ "text": "Say what a customer gets back after a cancellation — the booking price, the deposit, or both, and how long the refund takes to reach the payment method it came from. If you offer store credit or a rebooking instead, describe when each applies.",
100
+ },
101
+ ],
102
+ "subsections":
103
+ [
104
+ {
105
+ "id": "questions",
106
+ "heading": "Questions about a refund",
107
+ "blocks":
108
+ [
109
+ {
110
+ "kind": "paragraph",
111
+ "text": "Point to the one place a customer should write, and say roughly how quickly you answer. A policy nobody can ask a question about is a policy that generates disputes.",
112
+ },
113
+ ],
114
+ },
115
+ ],
116
+ },
117
+ ],
118
+ },
119
+ },
120
+ ]
121
+ ---
122
+
123
+ {/* Rendered from frontmatter `sections[]`; the MDX body is not read by the section-catalog renderer. Service shape (#6646): cancellation and refunds — this template's override of the `_base` product-shape seed. The JSON-LD — a WebPage, wrapping a MerchantReturnPolicy when a returns section is present — is emitted by `buildPurchasePolicyPage` (#6646), not hand-rolled here. */}