create-ailk 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/README.md +112 -10
  2. package/component-catalog.json +798 -49
  3. package/component-catalog.md +9 -6
  4. package/dist/add-module.d.ts +20 -0
  5. package/dist/add-module.js +43 -7
  6. package/dist/add-route.d.ts +56 -0
  7. package/dist/add-route.js +286 -0
  8. package/dist/apply-design-md.d.ts +7 -0
  9. package/dist/apply-design-md.js +50 -0
  10. package/dist/apply-design.d.ts +64 -0
  11. package/dist/apply-design.js +273 -0
  12. package/dist/claude-md.d.ts +111 -0
  13. package/dist/claude-md.js +334 -0
  14. package/dist/cli.js +114 -28
  15. package/dist/derive-architecture.js +41 -36
  16. package/dist/design-compile.d.ts +71 -0
  17. package/dist/design-compile.js +98 -0
  18. package/dist/design-package.d.ts +83 -0
  19. package/dist/design-package.js +468 -0
  20. package/dist/design-presets.d.ts +86 -0
  21. package/dist/design-presets.js +642 -0
  22. package/dist/design-scaffold.d.ts +76 -0
  23. package/dist/design-scaffold.js +220 -0
  24. package/dist/index.d.ts +2 -1
  25. package/dist/index.js +4 -1
  26. package/dist/legacy-nav-renderers.d.ts +45 -0
  27. package/dist/legacy-nav-renderers.js +545 -0
  28. package/dist/lib/auth-secret-file.d.ts +19 -0
  29. package/dist/lib/auth-secret-file.js +112 -0
  30. package/dist/lib/design-checks.d.ts +78 -0
  31. package/dist/lib/design-checks.js +174 -0
  32. package/dist/lib/extract-module-bundle.js +5 -1
  33. package/dist/lib/license-key-files.d.ts +9 -0
  34. package/dist/lib/license-key-files.js +2 -2
  35. package/dist/lib/module-license-gate.d.ts +89 -0
  36. package/dist/lib/module-license-gate.js +171 -12
  37. package/dist/lib/module-tier.d.ts +45 -16
  38. package/dist/lib/module-tier.js +76 -0
  39. package/dist/lib/pro-callout.js +10 -2
  40. package/dist/lib/render-verdict.d.ts +52 -0
  41. package/dist/lib/render-verdict.js +77 -0
  42. package/dist/lib/scaffold-render-sweep.d.ts +105 -0
  43. package/dist/lib/scaffold-render-sweep.js +236 -0
  44. package/dist/module-architecture.d.ts +19 -16
  45. package/dist/module-architecture.js +64 -21
  46. package/dist/parse-args.d.ts +88 -10
  47. package/dist/parse-args.js +272 -21
  48. package/dist/programmatic.d.ts +66 -12
  49. package/dist/programmatic.js +361 -34
  50. package/dist/site-chrome.d.ts +19 -9
  51. package/dist/site-chrome.js +23 -13
  52. package/dist/site-manifest.d.ts +25 -0
  53. package/dist/site-manifest.js +254 -0
  54. package/dist/site-roster.d.ts +41 -0
  55. package/dist/site-roster.js +149 -11
  56. package/dist/starter-grid.d.ts +232 -0
  57. package/dist/starter-grid.js +545 -0
  58. package/dist/surfaces.d.ts +41 -9
  59. package/dist/surfaces.js +268 -92
  60. package/dist/template-manifest.d.ts +65 -29
  61. package/dist/template-manifest.js +161 -382
  62. package/dist/template-names.d.ts +14 -12
  63. package/dist/template-names.js +13 -17
  64. package/package.json +5 -4
  65. package/site-templates/_base/content/en/Feature/feature-1.mdx +69 -0
  66. package/site-templates/_base/content/en/Feature/feature-2.mdx +69 -0
  67. package/site-templates/_base/content/en/Feature/feature-3.mdx +69 -0
  68. package/site-templates/_base/content/en/FeaturesList/features.mdx +91 -0
  69. package/site-templates/_base/content/en/GlossaryList/glossary.mdx +0 -1
  70. package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +0 -1
  71. package/site-templates/_base/content/en/PortfolioItem/sample-four.mdx +105 -0
  72. package/site-templates/_base/content/en/PortfolioItem/sample-one.mdx +34 -0
  73. package/site-templates/_base/content/en/PortfolioItem/sample-three.mdx +94 -0
  74. package/site-templates/_base/content/en/PortfolioItem/sample-two.mdx +45 -0
  75. package/site-templates/_base/content/en/PortfolioList/portfolio.mdx +169 -0
  76. package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +15 -0
  77. package/site-templates/_base/content/en/UseCase/persona-1.mdx +70 -0
  78. package/site-templates/_base/content/en/UseCase/persona-2.mdx +70 -0
  79. package/site-templates/_base/content/en/UseCase/persona-3.mdx +70 -0
  80. package/site-templates/{minimalism-site/TEMPLATE-MANIFEST.json → aliases/minimalism-site.TEMPLATE-MANIFEST.json} +72 -40
  81. package/site-templates/designs/minimalism/DESIGN.md +98 -6
  82. package/site-templates/designs/minimalism/sample/README.md +48 -0
  83. package/site-templates/designs/standard/DESIGN.md +103 -6
  84. package/site-templates/marketing-site/DESIGN.md +103 -6
  85. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +144 -47
  86. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +82 -41
  87. package/site-templates/marketing-site-free/DESIGN.md +103 -6
  88. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +150 -48
  89. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +114 -67
  90. package/site-templates/marketing-site-free/ailk-template.json +1 -1
  91. package/site-templates/marketing-site-free/content/en/NewsletterSignup/newsletter.mdx +59 -0
  92. package/site-templates/marketing-site-free/content/en/Pricing/pricing.mdx +199 -0
  93. package/site-templates/saas-product/DESIGN.md +103 -6
  94. package/site-templates/saas-product/TEMPLATE-MANIFEST.md +9 -1
  95. package/site-templates/{simple-service → shapes/local-business-service}/TEMPLATE-MANIFEST.json +210 -81
  96. package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +356 -0
  97. package/site-templates/shapes/local-business-service/ailk-template.json +10 -0
  98. package/site-templates/{simple-service → shapes/local-business-service}/content/en/AboutPage/about.mdx +4 -4
  99. package/site-templates/shapes/local-business-service/content/en/HomePage/home.mdx +70 -0
  100. package/site-templates/shapes/local-business-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
  101. package/site-templates/shapes/local-business-service/content/en/PortfolioList/portfolio.mdx +171 -0
  102. package/site-templates/{minimalism-site → shapes/local-business-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +7 -8
  103. package/site-templates/shapes/local-business-service/content/en/Service/first-job.mdx +39 -0
  104. package/site-templates/shapes/local-business-service/content/en/Service/second-job.mdx +39 -0
  105. package/site-templates/shapes/local-business-service/content/en/Service/third-job.mdx +39 -0
  106. package/site-templates/shapes/local-business-service/content/en/ServicesList/services.mdx +61 -0
  107. package/site-templates/shapes/local-business-service/provenance.json +4 -0
  108. package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.json +471 -0
  109. package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +354 -0
  110. package/site-templates/shapes/organization-service/ailk-template.json +10 -0
  111. package/site-templates/shapes/organization-service/content/en/AboutPage/about.mdx +38 -0
  112. package/site-templates/shapes/organization-service/content/en/HomePage/home.mdx +85 -0
  113. package/site-templates/shapes/organization-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
  114. package/site-templates/shapes/organization-service/content/en/PortfolioList/portfolio.mdx +171 -0
  115. package/site-templates/shapes/organization-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
  116. package/site-templates/{minimalism-site → shapes/organization-service}/content/en/ServicesList/services.mdx +3 -4
  117. package/site-templates/shapes/organization-service/provenance.json +4 -0
  118. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +478 -0
  119. package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +353 -0
  120. package/site-templates/shapes/person-service/ailk-template.json +10 -0
  121. package/site-templates/shapes/person-service/content/_site.mdx +85 -0
  122. package/site-templates/shapes/person-service/content/en/AboutPage/about.mdx +39 -0
  123. package/site-templates/shapes/person-service/content/en/HomePage/home.mdx +97 -0
  124. package/site-templates/shapes/person-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
  125. package/site-templates/shapes/person-service/content/en/PortfolioList/portfolio.mdx +171 -0
  126. package/site-templates/{simple-service → shapes/person-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +10 -11
  127. package/site-templates/shapes/person-service/content/en/Service/first-engagement.mdx +38 -0
  128. package/site-templates/shapes/person-service/content/en/Service/second-engagement.mdx +38 -0
  129. package/site-templates/shapes/person-service/content/en/Service/third-engagement.mdx +38 -0
  130. package/site-templates/{simple-service → shapes/person-service}/content/en/ServicesList/services.mdx +16 -16
  131. package/site-templates/shapes/person-service/provenance.json +4 -0
  132. package/templates/.claude/rules/architecture.md +7 -0
  133. package/templates/.claude/skills/README.md +5 -3
  134. package/templates/.claude/skills/add-auth/references/env-vars.md +22 -15
  135. package/templates/.claude/skills/add-auth/references/oauth-app-setup.md +3 -2
  136. package/templates/.claude/skills/add-page/SKILL.md +241 -238
  137. package/templates/.claude/skills/add-page/references/page-types.md +85 -72
  138. package/templates/.claude/skills/add-page/scripts/site-pages.mjs +87 -0
  139. package/templates/.claude/skills/add-page/templates/comparison-page.mdx.tmpl +99 -0
  140. package/templates/.claude/skills/add-page/templates/content.mdx.tmpl +8 -18
  141. package/templates/.claude/skills/add-page/templates/flow-landing-page.mdx.tmpl +43 -0
  142. package/templates/.claude/skills/add-page/templates/report-page.mdx.tmpl +52 -0
  143. package/templates/.claude/skills/add-page/templates/reports-list.mdx.tmpl +38 -0
  144. package/templates/.claude/skills/check-site/SKILL.md +23 -0
  145. package/templates/.claude/skills/fill-page/SKILL.md +26 -7
  146. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +1 -1
  147. package/templates/.claude/skills/setup-database/SKILL.md +156 -0
  148. package/templates/.claude/skills/setup-database/scripts/verify-inbox.ts +154 -0
  149. package/templates/.claude/skills/setup-deploy/SKILL.md +64 -32
  150. package/templates/.claude/skills/setup-deploy/references/env-vars-template.md +44 -36
  151. package/templates/.claude/skills/setup-deploy/references/runbook-template.md +58 -102
  152. package/templates/.claude/skills/update-page/SKILL.md +117 -0
  153. package/templates/.claude/skills/update-page/scripts/update-page.ts +640 -0
  154. package/templates/.claude/skills/update-page/templates/redirects.mjs.tmpl +31 -0
  155. package/templates/.claude/skills/upgrade-plan/SKILL.md +12 -8
  156. package/templates/.github/workflows/ci.yml +4 -0
  157. package/templates/.prettierignore +1 -0
  158. package/templates/CLAUDE.md +146 -103
  159. package/templates/DESIGN.md +103 -6
  160. package/templates/README.md +63 -43
  161. package/templates/apps/api/.env.example +2 -1
  162. package/templates/apps/api/CLAUDE.md +3 -2
  163. package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +2 -0
  164. package/templates/apps/api/src/__tests__/server.test.ts +116 -0
  165. package/templates/apps/api/src/config/__tests__/index.test.ts +115 -14
  166. package/templates/apps/api/src/config/index.ts +35 -16
  167. package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +30 -0
  168. package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +96 -0
  169. package/templates/apps/api/src/lib/lead-capture-store.ts +12 -0
  170. package/templates/apps/api/src/lib/lead-delivery.ts +52 -0
  171. package/templates/apps/api/src/lib/stripe.ts +9 -0
  172. package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +140 -0
  173. package/templates/apps/api/src/middleware/auth.ts +54 -0
  174. package/templates/apps/api/src/openapi/spec.ts +63 -12
  175. package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +5 -2
  176. package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +628 -0
  177. package/templates/apps/api/src/routes/checkout/sessions.ts +222 -24
  178. package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +88 -0
  179. package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +100 -0
  180. package/templates/apps/api/src/routes/leads/index.ts +46 -1
  181. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +1 -1
  182. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +5 -1
  183. package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +521 -20
  184. package/templates/apps/api/src/routes/webhooks/stripe.ts +124 -32
  185. package/templates/apps/api/src/server.ts +35 -0
  186. package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +194 -0
  187. package/templates/apps/api/src/services/__tests__/leads-inbox.test.ts +124 -0
  188. package/templates/apps/api/src/services/__tests__/revalidation.test.ts +90 -15
  189. package/templates/apps/api/src/services/checkout-buyer.ts +72 -0
  190. package/templates/apps/api/src/services/lead-routing.ts +140 -30
  191. package/templates/apps/api/src/services/leads-inbox.ts +48 -11
  192. package/templates/apps/api/src/services/revalidation.ts +60 -15
  193. package/templates/apps/mcp/__tests__/parity.test.ts +5 -4
  194. package/templates/apps/mcp/__tests__/tools/create_project.test.ts +30 -24
  195. package/templates/apps/mcp/src/tools/create_project.ts +21 -6
  196. package/templates/apps/mcp/src/tools/purchase.ts +4 -2
  197. package/templates/apps/web/.env.example +13 -0
  198. package/templates/apps/web/CLAUDE.md +22 -28
  199. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +1 -1
  200. package/templates/apps/web/app/[locale]/(authed)/leads/__tests__/page.test.tsx +24 -0
  201. package/templates/apps/web/app/[locale]/(authed)/leads/page.tsx +17 -6
  202. package/templates/apps/web/app/[locale]/[slug]/[detail]/__tests__/page.test.tsx +110 -0
  203. package/templates/apps/web/app/[locale]/[slug]/[detail]/page.tsx +60 -0
  204. package/templates/apps/web/app/[locale]/[slug]/page.tsx +1 -1
  205. package/templates/apps/web/app/[locale]/alternatives/__tests__/page.test.tsx +161 -0
  206. package/templates/apps/web/app/[locale]/alternatives/page.tsx +104 -0
  207. package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +14 -6
  208. package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +10 -9
  209. package/templates/apps/web/app/[locale]/contact/__tests__/contact-form-text.test.ts +32 -0
  210. package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +129 -0
  211. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +227 -84
  212. package/templates/apps/web/app/[locale]/contact/contact-form-text.ts +50 -0
  213. package/templates/apps/web/app/[locale]/contact/contact.actions.ts +73 -20
  214. package/templates/apps/web/app/[locale]/contact/page.tsx +105 -15
  215. package/templates/apps/web/app/[locale]/contact/site-contact-email.ts +54 -0
  216. package/templates/apps/web/app/[locale]/features/[slug]/page.tsx +64 -0
  217. package/templates/apps/web/app/[locale]/features/page.tsx +52 -0
  218. package/templates/apps/web/app/[locale]/{use-cases → for}/[slug]/page.tsx +21 -5
  219. package/templates/apps/web/app/[locale]/for/__tests__/page-renderer-migration.test.tsx +73 -0
  220. package/templates/apps/web/app/[locale]/{use-cases → for}/page.tsx +8 -7
  221. package/templates/apps/web/app/[locale]/glossary/page.tsx +1 -1
  222. package/templates/apps/web/app/[locale]/layout.tsx +65 -17
  223. package/templates/apps/web/app/[locale]/newsletter/__tests__/newsletter.actions.test.ts +75 -0
  224. package/templates/apps/web/app/[locale]/newsletter/__tests__/page.test.tsx +163 -0
  225. package/templates/apps/web/app/[locale]/newsletter/newsletter.actions.ts +66 -0
  226. package/templates/apps/web/app/[locale]/newsletter/page.tsx +106 -14
  227. package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +59 -0
  228. package/templates/apps/web/app/[locale]/{book-a-call → portfolio}/page.tsx +12 -13
  229. package/templates/apps/web/app/[locale]/vs/[slug]/__tests__/page.test.tsx +112 -0
  230. package/templates/apps/web/app/[locale]/vs/[slug]/page.tsx +70 -0
  231. package/templates/apps/web/app/api/revalidate/__tests__/route.test.ts +236 -44
  232. package/templates/apps/web/app/api/revalidate/route.ts +78 -36
  233. package/templates/apps/web/lib/__tests__/site-brand.test.ts +79 -0
  234. package/templates/apps/web/lib/__tests__/site-theme.test.ts +104 -11
  235. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +21 -4
  236. package/templates/apps/web/lib/locale-guard.ts +18 -0
  237. package/templates/apps/web/lib/meet-placeholder.ts +5 -0
  238. package/templates/apps/web/lib/nav-config.ts +50 -37
  239. package/templates/apps/web/lib/site-brand.tsx +13 -9
  240. package/templates/apps/web/lib/site-identity.ts +14 -0
  241. package/templates/apps/web/lib/site-logo.tsx +36 -0
  242. package/templates/apps/web/lib/site-theme.ts +46 -26
  243. package/templates/apps/web/messages/en.json +45 -5
  244. package/templates/apps/web/middleware.ts +28 -4
  245. package/templates/content/_site.mdx +4 -2
  246. package/templates/content/en/BlogList/blog.mdx +37 -16
  247. package/templates/content/en/BookCall/book-a-call.mdx +80 -0
  248. package/templates/content/en/BookCall/onsite-estimate.mdx +56 -0
  249. package/templates/content/en/BookCall/onsite-service.mdx +56 -0
  250. package/templates/content/en/BookCall/start-project.mdx +56 -0
  251. package/templates/content/en/ContactPage/contact.mdx +43 -34
  252. package/templates/content/en/HomePage/home.mdx +10 -22
  253. package/templates/content/en/LandingPage/meet.mdx +59 -0
  254. package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +0 -1
  255. package/templates/content/en/UseCasesList/{use-cases.mdx → for.mdx} +19 -18
  256. package/templates/database/CHANGELOG.md +14 -0
  257. package/templates/database/package.json +1 -1
  258. package/templates/package.json +2 -1
  259. package/templates/tools/check-claude-md.ts +128 -0
  260. package/versions.json +33 -33
  261. package/site-templates/_base/content/en/BookCall/book-call.mdx +0 -53
  262. package/site-templates/_base/content/en/UseCase/first-use-case.mdx +0 -23
  263. package/site-templates/_base/content/en/UseCase/second-use-case.mdx +0 -23
  264. package/site-templates/_base/content/en/UseCase/third-use-case.mdx +0 -23
  265. package/site-templates/minimalism-site/DESIGN.md +0 -162
  266. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +0 -470
  267. package/site-templates/minimalism-site/ailk-template.json +0 -23
  268. package/site-templates/minimalism-site/content/en/AboutPage/about.mdx +0 -110
  269. package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +0 -53
  270. package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +0 -34
  271. package/site-templates/minimalism-site/content/en/FAQPage/faq.mdx +0 -57
  272. package/site-templates/minimalism-site/content/en/LandingPage/referral.mdx +0 -77
  273. package/site-templates/minimalism-site/content/en/LandingPage/reports.mdx +0 -73
  274. package/site-templates/minimalism-site/content/en/ReportPage/annual-letter-2024.mdx +0 -52
  275. package/site-templates/minimalism-site/content/en/ReportPage/field-notes-2023.mdx +0 -52
  276. package/site-templates/minimalism-site/content/en/ReportPage/platform-shift-2025.mdx +0 -52
  277. package/site-templates/minimalism-site/content/en/ReportPage/state-of-the-market-2026.mdx +0 -52
  278. package/site-templates/minimalism-site/flows/referral.flow.json +0 -71
  279. package/site-templates/minimalism-site/provenance.json +0 -4
  280. package/site-templates/simple-service/DESIGN.md +0 -162
  281. package/site-templates/simple-service/TEMPLATE-MANIFEST.md +0 -333
  282. package/site-templates/simple-service/ailk-template.json +0 -11
  283. package/site-templates/simple-service/content/en/BookCall/book-call.mdx +0 -53
  284. package/site-templates/simple-service/content/en/ContactPage/contact.mdx +0 -32
  285. package/site-templates/simple-service/content/en/FAQPage/faq.mdx +0 -56
  286. package/site-templates/simple-service/content/en/HomePage/home.mdx +0 -85
  287. package/site-templates/simple-service/content/en/Service/landscape-design.mdx +0 -40
  288. package/site-templates/simple-service/content/en/Service/lawn-maintenance.mdx +0 -40
  289. package/site-templates/simple-service/content/en/Service/seasonal-cleanup.mdx +0 -40
  290. package/site-templates/simple-service/provenance.json +0 -4
  291. package/templates/.claude/skills/add-page/templates/route.tsx.tmpl +0 -28
  292. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +0 -211
  293. package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +0 -96
  294. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +0 -72
  295. package/templates/content/en/SoftwareProduct/product.mdx +0 -175
  296. /package/site-templates/{minimalism-site → designs/minimalism/sample}/content/en/HomePage/home.mdx +0 -0
  297. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-1.svg +0 -0
  298. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-2.svg +0 -0
  299. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-3.svg +0 -0
  300. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-4.svg +0 -0
  301. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-5.svg +0 -0
  302. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-6.svg +0 -0
  303. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/hero-backdrop.svg +0 -0
  304. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-1.svg +0 -0
  305. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-2.svg +0 -0
  306. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-3.svg +0 -0
  307. /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/wordmark-placeholder.svg +0 -0
  308. /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/first-engagement.mdx +0 -0
  309. /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/second-engagement.mdx +0 -0
  310. /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/third-engagement.mdx +0 -0
@@ -0,0 +1,59 @@
1
+ ---
2
+ type: "NewsletterSignup"
3
+ slug: "newsletter"
4
+ title: "{Start a free newsletter with Substack}"
5
+ description: "{Or upgrade to Pro to capture every subscriber and build your own marketing database.}"
6
+ schema:
7
+ mainEntity:
8
+ "@type": "Offer"
9
+ name: "{Your newsletter name}"
10
+ price: 0
11
+ priceCurrency: "USD"
12
+ sections:
13
+ [
14
+ {
15
+ "id": "hero",
16
+ "type": "hero",
17
+ "data":
18
+ {
19
+ "eyebrow": "Newsletter",
20
+ "headline": "{Start a free newsletter with Substack}",
21
+ "subheadline": "{Or upgrade to Pro to capture every subscriber and build your own marketing database.}",
22
+ "primaryCta":
23
+ { "label": "{Connect Substack}", "href": "https://substack.com" },
24
+ "secondaryCta":
25
+ {
26
+ "label": "{Upgrade to Pro}",
27
+ "href": "https://ailaunchkit.ai/pricing",
28
+ "variant": "outline",
29
+ },
30
+ },
31
+ },
32
+ {
33
+ "id": "faq",
34
+ "type": "faq",
35
+ "data":
36
+ {
37
+ "headline": "FAQs",
38
+ "presentation": "expanded",
39
+ "items":
40
+ [
41
+ {
42
+ "question": "{How often will I hear from you?}",
43
+ "answer": "{Answer in one or two plain sentences}",
44
+ },
45
+ {
46
+ "question": "{What will I get?}",
47
+ "answer": "{Answer in one or two plain sentences}",
48
+ },
49
+ {
50
+ "question": "{Can I unsubscribe?}",
51
+ "answer": "{Answer in one or two plain sentences}",
52
+ },
53
+ ],
54
+ },
55
+ },
56
+ ]
57
+ ---
58
+
59
+ {/* Rendered from frontmatter `sections[]` by the /newsletter route. The Free template has no signup form: the hero points the owner to Substack, or to Pro for subscriber capture. The `schema:` Offer is the page's JSON-LD main entity — a free subscription. Placeholder copy — replace every {brace} with your own words before you launch. */}
@@ -0,0 +1,199 @@
1
+ ---
2
+ type: "Pricing"
3
+ slug: "pricing"
4
+ title: "{Upgrade to Pro with Commerce}"
5
+ description: "{Checkout isn't included on the Free template. Upgrade to Pro with Commerce and take payments on your site with Stripe.}"
6
+ sections:
7
+ [
8
+ {
9
+ "id": "hero",
10
+ "type": "hero",
11
+ "data":
12
+ {
13
+ "variant": "centered",
14
+ "gapBelow": "tight",
15
+ "eyebrow": "Pricing",
16
+ "headline": "{Upgrade to Pro with Commerce}",
17
+ "subheadline": "{Checkout isn't included on the Free template. Upgrade to Pro with Commerce and take payments on your site with Stripe.}",
18
+ "primaryCta":
19
+ {
20
+ "label": "{Add Commerce for SMB}",
21
+ "href": "https://ailaunchkit.ai/pricing",
22
+ },
23
+ "secondaryCta":
24
+ {
25
+ "label": "{Add Commerce for SaaS}",
26
+ "href": "https://ailaunchkit.ai/pricing",
27
+ "variant": "outline",
28
+ },
29
+ },
30
+ },
31
+ {
32
+ "id": "plans",
33
+ "type": "pricing",
34
+ "data":
35
+ {
36
+ "variant": "three-tiers-with-toggle",
37
+ "billingToggle": true,
38
+ "toggleStyle": "switch",
39
+ "gapAbove": "tight",
40
+ "cardLayout": "centered",
41
+ "plans":
42
+ [
43
+ {
44
+ "name": "Basic plan",
45
+ "price": { "monthly": "{price}/mo", "annual": "{price}/yr" },
46
+ "features":
47
+ [
48
+ "{A feature this plan includes}",
49
+ "{A feature this plan includes}",
50
+ "{A feature this plan includes}",
51
+ ],
52
+ "cta": { "label": "{Primary CTA}", "href": "/contact" },
53
+ },
54
+ {
55
+ "name": "Business plan",
56
+ "price": { "monthly": "{price}/mo", "annual": "{price}/yr" },
57
+ "features":
58
+ [
59
+ "{A feature this plan adds}",
60
+ "{A feature this plan includes}",
61
+ "{A feature this plan includes}",
62
+ "{A feature this plan includes}",
63
+ ],
64
+ "cta": { "label": "{Primary CTA}", "href": "/contact" },
65
+ },
66
+ {
67
+ "name": "Enterprise plan",
68
+ "price": { "monthly": "{price}/mo", "annual": "{price}/yr" },
69
+ "features":
70
+ [
71
+ "{A feature this plan adds}",
72
+ "{A feature this plan includes}",
73
+ "{A feature this plan includes}",
74
+ "{A feature this plan includes}",
75
+ "{A feature this plan includes}",
76
+ ],
77
+ "cta": { "label": "{Primary CTA}", "href": "/contact" },
78
+ },
79
+ ],
80
+ },
81
+ },
82
+ {
83
+ "id": "logo-cloud",
84
+ "type": "logoCloud",
85
+ "data":
86
+ {
87
+ "headline": "{Don’t just take our word for it}",
88
+ "headlineStyle": "label",
89
+ "logos":
90
+ [
91
+ {
92
+ "name": "SalesSmyth",
93
+ "src": "/logos/salessmyth.svg",
94
+ "darkSrc": "/logos/salessmyth-light.svg",
95
+ "width": 1118,
96
+ "height": 147,
97
+ },
98
+ {
99
+ "name": "AI Launch Kit",
100
+ "src": "/logos/ai-launch-kit.svg",
101
+ "darkSrc": "/logos/ai-launch-kit-light.svg",
102
+ "width": 1248,
103
+ "height": 144,
104
+ },
105
+ {
106
+ "name": "Atomic Agent",
107
+ "src": "/logos/atomic-agent.svg",
108
+ "darkSrc": "/logos/atomic-agent-light.svg",
109
+ "width": 1320,
110
+ "height": 148,
111
+ },
112
+ ],
113
+ "layout": "inline",
114
+ "treatment": "monochrome",
115
+ },
116
+ },
117
+ {
118
+ "id": "testimonial",
119
+ "type": "testimonials",
120
+ "data":
121
+ {
122
+ "variant": "quote",
123
+ "items":
124
+ [
125
+ {
126
+ "quote": "{A customer quote, in their own words, about the result they got}",
127
+ "author": "{Customer name}",
128
+ "role": "{Their title, their company}",
129
+ },
130
+ ],
131
+ },
132
+ },
133
+ {
134
+ "id": "switch",
135
+ "type": "cta",
136
+ "data":
137
+ {
138
+ "variant": "box",
139
+ "headline": "{Switch to your product in time amount or less}",
140
+ "description": "{You shouldn't have to experience a painful problem. With your product, you can finally achieve a value outcome or get a big improvement.}",
141
+ "checklist":
142
+ ["No credit card required", "Cancel any time", "Live chat support"],
143
+ "primaryCta": { "label": "{Primary CTA}", "href": "/contact" },
144
+ "secondaryCta":
145
+ {
146
+ "label": "{Secondary CTA}",
147
+ "href": "/pricing",
148
+ "variant": "outline",
149
+ },
150
+ "closingLine": "{Social Proof goes here}",
151
+ },
152
+ },
153
+ {
154
+ "id": "faq",
155
+ "type": "faq",
156
+ "data":
157
+ {
158
+ "headline": "{FAQs}",
159
+ "description": "{One sentence that invites visitors to ask what this list does not answer}",
160
+ "actions":
161
+ [
162
+ {
163
+ "kind": "button",
164
+ "label": "Contact",
165
+ "href": "/contact",
166
+ "variant": "outline",
167
+ },
168
+ ],
169
+ "presentation": "accordion",
170
+ "initialOpen": "none",
171
+ "items":
172
+ [
173
+ {
174
+ "question": "{A question your customers actually ask}",
175
+ "answer": "{Answer the question in two or three plain sentences}",
176
+ },
177
+ {
178
+ "question": "{A question your customers actually ask}",
179
+ "answer": "{Answer the question in two or three plain sentences}",
180
+ },
181
+ {
182
+ "question": "{A question your customers actually ask}",
183
+ "answer": "{Answer the question in two or three plain sentences}",
184
+ },
185
+ {
186
+ "question": "{A question your customers actually ask}",
187
+ "answer": "{Answer the question in two or three plain sentences}",
188
+ },
189
+ {
190
+ "question": "{A question your customers actually ask}",
191
+ "answer": "{Answer the question in two or three plain sentences}",
192
+ },
193
+ ],
194
+ },
195
+ },
196
+ ]
197
+ ---
198
+
199
+ {/* Rendered from frontmatter `sections[]`. Seed content — replace the plan names, prices and features above with your own before you launch. */}
@@ -1,6 +1,6 @@
1
1
  ---
2
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.
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
4
  colors:
5
5
  bg: "#ffffff"
6
6
  fg: "#000000"
@@ -15,6 +15,19 @@ colors:
15
15
  fg-dark: "#ffffff"
16
16
  border-dark: "#ffffff"
17
17
  brand-dark: "#ffffff"
18
+ text-muted-dark: "#cccccc"
19
+ treatments:
20
+ corners: square
21
+ eyebrowCase: sentence
22
+ placeholders: fill
23
+ checkmarks: plain
24
+ layout:
25
+ nav: full
26
+ footer: columns
27
+ announcementBanner: false
28
+ home: default
29
+ copy:
30
+ density: standard
18
31
  typography:
19
32
  display:
20
33
  fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
@@ -69,9 +82,12 @@ spacing:
69
82
  stays on-system.
70
83
  Edit the canonical file, never a copy — a test holds every copy to it.
71
84
 
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.
85
+ The tokens above describe what the site RENDERS today. The design's own
86
+ colours and shape knobs live in content/_site.mdx `theme:`, which
87
+ `create-ailk apply-design` replaces wholesale; the owner's brand colours and
88
+ fonts live beside it in `brand.colors` and `brand.fonts`, which applying a
89
+ design never rewrites. Radius and spacing are platform defaults a site
90
+ cannot override yet — see "Where this is heading" below.
75
91
  -->
76
92
 
77
93
  # Standard
@@ -84,6 +100,27 @@ Every page is composed from the AI Launch Kit component library (`@working-theor
84
100
 
85
101
  ## Colors
86
102
 
103
+ <!-- generated:begin colors -->
104
+
105
+ | Key | Value | Compiles to |
106
+ | ------------------- | --------- | -------------------------------------------------------------------------------------------------------------- |
107
+ | `bg` | `#ffffff` | `light.bg` |
108
+ | `fg` | `#000000` | `light.text` |
109
+ | `surface` | `#ffffff` | `light.surface` |
110
+ | `surface-secondary` | `#ffffff` | `light.bgMuted` |
111
+ | `border` | `#000000` | `light.border` |
112
+ | `text-muted` | `#333333` | `light.textMuted` |
113
+ | `brand` | `#000000` | `light.primary` |
114
+ | `fg-on-brand` | `#ffffff` | `light.primaryFg` |
115
+ | `accent` | `#000000` | `light.accent` |
116
+ | `bg-dark` | `#000000` | `dark.bg`, `dark.bgMuted` (fallback of L1), `dark.surface` (fallback of L2), `dark.primaryFg` (fallback of L4) |
117
+ | `fg-dark` | `#ffffff` | `dark.text` |
118
+ | `border-dark` | `#ffffff` | `dark.border` |
119
+ | `brand-dark` | `#ffffff` | `dark.primary`, `dark.accent` (fallback of L5) |
120
+ | `text-muted-dark` | `#cccccc` | `dark.textMuted` |
121
+
122
+ <!-- generated:end -->
123
+
87
124
  ### Primary
88
125
 
89
126
  **Black** (`brand` `#000000`) fills the primary button; its label is white. The secondary button is white with a black hairline and black label.
@@ -100,6 +137,18 @@ Dark mode inverts: black ground, white ink, white rules, white primary button wi
100
137
 
101
138
  ## Typography
102
139
 
140
+ <!-- generated:begin typography -->
141
+
142
+ | Role | Family | Size | Weight | Line height | Tracking |
143
+ | ----------------- | ------------------------------------------------------------------------ | ---------- | ------ | ----------- | -------- |
144
+ | `display` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3.5rem` | 700 | 1.1 | `normal` |
145
+ | `heading-section` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3rem` | 700 | 1.1 | `normal` |
146
+ | `heading-item` | — | `2rem` | 700 | 1.375 | `normal` |
147
+ | `body` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `1.125rem` | 400 | 1.5 | — |
148
+ | `eyebrow` | — | `0.875rem` | 600 | 1.4 | `0.05em` |
149
+
150
+ <!-- generated:end -->
151
+
103
152
  System sans throughout; no web font.
104
153
 
105
154
  ### Hierarchy
@@ -118,10 +167,53 @@ The small label above a section heading is **kept** as part of this foundation's
118
167
 
119
168
  ## Layout
120
169
 
170
+ <!-- generated:begin layout -->
171
+
172
+ | Knob | Value |
173
+ | -------------------- | --------- |
174
+ | `nav` | `full` |
175
+ | `footer` | `columns` |
176
+ | `announcementBanner` | `false` |
177
+ | `home` | `default` |
178
+
179
+ | Spacing | Value |
180
+ | ---------------- | -------- |
181
+ | `section` | `7rem` |
182
+ | `section-mobile` | `4rem` |
183
+ | `card` | `1.5rem` |
184
+ | `grid` | `1.5rem` |
185
+ | `container` | `1280px` |
186
+ | `measure` | `36rem` |
187
+
188
+ <!-- generated:end -->
189
+
121
190
  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
191
 
192
+ ## Copy
193
+
194
+ <!-- generated:begin copy -->
195
+
196
+ Copy density: standard — pages carry the ordinary amount of body copy for their section.
197
+ <!-- generated:end -->
198
+
123
199
  ## Shapes
124
200
 
201
+ <!-- generated:begin shapes -->
202
+
203
+ | Rounded | Value |
204
+ | -------- | --------- |
205
+ | `button` | `0.5rem` |
206
+ | `card` | `0.75rem` |
207
+
208
+ | Treatment | Value |
209
+ | ------------------------- | ---------- |
210
+ | `treatments.corners` | `square` |
211
+ | `treatments.eyebrowCase` | `sentence` |
212
+ | `treatments.placeholders` | `fill` |
213
+ | `treatments.checkmarks` | `plain` |
214
+
215
+ <!-- generated:end -->
216
+
125
217
  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
218
 
127
219
  ## Components
@@ -156,7 +248,12 @@ The foundation's pinned direction is the pacing of a classic wireframe marketing
156
248
  ## Do's and Don'ts
157
249
 
158
250
  - **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.
251
+ - **Do** set your brand colours (`primary`, `primaryFg`, `accent`, per mode) in `content/_site.mdx` `brand.colors` and your fonts (`display`, `body`) in `brand.fonts`; they reach every section and survive applying another design, which replaces `theme:`.
252
+ - **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through `brand.colors`.
161
253
  - **Don't** replace a black rule with a shadow or a grey fill.
162
254
  - **Don't** hard-code the "heading toward" values above into a page. They arrive through the platform, or not at all.
255
+
256
+ ## Revisions
257
+
258
+ - **2026-09-24 — tile hover is outline-only (operator ruling, /build-starter live pass, #6687).** A comparison tile (`items` in `variant: tile`) hovers by shifting its border to the accent only — no lift, no glow — matching the Positionary `/alternatives` ruling of 2026-08-29. Expressed as the bounded `tileHover: "outline"` option (Card `wash-outline`); the library default `lift` is unchanged for every other site.
259
+ - **2026-09-25 — the before-after section's rulings (operator, /build-starter live pass, #6687).** One layout, not two variants: a panel body is an image or rows of content under the same label bar. The label bar is the tone's fill (brand → black bar, white text) at the heading-4 role; a `neutral` panel keeps a white bar. The view selector is underline tabs with the underline under the current tab only (no full-width baseline), active black, inactive muted, black on hover. The pager is a ghost "‹ Previous" at the left edge and "Next ›" at the right edge. The catalyst column carries no icon tile — it starts at the arrow, or at an image when one is set. No back-to-all link and no tag chips on the seed pages.
@@ -22,13 +22,21 @@
22
22
 
23
23
  ## 2. Roster — the base rows, as the registry declares them
24
24
 
25
- `saas-product` reuses `TEMPLATE_BASE_ROSTER` (`template-manifest.ts`) and declares no rows of its own. The ten base routes:
25
+ `saas-product` reuses `TEMPLATE_BASE_ROSTER` (`template-manifest.ts`) plus the two portfolio rows every paid roster appends (`PORTFOLIO_ROWS`, #6687 — operator disposition 2026-09-24, Pro and up). The ten base routes:
26
26
 
27
27
  ```
28
28
  / · /how-it-works · /features · /pricing · /about
29
29
  /faq · /contact · /sign-in · /privacy · /terms
30
30
  ```
31
31
 
32
+ The portfolio rows — before/after project comparisons; the detail row's `contentDir` installs the seeds (#6646 D1):
33
+
34
+ ```
35
+ /portfolio PortfolioList · schema CollectionPage — the hub on the /alternatives stack
36
+ /portfolio/<slug> PortfolioItem · schema WebPage + CreativeWork — one `before-after` section per comparison
37
+ (seed pages sample-one · sample-two · sample-three · sample-four, `_base` layer)
38
+ ```
39
+
32
40
  Module-contributed rows arrive from `MODULE_SLICES[*].pageContributions` and are listed here so the page set reads as one:
33
41
 
34
42
  ```