create-ailk 0.6.0 → 0.7.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 (248) hide show
  1. package/README.md +44 -5
  2. package/component-catalog.json +146 -21
  3. package/component-catalog.md +9 -6
  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 +124 -13
  11. package/dist/copy.d.ts +14 -0
  12. package/dist/copy.js +38 -1
  13. package/dist/index.d.ts +4 -2
  14. package/dist/index.js +6 -1
  15. package/dist/lib/extract-module-bundle.d.ts +76 -2
  16. package/dist/lib/extract-module-bundle.js +219 -8
  17. package/dist/lib/license-key-files.d.ts +15 -0
  18. package/dist/lib/license-key-files.js +102 -0
  19. package/dist/lib/module-license-gate.d.ts +6 -1
  20. package/dist/lib/module-license-gate.js +6 -1
  21. package/dist/lib/pro-callout.d.ts +16 -10
  22. package/dist/lib/pro-callout.js +27 -4
  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.0.tar.gz +0 -0
  28. package/dist/modules/commerce/0.6.1.tar.gz +0 -0
  29. package/dist/modules/docs-blog/0.6.0.tar.gz +0 -0
  30. package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
  31. package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
  32. package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
  33. package/dist/modules/multi-tenant/0.6.0.tar.gz +0 -0
  34. package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
  35. package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
  36. package/dist/modules/scheduling/0.6.0.tar.gz +0 -0
  37. package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
  38. package/dist/modules/signal-collectors/0.6.0.tar.gz +0 -0
  39. package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
  40. package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
  41. package/dist/modules/workspace/0.6.0.tar.gz +0 -0
  42. package/dist/modules/workspace/0.6.1.tar.gz +0 -0
  43. package/dist/parse-args.d.ts +7 -0
  44. package/dist/parse-args.js +23 -1
  45. package/dist/programmatic.d.ts +46 -0
  46. package/dist/programmatic.js +144 -19
  47. package/dist/site-chrome.d.ts +18 -7
  48. package/dist/site-chrome.js +32 -14
  49. package/dist/site-roster.d.ts +127 -0
  50. package/dist/site-roster.js +494 -0
  51. package/dist/surfaces.d.ts +20 -7
  52. package/dist/surfaces.js +149 -28
  53. package/dist/sync-routes.d.ts +9 -0
  54. package/dist/sync-routes.js +2 -2
  55. package/dist/template-manifest.d.ts +58 -2
  56. package/dist/template-manifest.js +196 -69
  57. package/package.json +6 -4
  58. package/site-templates/_base/content/en/BookCall/book-call.mdx +53 -0
  59. package/site-templates/_base/content/en/GlossaryList/glossary.mdx +66 -0
  60. package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +68 -0
  61. package/site-templates/_base/content/en/Pricing/pricing.mdx +71 -62
  62. package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +2 -3
  63. package/site-templates/_base/content/en/TermsPage/terms.mdx +2 -3
  64. package/site-templates/_base/content/en/UseCase/first-use-case.mdx +23 -0
  65. package/site-templates/_base/content/en/UseCase/second-use-case.mdx +23 -0
  66. package/site-templates/_base/content/en/UseCase/third-use-case.mdx +23 -0
  67. package/site-templates/designs/minimalism/DESIGN.md +162 -0
  68. package/site-templates/designs/standard/DESIGN.md +162 -0
  69. package/site-templates/marketing-site/DESIGN.md +162 -0
  70. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +312 -57
  71. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +209 -90
  72. package/site-templates/marketing-site/ailk-template.json +1 -0
  73. package/site-templates/marketing-site-free/DESIGN.md +162 -0
  74. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +260 -66
  75. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +294 -114
  76. package/site-templates/marketing-site-free/ailk-template.json +3 -2
  77. package/site-templates/minimalism-site/DESIGN.md +162 -0
  78. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +246 -19
  79. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +185 -51
  80. package/site-templates/minimalism-site/ailk-template.json +3 -2
  81. package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +53 -0
  82. package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +3 -37
  83. package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
  84. package/site-templates/saas-product/DESIGN.md +162 -0
  85. package/site-templates/simple-service/DESIGN.md +162 -0
  86. package/site-templates/simple-service/TEMPLATE-MANIFEST.json +135 -26
  87. package/site-templates/simple-service/TEMPLATE-MANIFEST.md +114 -59
  88. package/site-templates/simple-service/ailk-template.json +4 -3
  89. package/site-templates/simple-service/content/en/BookCall/book-call.mdx +53 -0
  90. package/site-templates/simple-service/content/en/ContactPage/contact.mdx +1 -36
  91. package/site-templates/simple-service/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
  92. package/templates/.claude/settings.json +15 -0
  93. package/templates/.claude/skills/README.md +8 -8
  94. package/templates/.claude/skills/{scaffold-auth → add-auth}/SKILL.md +7 -7
  95. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/env-vars.md +2 -2
  96. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/oauth-app-setup.md +3 -3
  97. package/templates/.claude/skills/{scaffold-page → add-page}/SKILL.md +76 -62
  98. package/templates/.claude/skills/add-page/references/page-types.md +111 -0
  99. package/templates/.claude/skills/{scaffold-page → add-page}/templates/content.mdx.tmpl +4 -4
  100. package/templates/.claude/skills/{scaffold-page → add-page}/templates/route.tsx.tmpl +1 -1
  101. package/templates/.claude/skills/{audit-site → check-site}/SKILL.md +16 -17
  102. package/templates/.claude/skills/{audit-site → check-site}/references/common-errors.md +3 -3
  103. package/templates/.claude/skills/{audit-site → check-site}/references/findings-glossary.md +16 -14
  104. package/templates/.claude/skills/{audit-site → check-site}/references/severity-levels.md +1 -1
  105. package/templates/.claude/skills/fill-page/SKILL.md +180 -0
  106. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +80 -0
  107. package/templates/.claude/skills/fill-page/references/section-sources.md +41 -0
  108. package/templates/.claude/skills/{provision-config → setup-deploy}/SKILL.md +8 -8
  109. package/templates/.claude/skills/{provision-config → setup-deploy}/references/env-vars-template.md +2 -2
  110. package/templates/.claude/skills/{provision-config → setup-deploy}/references/runbook-template.md +8 -8
  111. package/templates/.claude/skills/{provision-config → setup-deploy}/references/vercel-json-template.md +1 -1
  112. package/templates/.claude/skills/upgrade-plan/SKILL.md +117 -0
  113. package/templates/.claude/skills/upgrade-plan/references/options.md +24 -0
  114. package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +527 -0
  115. package/templates/.github/workflows/ci.yml +5 -0
  116. package/templates/CLAUDE.md +10 -5
  117. package/templates/DESIGN.md +162 -0
  118. package/templates/README.md +134 -38
  119. package/templates/apps/api/.env.example +2 -1
  120. package/templates/apps/api/package.json +1 -1
  121. package/templates/apps/api/src/config/__tests__/index.test.ts +37 -2
  122. package/templates/apps/api/src/config/index.ts +19 -6
  123. package/templates/apps/api/src/lib/license-key-store.ts +45 -0
  124. package/templates/apps/api/src/lib/site.ts +5 -3
  125. package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +97 -0
  126. package/templates/apps/api/src/middleware/auth.ts +9 -0
  127. package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +127 -5
  128. package/templates/apps/api/src/routes/content/get-page.ts +86 -2
  129. package/templates/apps/api/src/server.ts +6 -0
  130. package/templates/apps/mcp/__tests__/audit-single-page.test.ts +75 -1
  131. package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +57 -9
  132. package/templates/apps/mcp/package.json +2 -1
  133. package/templates/apps/mcp/src/index.ts +7 -0
  134. package/templates/apps/mcp/src/lib/audit-single-page.ts +36 -10
  135. package/templates/apps/mcp/src/lib/license-key-store.ts +45 -0
  136. package/templates/apps/web/PRODUCT.md +86 -0
  137. package/templates/apps/web/__tests__/setup.ts +18 -0
  138. package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +10 -2
  139. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +2 -2
  140. package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +10 -4
  141. package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +22 -14
  142. package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +26 -18
  143. package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +12 -4
  144. package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +35 -4
  145. package/templates/apps/web/app/[locale]/[slug]/page.tsx +49 -9
  146. package/templates/apps/web/app/[locale]/book-a-call/page.tsx +50 -0
  147. package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
  148. package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
  149. package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +3 -4
  150. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +94 -33
  151. package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +53 -23
  152. package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +96 -0
  153. package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +84 -2
  154. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +5 -6
  155. package/templates/apps/web/app/[locale]/contact/page.tsx +25 -7
  156. package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
  157. package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +3 -4
  158. package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +4 -5
  159. package/templates/apps/web/app/[locale]/glossary/page.tsx +50 -0
  160. package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
  161. package/templates/apps/web/app/[locale]/how-to/page.tsx +25 -15
  162. package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
  163. package/templates/apps/web/app/[locale]/layout.tsx +113 -51
  164. package/templates/apps/web/app/[locale]/newsletter/page.tsx +50 -0
  165. package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
  166. package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
  167. package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +4 -5
  168. package/templates/apps/web/app/[locale]/{shipping → purchase-policy}/page.tsx +15 -10
  169. package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +4 -5
  170. package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
  171. package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +14 -1
  172. package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
  173. package/templates/apps/web/app/[locale]/software/page.tsx +25 -15
  174. package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
  175. package/templates/apps/web/app/[locale]/tech-articles/page.tsx +25 -15
  176. package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +3 -4
  177. package/templates/apps/web/app/[locale]/use-cases/[slug]/page.tsx +48 -0
  178. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +3 -4
  179. package/templates/apps/web/app/[locale]/use-cases/page.tsx +15 -2
  180. package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
  181. package/templates/apps/web/app/[locale]/whitepapers/page.tsx +25 -15
  182. package/templates/apps/web/app/error-fallback.tsx +17 -45
  183. package/templates/apps/web/app/not-found.tsx +14 -38
  184. package/templates/apps/web/app/og/route.tsx +6 -0
  185. package/templates/apps/web/eslint.config.mjs +3 -0
  186. package/templates/apps/web/instrumentation.ts +14 -0
  187. package/templates/apps/web/lib/__tests__/site-theme.test.ts +135 -20
  188. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +38 -0
  189. package/templates/apps/web/lib/license-key-store.ts +52 -0
  190. package/templates/apps/web/lib/nav-config.ts +64 -12
  191. package/templates/apps/web/lib/prisma-for-auth.ts +9 -6
  192. package/templates/apps/web/lib/site-brand.tsx +4 -8
  193. package/templates/apps/web/lib/site-chrome.ts +3 -3
  194. package/templates/apps/web/lib/site-identity.ts +134 -0
  195. package/templates/apps/web/lib/site-theme.ts +11 -0
  196. package/templates/apps/web/messages/en.json +52 -37
  197. package/templates/apps/web/middleware.ts +1 -1
  198. package/templates/apps/web/public/android-chrome-192x192.png +0 -0
  199. package/templates/apps/web/public/android-chrome-512x512.png +0 -0
  200. package/templates/apps/web/public/apple-touch-icon.png +0 -0
  201. package/templates/apps/web/public/favicon-16x16.png +0 -0
  202. package/templates/apps/web/public/favicon-32x32.png +0 -0
  203. package/templates/apps/web/public/favicon.ico +0 -0
  204. package/templates/apps/web/public/favicon.svg +3 -3
  205. package/templates/apps/web/public/logomark.svg +6 -3
  206. package/templates/apps/web/public/logos/ai-launch-kit-light.svg +4 -0
  207. package/templates/apps/web/public/logos/ai-launch-kit.svg +4 -0
  208. package/templates/apps/web/public/logos/atomic-agent-light.svg +4 -0
  209. package/templates/apps/web/public/logos/atomic-agent.svg +4 -0
  210. package/templates/apps/web/public/logos/salessmyth-light.svg +4 -0
  211. package/templates/apps/web/public/logos/salessmyth.svg +4 -0
  212. package/templates/apps/web/public/site.webmanifest +4 -4
  213. package/templates/apps/web/public/wordmark-light.svg +4 -0
  214. package/templates/apps/web/public/wordmark.svg +3 -3
  215. package/templates/apps/web/security-headers.config.ts +5 -1
  216. package/templates/apps/web/src/lib/commerce-sections.ts +35 -3
  217. package/templates/content/_site.mdx +41 -3
  218. package/templates/content/en/AboutPage/about.mdx +150 -144
  219. package/templates/content/en/BlogList/blog.mdx +105 -0
  220. package/templates/content/en/ContactPage/contact.mdx +44 -85
  221. package/templates/content/en/FAQPage/faq.mdx +86 -57
  222. package/templates/content/en/HomePage/home.mdx +276 -217
  223. package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +182 -0
  224. package/templates/content/en/SoftwareProduct/product.mdx +175 -0
  225. package/templates/content/en/UseCasesList/use-cases.mdx +170 -0
  226. package/templates/database/CHANGELOG.md +14 -0
  227. package/templates/database/package.json +3 -2
  228. package/templates/package.json +3 -1
  229. package/templates/tools/lint-architecture.ts +315 -0
  230. package/templates/tools/tsconfig.json +14 -0
  231. package/versions.json +33 -33
  232. package/templates/.claude/skills/add-schema/SKILL.md +0 -277
  233. package/templates/.claude/skills/add-schema/references/conflict-handling.md +0 -200
  234. package/templates/.claude/skills/add-schema/references/file-finding.md +0 -123
  235. package/templates/.claude/skills/add-schema/references/schema-types.md +0 -234
  236. package/templates/.claude/skills/scaffold-page/references/page-types.md +0 -169
  237. package/templates/.claude/skills/suggest-site-pages/SKILL.md +0 -242
  238. package/templates/.claude/skills/suggest-site-pages/references/categories.md +0 -287
  239. package/templates/apps/web/app/[locale]/cancellation/page.tsx +0 -44
  240. package/templates/apps/web/app/[locale]/returns/page.tsx +0 -44
  241. package/templates/apps/web/public/logo-dark.svg +0 -21
  242. package/templates/apps/web/public/logo-light.svg +0 -21
  243. package/templates/content/en/CancellationPolicyPage/cancellation.mdx +0 -108
  244. package/templates/content/en/LandingPage/blog.mdx +0 -83
  245. package/templates/content/en/LandingPage/features.mdx +0 -103
  246. package/templates/content/en/LandingPage/how-it-works.mdx +0 -143
  247. package/templates/content/en/ReturnsPolicyPage/returns.mdx +0 -108
  248. package/templates/content/en/ShippingPolicyPage/shipping.mdx +0 -108
