create-ailk 0.1.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 (533) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +39 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +80 -0
  5. package/dist/copy.d.ts +8 -0
  6. package/dist/copy.js +109 -0
  7. package/dist/index.d.ts +10 -0
  8. package/dist/index.js +10 -0
  9. package/dist/lib/pro-callout.d.ts +12 -0
  10. package/dist/lib/pro-callout.js +20 -0
  11. package/dist/parse-args.d.ts +13 -0
  12. package/dist/parse-args.js +81 -0
  13. package/dist/programmatic.d.ts +49 -0
  14. package/dist/programmatic.js +89 -0
  15. package/dist/substitute.d.ts +31 -0
  16. package/dist/substitute.js +45 -0
  17. package/dist/validate.d.ts +8 -0
  18. package/dist/validate.js +70 -0
  19. package/package.json +47 -0
  20. package/templates/.claude/.gitkeep +0 -0
  21. package/templates/.claude/agents/web.md +80 -0
  22. package/templates/.claude/rules/architecture.md +62 -0
  23. package/templates/.claude/rules/preserve-existing-style.md +51 -0
  24. package/templates/.claude/skills/README.md +43 -0
  25. package/templates/.claude/skills/add-schema/SKILL.md +270 -0
  26. package/templates/.claude/skills/add-schema/references/conflict-handling.md +200 -0
  27. package/templates/.claude/skills/add-schema/references/file-finding.md +123 -0
  28. package/templates/.claude/skills/add-schema/references/schema-types.md +131 -0
  29. package/templates/.claude/skills/audit-site/SKILL.md +213 -0
  30. package/templates/.claude/skills/audit-site/references/common-errors.md +113 -0
  31. package/templates/.claude/skills/audit-site/references/findings-glossary.md +138 -0
  32. package/templates/.claude/skills/audit-site/references/severity-levels.md +114 -0
  33. package/templates/.claude/skills/provision-config/SKILL.md +243 -0
  34. package/templates/.claude/skills/provision-config/references/env-vars-template.md +184 -0
  35. package/templates/.claude/skills/provision-config/references/runbook-template.md +248 -0
  36. package/templates/.claude/skills/provision-config/references/vercel-json-template.md +98 -0
  37. package/templates/.claude/skills/scaffold-auth/SKILL.md +261 -0
  38. package/templates/.claude/skills/scaffold-auth/references/env-vars.md +91 -0
  39. package/templates/.claude/skills/scaffold-auth/references/oauth-app-setup.md +171 -0
  40. package/templates/.claude/skills/scaffold-commerce/SKILL.md +310 -0
  41. package/templates/.claude/skills/scaffold-commerce/references/lookup-keys-template.md +71 -0
  42. package/templates/.claude/skills/scaffold-commerce/references/marketplace-brand-pages.md +83 -0
  43. package/templates/.claude/skills/scaffold-commerce/templates/marketplace-cta-route.tsx.tmpl +72 -0
  44. package/templates/.claude/skills/scaffold-page/SKILL.md +243 -0
  45. package/templates/.claude/skills/scaffold-page/references/page-types.md +169 -0
  46. package/templates/.claude/skills/scaffold-page/templates/content.mdx.tmpl +28 -0
  47. package/templates/.claude/skills/scaffold-page/templates/route.tsx.tmpl +28 -0
  48. package/templates/.claude/skills/suggest-site-pages/SKILL.md +242 -0
  49. package/templates/.claude/skills/suggest-site-pages/references/categories.md +287 -0
  50. package/templates/.env.example +205 -0
  51. package/templates/.gitkeep +2 -0
  52. package/templates/CLAUDE.md +142 -0
  53. package/templates/CONVENTIONS.md +222 -0
  54. package/templates/README.md +110 -0
  55. package/templates/apps/api/.env.example +40 -0
  56. package/templates/apps/api/CLAUDE.md +63 -0
  57. package/templates/apps/api/api/index.ts +144 -0
  58. package/templates/apps/api/jest.config.cjs +74 -0
  59. package/templates/apps/api/package.json +54 -0
  60. package/templates/apps/api/src/__tests__/factories/content-fixture.ts +138 -0
  61. package/templates/apps/api/src/__tests__/factories/index.ts +70 -0
  62. package/templates/apps/api/src/__tests__/factories/lead-fixture.ts +82 -0
  63. package/templates/apps/api/src/__tests__/index.test.ts +118 -0
  64. package/templates/apps/api/src/__tests__/server.test.ts +207 -0
  65. package/templates/apps/api/src/__tests__/services/enrichment-shim.test.ts +126 -0
  66. package/templates/apps/api/src/__tests__/setup.ts +24 -0
  67. package/templates/apps/api/src/cli.ts +30 -0
  68. package/templates/apps/api/src/config/__tests__/index.test.ts +97 -0
  69. package/templates/apps/api/src/config/index.ts +56 -0
  70. package/templates/apps/api/src/index.ts +32 -0
  71. package/templates/apps/api/src/lib/__mocks__/prisma-client.js +15 -0
  72. package/templates/apps/api/src/lib/__mocks__/prisma.ts +45 -0
  73. package/templates/apps/api/src/lib/__tests__/content-adapter.test.ts +178 -0
  74. package/templates/apps/api/src/lib/__tests__/error-serializer.test.ts +100 -0
  75. package/templates/apps/api/src/lib/__tests__/errors.test.ts +94 -0
  76. package/templates/apps/api/src/lib/__tests__/file-fallback.test.ts +144 -0
  77. package/templates/apps/api/src/lib/__tests__/fixtures/HomePage/home.mdx +8 -0
  78. package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +227 -0
  79. package/templates/apps/api/src/lib/__tests__/outbound-http.test.ts +125 -0
  80. package/templates/apps/api/src/lib/__tests__/prisma.test.ts +165 -0
  81. package/templates/apps/api/src/lib/__tests__/require-paid-tier.test.ts +129 -0
  82. package/templates/apps/api/src/lib/__tests__/stripe.test.ts +74 -0
  83. package/templates/apps/api/src/lib/content-adapter.ts +86 -0
  84. package/templates/apps/api/src/lib/error-serializer.ts +77 -0
  85. package/templates/apps/api/src/lib/errors.ts +95 -0
  86. package/templates/apps/api/src/lib/file-fallback.ts +87 -0
  87. package/templates/apps/api/src/lib/lead-capture-store.ts +110 -0
  88. package/templates/apps/api/src/lib/locales.ts +201 -0
  89. package/templates/apps/api/src/lib/outbound-http.ts +122 -0
  90. package/templates/apps/api/src/lib/prisma.ts +21 -0
  91. package/templates/apps/api/src/lib/require-paid-tier.ts +53 -0
  92. package/templates/apps/api/src/lib/stripe.ts +30 -0
  93. package/templates/apps/api/src/lib/webhook-idempotency.ts +92 -0
  94. package/templates/apps/api/src/middleware/__tests__/adversarial/bearer-token-format.test.ts +111 -0
  95. package/templates/apps/api/src/middleware/__tests__/adversarial/cookie-or-bearer-precedence.test.ts +172 -0
  96. package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-bearer-skip.test.ts +119 -0
  97. package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-cookie-path.test.ts +138 -0
  98. package/templates/apps/api/src/middleware/__tests__/adversarial/session-fixation.test.ts +149 -0
  99. package/templates/apps/api/src/middleware/__tests__/adversarial/session-timeout.test.ts +139 -0
  100. package/templates/apps/api/src/middleware/__tests__/auth.bearer-path.test.ts +175 -0
  101. package/templates/apps/api/src/middleware/__tests__/auth.both-present-precedence.test.ts +76 -0
  102. package/templates/apps/api/src/middleware/__tests__/auth.cookie-path.test.ts +153 -0
  103. package/templates/apps/api/src/middleware/__tests__/auth.neither-present.test.ts +72 -0
  104. package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +292 -0
  105. package/templates/apps/api/src/middleware/auth.ts +246 -0
  106. package/templates/apps/api/src/middleware/rate-limit.ts +132 -0
  107. package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +129 -0
  108. package/templates/apps/api/src/openapi/index.ts +12 -0
  109. package/templates/apps/api/src/openapi/spec.ts +408 -0
  110. package/templates/apps/api/src/routes/auth/__tests__/auth-tokens.functional.test.ts +193 -0
  111. package/templates/apps/api/src/routes/auth/__tests__/auth-user.functional.test.ts +201 -0
  112. package/templates/apps/api/src/routes/auth/__tests__/tokens.test.ts +294 -0
  113. package/templates/apps/api/src/routes/auth/__tests__/user.test.ts +486 -0
  114. package/templates/apps/api/src/routes/auth/tokens.ts +199 -0
  115. package/templates/apps/api/src/routes/auth/user.ts +244 -0
  116. package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +588 -0
  117. package/templates/apps/api/src/routes/checkout/index.ts +13 -0
  118. package/templates/apps/api/src/routes/checkout/sessions.ts +185 -0
  119. package/templates/apps/api/src/routes/content/__tests__/create.test.ts +239 -0
  120. package/templates/apps/api/src/routes/content/__tests__/delete.test.ts +201 -0
  121. package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +141 -0
  122. package/templates/apps/api/src/routes/content/__tests__/list-pages.test.ts +122 -0
  123. package/templates/apps/api/src/routes/content/__tests__/list-types.test.ts +44 -0
  124. package/templates/apps/api/src/routes/content/__tests__/locale.test.ts +118 -0
  125. package/templates/apps/api/src/routes/content/__tests__/rate-limit.test.ts +51 -0
  126. package/templates/apps/api/src/routes/content/__tests__/update.test.ts +252 -0
  127. package/templates/apps/api/src/routes/content/create.ts +114 -0
  128. package/templates/apps/api/src/routes/content/delete.ts +81 -0
  129. package/templates/apps/api/src/routes/content/get-page.ts +98 -0
  130. package/templates/apps/api/src/routes/content/index.ts +32 -0
  131. package/templates/apps/api/src/routes/content/list-pages.ts +83 -0
  132. package/templates/apps/api/src/routes/content/list-types.ts +19 -0
  133. package/templates/apps/api/src/routes/content/rate-limit.ts +13 -0
  134. package/templates/apps/api/src/routes/content/slug.ts +9 -0
  135. package/templates/apps/api/src/routes/content/update.ts +111 -0
  136. package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +415 -0
  137. package/templates/apps/api/src/routes/leads/__tests__/track.test.ts +165 -0
  138. package/templates/apps/api/src/routes/leads/index.ts +130 -0
  139. package/templates/apps/api/src/routes/test/auth/__tests__/session.test.ts +296 -0
  140. package/templates/apps/api/src/routes/test/auth/session.ts +141 -0
  141. package/templates/apps/api/src/routes/webhooks/README.md +57 -0
  142. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +247 -0
  143. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +198 -0
  144. package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +633 -0
  145. package/templates/apps/api/src/routes/webhooks/index.ts +41 -0
  146. package/templates/apps/api/src/routes/webhooks/stripe.ts +253 -0
  147. package/templates/apps/api/src/server.ts +157 -0
  148. package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +395 -0
  149. package/templates/apps/api/src/services/enrichment-shim.ts +53 -0
  150. package/templates/apps/api/src/services/lead-routing.ts +338 -0
  151. package/templates/apps/api/tsconfig.json +34 -0
  152. package/templates/apps/api/vercel.json +17 -0
  153. package/templates/apps/mcp/.env.example +52 -0
  154. package/templates/apps/mcp/CLAUDE.md +84 -0
  155. package/templates/apps/mcp/__tests__/abuse/daily-cap.test.ts +52 -0
  156. package/templates/apps/mcp/__tests__/abuse/email-validator.test.ts +46 -0
  157. package/templates/apps/mcp/__tests__/abuse/honeypot.test.ts +36 -0
  158. package/templates/apps/mcp/__tests__/abuse/user-agent-deny.test.ts +54 -0
  159. package/templates/apps/mcp/__tests__/aeo-cli-parity.test.ts +110 -0
  160. package/templates/apps/mcp/__tests__/audit-single-page.test.ts +213 -0
  161. package/templates/apps/mcp/__tests__/audit.test.ts +217 -0
  162. package/templates/apps/mcp/__tests__/catalog-drift.test.ts +52 -0
  163. package/templates/apps/mcp/__tests__/create_page.test.ts +201 -0
  164. package/templates/apps/mcp/__tests__/delete_page.test.ts +176 -0
  165. package/templates/apps/mcp/__tests__/get_business_hours.test.ts +82 -0
  166. package/templates/apps/mcp/__tests__/get_faq.test.ts +80 -0
  167. package/templates/apps/mcp/__tests__/get_locations.test.ts +65 -0
  168. package/templates/apps/mcp/__tests__/get_offerings.test.ts +90 -0
  169. package/templates/apps/mcp/__tests__/get_pricing.test.ts +80 -0
  170. package/templates/apps/mcp/__tests__/get_site_info.test.ts +81 -0
  171. package/templates/apps/mcp/__tests__/http-transport.test.ts +323 -0
  172. package/templates/apps/mcp/__tests__/lib/errors.test.ts +75 -0
  173. package/templates/apps/mcp/__tests__/lib/require-paid-tier.test.ts +75 -0
  174. package/templates/apps/mcp/__tests__/list_pages.test.ts +112 -0
  175. package/templates/apps/mcp/__tests__/locale.test.ts +135 -0
  176. package/templates/apps/mcp/__tests__/parity.test.ts +205 -0
  177. package/templates/apps/mcp/__tests__/purchase-disabled.test.ts +34 -0
  178. package/templates/apps/mcp/__tests__/read_content.test.ts +153 -0
  179. package/templates/apps/mcp/__tests__/request_callback.test.ts +163 -0
  180. package/templates/apps/mcp/__tests__/search_content.test.ts +153 -0
  181. package/templates/apps/mcp/__tests__/server.test.ts +115 -0
  182. package/templates/apps/mcp/__tests__/submit_lead.test.ts +165 -0
  183. package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +161 -0
  184. package/templates/apps/mcp/__tests__/tools/purchase.test.ts +227 -0
  185. package/templates/apps/mcp/__tests__/tools/scaffold.test.ts +237 -0
  186. package/templates/apps/mcp/__tests__/update_page.test.ts +195 -0
  187. package/templates/apps/mcp/jest.config.cjs +82 -0
  188. package/templates/apps/mcp/package.json +37 -0
  189. package/templates/apps/mcp/src/abuse/daily-cap.ts +47 -0
  190. package/templates/apps/mcp/src/abuse/email-validator.ts +25 -0
  191. package/templates/apps/mcp/src/abuse/honeypot.ts +21 -0
  192. package/templates/apps/mcp/src/abuse/index.ts +111 -0
  193. package/templates/apps/mcp/src/abuse/user-agent-deny.ts +58 -0
  194. package/templates/apps/mcp/src/http-transport.ts +303 -0
  195. package/templates/apps/mcp/src/index.ts +67 -0
  196. package/templates/apps/mcp/src/lib/audit-single-page.ts +194 -0
  197. package/templates/apps/mcp/src/lib/errors.ts +61 -0
  198. package/templates/apps/mcp/src/lib/locales.ts +171 -0
  199. package/templates/apps/mcp/src/lib/require-paid-tier.ts +44 -0
  200. package/templates/apps/mcp/src/lib/resolve-locale.ts +30 -0
  201. package/templates/apps/mcp/src/server.ts +139 -0
  202. package/templates/apps/mcp/src/tools/audit.ts +103 -0
  203. package/templates/apps/mcp/src/tools/capture_lead.ts +52 -0
  204. package/templates/apps/mcp/src/tools/create_page.ts +95 -0
  205. package/templates/apps/mcp/src/tools/delete_page.ts +73 -0
  206. package/templates/apps/mcp/src/tools/get_business_hours.ts +66 -0
  207. package/templates/apps/mcp/src/tools/get_faq.ts +69 -0
  208. package/templates/apps/mcp/src/tools/get_locations.ts +85 -0
  209. package/templates/apps/mcp/src/tools/get_offerings.ts +66 -0
  210. package/templates/apps/mcp/src/tools/get_pricing.ts +74 -0
  211. package/templates/apps/mcp/src/tools/get_site_info.ts +84 -0
  212. package/templates/apps/mcp/src/tools/index.ts +125 -0
  213. package/templates/apps/mcp/src/tools/list_pages.ts +72 -0
  214. package/templates/apps/mcp/src/tools/purchase.ts +89 -0
  215. package/templates/apps/mcp/src/tools/read_content.ts +61 -0
  216. package/templates/apps/mcp/src/tools/request_callback.ts +51 -0
  217. package/templates/apps/mcp/src/tools/scaffold.ts +119 -0
  218. package/templates/apps/mcp/src/tools/search_content.ts +59 -0
  219. package/templates/apps/mcp/src/tools/subscribe_newsletter.ts +47 -0
  220. package/templates/apps/mcp/src/tools/update_page.ts +91 -0
  221. package/templates/apps/mcp/tsconfig.json +19 -0
  222. package/templates/apps/web/.env.example +47 -0
  223. package/templates/apps/web/CLAUDE.md +81 -0
  224. package/templates/apps/web/__tests__/auth/adversarial/cookie-attributes.test.ts +94 -0
  225. package/templates/apps/web/__tests__/auth/adversarial/oauth-state-parameter.test.ts +75 -0
  226. package/templates/apps/web/__tests__/auth/adversarial/redirect-uri-allowlist.test.ts +82 -0
  227. package/templates/apps/web/__tests__/auth/env-helpers.test.ts +168 -0
  228. package/templates/apps/web/__tests__/authority-list-routes.test.tsx +208 -0
  229. package/templates/apps/web/__tests__/better-stack.test.ts +66 -0
  230. package/templates/apps/web/__tests__/blog-dir-resolution.test.ts +87 -0
  231. package/templates/apps/web/__tests__/blog-source-populated.test.ts +130 -0
  232. package/templates/apps/web/__tests__/data-testid-coverage.test.tsx +60 -0
  233. package/templates/apps/web/__tests__/google-analytics.test.tsx +104 -0
  234. package/templates/apps/web/__tests__/i18n/middleware.test.ts +119 -0
  235. package/templates/apps/web/__tests__/i18n/routing.test.ts +114 -0
  236. package/templates/apps/web/__tests__/i18n/translations.test.ts +191 -0
  237. package/templates/apps/web/__tests__/json-ld.test.ts +98 -0
  238. package/templates/apps/web/__tests__/knowledge-events-routes.test.tsx +580 -0
  239. package/templates/apps/web/__tests__/layout-stealth.test.ts +39 -0
  240. package/templates/apps/web/__tests__/lighthouse-fixtures/improvement-image-shrink.tsx +103 -0
  241. package/templates/apps/web/__tests__/lighthouse-fixtures/override-fixture.md +114 -0
  242. package/templates/apps/web/__tests__/lighthouse-fixtures/regression-bloat.tsx +94 -0
  243. package/templates/apps/web/__tests__/page.test.tsx +230 -0
  244. package/templates/apps/web/__tests__/products-services-phase1.test.tsx +321 -0
  245. package/templates/apps/web/__tests__/projects-routes.test.tsx +392 -0
  246. package/templates/apps/web/__tests__/resources-downloads-integrations-phase2.test.tsx +475 -0
  247. package/templates/apps/web/__tests__/routes/ai-plugin-json.test.ts +53 -0
  248. package/templates/apps/web/__tests__/routes/blog-route.test.tsx +191 -0
  249. package/templates/apps/web/__tests__/routes/llms-txt.test.ts +123 -0
  250. package/templates/apps/web/__tests__/routes/robots-txt.test.ts +52 -0
  251. package/templates/apps/web/__tests__/routes/sitemap-xml.test.ts +78 -0
  252. package/templates/apps/web/__tests__/routes/well-known-mcp.test.ts +203 -0
  253. package/templates/apps/web/__tests__/section-routes.test.tsx +693 -0
  254. package/templates/apps/web/__tests__/security-headers.test.ts +201 -0
  255. package/templates/apps/web/__tests__/sentry-config.test.ts +116 -0
  256. package/templates/apps/web/__tests__/setup.ts +82 -0
  257. package/templates/apps/web/__tests__/sitemap-locales.test.ts +415 -0
  258. package/templates/apps/web/__tests__/standalone-informational-routes.test.tsx +844 -0
  259. package/templates/apps/web/app/.well-known/ai-plugin.json/route.ts +81 -0
  260. package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +110 -0
  261. package/templates/apps/web/app/.well-known/mcp.json/route.ts +58 -0
  262. package/templates/apps/web/app/[locale]/__tests__/layout.test.tsx +120 -0
  263. package/templates/apps/web/app/[locale]/__tests__/page-renderer-migration.test.tsx +202 -0
  264. package/templates/apps/web/app/[locale]/about/page.tsx +31 -0
  265. package/templates/apps/web/app/[locale]/blog/[[...slug]]/page.tsx +173 -0
  266. package/templates/apps/web/app/[locale]/careers/[slug]/page.tsx +45 -0
  267. package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +117 -0
  268. package/templates/apps/web/app/[locale]/careers/page.tsx +25 -0
  269. package/templates/apps/web/app/[locale]/case-studies/[slug]/page.tsx +44 -0
  270. package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +113 -0
  271. package/templates/apps/web/app/[locale]/case-studies/page.tsx +25 -0
  272. package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +63 -0
  273. package/templates/apps/web/app/[locale]/clients/page.tsx +27 -0
  274. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +130 -0
  275. package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +152 -0
  276. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +92 -0
  277. package/templates/apps/web/app/[locale]/contact/contact.actions.ts +79 -0
  278. package/templates/apps/web/app/[locale]/contact/error.tsx +24 -0
  279. package/templates/apps/web/app/[locale]/contact/page.tsx +38 -0
  280. package/templates/apps/web/app/[locale]/courses/[slug]/page.tsx +34 -0
  281. package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +119 -0
  282. package/templates/apps/web/app/[locale]/courses/page.tsx +25 -0
  283. package/templates/apps/web/app/[locale]/dev/purchase/__tests__/actions.test.ts +160 -0
  284. package/templates/apps/web/app/[locale]/dev/purchase/error.tsx +25 -0
  285. package/templates/apps/web/app/[locale]/dev/purchase/page.tsx +117 -0
  286. package/templates/apps/web/app/[locale]/dev/purchase/purchase.actions.ts +58 -0
  287. package/templates/apps/web/app/[locale]/docs/[[...slug]]/page.tsx +118 -0
  288. package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +72 -0
  289. package/templates/apps/web/app/[locale]/downloads/page.tsx +25 -0
  290. package/templates/apps/web/app/[locale]/events/[slug]/page.tsx +47 -0
  291. package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +130 -0
  292. package/templates/apps/web/app/[locale]/events/page.tsx +25 -0
  293. package/templates/apps/web/app/[locale]/faq/page.tsx +36 -0
  294. package/templates/apps/web/app/[locale]/how-to/[slug]/page.tsx +34 -0
  295. package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +78 -0
  296. package/templates/apps/web/app/[locale]/how-to/page.tsx +40 -0
  297. package/templates/apps/web/app/[locale]/integrations/[slug]/page.tsx +43 -0
  298. package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +129 -0
  299. package/templates/apps/web/app/[locale]/integrations/page.tsx +25 -0
  300. package/templates/apps/web/app/[locale]/launch-service/page.tsx +31 -0
  301. package/templates/apps/web/app/[locale]/layout.tsx +241 -0
  302. package/templates/apps/web/app/[locale]/page.tsx +41 -0
  303. package/templates/apps/web/app/[locale]/partners/[slug]/page.tsx +44 -0
  304. package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +113 -0
  305. package/templates/apps/web/app/[locale]/partners/page.tsx +25 -0
  306. package/templates/apps/web/app/[locale]/products/[slug]/page.tsx +43 -0
  307. package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +129 -0
  308. package/templates/apps/web/app/[locale]/products/page.tsx +25 -0
  309. package/templates/apps/web/app/[locale]/projects/[slug]/page.tsx +39 -0
  310. package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +138 -0
  311. package/templates/apps/web/app/[locale]/projects/page.tsx +30 -0
  312. package/templates/apps/web/app/[locale]/resources/[slug]/page.tsx +51 -0
  313. package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +117 -0
  314. package/templates/apps/web/app/[locale]/resources/page.tsx +27 -0
  315. package/templates/apps/web/app/[locale]/services/[slug]/page.tsx +43 -0
  316. package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +129 -0
  317. package/templates/apps/web/app/[locale]/services/page.tsx +25 -0
  318. package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +34 -0
  319. package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +81 -0
  320. package/templates/apps/web/app/[locale]/software/page.tsx +39 -0
  321. package/templates/apps/web/app/[locale]/tech-articles/[slug]/page.tsx +34 -0
  322. package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +82 -0
  323. package/templates/apps/web/app/[locale]/tech-articles/page.tsx +39 -0
  324. package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +63 -0
  325. package/templates/apps/web/app/[locale]/testimonials/page.tsx +27 -0
  326. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +63 -0
  327. package/templates/apps/web/app/[locale]/use-cases/page.tsx +27 -0
  328. package/templates/apps/web/app/[locale]/whitepapers/[slug]/page.tsx +34 -0
  329. package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +82 -0
  330. package/templates/apps/web/app/[locale]/whitepapers/page.tsx +39 -0
  331. package/templates/apps/web/app/__tests__/error-boundaries.test.tsx +152 -0
  332. package/templates/apps/web/app/api/auth/[...all]/route.ts +16 -0
  333. package/templates/apps/web/app/error-fallback.tsx +75 -0
  334. package/templates/apps/web/app/error.tsx +23 -0
  335. package/templates/apps/web/app/layout.tsx +18 -0
  336. package/templates/apps/web/app/llms.txt/route.ts +101 -0
  337. package/templates/apps/web/app/not-found.tsx +48 -0
  338. package/templates/apps/web/app/og/__tests__/route.test.ts +164 -0
  339. package/templates/apps/web/app/og/route.tsx +135 -0
  340. package/templates/apps/web/app/robots.txt/route.ts +36 -0
  341. package/templates/apps/web/app/sitemap.xml/route.ts +146 -0
  342. package/templates/apps/web/auth.ts +141 -0
  343. package/templates/apps/web/components/ThemeToggle.tsx +60 -0
  344. package/templates/apps/web/components/google-analytics.tsx +34 -0
  345. package/templates/apps/web/content/en/blog/index.mdx +15 -0
  346. package/templates/apps/web/content/en/blog/launching-ailk.mdx +20 -0
  347. package/templates/apps/web/content/en/docs/getting-started.mdx +30 -0
  348. package/templates/apps/web/i18n/request.ts +36 -0
  349. package/templates/apps/web/jest.config.cjs +100 -0
  350. package/templates/apps/web/lib/__mocks__/next-mdx-remote-rsc.js +12 -0
  351. package/templates/apps/web/lib/__mocks__/source-server.js +31 -0
  352. package/templates/apps/web/lib/__tests__/og.test.ts +65 -0
  353. package/templates/apps/web/lib/auth-env.ts +66 -0
  354. package/templates/apps/web/lib/blog-list-data.ts +95 -0
  355. package/templates/apps/web/lib/blog-post-data.ts +79 -0
  356. package/templates/apps/web/lib/nav-config.ts +13 -0
  357. package/templates/apps/web/lib/observability/better-stack.ts +27 -0
  358. package/templates/apps/web/lib/og.ts +23 -0
  359. package/templates/apps/web/lib/prisma-for-auth.ts +34 -0
  360. package/templates/apps/web/lib/source.ts +34 -0
  361. package/templates/apps/web/messages/en.json +131 -0
  362. package/templates/apps/web/middleware.ts +80 -0
  363. package/templates/apps/web/next.config.mjs +167 -0
  364. package/templates/apps/web/package.json +62 -0
  365. package/templates/apps/web/public/.well-known/security.txt +17 -0
  366. package/templates/apps/web/public/android-chrome-192x192.png +0 -0
  367. package/templates/apps/web/public/android-chrome-512x512.png +0 -0
  368. package/templates/apps/web/public/apple-touch-icon.png +0 -0
  369. package/templates/apps/web/public/favicon-16x16.png +0 -0
  370. package/templates/apps/web/public/favicon-32x32.png +0 -0
  371. package/templates/apps/web/public/favicon.ico +0 -0
  372. package/templates/apps/web/public/favicon.svg +4 -0
  373. package/templates/apps/web/public/logo-dark.svg +21 -0
  374. package/templates/apps/web/public/logo-light.svg +21 -0
  375. package/templates/apps/web/public/logomark-dark.svg +4 -0
  376. package/templates/apps/web/public/logomark-light.svg +4 -0
  377. package/templates/apps/web/public/og-default.png +0 -0
  378. package/templates/apps/web/public/site.webmanifest +19 -0
  379. package/templates/apps/web/scripts/assert-content-bundled.ts +55 -0
  380. package/templates/apps/web/security-headers.config.ts +132 -0
  381. package/templates/apps/web/sentry.client.config.ts +27 -0
  382. package/templates/apps/web/sentry.edge.config.ts +15 -0
  383. package/templates/apps/web/sentry.server.config.ts +20 -0
  384. package/templates/apps/web/source.config.ts +78 -0
  385. package/templates/apps/web/src/components/SiteNav.tsx +21 -0
  386. package/templates/apps/web/src/lib/routes.ts +37 -0
  387. package/templates/apps/web/tsconfig.json +35 -0
  388. package/templates/apps/web/types/messages.d.ts +19 -0
  389. package/templates/content/.gitkeep +0 -0
  390. package/templates/content/CLAUDE.md +85 -0
  391. package/templates/content/_site.mdx +38 -0
  392. package/templates/content/ar/HomePage/home.mdx +123 -0
  393. package/templates/content/ar/_site.mdx +35 -0
  394. package/templates/content/de/_site.mdx +29 -0
  395. package/templates/content/en/.gitkeep +0 -0
  396. package/templates/content/en/AboutPage/about.mdx +19 -0
  397. package/templates/content/en/AboutPage/about.schema.json +82 -0
  398. package/templates/content/en/BookCall/book-call.mdx +19 -0
  399. package/templates/content/en/BookCall/book-call.schema.json +121 -0
  400. package/templates/content/en/BreadcrumbList/site-breadcrumbs.mdx +20 -0
  401. package/templates/content/en/CareersList/careers.mdx +24 -0
  402. package/templates/content/en/CaseStudiesList/case-studies.mdx +22 -0
  403. package/templates/content/en/CaseStudiesList/showcase.mdx +8 -0
  404. package/templates/content/en/CaseStudy/ailk-aeo-rollout.mdx +32 -0
  405. package/templates/content/en/CaseStudy/schema-builder-migration.mdx +41 -0
  406. package/templates/content/en/ClientsList/clients.mdx +38 -0
  407. package/templates/content/en/ContactPage/contact.mdx +19 -0
  408. package/templates/content/en/ContactPage/contact.schema.json +100 -0
  409. package/templates/content/en/ContactPoint/primary.mdx +14 -0
  410. package/templates/content/en/Course/aeo-fundamentals.mdx +37 -0
  411. package/templates/content/en/Course/schema-builder-workshop.mdx +62 -0
  412. package/templates/content/en/CoursesList/courses.mdx +22 -0
  413. package/templates/content/en/DownloadsList/downloads.mdx +22 -0
  414. package/templates/content/en/Event/aeo-office-hours-may-2026.mdx +39 -0
  415. package/templates/content/en/Event/ailk-launch-day-2026.mdx +35 -0
  416. package/templates/content/en/EventsList/events.mdx +26 -0
  417. package/templates/content/en/FAQPage/faq.mdx +420 -0
  418. package/templates/content/en/FAQPage/faq.schema.json +231 -0
  419. package/templates/content/en/GlossaryList/glossary.mdx +19 -0
  420. package/templates/content/en/GlossaryList/glossary.schema.json +300 -0
  421. package/templates/content/en/HomePage/home.mdx +312 -0
  422. package/templates/content/en/HomePage/home.schema.json +88 -0
  423. package/templates/content/en/HomePage/launch-service.mdx +475 -0
  424. package/templates/content/en/HomePage/launch-service.schema.json +138 -0
  425. package/templates/content/en/HowTo/add-mdx-content.mdx +38 -0
  426. package/templates/content/en/HowTo/configure-aeo-scoring.mdx +35 -0
  427. package/templates/content/en/HowTo/set-up-json-ld.mdx +36 -0
  428. package/templates/content/en/Integration/github-actions.mdx +31 -0
  429. package/templates/content/en/Integration/openai-api.mdx +26 -0
  430. package/templates/content/en/Integration/vercel.mdx +32 -0
  431. package/templates/content/en/IntegrationsList/integrations.mdx +22 -0
  432. package/templates/content/en/JobPosting/content-strategist.mdx +46 -0
  433. package/templates/content/en/JobPosting/developer-advocate.mdx +47 -0
  434. package/templates/content/en/JobPosting/senior-fullstack-engineer.mdx +57 -0
  435. package/templates/content/en/LandingPage/aeo-audit.mdx +19 -0
  436. package/templates/content/en/LandingPage/aeo-audit.schema.json +92 -0
  437. package/templates/content/en/LandingPage/agency-waitlist.mdx +340 -0
  438. package/templates/content/en/LandingPage/agency-waitlist.schema.json +152 -0
  439. package/templates/content/en/LandingPage/developers.mdx +19 -0
  440. package/templates/content/en/LandingPage/developers.schema.json +109 -0
  441. package/templates/content/en/LandingPage/for-agencies.mdx +390 -0
  442. package/templates/content/en/LandingPage/for-agencies.schema.json +107 -0
  443. package/templates/content/en/LandingPage/for-ai-search-agencies.mdx +417 -0
  444. package/templates/content/en/LandingPage/for-ai-search-agencies.schema.json +105 -0
  445. package/templates/content/en/LandingPage/for-businesses.mdx +19 -0
  446. package/templates/content/en/LandingPage/for-businesses.schema.json +96 -0
  447. package/templates/content/en/LandingPage/platform.mdx +369 -0
  448. package/templates/content/en/LandingPage/platform.schema.json +166 -0
  449. package/templates/content/en/LandingPage/vs-ai-website-builders.mdx +19 -0
  450. package/templates/content/en/LandingPage/vs-ai-website-builders.schema.json +102 -0
  451. package/templates/content/en/LandingPage/vs-wordpress.mdx +19 -0
  452. package/templates/content/en/LandingPage/vs-wordpress.schema.json +53 -0
  453. package/templates/content/en/NewsletterSignup/newsletter.mdx +236 -0
  454. package/templates/content/en/NewsletterSignup/newsletter.schema.json +91 -0
  455. package/templates/content/en/Organization/site-owner.mdx +16 -0
  456. package/templates/content/en/Partner/prisma.mdx +31 -0
  457. package/templates/content/en/Partner/supabase.mdx +30 -0
  458. package/templates/content/en/Partner/vercel.mdx +28 -0
  459. package/templates/content/en/PartnersList/partners.mdx +22 -0
  460. package/templates/content/en/Person/founder.mdx +18 -0
  461. package/templates/content/en/Pricing/pricing.mdx +538 -0
  462. package/templates/content/en/Pricing/pricing.schema.json +209 -0
  463. package/templates/content/en/PrivacyPage/privacy.mdx +165 -0
  464. package/templates/content/en/PrivacyPage/privacy.schema.json +64 -0
  465. package/templates/content/en/Product/ailk.mdx +19 -0
  466. package/templates/content/en/Product/ailk.schema.json +94 -0
  467. package/templates/content/en/Product/api-launch-kit.mdx +26 -0
  468. package/templates/content/en/Product/launch-kit.mdx +28 -0
  469. package/templates/content/en/ProductsList/products.mdx +26 -0
  470. package/templates/content/en/Project/ailk-phase-2.mdx +54 -0
  471. package/templates/content/en/ProjectsList/projects.mdx +25 -0
  472. package/templates/content/en/ResourceDetail/aeo-scoring-guide.mdx +27 -0
  473. package/templates/content/en/ResourceDetail/content-model-whitepaper.mdx +28 -0
  474. package/templates/content/en/ResourceDetail/schema-org-quick-reference.mdx +39 -0
  475. package/templates/content/en/ResourcesHub/resources.mdx +22 -0
  476. package/templates/content/en/Service/consulting.mdx +22 -0
  477. package/templates/content/en/Service/implementation.mdx +30 -0
  478. package/templates/content/en/Service/launch-service.mdx +232 -0
  479. package/templates/content/en/Service/launch.mdx +228 -0
  480. package/templates/content/en/ServicesList/services.mdx +84 -0
  481. package/templates/content/en/SoftwareProduct/ailk-aeo.mdx +44 -0
  482. package/templates/content/en/SoftwareProduct/ailk-content-adapters.mdx +47 -0
  483. package/templates/content/en/SoftwareProduct/ailk-schema.mdx +49 -0
  484. package/templates/content/en/TeamList/team.mdx +63 -0
  485. package/templates/content/en/TeamMember/founder.mdx +72 -0
  486. package/templates/content/en/TermsPage/terms.mdx +19 -0
  487. package/templates/content/en/TermsPage/terms.schema.json +99 -0
  488. package/templates/content/en/TestimonialsList/testimonials.mdx +44 -0
  489. package/templates/content/en/UseCasesList/use-cases.mdx +30 -0
  490. package/templates/content/en/Whitepaper/ax-first-product-development.mdx +27 -0
  491. package/templates/content/en/Whitepaper/open-core-commercial-strategy.mdx +27 -0
  492. package/templates/content/en/Whitepaper/structured-data-for-answer-engines.mdx +31 -0
  493. package/templates/content/en-XA/AboutPage/about.mdx +8 -0
  494. package/templates/content/en-XA/FAQPage/faq.mdx +8 -0
  495. package/templates/content/en-XA/HomePage/home.mdx +8 -0
  496. package/templates/content/es/_site.mdx +30 -0
  497. package/templates/content/fr/_site.mdx +30 -0
  498. package/templates/content/ja/_site.mdx +30 -0
  499. package/templates/content/pt-BR/AboutPage/about.mdx +8 -0
  500. package/templates/content/pt-BR/FAQPage/faq.mdx +8 -0
  501. package/templates/content/pt-BR/HomePage/home.mdx +23 -0
  502. package/templates/database/CHANGELOG.md +5 -0
  503. package/templates/database/README.md +234 -0
  504. package/templates/database/__tests__/user-cascade.test.ts +125 -0
  505. package/templates/database/auth/.gitkeep +0 -0
  506. package/templates/database/config/.gitkeep +0 -0
  507. package/templates/database/content/.gitkeep +0 -0
  508. package/templates/database/inbox/.gitkeep +0 -0
  509. package/templates/database/inbox/README.md +3 -0
  510. package/templates/database/inbox/__tests__/schema.test.ts +40 -0
  511. package/templates/database/inbox/schema.prisma +52 -0
  512. package/templates/database/jest.config.cjs +29 -0
  513. package/templates/database/migrations/20260508000000_add_inbox_namespace/migration.sql +328 -0
  514. package/templates/database/migrations/20260513000000_better_auth_migration/migration.sql +100 -0
  515. package/templates/database/migrations/20260515000000_add_user_billing_fields/migration.sql +28 -0
  516. package/templates/database/migrations/20260516000000_add_user_tier_care_plan_seat/migration.sql +25 -0
  517. package/templates/database/migrations/20260518000000_add_telemetry_records/migration.sql +42 -0
  518. package/templates/database/migrations/20260525000000_theme_wiring/migration.sql +67 -0
  519. package/templates/database/migrations/20260710000000_retire_commercial_tier/migration.sql +21 -0
  520. package/templates/database/migrations/migration_lock.toml +3 -0
  521. package/templates/database/ops/.gitkeep +0 -0
  522. package/templates/database/package.json +45 -0
  523. package/templates/database/prisma.config.ts +20 -0
  524. package/templates/database/schema.prisma +487 -0
  525. package/templates/database/scripts/db-generate-locked.sh +80 -0
  526. package/templates/database/seed-test.ts +85 -0
  527. package/templates/database/tsconfig.build.json +16 -0
  528. package/templates/database/tsconfig.json +9 -0
  529. package/templates/package.json +125 -0
  530. package/templates/pnpm-workspace.yaml +6 -0
  531. package/templates/project.yaml +59 -0
  532. package/templates/tsconfig.base.json +18 -0
  533. package/templates/tsconfig.json +45 -0
