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
@@ -29,74 +29,121 @@ The template's `layout` block — resolved with `resolveSiteChrome`, defaults fi
29
29
  | -------------------- | --------- |
30
30
  | `nav` | `full` |
31
31
  | `footer` | `columns` |
32
- | `announcementBanner` | `true` |
32
+ | `announcementBanner` | `false` |
33
33
  | `home` | `default` |
34
34
 
35
35
  <!-- generated:end -->
36
36
 
37
+ ### Theme (locked)
38
+
39
+ 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).
40
+
41
+ <!-- generated:begin theme -->
42
+
43
+ | Setting | Value |
44
+ | ------------------------ | ---------- |
45
+ | `corners` | `square` |
46
+ | `eyebrowCase` | `sentence` |
47
+ | `placeholders` | `fill` |
48
+ | `checkmarks` | `plain` |
49
+ | `colors.light.bg` | `#ffffff` |
50
+ | `colors.light.bgMuted` | `#ffffff` |
51
+ | `colors.light.surface` | `#ffffff` |
52
+ | `colors.light.border` | `#000000` |
53
+ | `colors.light.text` | `#000000` |
54
+ | `colors.light.textMuted` | `#333333` |
55
+ | `colors.light.primary` | `#000000` |
56
+ | `colors.light.primaryFg` | `#ffffff` |
57
+ | `colors.light.accent` | `#000000` |
58
+ | `colors.dark.bg` | `#000000` |
59
+ | `colors.dark.bgMuted` | `#000000` |
60
+ | `colors.dark.surface` | `#000000` |
61
+ | `colors.dark.border` | `#ffffff` |
62
+ | `colors.dark.text` | `#ffffff` |
63
+ | `colors.dark.textMuted` | `#cccccc` |
64
+ | `colors.dark.primary` | `#ffffff` |
65
+ | `colors.dark.primaryFg` | `#000000` |
66
+ | `colors.dark.accent` | `#ffffff` |
67
+
68
+ <!-- generated:end -->
69
+
37
70
  ## 2. Pages — delta over Free
38
71
 