@@ -29,74 +29,116 @@ 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):
62
96
 
63
- <!-- generated:begin page=/how-it-works -->
97
+ <!-- generated:begin page=/use-cases -->
64
98
 
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 |
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 |
73
107
 
74
108
  <!-- generated:end -->
75
109
 
76
- `/features`:
110
+ `/use-cases/[slug]` (#6658 D4):
111
+
112
+ <!-- generated:begin page=/use-cases/[slug] -->
113
+
114
+ _Detail route over `content/en/UseCase/` — 3 seed pages: `first-use-case.mdx`, `second-use-case.mdx`, `third-use-case.mdx`._
115
+ <!-- generated:end -->
116
+
117
+ `/software` (code route — the product listing, core since #6658):
118
+
119
+ <!-- generated:begin page=/software -->
120
+
121
+ _Code route — no content, no sections._
122
+ <!-- generated:end -->
77
123
 
78
- <!-- generated:begin page=/features -->
124
+ `/software/[slug]` (the product's own page, `/software/product` — #6658 D3):
79
125
 
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 |
126
+ <!-- generated:begin page=/software/[slug] -->
85
127
 
128
+ _Detail route over `content/en/SoftwareProduct/` — 1 seed page: `product.mdx`._
86
129
  <!-- generated:end -->
87
130
 
88
131
  `/pricing`:
89
132
 
90
133
  <!-- generated:begin page=/pricing -->
91
134
 
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 |
135
+ | # | Section | Component | Copy (first line) |
136
+ | --- | -------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
137
+ | 1 | `pricing` (three-tiers-with-toggle · cardLayout=centered · eyebrow "Pricing" · plans ×3 · billingToggle) | `Pricing` | {Pays for itself in tangible value or outcome} |
138
+ | 2 | `logoCloud` (layout=inline · logos ×3) | `LogoCloud` | Don’t just take our word for it |
139
+ | 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
140
+ | 4 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
141
+ | 5 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | FAQs |
100
142
 
101
143
  <!-- generated:end -->
102
144
 
@@ -104,14 +146,13 @@ The base rows come first, exactly as the base layer and the always-copied overla
104
146
 
105
147
  <!-- generated:begin page=/about -->
106
148
 
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 |
149
+ | # | Section | Component | Copy (first line) |
150
+ | --- | --------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
151
+ | 1 | `content-block` (media-right · imagerySlot=true · eyebrow "About" · 2 CTAs) | `ContentBlock` | {We want you to ability they couldn't do before} |
152
+ | 2 | `team` (with-side-images · eyebrow "Tagline" · members ×5) | `Team` | Our team |
153
+ | 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
154
+ | 4 | `cta` (box · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
155
+ | 5 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | FAQs |
115
156
 
116
157
  <!-- generated:end -->
117
158
 
@@ -119,11 +160,11 @@ The base rows come first, exactly as the base layer and the always-copied overla
119
160
 
120
161
  <!-- generated:begin page=/faq -->
121
162
 
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 |
163
+ | # | Section | Component | Copy (first line) |
164
+ | --- | ------------------------------------------------------- | --------- | ---------------------------------------- |
165
+ | 1 | `hero` (gapBelow=tight · eyebrow "FAQ") | `Hero` | FAQs |
166
+ | 2 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A question your customers actually ask} |
167
+ | 3 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A second group of questions} |
127
168
 
128
169
  <!-- generated:end -->
129
170
 
@@ -131,12 +172,41 @@ The base rows come first, exactly as the base layer and the always-copied overla
131
172
 
132
173
  <!-- generated:begin page=/contact -->
133
174
 
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 … |
175
+ | # | Section | Component | Copy (first line) |
176
+ | --- | ----------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
177
+ | 1 | `hero` (split · eyebrow "Book a Demo" · checklist ×3) | `Hero` | {Ready to achieve a valuable outcome?} |
178
+ | 2 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
179
+ | 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
180
+
181
+ <!-- generated:end -->
182
+
183
+ `/glossary`, `/newsletter`, `/book-a-call` (#6658 D5 — every starter carries them):
184
+
185
+ <!-- generated:begin page=/glossary -->
186
+
187
+ | # | Section | Component | Copy (first line) |
188
+ | --- | ----------------------------------- | --------------- | -------------------------------------------- |
189
+ | 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
190
+ | 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
191
+
192
+ <!-- generated:end -->
193
+
194
+ <!-- generated:begin page=/newsletter -->
195
+
196
+ | # | Section | Component | Copy (first line) |
197
+ | --- | ------------------------------------- | ------------ | ------------------------------------------------ |
198
+ | 1 | `hero` (eyebrow "Newsletter" · 1 CTA) | `Hero` | {Newsletter: what subscribers get and how often} |
199
+ | 2 | `newsletter` | `Newsletter` | Subscribe |
200
+ | 3 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
201
+
202
+ <!-- generated:end -->
203
+
204
+ <!-- generated:begin page=/book-a-call -->
205
+
206
+ | # | Section | Component | Copy (first line) |
207
+ | --- | -------------------------------------- | --------- | ------------------------------------------ |
208
+ | 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
209
+ | 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
140
210
 
141
211
  <!-- generated:end -->
142
212
 
@@ -147,13 +217,20 @@ The base rows come first, exactly as the base layer and the always-copied overla
147
217
  _Code route — no content, no sections._
148
218
  <!-- generated:end -->
149
219
 
220
+ `/sign-up`:
221
+
222
+ <!-- generated:begin page=/sign-up -->
223
+
224
+ _Code route — no content, no sections._
225
+ <!-- generated:end -->
226
+
150
227
  `/privacy`:
151
228
 
152
229
  <!-- generated:begin page=/privacy -->
153
230
 
154
- | # | Section | Component | Copy (first line) |
155
- | --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
156
- | 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Privacy Policy |
231
+ | # | Section | Component | Copy (first line) |
232
+ | --- | ----------------------------------- | ----------------- | ----------------- |
233
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
157
234
 
158
235
  <!-- generated:end -->
159
236
 
@@ -161,9 +238,19 @@ _Code route — no content, no sections._
161
238
 
162
239
  <!-- generated:begin page=/terms -->
163
240
 
164
- | # | Section | Component | Copy (first line) |
165
- | --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
166
- | 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Terms of Service |
241
+ | # | Section | Component | Copy (first line) |
242
+ | --- | ----------------------------------- | ----------------- | ----------------- |
243
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
244
+
245
+ <!-- generated:end -->
246
+
247
+ `/purchase-policy`:
248
+
249
+ <!-- generated:begin page=/purchase-policy -->
250
+
251
+ | # | Section | Component | Copy (first line) |
252
+ | --- | ----------------------------------- | ----------------- | ----------------- |
253
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
167
254
 
168
255
  <!-- generated:end -->
169
256
 
@@ -295,7 +382,22 @@ _Code route — no content, no sections._
295
382
 
296
383
  ### `/projects`, `/projects/<slug>`, `/projects/apply` — CollectionPage / WebPage · schema `ProjectsList` / `Project` · signal-collectors
297
384
 
298
- Project listings and the application flow. Sections: `hero` · `items` · `cta` (list); `hero` · `content-block` · `cta` (detail); `hero` · `step-flow` (apply).
385
+ 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.
386
+
387
+ <!-- generated:begin page=/projects -->
388
+
389
+ | # | Section | Component | Copy (first line) |
390
+ | --- | ------------------------------ | --------- | -------------------------- |
391
+ | 1 | `hero` (centered) | `Hero` | Projects |
392
+ | 2 | `items` (columns=2 · items ×2) | `Items` | Selected engagements |
393
+ | 3 | `cta` (2 CTAs) | `CTA` | Have a project like these? |
394
+
395
+ <!-- generated:end -->
396
+
397
+ <!-- generated:begin page=/projects/[slug] -->
398
+
399
+ _Detail route over `content/en/Project/` — 2 seed pages: `fit-check-funnel.mdx`, `launch-site-in-fourteen-days.mdx`._
400
+ <!-- generated:end -->
299
401
 
300
402
  ### `/waitlist/<experimentId>` — InstrumentCapturePage · schema `Waitlist` · signal-collectors (authed)
301
403
 
@@ -303,7 +405,12 @@ As the slice ships it; no template composition.
303
405
 
304
406
  ### `/thanks/<slug>` — per-form confirmation · signal-collectors
305
407
 
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.
408
+ 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`.
409
+
410
+ <!-- generated:begin page=/thanks/[slug] -->
411
+
412
+ _Detail route over `content/en/ThankYouPage/` — 3 seed pages: `apply.mdx`, `contact.mdx`, `newsletter.mdx`._
413
+ <!-- generated:end -->
307
414
 
308
415
  ## 2a. State and persistence — Pro delta
309
416
 
@@ -330,27 +437,39 @@ Everything in the Free manifest § 2a applies. Pro adds:
330
437
  marketing-site:
331
438
  requires: [marketing, docs-blog, scheduling, signal-collectors]
332
439
  categories: [accounting, legal, hvac, roofing, plumbing, electrical, landscaping, auto-repair, real-estate, technology, medical-specialty]
440
+ shape: organization-product
441
+ design: standard
333
442
  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]" }
443
+ - { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
444
+ - { route: "/software", kind: route }
445
+ - { route: "/software/[slug]", kind: page, contentDir: "content/en/SoftwareProduct" }
446
+ - { route: "/use-cases", kind: page, content: ["content/en/UseCasesList/use-cases.mdx"] }
447
+ - { route: "/use-cases/[slug]", kind: page, contentDir: "content/en/UseCase" }
448
+ - { route: "/pricing", kind: page, content: ["content/en/Pricing/pricing.mdx"] }
449
+ - { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
450
+ - { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
451
+ - { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
452
+ - { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
453
+ - { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
454
+ - { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
455
+ - { route: "/sign-in", kind: route }
456
+ - { route: "/sign-up", kind: route }
457
+ - { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
458
+ - { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
459
+ - { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
460
+ - { route: "/projects", kind: page, content: ["content/en/ProjectsList/projects.mdx"] }
461
+ - { route: "/projects/[slug]", kind: page, contentDir: "content/en/Project" }
462
+ - { route: "/thanks/[slug]", kind: page, contentDir: "content/en/ThankYouPage" }
463
+ - { 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"] }
464
+ - { 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"] }
465
+ - { route: "/meet", kind: route }
466
+ - { route: "/meet/[slug]", kind: route }
467
+ - { route: "/meet/confirmed", kind: route }
468
+ - { route: "/appointments", kind: route }
469
+ - { route: "/flows/[slug]", kind: route }
470
+ - { route: "/flows/[slug]/start", kind: route }
471
+ - { route: "/flows/[slug]/results/[payload]", kind: route }
472
+ - { route: "/reports/[slug]", kind: route }
354
473
  ```
355
474
 
356
475
  <!-- generated:end -->
@@ -372,11 +491,11 @@ Every component the roster rows' seed content composes today (generated):
372
491
 
373
492
  <!-- generated:begin inventory -->
374
493
 
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` |
494
+ | Tier | Used by this template |
495
+ | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
496
+ | Shell | `MarketingShell` |
497
+ | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
498
+ | Sections | `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `Newsletter`, `Pricing`, `Team`, `Testimonials` |
380
499
 
381
500
  <!-- generated:end -->
382
501
 
@@ -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."
@@ -0,0 +1,162 @@
1
+ ---
2
+ name: Standard
3
+ description: The standard design — the black-on-white foundation any shape wears by default: full navigation, a multi-column footer, the document-scroll home.
4
+ colors:
5
+ bg: "#ffffff"
6
+ fg: "#000000"
7
+ surface: "#ffffff"
8
+ surface-secondary: "#ffffff"
9
+ border: "#000000"
10
+ text-muted: "#333333"
11
+ brand: "#000000"
12
+ fg-on-brand: "#ffffff"
13
+ accent: "#000000"
14
+ bg-dark: "#000000"
15
+ fg-dark: "#ffffff"
16
+ border-dark: "#ffffff"
17
+ brand-dark: "#ffffff"
18
+ typography:
19
+ display:
20
+ fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
21
+ fontSize: "3.5rem"
22
+ fontWeight: 700
23
+ lineHeight: 1.1
24
+ letterSpacing: "normal"
25
+ heading-section:
26
+ fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
27
+ fontSize: "3rem"
28
+ fontWeight: 700
29
+ lineHeight: 1.1
30
+ letterSpacing: "normal"
31
+ heading-item:
32
+ fontSize: "2rem"
33
+ fontWeight: 700
34
+ lineHeight: 1.375
35
+ letterSpacing: "normal"
36
+ body:
37
+ fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
38
+ fontSize: "1.125rem"
39
+ fontWeight: 400
40
+ lineHeight: 1.5
41
+ eyebrow:
42
+ fontSize: "0.875rem"
43
+ fontWeight: 600
44
+ lineHeight: 1.4
45
+ letterSpacing: "0.05em"
46
+ rounded:
47
+ button: "0.5rem"
48
+ card: "0.75rem"
49
+ spacing:
50
+ section: "7rem"
51
+ section-mobile: "4rem"
52
+ card: "1.5rem"
53
+ grid: "1.5rem"
54
+ container: "1280px"
55
+ measure: "36rem"
56
+ ---
57
+
58
+ <!--
59
+ Source template: marketing-site-free
60
+ Design: standard
61
+ Version: create-ailk {{CREATE_AILK_VERSION}}
62
+
63
+ This is the `standard` design's DESIGN.md. Its one authored source is
64
+ create-ailk's site-templates/designs/standard/DESIGN.md; every template on
65
+ this design ships a copy of it that differs only in the "Source template"
66
+ line above, and a template installed with `--template <name>` replaces the
67
+ base scaffold's DESIGN.md with its own. The impeccable design skill reads
68
+ it at the start of every design session, so an agent building a new page
69
+ stays on-system.
70
+ Edit the canonical file, never a copy — a test holds every copy to it.
71
+
72
+ The tokens above describe what the site RENDERS today. Colours come from
73
+ content/_site.mdx (`theme.colors`); type, radius and spacing are platform
74
+ defaults a site cannot override yet — see "Where this is heading" below.
75
+ -->
76
+
77
+ # Standard
78
+
79
+ ## Overview
80
+
81
+ The foundation reads like a well-made wireframe: nothing on the page but the words, black on white, with rules where other sites use shadows and colour. It is the look of a site whose owner has not chosen a brand yet and does not pretend otherwise — every placeholder reads as a placeholder, and the structure of the argument is what the visitor sees. A brand is applied on top of it; it is not one.
82
+
83
+ Every page is composed from the AI Launch Kit component library (`@working-theory/ui`). Nothing is hand-built: a page is a list of registered sections, each with a bounded set of variants. Each section is one full-width band with a lot of air around it.
84
+
85
+ ## Colors
86
+
87
+ ### Primary
88
+
89
+ **Black** (`brand` `#000000`) fills the primary button; its label is white. The secondary button is white with a black hairline and black label.
90
+
91
+ ### Neutral
92
+
93
+ Pure white ground (`bg` `#ffffff`), pure black ink for headings (`fg` `#000000`), and near-black `#333333` for body copy — well above AA on white. **Borders are black** (`#000000`): card outlines, the rule under the navigation, the rules between sections and the rule above the footer are all 1px black lines. Cards are white, not tinted (`surface-secondary` is white too). There is no accent colour — `accent` is black.
94
+
95
+ Dark mode inverts: black ground, white ink, white rules, white primary button with black label.
96
+
97
+ ### Named Rules
98
+
99
+ - **Rules, not fills.** A container is drawn with a black hairline on the white ground. Grey fills are reserved for image placeholders.
100
+
101
+ ## Typography
102
+
103
+ System sans throughout; no web font.
104
+
105
+ ### Hierarchy
106
+
107
+ | Role | Size | Weight | Notes |
108
+ | --------------- | -------- | ------ | ------------------------------------------------------------------------------------- |
109
+ | Hero headline | 3.5rem | 700 | Normal tracking, line-height 1.1; 2.5rem below 1024px |
110
+ | Section heading | 3rem | 700 | Normal tracking, line-height 1.1; 2.25rem below 1024px, always under the hero |
111
+ | Item heading | 2rem | 700 | Card, feature and step titles; 1.5rem below 1024px |
112
+ | Body | 1.125rem | 400 | `#333333`, line-height 1.5; section copy capped at 36rem (about 70 characters a line) |
113
+ | Section label | 0.875rem | 600 | Uppercase, +0.05em tracking today — the small label above a section heading |
114
+
115
+ Measured from the rendered scaffold (1440px and 390px wide), not transcribed from tokens. Bold headings at normal tracking follow the foundation's pinned direction (#6493).
116
+
117
+ The small label above a section heading is **kept** as part of this foundation's voice (operator-disposed 2026-09-22) and is headed toward the treatment below.
118
+
119
+ ## Layout
120
+
121
+ Full navigation; a multi-column footer; the default home. The home-only announcement banner is off by default (`layout.announcementBanner`). Every page this site carries is listed in its roster of record, `.ailk-site-manifest.json` at the site root. Shared foundation: a 1280px container, sections at 7rem (4rem below 1024px), card grids at 1.5rem, breakpoints 320 / 768 / 1024 / 1440.
122
+
123
+ ## Shapes
124
+
125
+ Square corners everywhere (`theme.corners: square`) — buttons, cards, the auth card, image placeholders; the tokens above are the base foundation's defaults a site overrides.
126
+
127
+ ## Components
128
+
129
+ ### Buttons
130
+
131
+ Primary: black fill, white label, 0.5rem corners. Secondary: transparent with a black 1px outline and black label. Both are the library `Button`.
132
+
133
+ ### Cards / Containers
134
+
135
+ White panels with a black 1px outline, 0.75rem corners, `card` (1.5rem) padding. The one exception today: the "how it works" steps render as dark filled cards (see below).
136
+
137
+ ### Navigation
138
+
139
+ Full navigation: wordmark left, page links, an outlined and a filled button at the far right. A black hairline separates it from the page. Page links are 16px at weight 400. The two buttons are 42px tall on a 44px touch target and keep the 0.5rem button radius; square corners arrive with the platform radius change below, not in the nav alone (#6508). The Product link opens, on hover or keyboard, a 640px two-column panel whose items each show an icon, a title and a one-line description.
140
+
141
+ ## Where this is heading
142
+
143
+ The foundation's pinned direction is the pacing of a classic wireframe marketing kit — `standardissue.webflow.io` is the reference for rhythm, type scale, spacing density and section pacing only; no image, copy or code is taken from it. The four traits this section used to list as blocked now ship as settings, so the rendered site matches the reference:
144
+
145
+ | Trait | How it is set |
146
+ | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
147
+ | Square corners on buttons, cards and inputs | `theme.corners: square` in `_site.mdx` |
148
+ | Section label in sentence case, bold, no tracking | `theme.eyebrowCase: sentence` |
149
+ | Solid grey image placeholders, no outline | `theme.placeholders: fill` |
150
+ | Bare check and cross marks, no circle badge | `theme.checkmarks: plain` |
151
+ | Plain, uncarded feature and step items | per section: `itemStyle: plain`, and `variant: steps` for an image beside a numbered list |
152
+ | A left hero whose headline wraps at half the container | `measure: narrow` on the hero (pricing); `gapBelow: tight` where a list follows the hero directly |
153
+ | A three-up post grid on the blog index | `blog-list` `variant: grid` (cover · date · read time · title · excerpt · Read more) |
154
+ | A plans section that leads its page | drop the hero; the pricing section owns the `<h1>` (`ownsPageTitle`) |
155
+
156
+ ## Do's and Don'ts
157
+
158
+ - **Do** keep every page built from registered sections. If a section you need does not exist, request it rather than writing one-off markup.
159
+ - **Do** change colours in `content/_site.mdx` `theme.colors`; they reach every section.
160
+ - **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through the theme.
161
+ - **Don't** replace a black rule with a shadow or a grey fill.
162
+ - **Don't** hard-code the "heading toward" values above into a page. They arrive through the platform, or not at all.