@@ -0,0 +1,54 @@
1
+ ---
2
+ type: Project
3
+ slug: ailk-phase-2
4
+ title: AILK Phase 2 — Builder Port
5
+ description: Expanding the schema.org builder layer from 6 to 45 types, with locale-aware JSON-LD emission and a registry-vs-builder consistency guarantee.
6
+ publishedAt: "2026-05-07"
7
+ sections:
8
+ - id: hero-1
9
+ type: hero
10
+ data:
11
+ variant: centered
12
+ headline: AILK Phase 2 — Builder Port
13
+ subheadline: Expanding the schema.org builder layer from 6 to 45 types.
14
+
15
+ - id: content-block-1
16
+ type: content-block
17
+ data:
18
+ variant: narrow
19
+ headline: What we shipped
20
+ body: |
21
+ Phase 2 expanded @working-theory/schema from 6 builders and 2 registry entries to 45 builders and 45
22
+ registry entries. Every builder now emits inLanguage from the page's locale field (defaulting
23
+ to 'en'), threading the locale-aware contract through the full type surface.
24
+
25
+ - id: items-1
26
+ type: items
27
+ data:
28
+ headline: Technical decisions
29
+ columns: 2
30
+ items:
31
+ - title: Six-family architecture
32
+ description: Builders organized into core, identity, canonical-list, canonical-detail, editorial-list, and editorial-detail subdirectories.
33
+ icon: folder
34
+ - title: Locale-aware emission
35
+ description: Every builder emits inLanguage from the page locale field, defaulting to 'en' when absent.
36
+ icon: globe
37
+ - title: Identity sub-entities
38
+ description: BreadcrumbList, ContactPoint use dedicated input shapes — not ContentPageInput — because they're data fragments, not pages.
39
+ icon: layers
40
+ - title: Dispatcher unchanged
41
+ description: Public signature buildJsonLd(page) is stable. Existing callers required no updates.
42
+ icon: check
43
+
44
+ - id: cta-1
45
+ type: cta
46
+ data:
47
+ headline: View the source
48
+ primaryCta:
49
+ label: Browse @working-theory/schema on GitHub
50
+ href: https://github.com/working-theory-labs/ai-launch-kit/tree/main/packages/schema
51
+ external: true
52
+ ---
53
+
54
+ <!-- MDX body is preserved for content adapters that use it, but the page renders from frontmatter sections. -->
@@ -0,0 +1,25 @@
1
+ ---
2
+ type: ProjectsList
3
+ slug: projects
4
+ title: Projects
5
+ description: A selection of build engagements — what we shipped, with whom, and what we learned.
6
+ sections:
7
+ - id: hero-1
8
+ type: hero
9
+ data:
10
+ variant: centered
11
+ headline: Projects
12
+ subheadline: Engagements where we had meaningful ownership over technical direction. Each one shaped what ended up in AILK.
13
+
14
+ - id: items-1
15
+ type: items
16
+ data:
17
+ headline: Selected engagements
18
+ columns: 3
19
+ items:
20
+ - title: AILK Phase 2 — Builder Port
21
+ description: Expanded the schema.org builder layer from 6 to 45 types with locale-aware JSON-LD emission.
22
+ icon: code
23
+ ---
24
+
25
+ <!-- MDX body is preserved for content adapters that use it, but the page renders from frontmatter sections. -->
@@ -0,0 +1,27 @@
1
+ ---
2
+ type: ResourceDetail
3
+ slug: aeo-scoring-guide
4
+ title: AEO Scoring Guide
5
+ description: A practical guide to answer-engine optimization scoring — how the @working-theory/aeo package grades your pages and what each layer-1 rule checks.
6
+ ---
7
+
8
+ # AEO Scoring Guide
9
+
10
+ The `@working-theory/aeo` package grades pages against a deterministic rule set. No network calls, no randomness — the same input always returns the same score.
11
+
12
+ ## Layer-1 rules
13
+
14
+ Every page is evaluated against these checks:
15
+
16
+ - **Schema presence** — does the page emit a valid JSON-LD `<script>` tag?
17
+ - **@type accuracy** — does the `@type` match the page's content type?
18
+ - **inLanguage** — is the language declared on the top-level schema node?
19
+ - **Description completeness** — is a non-empty `description` present?
20
+
21
+ ## Reading the output
22
+
23
+ The scorer returns a structured result with a numeric score (0–100) and a `findings` array. Each finding carries a `rule`, a `severity`, and a `message`. High-severity findings block a page from reaching the top citation tier.
24
+
25
+ ## Integrating with your build
26
+
27
+ Add `@working-theory/aeo` to your build pipeline and pipe MDX frontmatter through `scoreContentPage()`. Track the result in CI — a regression in score triggers a non-zero exit.
@@ -0,0 +1,28 @@
1
+ ---
2
+ type: ResourceDetail
3
+ slug: content-model-whitepaper
4
+ title: Content Model Design for AX-First Sites
5
+ description: A whitepaper covering how to structure your MDX content model so every page type maps cleanly to a schema.org builder — and why that matters for answer-engine citation.
6
+ ---
7
+
8
+ # Content Model Design for AX-First Sites
9
+
10
+ Most content models are designed for human readers. AX-first sites need a content model that works equally well for AI agents — which means structured, typed, and unambiguous.
11
+
12
+ ## The core principle
13
+
14
+ Every page has a type. Every type has a schema.org equivalent. Every schema.org type has a builder in `@working-theory/schema`. This chain is load-bearing: break it at any point and your pages stop being citable by AI systems.
15
+
16
+ ## Frontmatter as the contract
17
+
18
+ AILK's frontmatter convention is the bridge between author intent and machine consumption. The `type` field is not decorative — it drives the builder dispatch and determines which JSON-LD template is applied.
19
+
20
+ ## Worked example: ResourceDetail
21
+
22
+ A `ResourceDetail` page maps to the `Article` type. The builder expects a `headline`, optional `author`, and a `datePublished`. Authors who fill in only `title` and `description` get a partial score; filling in the full contract gets a citation-ready page.
23
+
24
+ ## Recommendations
25
+
26
+ - Lock your type vocabulary before you author content. Retrofitting types is expensive.
27
+ - Validate frontmatter in CI via `pnpm content:check`. Catch drift early.
28
+ - Use the AEO scorer to measure citation readiness on every PR.
@@ -0,0 +1,39 @@
1
+ ---
2
+ type: ResourceDetail
3
+ slug: schema-org-quick-reference
4
+ title: Schema.org Quick Reference for AILK Page Types
5
+ description: A concise reference card mapping each AILK page type to its schema.org @type, required fields, and the builder function that emits it.
6
+ ---
7
+
8
+ # Schema.org Quick Reference for AILK Page Types
9
+
10
+ AILK ships 60 page types. This reference covers the most commonly used ones.
11
+
12
+ ## Core types
13
+
14
+ | AILK type | schema.org @type | Required fields |
15
+ | ------------- | ---------------- | --------------------------- |
16
+ | `HomePage` | `WebSite` | `name`, `url` |
17
+ | `AboutPage` | `AboutPage` | `name`, `description` |
18
+ | `ContactPage` | `ContactPage` | `name` |
19
+ | `BlogPosting` | `BlogPosting` | `headline`, `datePublished` |
20
+
21
+ ## Canonical-list types
22
+
23
+ List pages use `CollectionPage` with a `mainEntity` of type `ItemList`. The builder populates `mainEntity` automatically from the page's linked items.
24
+
25
+ ## Editorial-detail types
26
+
27
+ | AILK type | schema.org @type | Notes |
28
+ | ---------------- | ---------------- | ---------------------------- |
29
+ | `ResourceDetail` | `Article` | Whitepapers, guides, reports |
30
+ | `CaseStudy` | `Article` | Customer success stories |
31
+ | `Whitepaper` | `Article` | Formal research documents |
32
+
33
+ ## Integration type
34
+
35
+ `Integration` pages use `WebPage` with a `mainEntity` of `SoftwareApplication`. The `applicationCategory` field describes the integration category.
36
+
37
+ ## Finding the builder
38
+
39
+ Each type maps to a builder in `packages/schema/src/builders/`. Import the builder directly or let the dispatcher select it via `pageToJsonLd()`.
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: ResourcesHub
3
+ slug: resources
4
+ title: Resources
5
+ description: Guides, whitepapers, and reference material for teams building AX-first sites with AI Launch Kit.
6
+ ---
7
+
8
+ # Resources
9
+
10
+ Practical reference material for every stage of an AILK build — from content model design to AEO scoring and schema.org mapping.
11
+
12
+ ## Guides
13
+
14
+ Hands-on guides covering specific workflows: setting up the AEO scorer, structuring your MDX frontmatter, and integrating schema builders into a CI pipeline.
15
+
16
+ ## Whitepapers
17
+
18
+ Longer-form research on AX-first architecture patterns, content model design principles, and answer-engine optimization strategy.
19
+
20
+ ## Quick references
21
+
22
+ Concise reference cards for the schema.org type system, AILK page type registry, and frontmatter field contracts.
@@ -0,0 +1,22 @@
1
+ ---
2
+ type: Service
3
+ slug: consulting
4
+ title: Implementation consulting
5
+ description: Help adapting AI Launch Kit to your domain — content model, API contracts, agent tools.
6
+ schema:
7
+ serviceType: Implementation consulting
8
+ provider:
9
+ "@type": Organization
10
+ name: AI Launch Kit
11
+ ---
12
+
13
+ # Implementation consulting
14
+
15
+ Most teams adopting AILK have a clear product idea but want a second pair of
16
+ eyes on the content model, API contracts, and agent surface before they ship.
17
+
18
+ A typical engagement covers:
19
+
20
+ - Mapping your domain to the schema.org types AILK supports
21
+ - Drafting the API and MCP tool surface so agents can do real work
22
+ - Reviewing the architecture boundaries before you cross any of them
@@ -0,0 +1,30 @@
1
+ ---
2
+ type: Service
3
+ slug: implementation
4
+ title: Build partnership
5
+ description: Embedded sprint-based engineering alongside your team — we own features end-to-end and hand off code written to be maintained.
6
+ schema:
7
+ serviceType: Build partnership
8
+ provider:
9
+ "@type": Organization
10
+ name: AI Launch Kit
11
+ ---
12
+
13
+ # Build partnership
14
+
15
+ When a team needs more than advice, we embed. A build partnership is a defined sprint — two to four weeks — where we own specific features from design through deployment.
16
+
17
+ ## How it works
18
+
19
+ We start with a scoping call to agree on what "done" looks like for each feature. Then we work in your repo, on your branch conventions, writing code your team can maintain after we leave.
20
+
21
+ Typical deliverables:
22
+
23
+ - Schema.org JSON-LD layer for your existing page types
24
+ - API and MCP surface wired to your content model
25
+ - Architecture boundary lint rules tuned to your monorepo shape
26
+ - Tests at every layer — unit, integration, and schema-validation
27
+
28
+ ## What makes a good fit
29
+
30
+ Teams that get the most from a build partnership already have a product idea and a codebase. They're not in discovery — they're in execution, and they want a second team that can ship alongside them without the overhead of a large agency engagement.
@@ -0,0 +1,232 @@
1
+ ---
2
+ type: Service
3
+ slug: launch-service
4
+ title: A two-week website deploy, built for the agent-first internet. $2,495, fixed scope.
5
+ description: A productized two-week engagement on the open-source AI Launch Kit substrate. Fixed scope, fixed price, AEO-scored on launch day. Delivered by the Working Theory team.
6
+ schema:
7
+ mainEntity:
8
+ "@type": Service
9
+ name: AI Launch Kit Launch Service
10
+ serviceType: Website deployment service
11
+ description: A productized two-week engagement that deploys an AI Launch Kit site for a single SMB. Fixed scope, fixed price, AEO-scored on launch day.
12
+ areaServed: Global
13
+ provider:
14
+ "@type": Organization
15
+ name: SalesSmyth LLC
16
+ brand:
17
+ "@type": Brand
18
+ name: Working Theory
19
+ url: https://workingtheory.ai
20
+ offers:
21
+ "@type": Offer
22
+ name: AILK Launch Service
23
+ price: "2495"
24
+ priceCurrency: USD
25
+ category: service
26
+ url: https://ailaunchkit.ai/launch-service
27
+ sections:
28
+ - id: hero-1
29
+ type: hero
30
+ data:
31
+ variant: centered
32
+ headline: A two-week website deploy, built for the agent-first internet. $2,495, fixed scope.
33
+ subheadline: A productized engagement on the open-source AILK substrate. Fixed scope, fixed price, and a published two-week deploy timeline.
34
+ body: In two weeks, an AI Launch Kit site configured to your brand. AEO-scored on launch day. Built with the structural pieces a page needs when an agent reads it on a buyer's behalf.
35
+ primaryCta:
36
+ label: Book a 30-minute intro call
37
+ href: /contact
38
+ secondaryCta:
39
+ label: Read the full FAQ
40
+ href: /faq
41
+
42
+ - id: content-block-1
43
+ type: content-block
44
+ data:
45
+ variant: narrow
46
+ headline: The page is the unit of citation, not the site
47
+ body: |
48
+ When an agent recommends a business, it assembled that recommendation from individual
49
+ pages it read and trusted. The site is a container. The page is the unit of citation.
50
+ Most SMBs cannot afford to learn this the slow way.
51
+
52
+ The slow way is paying for a custom build, watching it ship without the structural
53
+ pieces an agent needs, and starting over a year later. The Launch Service exists so
54
+ the foundation is right the first time. A productized engagement on AILK, fixed price,
55
+ a two-week deploy. The buyer who is ready to commit gets a working substrate, not a
56
+ custom-quoted maybe.
57
+
58
+ - id: items-1
59
+ type: items
60
+ data:
61
+ headline: What you're already being sold, and why none of it gets you cited
62
+ description: Five paths sit in front of an SMB ready to commit. Each one breaks at the same place — the structural prerequisite for an agent to cite the page is not there.
63
+ columns: 3
64
+ items:
65
+ - title: WordPress with plugins
66
+ description: The plugin catalog is real, and for the audience Google was built for it ships fast. Each plugin bolts on its own schema. The entity declaration is not first-class. An agent reading the page cannot tell which brand the content belongs to without guessing.
67
+ icon: layers
68
+ - title: SaaS starter kits
69
+ description: Built for dashboards and auth flows, not for the public marketing surface. The schema layer is whatever a developer added on a Friday afternoon.
70
+ icon: package
71
+ - title: Closed builders
72
+ description: The lock-in is the product. The structural pieces an agent reads are owned by the builder, not by the brand.
73
+ icon: lock
74
+ - title: AI site builders
75
+ description: The output looks like a website. It does not declare the entity. It does not score itself against AEO. The buyer sees the output but not the decisions behind it.
76
+ icon: cpu
77
+ - title: Doing nothing
78
+ description: The old site keeps not being cited. Quietly.
79
+ icon: minus-circle
80
+
81
+ - id: items-2
82
+ type: items
83
+ data:
84
+ headline: What any foundation has to do to get a brand cited
85
+ description: Five structural requirements. Each one is what any foundation has to do; this list is the spec.
86
+ columns: 3
87
+ items:
88
+ - title: Declare the entity in typed schema
89
+ description: Not a plugin's interpretation. The brand and the product are typed at the page level, then resolved at the site level.
90
+ icon: tag
91
+ - title: Run an agent surface with parity to the human UI
92
+ description: Whatever a person can read, an agent can call. The two surfaces ship together and stay in sync in CI.
93
+ icon: shuffle
94
+ - title: Score AEO at build, not at audit
95
+ description: The site fails the build if entity declarations or page schema regress. The score is a gate, not a report.
96
+ icon: check-circle
97
+ - title: Deploy as a real product, not a demo
98
+ description: A buyer can host it, fork it, and run it without a vendor in the loop.
99
+ icon: rocket
100
+ - title: Open the source
101
+ description: The structural pieces are inspectable. Trust comes from being able to read what is there.
102
+ icon: book-open
103
+
104
+ - id: content-block-2
105
+ type: content-block
106
+ data:
107
+ variant: narrow
108
+ headline: Introducing AI Launch Kit, and the Launch Service that ships it in two weeks
109
+ body: |
110
+ AI Launch Kit is the open-source website foundation for the agent-first internet. It is
111
+ what AI-search agencies and developers use to ship SMB sites for agents and humans. The
112
+ Apache 2.0 starter ships a typed schema registry, a first-class MCP server with
113
+ CI-enforced parity to the human UI, an AEO scoring CLI, and an agent-assisted scaffolding
114
+ workflow. Built by the Working Theory Labs team, who run their own brands on the substrate.
115
+
116
+ The Launch Service is the productized engagement that ships an AILK site for a single SMB.
117
+ It is a two-week engagement at $2,495 for a fixed scope. The deploy includes brand
118
+ configuration, content migration into the typed schema, and integration with the buyer's
119
+ analytics and lead capture. Booking is self-serve. The Working Theory team delivers the
120
+ engagement. The substrate is AILK. The service is what gets it deployed to the brand it
121
+ belongs to.
122
+
123
+ - id: items-3
124
+ type: items
125
+ data:
126
+ headline: What ships with your deploy
127
+ description: The site that goes live at the end of the two weeks carries the full AILK substrate.
128
+ columns: 3
129
+ items:
130
+ - title: A typed schema registry of 60 page types
131
+ description: Every page declares its entity in schema an agent can read. Adding a page is adding a typed entry, not bolting on a plugin.
132
+ icon: database
133
+ - title: Peer apps with API to MCP parity, enforced in CI
134
+ description: Whatever the human UI can do, the agent surface can do. The CI build fails if the two drift.
135
+ icon: shuffle
136
+ - title: The ailk audit CLI, in the OSS distribution
137
+ description: AEO scoring runs at the command line and in CI. Enterprise AEO platforms charge $295 a month for this. The Launch Service ships it included.
138
+ icon: terminal
139
+ - title: Apache 2.0
140
+ description: The full source is yours. No license gates the structural pieces an agent reads.
141
+ icon: unlock
142
+ - title: Agent-assisted scaffolding
143
+ description: New pages are scaffolded by an agent against the typed schema, not free-typed by a developer.
144
+ icon: bot
145
+
146
+ - id: items-4
147
+ type: items
148
+ data:
149
+ headline: What this gets you
150
+ description: Four outcomes the buyer gets, each the payoff of one capability that ships with the deploy.
151
+ columns: 2
152
+ items:
153
+ - title: You ship in two weeks, not three months
154
+ description: A productized engagement on a foundation that already works trades the discovery work of a custom build for the configuration work of a deploy. The project goes into your brand and your content, not into rebuilding the schema layer.
155
+ icon: clock
156
+ - title: Your citation work compounds
157
+ description: Each page you add makes the site easier for an agent to cite, because the structural pieces are shared across pages. New content lands on a foundation that already declares the brand.
158
+ icon: trending-up
159
+ - title: Your build catches AEO regressions
160
+ description: When an entity declaration breaks or a schema field regresses, the build fails. You learn about the gap before the site ships, not after a quarter of missed citations.
161
+ icon: alert-triangle
162
+ - title: You own $295-a-month capability under Apache 2.0
163
+ description: The structural pieces platforms package behind a subscription ship in your repo. The codebase is yours.
164
+ icon: key
165
+
166
+ - id: content-block-3
167
+ type: content-block
168
+ data:
169
+ variant: narrow
170
+ headline: What we're not promising
171
+ body: |
172
+ The Launch Service is launching. Three gaps a buyer should hear before booking.
173
+
174
+ **No pre-launch volume proof.** First Launch Service deploys ship in the coming quarter.
175
+ The proof available today is the substrate, Apache 2.0 with every line inspectable, and
176
+ the dogfood. Sam Henry, Working Theory, and SalesSmyth all run on AILK.
177
+
178
+ **AEO scoring is Layer 1, entity and structure.** Layer 2, citation tracking across
179
+ models, and Layer 3, model-side recommendation evaluation, are on the roadmap. They are
180
+ not in the Launch Service. What ships today catches the structural failures that block
181
+ citation. What is coming catches the citation behavior itself.
182
+
183
+ **Agent recommendations are emerging behavior.** AILK gives a brand the structural
184
+ prerequisites for being cited. No foundation can guarantee what a model recommends,
185
+ including this one. The Launch Service trades the lottery ticket for the spec. It does
186
+ not promise the win.
187
+
188
+ - id: faq-1
189
+ type: faq
190
+ data:
191
+ headline: The questions you're about to ask
192
+ items:
193
+ - question: We're not a Next.js shop. Is this still for us?
194
+ answer: >
195
+ Yes. The Launch Service is the path for SMBs who do not ship Next.js in-house. The
196
+ Working Theory team delivers the engagement. The site ships on AILK, you own the
197
+ codebase, and the deploy includes the configuration and content work. The full
198
+ objection set lives at /faq.
199
+ - question: What does $2,495 include?
200
+ answer: >
201
+ A two-week productized engagement. The scope: brand configuration in the typed
202
+ schema, content migration from the existing site, analytics and lead-capture
203
+ integration, and an AEO score on launch day. Scope is fixed. There are no surprise
204
+ add-ons. The line-item detail is at /pricing.
205
+ - question: What happens after the two weeks? Can we maintain this ourselves?
206
+ answer: >
207
+ Yes. The codebase is Apache 2.0, owned by you. Maintain it in-house, take it to your
208
+ developer, or upgrade. Pro adds advanced capability at $249 per user per year, and
209
+ the Working Theory Platform handles managed runtime. The capability map at /platform
210
+ shows what is in OSS versus paid.
211
+ - question: Is this a fleet-management replacement or an upgrade path?
212
+ answer: >
213
+ Neither. The Launch Service is for one SMB getting a single site live. Fleet
214
+ management — cross-site rollup, white-label, and per-seat licensing — is planned
215
+ as a future Enterprise multi-tenant entitlement, not shipped yet. Entitlement
216
+ detail is at /pricing.
217
+
218
+ - id: cta-1
219
+ type: cta
220
+ data:
221
+ variant: box
222
+ headline: Book a 30-minute intro call
223
+ description: Thirty minutes. We scope your site and walk through the deploy timeline. We confirm fit before either side commits. If the Launch Service is the right path, you book the engagement at the end of the call and the two-week clock starts that week.
224
+ primaryCta:
225
+ label: Book a 30-minute intro call
226
+ href: /contact
227
+ secondaryCta:
228
+ label: Read the full FAQ
229
+ href: /faq
230
+ ---
231
+
232
+ <!-- MDX body is preserved for content adapters that use it, but the page renders from frontmatter sections. -->