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,353 @@
1
+ # Template manifest — `person-service`
2
+
3
+ > The Free `person-service` shape starter (#6758, roadmap § 6 Phase 2) — a solo consultant's site, scaffolded keyless with no `--template` alias of its own. Generated file: the regions between `<!-- generated:begin <id> -->` and `<!-- generated:end -->` are produced by `scripts/build-template-manifest.mjs --template person-service --check` from the composed layer stack (this tree → `_base` → the always-copied overlay), each roster row's MDX `sections[]`, and `component-catalog.json`. Everything outside the markers is written by hand.
4
+
5
+ | Field | Value |
6
+ | ---------------------- | ---------------------------------------------------------------------------------------------- |
7
+ | Starter | `person-service` (a `SHAPE_STARTERS` entry, not a `--template` alias) |
8
+ | Level | Free (derived from `requires` — `marketing` only; never declared) |
9
+ | `requires` | `[marketing]` |
10
+ | `extends` | `_base` — lineage only, never level |
11
+ | Delivery | keyless — ships in the tarball at `site-templates/shapes/person-service/` |
12
+ | Sample content posture | every line of copy is a **placeholder**; no seed carries a price (D4) |
13
+ | Entity preset | primary `Person`; optional `Organization` secondary, off by default (a `_site.mdx` toggle, D7) |
14
+
15
+ ## 1. Chrome
16
+
17
+ This starter declares **no `layout` block** — the default marketing chrome.
18
+
19
+ ### Layout knobs (#5612)
20
+
21
+ <!-- generated:begin layout -->
22
+
23
+ | Knob | Value |
24
+ | -------------------- | --------- |
25
+ | `nav` | `full` |
26
+ | `footer` | `columns` |
27
+ | `announcementBanner` | `false` |
28
+ | `home` | `default` |
29
+
30
+ <!-- generated:end -->
31
+
32
+ ### Theme (locked)
33
+
34
+ <!-- generated:begin theme -->
35
+
36
+ | Setting | Value |
37
+ | ------------------------ | ---------- |
38
+ | `corners` | `square` |
39
+ | `eyebrowCase` | `sentence` |
40
+ | `placeholders` | `fill` |
41
+ | `checkmarks` | `plain` |
42
+ | `colors.light.bg` | `#ffffff` |
43
+ | `colors.light.bgMuted` | `#ffffff` |
44
+ | `colors.light.surface` | `#ffffff` |
45
+ | `colors.light.border` | `#000000` |
46
+ | `colors.light.text` | `#000000` |
47
+ | `colors.light.textMuted` | `#333333` |
48
+ | `colors.light.primary` | `#000000` |
49
+ | `colors.light.primaryFg` | `#ffffff` |
50
+ | `colors.light.accent` | `#000000` |
51
+ | `colors.dark.bg` | `#000000` |
52
+ | `colors.dark.bgMuted` | `#000000` |
53
+ | `colors.dark.surface` | `#000000` |
54
+ | `colors.dark.border` | `#ffffff` |
55
+ | `colors.dark.text` | `#ffffff` |
56
+ | `colors.dark.textMuted` | `#cccccc` |
57
+ | `colors.dark.primary` | `#ffffff` |
58
+ | `colors.dark.primaryFg` | `#000000` |
59
+ | `colors.dark.accent` | `#ffffff` |
60
+
61
+ <!-- generated:end -->
62
+
63
+ ## 2. Pages
64
+
65
+ One `page=<route>` region per roster row, generated from the seed file the composed layer stack lands for that route.
66
+
67
+ `/`:
68
+
69
+ <!-- generated:begin page=/ -->
70
+
71
+ | # | Section | Component | Copy (first line) |
72
+ | --- | ----------------------------------------------------- | -------------- | -------------------------------------------------------- |
73
+ | 1 | `hero` (centered · eyebrow "{Your Name}" · 2 CTAs) | `Hero` | {One line on the outcome you deliver for clients} |
74
+ | 2 | `items` (columns=3 · items ×3) | `Items` | What I do |
75
+ | 3 | `content-block` (narrow · eyebrow "About me" · 1 CTA) | `ContentBlock` | {A short line on how you got here and who you work with} |
76
+ | 4 | `cta` (minimal · 2 CTAs) | `CTA` | Ready to talk about your project? |
77
+
78
+ <!-- generated:end -->
79
+
80
+ `/services`:
81
+
82
+ <!-- generated:begin page=/services -->
83
+
84
+ | # | Section | Component | Copy (first line) |
85
+ | --- | -------------------------------------- | --------- | --------------------------- |
86
+ | 1 | `hero` (centered · eyebrow "Services") | `Hero` | Three ways to work together |
87
+ | 2 | `items` (columns=3 · items ×3) | `Items` | Engagements |
88
+ | 3 | `cta` (minimal · 1 CTA) | `CTA` | Not sure which one? |
89
+
90
+ <!-- generated:end -->
91
+
92
+ `/services/[slug]`:
93
+
94
+ <!-- generated:begin page=/services/[slug] -->
95
+
96
+ _Detail route over `content/en/Service/` — 3 seed pages: `first-engagement.mdx`, `second-engagement.mdx`, `third-engagement.mdx`._
97
+ <!-- generated:end -->
98
+
99
+ `/for` (the persona hub — every shape carries the family now, #6878 D7):
100
+
101
+ <!-- generated:begin page=/for -->
102
+
103
+ | # | Section | Component | Copy (first line) |
104
+ | --- | -------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
105
+ | 1 | `hero` (eyebrow "Customers" · 2 CTAs) | `Hero` | {Customers: who your product or service is for} |
106
+ | 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product or service to do} |
107
+ | 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
108
+ | 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
109
+ | 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product or service in time amount or less} |
110
+ | 6 | `faq` (accordion · items ×5 · 1 CTA · initialOpen first) | `FAQ` | FAQs |
111
+
112
+ <!-- generated:end -->
113
+
114
+ `/for/[slug]`:
115
+
116
+ <!-- generated:begin page=/for/[slug] -->
117
+
118
+ _Detail route over `content/en/UseCase/` — 3 seed pages: `persona-1.mdx`, `persona-2.mdx`, `persona-3.mdx`._
119
+ <!-- generated:end -->
120
+
121
+ `/about`:
122
+
123
+ <!-- generated:begin page=/about -->
124
+
125
+ | # | Section | Component | Copy (first line) |
126
+ | --- | ------------------------------------------------------------- | -------------- | ----------------------------------------- |
127
+ | 1 | `content-block` (narrow · imagerySlot=true · eyebrow "About") | `ContentBlock` | {How you got here, and who you work with} |
128
+ | 2 | `cta` (minimal · 2 CTAs) | `CTA` | Work with me |
129
+
130
+ <!-- generated:end -->
131
+
132
+ `/contact` (always-copied overlay seed):
133
+
134
+ <!-- generated:begin page=/contact -->
135
+
136
+ | # | Section | Component | Copy (first line) |
137
+ | --- | --------------------------------------------------------- | --------- | ----------------------------------------- |
138
+ | 1 | `hero` (split · eyebrow "Contact" · checklist ×3 · 1 CTA) | `Hero` | Get every message in your email, free |
139
+ | 2 | `items` (tiles · columns=2 · items ×4) | `Items` | {Add appointment scheduling to your site} |
140
+
141
+ <!-- generated:end -->
142
+
143
+ `/faq` (always-copied overlay seed):
144
+
145
+ <!-- generated:begin page=/faq -->
146
+
147
+ | # | Section | Component | Copy (first line) |
148
+ | --- | ------------------------------------------------------- | --------- | ---------------------------------------- |
149
+ | 1 | `hero` (gapBelow=tight · eyebrow "FAQ") | `Hero` | FAQs |
150
+ | 2 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A question your customers actually ask} |
151
+ | 3 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A second group of questions} |
152
+
153
+ <!-- generated:end -->
154
+
155
+ `/glossary`, `/newsletter` (base-layer seeds every starter carries, #6658 D5 — `/newsletter` is this tree's own byte copy of the Free newsletter, D4/D9), plus the always-copied overlay's `/meet` hub and `/meet/[slug]` BookCall detail seeds (#6897 D3-D5):
156
+
157
+ <!-- generated:begin page=/glossary -->
158
+
159
+ | # | Section | Component | Copy (first line) |
160
+ | --- | ----------------------------------- | --------------- | -------------------------------------------- |
161
+ | 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
162
+ | 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
163
+
164
+ <!-- generated:end -->
165
+
166
+ <!-- generated:begin page=/newsletter -->
167
+
168
+ | # | Section | Component | Copy (first line) |
169
+ | --- | -------------------------------------- | --------- | --------------------------------------- |
170
+ | 1 | `hero` (eyebrow "Newsletter" · 2 CTAs) | `Hero` | {Start a free newsletter with Substack} |
171
+ | 2 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
172
+
173
+ <!-- generated:end -->
174
+
175
+ <!-- generated:begin page=/meet -->
176
+
177
+ | # | Section | Component | Copy (first line) |
178
+ | --- | -------------------------------------- | --------- | --------------------- |
179
+ | 1 | `hero` (eyebrow "Meet") | `Hero` | {Book a time with us} |
180
+ | 2 | `items` (tiles · columns=2 · items ×4) | `Items` | |
181
+
182
+ <!-- generated:end -->
183
+
184
+ <!-- generated:begin page=/meet/[slug] -->
185
+
186
+ | # | Section | Component | Copy (first line) |
187
+ | --- | -------------------------------------- | -------------- | ------------------------------------------------ |
188
+ | 1 | `hero` (eyebrow "Book a Call" · 1 CTA) | `Hero` | Book a Call |
189
+ | 2 | `cta` (box · 1 CTA) | `CTA` | {What booking a call would do for your visitors} |
190
+ | 3 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
191
+ | 4 | `content-block` (1 CTA) | `ContentBlock` | |
192
+
193
+ <!-- generated:end -->
194
+
195
+ `/sign-in`, `/sign-up` (code routes — the `SignInCard` island and the sign-up form inside the locale layout, whose header links both; listed so the manifest is a complete install record, #6797):
196
+
197
+ <!-- generated:begin page=/sign-in -->
198
+
199
+ _Code route — no content, no sections._
200
+ <!-- generated:end -->
201
+
202
+ <!-- generated:begin page=/sign-up -->
203
+
204
+ _Code route — no content, no sections._
205
+ <!-- generated:end -->
206
+
207
+ `/purchase-policy` (this tree's own service-shape override — cancellation and refunds, D4):
208
+
209
+ <!-- generated:begin page=/purchase-policy -->
210
+
211
+ | # | Section | Component | Copy (first line) |
212
+ | --- | ----------------------------------- | ----------------- | ----------------- |
213
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
214
+
215
+ <!-- generated:end -->
216
+
217
+ `/privacy`, `/terms` (base-layer seeds):
218
+
219
+ <!-- generated:begin page=/privacy -->
220
+
221
+ | # | Section | Component | Copy (first line) |
222
+ | --- | ----------------------------------- | ----------------- | ----------------- |
223
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
224
+
225
+ <!-- generated:end -->
226
+
227
+ <!-- generated:begin page=/terms -->
228
+
229
+ | # | Section | Component | Copy (first line) |
230
+ | --- | ----------------------------------- | ----------------- | ----------------- |
231
+ | 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
232
+
233
+ <!-- generated:end -->
234
+
235
+ `/blog` (the Free teaser row, § 1.9 — served by the generic `[slug]` route over the always-copied overlay's `BlogList/blog.mdx`):
236
+
237
+ <!-- generated:begin page=/blog -->
238
+
239
+ | # | Section | Component | Copy (first line) |
240
+ | --- | ------------------------------------------------------------ | -------------- | ----------------------------------------------------------------- |
241
+ | 1 | `hero` (centered · gapBelow=tight · eyebrow "Blog" · 2 CTAs) | `Hero` | Get free blog/docs from Fumadocs |
242
+ | 2 | `blog-list` (grid) | `BlogList` | |
243
+ | 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
244
+ | 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
245
+
246
+ <!-- generated:end -->
247
+
248
+ `/portfolio` (this tree's own override of the `_base` seed — re-voiced for one person, both CTAs `/meet/book-a-call` and `/contact`, D4):
249
+
250
+ <!-- generated:begin page=/portfolio -->
251
+
252
+ | # | Section | Component | Copy (first line) |
253
+ | --- | ---------------------------------------------------------------------------------------------------------- | --------- | ------------------------------------------ |
254
+ | 1 | `hero` (default · gapBelow=tight · size=display · surface=wash-secondary · eyebrow "{Portfolio}" · 2 CTAs) | `Hero` | {My work, before and after.} |
255
+ | 2 | `items` (tile · surface=none · columns=2 · items ×4) | `Items` | |
256
+ | 3 | `cta` (beam · chips ×3 · 2 CTAs) | `CTA` | {Is your project the before or the after?} |
257
+ | 4 | `faq` (centered · surface=gray-100 · accordion · items ×3 · initialOpen first) | `FAQ` | Frequently Asked Questions |
258
+
259
+ <!-- generated:end -->
260
+
261
+ `/portfolio/[slug]`:
262
+
263
+ <!-- generated:begin page=/portfolio/[slug] -->
264
+
265
+ _Detail route over `content/en/PortfolioItem/` — 4 seed pages: `sample-four.mdx`, `sample-one.mdx`, `sample-three.mdx`, `sample-two.mdx`._
266
+ <!-- generated:end -->
267
+
268
+ ### 3a. Differences from the standard `person-service` derivation
269
+
270
+ The standard page set for this shape (`derive-roster.py --shape person-service --primary-goal generate-leads --registry packages/schema/src/registry/entries.ts`, harness commit `7bdaf148e1b0e639cd90a80008955e55cc4aa2b5`) is 27 rows, `mainEntity: Person`. This starter's roster is that set minus the standard rows the table below drops, plus the rows the table after it adds, each with a reason.
271
+
272
+ **Standard rows dropped:**
273
+
274
+ | Standard row | Reason |
275
+ | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
276
+ | `ProjectsList` · `Project` | the portfolio pair (`/portfolio`) is the proof of past work; `/projects` is the paid signal-collectors sample listing |
277
+ | `Pricing` | a consultant sells named engagements, each priced on its own `Service` page or quoted on a call — not a pricing table |
278
+ | `CaseStudiesList` · `CaseStudy` · `TestimonialsList` · `ClientsList` | proof pages need real clients (#6658's reason for Free, unchanged); the portfolio pages carry placeholder before/after proof |
279
+ | `EventsList` · `Event` · `DownloadsList` | a placeholder starter has no events or downloads |
280
+ | `ResourcesHub` · `ResourceDetail` · `HowTo` · `Whitepaper` | the Resources content system is the goal-driven default a site grows into, not a starter page |
281
+
282
+ **Rows added:**
283
+
284
+ | Row added | Reason |
285
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
286
+ | `PurchasePolicyPage` | every shape carries one purchase policy with its shape's sections — service: cancellation and refunds (#6646 D3, contract R2.3) |
287
+ | `PortfolioList` · `PortfolioItem` | the portfolio pair belongs to every shape's standard roster (operator, 2026-09-25; roadmap § 4) |
288
+ | `BlogList` | every Free scaffold's nav links `/blog` unconditionally (`renderNavConfig`, operator ruling 2026-09-23); the Free teaser serves it, as on organization-product (#6753 D3) |
289
+ | `LandingPage` | the Free `/meet` meeting-types hub is a LandingPage seed, the same generic `[slug]` route serves it through (#6897 D3); the four `/meet/[slug]` BookCall detail seeds ride the `BookCall` type already in the standard roster |
290
+
291
+ `|S − D| = 13` and `|R| = 18`.
292
+
293
+ `/sign-in` and `/sign-up` are also rostered (#6797) — code routes (`kind: route`) with no page type, so they sit outside this set equation: the locale layout's header links both, and the roster of record lists every page the scaffold serves.
294
+
295
+ ## 4. Roster, as the registry declares it
296
+
297
+ `person-service` is a `SHAPE_STARTERS` entry, not a declared `--template` alias: `TEMPLATE_MANIFESTS` and `RECOGNIZED_TEMPLATES` never carry its name (NFR-2). The merged roster, as the registry composes it:
298
+
299
+ <!-- generated:begin roster -->
300
+
301
+ ```
302
+ person-service:
303
+ requires: [marketing]
304
+ categories: [consulting]
305
+ shape: person-service
306
+ design: standard
307
+ roster:
308
+ - { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
309
+ - { route: "/services", kind: page, content: ["content/en/ServicesList/services.mdx"] }
310
+ - { route: "/services/[slug]", kind: page, contentDir: "content/en/Service" }
311
+ - { route: "/for", kind: page, content: ["content/en/UseCasesList/for.mdx"] }
312
+ - { route: "/for/[slug]", kind: page, contentDir: "content/en/UseCase" }
313
+ - { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
314
+ - { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
315
+ - { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
316
+ - { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
317
+ - { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
318
+ - { route: "/sign-in", kind: route }
319
+ - { route: "/sign-up", kind: route }
320
+ - { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
321
+ - { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
322
+ - { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
323
+ - { route: "/blog", kind: page, content: ["content/en/BlogList/blog.mdx"] }
324
+ - { route: "/meet", kind: page, content: ["content/en/LandingPage/meet.mdx"] }
325
+ - { route: "/meet/[slug]", kind: page, content: ["content/en/BookCall/book-a-call.mdx", "content/en/BookCall/onsite-estimate.mdx", "content/en/BookCall/start-project.mdx", "content/en/BookCall/onsite-service.mdx"] }
326
+ - { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
327
+ - { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
328
+ ```
329
+
330
+ <!-- generated:end -->
331
+
332
+ By source:
333
+
334
+ ```
335
+ starter: / · /services · /services/<slug> · /about · /contact · /faq
336
+ /glossary · /newsletter · /sign-in · /sign-up
337
+ /purchase-policy · /privacy · /terms · /blog · /meet · /meet/<slug>
338
+ /portfolio · /portfolio/<slug>
339
+ ```
340
+
341
+ Every row is module-less: `requires` is `[marketing]` alone, so `mergeRoster` contributes nothing beyond this tree's own seventeen rows.
342
+
343
+ ## 5. Component inventory
344
+
345
+ <!-- generated:begin inventory -->
346
+
347
+ | Tier | Used by this template |
348
+ | -------- | -------------------------------------------------------------------------------------------------------------------------- |
349
+ | Shell | `MarketingShell` |
350
+ | Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
351
+ | Sections | `BlogList`, `ContentBlock`, `CTA`, `DocumentChassis`, `FAQ`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `Testimonials` |
352
+
353
+ <!-- generated:end -->
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "person-service",
3
+ "requires": ["marketing"],
4
+ "extends": "_base",
5
+ "installMap": {
6
+ "provenance.json": ".ailk-template.json",
7
+ "TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json"
8
+ },
9
+ "postInstall": "Starter person-service installed. Its /faq, /contact, /blog, /meet and its four /meet/<slug> seed pages came with the always-copied overlay; /glossary, /newsletter, /privacy and /terms with the base layer it extends (content/en/). This tree's own /, /about, /services (+ three engagements), /purchase-policy and /portfolio pages are its own compositions, written for one person. Every line of copy is a placeholder \u2014 replace it before you launch."
10
+ }
@@ -0,0 +1,85 @@
1
+ ---
2
+ version: "1"
3
+ siteName: "Your Name"
4
+ baseUrl: https://{{COMPANY_DOMAIN}}
5
+ defaultLocale: en
6
+ # /contact shows this address instead of the form when the site cannot take
7
+ # messages (no database and no email key in production).
8
+ contactEmail: "hello@{{COMPANY_DOMAIN}}"
9
+ siteIdentity:
10
+ kind: Person
11
+ name: "Your Name"
12
+ url: https://{{COMPANY_DOMAIN}}
13
+ jobTitle: "{Your title — for example, independent consultant}"
14
+ description: >
15
+ {One or two sentences on what you do and for whom. Answer engines read
16
+ this as your canonical self-description.}
17
+ sameAs: []
18
+ # secondary:
19
+ # kind: Organization
20
+ # name: "{{COMPANY_NAME}}"
21
+ # url: https://{{COMPANY_DOMAIN}}
22
+ analytics:
23
+ vercelAnalytics: false
24
+ theme:
25
+ corners: square
26
+ eyebrowCase: sentence
27
+ placeholders: fill
28
+ checkmarks: plain
29
+ colors:
30
+ light:
31
+ bg: "#ffffff"
32
+ bgMuted: "#ffffff"
33
+ surface: "#ffffff"
34
+ border: "#000000"
35
+ text: "#000000"
36
+ textMuted: "#333333"
37
+ primary: "#000000"
38
+ primaryFg: "#ffffff"
39
+ accent: "#000000"
40
+ dark:
41
+ bg: "#000000"
42
+ bgMuted: "#000000"
43
+ surface: "#000000"
44
+ border: "#ffffff"
45
+ text: "#ffffff"
46
+ textMuted: "#cccccc"
47
+ primary: "#ffffff"
48
+ primaryFg: "#000000"
49
+ accent: "#ffffff"
50
+ ---
51
+
52
+ <!--
53
+ This file is your site's canonical configuration. Edit the frontmatter above to
54
+ set your site name, base URL, default locale, and identity.
55
+
56
+ This starter's `siteIdentity.kind` is `Person` — you, the consultant. The
57
+ commented `secondary` block below is the toggle for the company you run: remove
58
+ the leading `# ` from its four lines to add an Organization the schema links to
59
+ you (`founder`/`worksFor`); put the `# ` back to remove it. Either way the site's
60
+ identity stays you.
61
+
62
+ For example, with the toggle on:
63
+
64
+ siteIdentity:
65
+ kind: Person
66
+ ...
67
+ secondary:
68
+ kind: Organization
69
+ name: "{{COMPANY_NAME}}"
70
+ url: https://{{COMPANY_DOMAIN}}
71
+
72
+ `sameAs` is the list of URLs that are unambiguously the same entity as you —
73
+ your LinkedIn profile, your GitHub account, your X profile. Answer engines use
74
+ it to reconcile your site with the rest of your presence, so it is worth
75
+ filling in.
76
+
77
+ `theme.colors` is the site's colour overlay: each key names a customer-facing
78
+ colour role (`bg`, `text`, `primary`, `accent`, …) per light/dark mode, and the
79
+ build turns it into the CSS custom properties every component reads. Declare
80
+ only what you change — an absent role keeps the platform default.
81
+
82
+ For the agent-operator workflow, use the `set_site_identity` MCP tool rather
83
+ than editing this file directly — it validates input and writes with optimistic
84
+ locking.
85
+ -->
@@ -0,0 +1,39 @@
1
+ ---
2
+ type: "AboutPage"
3
+ slug: "about"
4
+ title: "About"
5
+ description: "About {Your Name}. Placeholder copy — replace before you launch."
6
+ sections:
7
+ [
8
+ {
9
+ "id": "intro",
10
+ "type": "content-block",
11
+ "data":
12
+ {
13
+ "variant": "narrow",
14
+ "imagerySlot": true,
15
+ "eyebrow": "About",
16
+ "headline": "{How you got here, and who you work with}",
17
+ "body": "{Two or three sentences on how you started, who you work with, and what you will not take on. Keep it concrete rather than aspirational.}",
18
+ },
19
+ },
20
+ {
21
+ "id": "closing",
22
+ "type": "cta",
23
+ "data":
24
+ {
25
+ "variant": "minimal",
26
+ "headline": "Work with me",
27
+ "primaryCta": { "label": "Book a call", "href": "/meet/book-a-call" },
28
+ "secondaryCta":
29
+ {
30
+ "label": "Get in touch",
31
+ "href": "/contact",
32
+ "variant": "outline",
33
+ },
34
+ },
35
+ },
36
+ ]
37
+ ---
38
+
39
+ Placeholder copy. This page overrides the always-copied overlay's `AboutPage/about.mdx`. No `team` section — one person.
@@ -0,0 +1,97 @@
1
+ ---
2
+ type: "HomePage"
3
+ slug: "home"
4
+ title: "Your Name"
5
+ description: "Placeholder home for the person-service starter — a solo consultant's site. Replace every line before you launch."
6
+ sections:
7
+ [
8
+ {
9
+ "id": "hero",
10
+ "type": "hero",
11
+ "data":
12
+ {
13
+ "variant": "centered",
14
+ "eyebrow": "{Your Name}",
15
+ "headline": "{One line on the outcome you deliver for clients}",
16
+ "subheadline": "{One line on who you work with and what makes working with you different.}",
17
+ "primaryCta": { "label": "Book a call", "href": "/meet/book-a-call" },
18
+ "secondaryCta":
19
+ {
20
+ "label": "Get in touch",
21
+ "href": "/contact",
22
+ "variant": "outline",
23
+ },
24
+ },
25
+ },
26
+ {
27
+ "id": "services",
28
+ "type": "items",
29
+ "data":
30
+ {
31
+ "headline": "What I do",
32
+ "columns": 3,
33
+ "items":
34
+ [
35
+ {
36
+ "title": "{First engagement}",
37
+ "description": "{One line on what it is and who it suits.}",
38
+ "link":
39
+ {
40
+ "label": "Read more",
41
+ "href": "/services/first-engagement",
42
+ },
43
+ },
44
+ {
45
+ "title": "{Second engagement}",
46
+ "description": "{One line on what it is and who it suits.}",
47
+ "link":
48
+ {
49
+ "label": "Read more",
50
+ "href": "/services/second-engagement",
51
+ },
52
+ },
53
+ {
54
+ "title": "{Third engagement}",
55
+ "description": "{One line on what it is and who it suits.}",
56
+ "link":
57
+ {
58
+ "label": "Read more",
59
+ "href": "/services/third-engagement",
60
+ },
61
+ },
62
+ ],
63
+ },
64
+ },
65
+ {
66
+ "id": "about",
67
+ "type": "content-block",
68
+ "data":
69
+ {
70
+ "variant": "narrow",
71
+ "eyebrow": "About me",
72
+ "headline": "{A short line on how you got here and who you work with}",
73
+ "body": "{Two or three sentences on your background and what you will not take on. Keep it concrete rather than aspirational.}",
74
+ "cta": { "label": "More about me", "href": "/about" },
75
+ },
76
+ },
77
+ {
78
+ "id": "closing",
79
+ "type": "cta",
80
+ "data":
81
+ {
82
+ "variant": "minimal",
83
+ "headline": "Ready to talk about your project?",
84
+ "description": "{One line inviting the reader to start the conversation.}",
85
+ "primaryCta": { "label": "Book a call", "href": "/meet/book-a-call" },
86
+ "secondaryCta":
87
+ {
88
+ "label": "Get in touch",
89
+ "href": "/contact",
90
+ "variant": "outline",
91
+ },
92
+ },
93
+ },
94
+ ]
95
+ ---
96
+
97
+ Placeholder copy. Every headline, every line of body copy on this site is a placeholder — replace them before you launch.
@@ -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. */}