39
72
  The base rows come first, exactly as the base layer and the always-copied overlay deliver them (#5618 D1/D7); the module rows follow. Each `page=<route>` region is generated from the seed file the composed layer stack lands for that route — the template's own tree, then its required modules' content, then `_base`, then the overlay.
40
73
 
41
- ### Base rows — from `_base` and the overlay (the Free eleven minus the teaser)
74
+ ### Base rows — from `_base` and the overlay (the Free roster minus the teaser)
42
75
 
43
76
  `/`:
44
77
 
45
78
  <!-- generated:begin page=/ -->
46
79
 
47
- | # | Section | Component | Copy (first line) |
48
- | --- | ------------------------------------------------------------ | --------------- | -------------------------------------------------- |
49
- | 1 | `hero` (split · checklist ×3 · 2 CTAs · closingLine) | `Hero` | How to get {outcome} without {problem} |
50
- | 2 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
51
- | 3 | `decision-split` (panels ×2) | `DecisionSplit` | There's a better way to {fix problem / get result} |
52
- | 4 | `feature` (eyebrow "Core Features" · features ×5 · 2 CTAs) | `Feature` | Everything you need to {achieve a desired outcome} |
53
- | 5 | `cta` (2 CTAs) | `CTA` | Direct integrations with your favorite tools |
54
- | 6 | `stair-steps` (tiles ×3) | `StairSteps` | Get setup in {number} easy steps |
55
- | 7 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
56
- | 8 | `content-block` (media-right · eyebrow "Manifesto" · 2 CTAs) | `ContentBlock` | We want you to {ability they couldn't do before} |
57
- | 9 | `video-section` (1 CTA · playBadge) | `VideoSection` | See {your product} in action |
80
+ | # | Section | Component | Copy (first line) |
81
+ | --- | ---------------------------------------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------- |
82
+ | 1 | `hero` (illustration · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `Hero` | {How to get outcome without problem} |
83
+ | 2 | `logoCloud` (layout=inline · logos ×3) | `LogoCloud` | Don’t just take our word for it |
84
+ | 3 | `decision-split` (imagerySlot=true · eyebrow "Comparison" · panels ×2) | `DecisionSplit` | {There's a better way to fix problem / get result} |
85
+ | 4 | `feature` (itemStyle=plain · actionsPosition=below · eyebrow "Core Features" · features ×5 · 2 CTAs) | `Feature` | {Everything you need to achieve a desired outcome} |
86
+ | 5 | `cta` (minimal · eyebrow "Integrations" · 2 CTAs) | `CTA` | Direct integrations with your favorite tools |
87
+ | 6 | `media-band` (imagerySlot=true) | `MediaBand` | |
88
+ | 7 | `feature` (itemStyle=plain · actionsPosition=below · imagerySlot=true · eyebrow "How It Works" · features ×3 · 2 CTAs) | `Feature` | {Get set up in number easy steps} |
89
+ | 8 | `cta` (box · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
90
+ | 9 | `content-block` (media-right · imagerySlot=true · eyebrow "Manifesto" · 2 CTAs) | `ContentBlock` | {We want you to ability they couldn't do before} |
91
+ | 10 | `content-block` (eyebrow "{Your Product} Demo" · 2 CTAs) | `ContentBlock` | {See your product in action} |
58
92
 
59
93
  <!-- generated:end -->
60
94
 
61
- `/how-it-works`:
95
+ `/use-cases` (a UseCasesList page composing sections — operator ruling 2026-09-23; a list of the three use cases since #6658 D4):
96
+
97
+ <!-- generated:begin page=/use-cases -->
98
+
99
+ | # | Section | Component | Copy (first line) |
100
+ | --- | -------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
101
+ | 1 | `hero` (eyebrow "Use cases" · 2 CTAs) | `Hero` | {Use cases: who your product is for} |
102
+ | 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product to do} |
103
+ | 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
104
+ | 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
105
+ | 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
106
+ | 6 | `faq` (accordion · items ×5 · 1 CTA · initialOpen first) | `FAQ` | FAQs |
107
+
108
+ <!-- generated:end -->
62
109
 
63
- <!-- generated:begin page=/how-it-works -->
110
+ `/use-cases/[slug]` (#6658 D4):
64
111
 
65
- | # | Section | Component | Copy (first line) |
66
- | --- | -------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
67
- | 1 | `hero` (eyebrow "How it Works" · 2 CTAs) | `Hero` | Get set up in {number} easy steps |
68
- | 2 | `feature` (alternating · numbered · features ×3) | `Feature` | The first thing they need to do to get the outcome they want |
69
- | 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
70
- | 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
71
- | 5 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
72
- | 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
112
+ <!-- generated:begin page=/use-cases/[slug] -->
73
113
 
114
+ _Detail route over `content/en/UseCase/` — 3 seed pages: `persona-1.mdx`, `persona-2.mdx`, `persona-3.mdx`._
74
115
  <!-- generated:end -->
75
116
 
76
- `/features`:
117
+ `/software` (code route — the product listing, core since #6658):
77
118
 
78
119
  <!-- generated:begin page=/features -->
79
120
 
80
- | # | Section | Component | Copy (first line) |
81
- | --- | ------------------------------------------------- | --------- | ------------------------------------------------- |
82
- | 1 | `feature` (eyebrow "Core Features" · features ×5) | `Feature` | Medium length section heading goes here |
83
- | 2 | `cta` (2 CTAs) | `CTA` | Direct integrations with your favorite tools |
84
- | 3 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
121
+ | # | Section | Component | Copy (first line) |
122
+ | --- | ------------------------------------------------- | --------- | ----------------------------------------------- |
123
+ | 1 | `hero` (eyebrow "Features" · 2 CTAs) | `Hero` | {Features: what your product does} |
124
+ | 2 | `items` (columns=3 · items ×3) | `Items` | {Everything your product does for the customer} |
125
+ | 3 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
85
126
 
86
127
  <!-- generated:end -->
87
128
 
129
+ `/features/[slug]` (one page per feature — #6721, reversing #6658 D3's single product page):
130
+
131
+ <!-- generated:begin page=/features/[slug] -->
132
+
133
+ _Detail route over `content/en/Feature/` — 3 seed pages: `feature-1.mdx`, `feature-2.mdx`, `feature-3.mdx`._
134
+ <!-- generated:end -->
135
+
88
136
  `/pricing`:
89
137
 
90
138
  <!-- generated:begin page=/pricing -->
91
139
 
92
- | # | Section | Component | Copy (first line) |
93
- | --- | ---------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
94
- | 1 | `hero` (eyebrow "Pricing" · 2 CTAs) | `Hero` | Pays for itself in {tangible value or outcome} |
95
- | 2 | `pricing` (three-tiers-with-toggle · eyebrow "Pricing" · plans ×3 · billingToggle) | `Pricing` | Pays for itself in {tangible value or outcome} |
96
- | 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
97
- | 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
98
- | 5 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
99
- | 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
140
+ | # | Section | Component | Copy (first line) |
141
+ | --- | -------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
142
+ | 1 | `pricing` (three-tiers-with-toggle · cardLayout=centered · eyebrow "Pricing" · plans ×3 · billingToggle) | `Pricing` | {Pays for itself in tangible value or outcome} |
143
+ | 2 | `logoCloud` (layout=inline · logos ×3) | `LogoCloud` | Don’t just take our word for it |
144
+ | 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
145
+ | 4 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
146
+ | 5 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | FAQs |
100
147
 
101
148
  <!-- generated:end -->
102
149
 
@@ -104,14 +151,13 @@ The base rows come first, exactly as the base layer and the always-copied overla
104
151
 
105
152
  <!-- generated:begin page=/about -->
106
153
 
107
- | # | Section | Component | Copy (first line) |
108
- | --- | -------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
109
- | 1 | `content-block` (media-right · eyebrow "Manifesto" · 2 CTAs) | `ContentBlock` | We want you to {ability they couldn't do before} |
110
- | 2 | `team` (members ×5) | `Team` | Our team |
111
- | 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
112
- | 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
113
- | 5 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
114
- | 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
154
+ | # | Section | Component | Copy (first line) |
155
+ | --- | --------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
156
+ | 1 | `content-block` (media-right · imagerySlot=true · eyebrow "About" · 2 CTAs) | `ContentBlock` | {We want you to ability they couldn't do before} |
157
+ | 2 | `team` (with-side-images · eyebrow "Tagline" · members ×5) | `Team` | Our team |
158
+ | 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
159
+ | 4 | `cta` (box · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
160
+ | 5 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | FAQs |
115
161
 
116
162
  <!-- generated:end -->
117
163
 
@@ -119,11 +165,11 @@ The base rows come first, exactly as the base layer and the always-copied overla
119
165
 
120
166
  <!-- generated:begin page=/faq -->
121
167
 
122
- | # | Section | Component | Copy (first line) |
123
- | --- | -------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- |
124
- | 1 | `hero` | `Hero` | FAQs |
125
- | 2 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | Vel odio odit voluptatum ut veritatis. Ex rerum aspernatur voluptas u… |
126
- | 3 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
168
+ | # | Section | Component | Copy (first line) |
169
+ | --- | ------------------------------------------------------- | --------- | ---------------------------------------- |
170
+ | 1 | `hero` (gapBelow=tight · eyebrow "FAQ") | `Hero` | FAQs |
171
+ | 2 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A question your customers actually ask} |
172
+ | 3 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A second group of questions} |
127
173
 
128
174
  <!-- generated:end -->
129
175
 
@@ -131,12 +177,39 @@ The base rows come first, exactly as the base layer and the always-copied overla
131
177
 
132
178
  <!-- generated:begin page=/contact -->
133
179
 
134
- | # | Section | Component | Copy (first line) |
135
- | --- | ----------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
136
- | 1 | `hero` (split · eyebrow "Book a Demo" · checklist ×3) | `Hero` | Ready to {achieve a valuable outcome}? |
137
- | 2 | `contact-form` (card · fields ×3) | `ContactForm` | Name · Email · Message |
138
- | 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
139
- | 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
180
+ | # | Section | Component | Copy (first line) |
181
+ | --- | --------------------------------------------------------- | --------- | ------------------------------------- |
182
+ | 1 | `hero` (split · eyebrow "Contact" · checklist ×3 · 1 CTA) | `Hero` | Get every message in your email, free |
183
+
184
+ <!-- generated:end -->
185
+
186
+ `/glossary`, `/newsletter`, `/book-a-call` (#6658 D5 — every starter carries them):
187
+
188
+ <!-- generated:begin page=/glossary -->
189
+
190
+ | # | Section | Component | Copy (first line) |
191
+ | --- | ----------------------------------- | --------------- | -------------------------------------------- |
192
+ | 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
193
+ | 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
194
+
195
+ <!-- generated:end -->
196
+
197
+ <!-- generated:begin page=/newsletter -->
198
+
199
+ | # | Section | Component | Copy (first line) |
200
+ | --- | ------------------------------------- | ------------ | ------------------------------------------------ |
201
+ | 1 | `hero` (eyebrow "Newsletter" · 1 CTA) | `Hero` | {Newsletter: what subscribers get and how often} |
202
+ | 2 | `newsletter` | `Newsletter` | Subscribe |
203
+ | 3 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
204
+
205
+ <!-- generated:end -->
206
+
207
+ <!-- generated:begin page=/book-a-call -->
208
+
209
+ | # | Section | Component | Copy (first line) |
210
+ | --- | -------------------------------------- | --------- | ------------------------------------------ |
211
+ | 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
212
+ | 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
140
213
 
141
214
  <!-- generated:end -->
142
215
 
@@ -147,13 +220,20 @@ The base rows come first, exactly as the base layer and the always-copied overla
147
220
  _Code route — no content, no sections._
148
221
  <!-- generated:end -->
149
222
 
223
+ `/sign-up`:
224
+
225
+ <!-- generated:begin page=/sign-up -->
226
+
227
+ _Code route — no content, no sections._
228
+ <!-- generated:end -->
229
+
150
230
  `/privacy`:
151
231
 
152
232
  <!-- generated:begin page=/privacy -->
153
233
 
154
- | # | Section | Component | Copy (first line) |
155
- | --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
156
- | 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Privacy Policy |
234
+ | # | Section | Component | Copy (first line) |
235
+ | --- | ----------------------------------- | ----------------- | ----------------- |
236
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
157
237
 
158
238
  <!-- generated:end -->
159
239
 
@@ -161,9 +241,19 @@ _Code route — no content, no sections._
161
241
 
162
242
  <!-- generated:begin page=/terms -->
163
243
 
164
- | # | Section | Component | Copy (first line) |
165
- | --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
166
- | 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Terms of Service |
244
+ | # | Section | Component | Copy (first line) |
245
+ | --- | ----------------------------------- | ----------------- | ----------------- |
246
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
247
+
248
+ <!-- generated:end -->
249
+
250
+ `/purchase-policy`:
251
+
252
+ <!-- generated:begin page=/purchase-policy -->
253
+
254
+ | # | Section | Component | Copy (first line) |
255
+ | --- | ----------------------------------- | ----------------- | ----------------- |
256
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
167
257
 
168
258
  <!-- generated:end -->
169
259
 
@@ -295,7 +385,22 @@ _Code route — no content, no sections._
295
385
 
296
386
  ### `/projects`, `/projects/<slug>`, `/projects/apply` — CollectionPage / WebPage · schema `ProjectsList` / `Project` · signal-collectors
297
387
 
298
- Project listings and the application flow. Sections: `hero` · `items` · `cta` (list); `hero` · `content-block` · `cta` (detail); `hero` · `step-flow` (apply).
388
+ Project listings and the application flow. Sections: `hero` · `items` · `cta` (list); `hero` · `content-block` · `cta` (detail); `hero` · `step-flow` (apply). The listing and the two sample projects are roster rows (#6646): the signal-collectors bundle lands them, and this template names them, so the roster lists every page the scaffold installs.
389
+
390
+ <!-- generated:begin page=/projects -->
391
+
392
+ | # | Section | Component | Copy (first line) |
393
+ | --- | ------------------------------ | --------- | -------------------------- |
394
+ | 1 | `hero` (centered) | `Hero` | Projects |
395
+ | 2 | `items` (columns=2 · items ×2) | `Items` | Selected engagements |
396
+ | 3 | `cta` (2 CTAs) | `CTA` | Have a project like these? |
397
+
398
+ <!-- generated:end -->
399
+
400
+ <!-- generated:begin page=/projects/[slug] -->
401
+
402
+ _Detail route over `content/en/Project/` — 2 seed pages: `fit-check-funnel.mdx`, `launch-site-in-fourteen-days.mdx`._
403
+ <!-- generated:end -->
299
404
 
300
405
  ### `/waitlist/<experimentId>` — InstrumentCapturePage · schema `Waitlist` · signal-collectors (authed)
301
406
 
@@ -303,7 +408,28 @@ As the slice ships it; no template composition.
303
408
 
304
409
  ### `/thanks/<slug>` — per-form confirmation · signal-collectors
305
410
 
306
- Authored per form (#3960): `contact` (if the Pro contact form redirects), `newsletter`, `apply`. Sections: `hero` · `cta`. The three sample pages, like the two projects and the listing above, ride the signal-collectors bundle's `installMap` (#5618 D6.3) — no `pageContributions` row declares `/projects*` or `/thanks/<slug>` yet (spec 5618 § 7 finding 7), so they are not roster rows here.
411
+ Authored per form (#3960): `contact` (if the Pro contact form redirects), `newsletter`, `apply`. Sections: `hero` · `cta`. The three sample pages, like the two projects and the listing above, ride the signal-collectors bundle's `installMap` (#5618 D6.3). No `pageContributions` row declares `/projects*` or `/thanks/<slug>`, so this template's own roster declares them (#6646): `/thanks/[slug]` names its seed directory as `contentDir`.
412
+
413
+ <!-- generated:begin page=/thanks/[slug] -->
414
+
415
+ _Detail route over `content/en/ThankYouPage/` — 3 seed pages: `apply.mdx`, `contact.mdx`, `newsletter.mdx`._
416
+ <!-- generated:end -->
417
+
418
+ <!-- generated:begin page=/portfolio -->
419
+
420
+ | # | Section | Component | Copy (first line) |
421
+ | --- | ---------------------------------------------------------------------------------------------------------- | --------- | --------------------------------------- |
422
+ | 1 | `hero` (default · gapBelow=tight · size=display · surface=wash-secondary · eyebrow "{Portfolio}" · 2 CTAs) | `Hero` | {The work, before and after.} |
423
+ | 2 | `items` (tile · surface=none · columns=2 · items ×4) | `Items` | |
424
+ | 3 | `cta` (beam · chips ×3 · 2 CTAs) | `CTA` | {Is your site the before or the after?} |
425
+ | 4 | `faq` (centered · surface=gray-100 · accordion · items ×3 · initialOpen first) | `FAQ` | Frequently Asked Questions |
426
+
427
+ <!-- generated:end -->
428
+
429
+ <!-- generated:begin page=/portfolio/[slug] -->
430
+
431
+ _Detail route over `content/en/PortfolioItem/` — 4 seed pages: `sample-four.mdx`, `sample-one.mdx`, `sample-three.mdx`, `sample-two.mdx`._
432
+ <!-- generated:end -->
307
433
 
308
434
  ## 2a. State and persistence — Pro delta
309
435
 
@@ -329,28 +455,42 @@ Everything in the Free manifest § 2a applies. Pro adds:
329
455
  ```
330
456
  marketing-site:
331
457
  requires: [marketing, docs-blog, scheduling, signal-collectors]
332
- categories: [accounting, legal, hvac, roofing, plumbing, electrical, landscaping, auto-repair, real-estate, technology, medical-specialty]
458
+ categories: [accounting, legal, consulting, hvac, roofing, plumbing, electrical, landscaping, auto-repair, real-estate, technology, medical-specialty]
459
+ shape: organization-product
460
+ design: standard
333
461
  roster:
334
- - { route: "/", content: ["content/en/HomePage/home.mdx"] }
335
- - { route: "/how-it-works", content: ["content/en/LandingPage/how-it-works.mdx"] }
336
- - { route: "/features", content: ["content/en/LandingPage/features.mdx"] }
337
- - { route: "/pricing", content: ["content/en/Pricing/pricing.mdx"] }
338
- - { route: "/about", content: ["content/en/AboutPage/about.mdx"] }
339
- - { route: "/faq", content: ["content/en/FAQPage/faq.mdx"] }
340
- - { route: "/contact", content: ["content/en/ContactPage/contact.mdx"] }
341
- - { route: "/sign-in" }
342
- - { route: "/privacy", content: ["content/en/PrivacyPage/privacy.mdx"] }
343
- - { route: "/terms", content: ["content/en/TermsPage/terms.mdx"] }
344
- - { route: "/blog", content: ["apps/web/content/en/blog/index.mdx", "apps/web/content/en/blog/01-8-things-that-prove-coding-skills-are-directly-linked-to-successfully-assembling-ikea-furniture.mdx", "apps/web/content/en/blog/02-5-ways-to-guarantee-your-startup-goes-nowhere-fast.mdx", "apps/web/content/en/blog/03-10-ideas-that-will-guarantee-1000x-growth.mdx", "apps/web/content/en/blog/04-7-keys-to-saas-success-the-elite-doesnt-want-you-to-know.mdx", "apps/web/content/en/blog/launching-ailk.mdx"] }
345
- - { route: "/docs", content: ["apps/web/content/en/docs/getting-started.mdx", "apps/web/content/en/docs/configure.mdx", "apps/web/content/en/docs/deploy.mdx"] }
346
- - { route: "/meet" }
347
- - { route: "/meet/[slug]" }
348
- - { route: "/meet/confirmed" }
349
- - { route: "/appointments" }
350
- - { route: "/flows/[slug]" }
351
- - { route: "/flows/[slug]/start" }
352
- - { route: "/flows/[slug]/results/[payload]" }
353
- - { route: "/reports/[slug]" }
462
+ - { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
463
+ - { route: "/features", kind: page, content: ["content/en/FeaturesList/features.mdx"] }
464
+ - { route: "/features/[slug]", kind: page, contentDir: "content/en/Feature" }
465
+ - { route: "/use-cases", kind: page, content: ["content/en/UseCasesList/use-cases.mdx"] }
466
+ - { route: "/use-cases/[slug]", kind: page, contentDir: "content/en/UseCase" }
467
+ - { route: "/pricing", kind: page, content: ["content/en/Pricing/pricing.mdx"] }
468
+ - { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
469
+ - { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
470
+ - { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
471
+ - { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
472
+ - { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
473
+ - { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
474
+ - { route: "/sign-in", kind: route }
475
+ - { route: "/sign-up", kind: route }
476
+ - { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
477
+ - { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
478
+ - { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
479
+ - { route: "/projects", kind: page, content: ["content/en/ProjectsList/projects.mdx"] }
480
+ - { route: "/projects/[slug]", kind: page, contentDir: "content/en/Project" }
481
+ - { route: "/thanks/[slug]", kind: page, contentDir: "content/en/ThankYouPage" }
482
+ - { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
483
+ - { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
484
+ - { route: "/blog", kind: page, content: ["apps/web/content/en/blog/index.mdx", "apps/web/content/en/blog/01-8-things-that-prove-coding-skills-are-directly-linked-to-successfully-assembling-ikea-furniture.mdx", "apps/web/content/en/blog/02-5-ways-to-guarantee-your-startup-goes-nowhere-fast.mdx", "apps/web/content/en/blog/03-10-ideas-that-will-guarantee-1000x-growth.mdx", "apps/web/content/en/blog/04-7-keys-to-saas-success-the-elite-doesnt-want-you-to-know.mdx", "apps/web/content/en/blog/launching-ailk.mdx"] }
485
+ - { route: "/docs", kind: page, content: ["apps/web/content/en/docs/getting-started.mdx", "apps/web/content/en/docs/configure.mdx", "apps/web/content/en/docs/deploy.mdx"] }
486
+ - { route: "/meet", kind: route }
487
+ - { route: "/meet/[slug]", kind: route }
488
+ - { route: "/meet/confirmed", kind: route }
489
+ - { route: "/appointments", kind: route }
490
+ - { route: "/flows/[slug]", kind: route }
491
+ - { route: "/flows/[slug]/start", kind: route }
492
+ - { route: "/flows/[slug]/results/[payload]", kind: route }
493
+ - { route: "/reports/[slug]", kind: route }
354
494
  ```
355
495
 
356
496
  <!-- generated:end -->
@@ -372,11 +512,11 @@ Every component the roster rows' seed content composes today (generated):
372
512
 
373
513
  <!-- generated:begin inventory -->
374
514
 
375
- | Tier | Used by this template |
376
- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
377
- | Shell | `MarketingShell` |
378
- | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
379
- | Sections | `ContactForm`, `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `Hero`, `LogoCloud`, `Pricing`, `StairSteps`, `Team`, `Testimonials`, `VideoSection` |
515
+ | Tier | Used by this template |
516
+ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
517
+ | Shell | `MarketingShell` |
518
+ | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
519
+ | Sections | `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `Newsletter`, `Pricing`, `Team`, `Testimonials` |
380
520
 
381
521
  <!-- generated:end -->
382
522
 
@@ -5,6 +5,7 @@
5
5
  "$comment": "Pro template (#5464). installMap: bundle-relative source -> scaffold-relative destination; the stager reads only installMap/postInstall/patches. After #5618 D6 this tree holds compositions and copy overrides only: the base pages (/pricing, /privacy, /terms) arrive from the _base layer it extends, and every module sample (the blog listing and posts 01-04, the three docs pages, the projects, thank-you, flow, waitlist and report samples) ships in the docs-blog and signal-collectors bundles its requires names. Its one content file, post 05, is deliberately mapped ONTO apps/web/content/en/blog/launching-ailk.mdx (D6.2a): the template lands last and can overwrite but never remove the module's own seed post, so this is Rule B's copy-override clause with a real instance (a template-owned replacement of a seed row is a docs-blog gap on #5467, spec 5618 s7 finding 9). Unmapped content/en/** would land at the scaffold root's content/, exactly as marketing-site-free's does; today nothing is unmapped.",
6
6
  "installMap": {
7
7
  "provenance.json": ".ailk-template.json",
8
+ "TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json",
8
9
  "content/en/blog/05-this-vc-morning-routine-will-make-you-super-annoying.mdx": "apps/web/content/en/blog/launching-ailk.mdx"
9
10
  },
10
11
  "postInstall": "Template marketing-site installed: its module samples - the Pro blog (5 posts) and docs (3 pages) from docs-blog, the booking pages at /meet, /meet/<slug> and /meet/confirmed from scheduling, the projects (2 + listing), thank-you pages (contact, newsletter, apply), fit-check flow definition, waitlist experiment, the report reader at /reports/<slug> and its sample report PDF under apps/web/public/reports/ from signal-collectors - arrived with those module bundles, and /pricing, /privacy and /terms with the base layer. This template adds one copy override (blog post 05) - every sample is placeholder copy to replace before you launch."