create-ailk 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +43 -4
  2. package/component-catalog.json +146 -21
  3. package/component-catalog.md +9 -6
  4. package/dist/add-module-core.d.ts +22 -0
  5. package/dist/add-module-core.js +50 -0
  6. package/dist/add-module.d.ts +89 -0
  7. package/dist/add-module.js +334 -0
  8. package/dist/category-profile.d.ts +126 -0
  9. package/dist/category-profile.js +262 -0
  10. package/dist/cli.js +73 -11
  11. package/dist/index.d.ts +4 -2
  12. package/dist/index.js +6 -1
  13. package/dist/lib/extract-module-bundle.d.ts +56 -1
  14. package/dist/lib/extract-module-bundle.js +165 -13
  15. package/dist/lib/license-key-files.d.ts +15 -0
  16. package/dist/lib/license-key-files.js +102 -0
  17. package/dist/lib/pro-callout.d.ts +16 -10
  18. package/dist/lib/pro-callout.js +26 -3
  19. package/dist/license-set.d.ts +34 -0
  20. package/dist/license-set.js +194 -0
  21. package/dist/module-architecture.d.ts +20 -0
  22. package/dist/module-architecture.js +77 -19
  23. package/dist/modules/commerce/0.6.1.tar.gz +0 -0
  24. package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
  25. package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
  26. package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
  27. package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
  28. package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
  29. package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
  30. package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
  31. package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
  32. package/dist/modules/workspace/0.6.1.tar.gz +0 -0
  33. package/dist/parse-args.d.ts +7 -0
  34. package/dist/parse-args.js +23 -1
  35. package/dist/programmatic.d.ts +46 -0
  36. package/dist/programmatic.js +130 -9
  37. package/dist/site-chrome.d.ts +18 -7
  38. package/dist/site-chrome.js +32 -14
  39. package/dist/site-roster.d.ts +127 -0
  40. package/dist/site-roster.js +494 -0
  41. package/dist/surfaces.d.ts +20 -7
  42. package/dist/surfaces.js +149 -28
  43. package/dist/sync-routes.d.ts +9 -0
  44. package/dist/sync-routes.js +2 -2
  45. package/dist/template-manifest.d.ts +58 -2
  46. package/dist/template-manifest.js +196 -69
  47. package/package.json +6 -4
  48. package/site-templates/_base/content/en/BookCall/book-call.mdx +53 -0
  49. package/site-templates/_base/content/en/GlossaryList/glossary.mdx +66 -0
  50. package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +68 -0
  51. package/site-templates/_base/content/en/Pricing/pricing.mdx +71 -62
  52. package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +2 -3
  53. package/site-templates/_base/content/en/TermsPage/terms.mdx +2 -3
  54. package/site-templates/_base/content/en/UseCase/first-use-case.mdx +23 -0
  55. package/site-templates/_base/content/en/UseCase/second-use-case.mdx +23 -0
  56. package/site-templates/_base/content/en/UseCase/third-use-case.mdx +23 -0
  57. package/site-templates/designs/minimalism/DESIGN.md +162 -0
  58. package/site-templates/designs/standard/DESIGN.md +162 -0
  59. package/site-templates/marketing-site/DESIGN.md +55 -41
  60. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +312 -57
  61. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +209 -90
  62. package/site-templates/marketing-site/ailk-template.json +1 -0
  63. package/site-templates/marketing-site-free/DESIGN.md +55 -41
  64. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +260 -66
  65. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +294 -114
  66. package/site-templates/marketing-site-free/ailk-template.json +3 -2
  67. package/site-templates/minimalism-site/DESIGN.md +54 -40
  68. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +246 -19
  69. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +185 -51
  70. package/site-templates/minimalism-site/ailk-template.json +3 -2
  71. package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +53 -0
  72. package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +3 -37
  73. package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
  74. package/site-templates/saas-product/DESIGN.md +55 -41
  75. package/site-templates/simple-service/DESIGN.md +55 -41
  76. package/site-templates/simple-service/TEMPLATE-MANIFEST.json +135 -26
  77. package/site-templates/simple-service/TEMPLATE-MANIFEST.md +114 -59
  78. package/site-templates/simple-service/ailk-template.json +4 -3
  79. package/site-templates/simple-service/content/en/BookCall/book-call.mdx +53 -0
  80. package/site-templates/simple-service/content/en/ContactPage/contact.mdx +1 -36
  81. package/site-templates/simple-service/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
  82. package/templates/.claude/settings.json +15 -0
  83. package/templates/.claude/skills/README.md +8 -8
  84. package/templates/.claude/skills/{scaffold-auth → add-auth}/SKILL.md +7 -7
  85. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/env-vars.md +2 -2
  86. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/oauth-app-setup.md +3 -3
  87. package/templates/.claude/skills/{scaffold-page → add-page}/SKILL.md +76 -62
  88. package/templates/.claude/skills/add-page/references/page-types.md +111 -0
  89. package/templates/.claude/skills/{scaffold-page → add-page}/templates/content.mdx.tmpl +4 -4
  90. package/templates/.claude/skills/{scaffold-page → add-page}/templates/route.tsx.tmpl +1 -1
  91. package/templates/.claude/skills/{audit-site → check-site}/SKILL.md +16 -17
  92. package/templates/.claude/skills/{audit-site → check-site}/references/common-errors.md +3 -3
  93. package/templates/.claude/skills/{audit-site → check-site}/references/findings-glossary.md +16 -14
  94. package/templates/.claude/skills/{audit-site → check-site}/references/severity-levels.md +1 -1
  95. package/templates/.claude/skills/fill-page/SKILL.md +180 -0
  96. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +80 -0
  97. package/templates/.claude/skills/fill-page/references/section-sources.md +41 -0
  98. package/templates/.claude/skills/{provision-config → setup-deploy}/SKILL.md +8 -8
  99. package/templates/.claude/skills/{provision-config → setup-deploy}/references/env-vars-template.md +2 -2
  100. package/templates/.claude/skills/{provision-config → setup-deploy}/references/runbook-template.md +8 -8
  101. package/templates/.claude/skills/{provision-config → setup-deploy}/references/vercel-json-template.md +1 -1
  102. package/templates/.claude/skills/upgrade-plan/SKILL.md +117 -0
  103. package/templates/.claude/skills/upgrade-plan/references/options.md +24 -0
  104. package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +527 -0
  105. package/templates/.github/workflows/ci.yml +5 -0
  106. package/templates/CLAUDE.md +8 -2
  107. package/templates/DESIGN.md +52 -45
  108. package/templates/README.md +108 -46
  109. package/templates/apps/api/.env.example +2 -1
  110. package/templates/apps/api/package.json +1 -1
  111. package/templates/apps/api/src/config/__tests__/index.test.ts +37 -2
  112. package/templates/apps/api/src/config/index.ts +19 -6
  113. package/templates/apps/api/src/lib/license-key-store.ts +45 -0
  114. package/templates/apps/api/src/lib/site.ts +5 -3
  115. package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +97 -0
  116. package/templates/apps/api/src/middleware/auth.ts +9 -0
  117. package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +127 -5
  118. package/templates/apps/api/src/routes/content/get-page.ts +86 -2
  119. package/templates/apps/api/src/server.ts +6 -0
  120. package/templates/apps/mcp/__tests__/audit-single-page.test.ts +75 -1
  121. package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +57 -9
  122. package/templates/apps/mcp/package.json +2 -1
  123. package/templates/apps/mcp/src/index.ts +7 -0
  124. package/templates/apps/mcp/src/lib/audit-single-page.ts +36 -10
  125. package/templates/apps/mcp/src/lib/license-key-store.ts +45 -0
  126. package/templates/apps/web/__tests__/setup.ts +18 -0
  127. package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +10 -2
  128. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +2 -2
  129. package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +10 -4
  130. package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +22 -14
  131. package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +26 -18
  132. package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +12 -4
  133. package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +35 -4
  134. package/templates/apps/web/app/[locale]/[slug]/page.tsx +49 -9
  135. package/templates/apps/web/app/[locale]/book-a-call/page.tsx +50 -0
  136. package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
  137. package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
  138. package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +3 -4
  139. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +94 -33
  140. package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +53 -23
  141. package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +96 -0
  142. package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +84 -2
  143. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +5 -6
  144. package/templates/apps/web/app/[locale]/contact/page.tsx +25 -7
  145. package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
  146. package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +3 -4
  147. package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +4 -5
  148. package/templates/apps/web/app/[locale]/glossary/page.tsx +50 -0
  149. package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
  150. package/templates/apps/web/app/[locale]/how-to/page.tsx +25 -15
  151. package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
  152. package/templates/apps/web/app/[locale]/layout.tsx +113 -51
  153. package/templates/apps/web/app/[locale]/newsletter/page.tsx +50 -0
  154. package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
  155. package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
  156. package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +4 -5
  157. package/templates/apps/web/app/[locale]/{shipping → purchase-policy}/page.tsx +15 -10
  158. package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +4 -5
  159. package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
  160. package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +14 -1
  161. package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
  162. package/templates/apps/web/app/[locale]/software/page.tsx +25 -15
  163. package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
  164. package/templates/apps/web/app/[locale]/tech-articles/page.tsx +25 -15
  165. package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +3 -4
  166. package/templates/apps/web/app/[locale]/use-cases/[slug]/page.tsx +48 -0
  167. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +3 -4
  168. package/templates/apps/web/app/[locale]/use-cases/page.tsx +15 -2
  169. package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
  170. package/templates/apps/web/app/[locale]/whitepapers/page.tsx +25 -15
  171. package/templates/apps/web/app/error-fallback.tsx +17 -45
  172. package/templates/apps/web/app/not-found.tsx +14 -38
  173. package/templates/apps/web/app/og/route.tsx +6 -0
  174. package/templates/apps/web/eslint.config.mjs +3 -0
  175. package/templates/apps/web/instrumentation.ts +14 -0
  176. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +38 -0
  177. package/templates/apps/web/lib/license-key-store.ts +52 -0
  178. package/templates/apps/web/lib/nav-config.ts +64 -12
  179. package/templates/apps/web/lib/prisma-for-auth.ts +9 -6
  180. package/templates/apps/web/lib/site-brand.tsx +1 -1
  181. package/templates/apps/web/lib/site-chrome.ts +3 -3
  182. package/templates/apps/web/lib/site-identity.ts +134 -0
  183. package/templates/apps/web/lib/site-theme.ts +11 -0
  184. package/templates/apps/web/messages/en.json +52 -37
  185. package/templates/apps/web/public/android-chrome-192x192.png +0 -0
  186. package/templates/apps/web/public/android-chrome-512x512.png +0 -0
  187. package/templates/apps/web/public/apple-touch-icon.png +0 -0
  188. package/templates/apps/web/public/favicon-16x16.png +0 -0
  189. package/templates/apps/web/public/favicon-32x32.png +0 -0
  190. package/templates/apps/web/public/favicon.ico +0 -0
  191. package/templates/apps/web/public/favicon.svg +3 -3
  192. package/templates/apps/web/public/logomark.svg +6 -3
  193. package/templates/apps/web/public/logos/ai-launch-kit-light.svg +4 -0
  194. package/templates/apps/web/public/logos/ai-launch-kit.svg +4 -0
  195. package/templates/apps/web/public/logos/atomic-agent-light.svg +4 -0
  196. package/templates/apps/web/public/logos/atomic-agent.svg +4 -0
  197. package/templates/apps/web/public/logos/salessmyth-light.svg +4 -0
  198. package/templates/apps/web/public/logos/salessmyth.svg +4 -0
  199. package/templates/apps/web/public/site.webmanifest +4 -4
  200. package/templates/apps/web/public/wordmark-light.svg +4 -0
  201. package/templates/apps/web/public/wordmark.svg +3 -3
  202. package/templates/apps/web/security-headers.config.ts +5 -1
  203. package/templates/content/_site.mdx +23 -0
  204. package/templates/content/en/AboutPage/about.mdx +150 -144
  205. package/templates/content/en/BlogList/blog.mdx +105 -0
  206. package/templates/content/en/ContactPage/contact.mdx +44 -85
  207. package/templates/content/en/FAQPage/faq.mdx +86 -57
  208. package/templates/content/en/HomePage/home.mdx +276 -217
  209. package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +182 -0
  210. package/templates/content/en/SoftwareProduct/product.mdx +175 -0
  211. package/templates/content/en/UseCasesList/use-cases.mdx +170 -0
  212. package/templates/database/CHANGELOG.md +7 -0
  213. package/templates/database/package.json +1 -1
  214. package/templates/package.json +3 -1
  215. package/templates/tools/lint-architecture.ts +315 -0
  216. package/templates/tools/tsconfig.json +14 -0
  217. package/versions.json +33 -33
  218. package/templates/.claude/skills/add-schema/SKILL.md +0 -277
  219. package/templates/.claude/skills/add-schema/references/conflict-handling.md +0 -200
  220. package/templates/.claude/skills/add-schema/references/file-finding.md +0 -123
  221. package/templates/.claude/skills/add-schema/references/schema-types.md +0 -234
  222. package/templates/.claude/skills/scaffold-page/references/page-types.md +0 -169
  223. package/templates/.claude/skills/suggest-site-pages/SKILL.md +0 -242
  224. package/templates/.claude/skills/suggest-site-pages/references/categories.md +0 -287
  225. package/templates/apps/web/app/[locale]/cancellation/page.tsx +0 -44
  226. package/templates/apps/web/app/[locale]/returns/page.tsx +0 -44
  227. package/templates/content/en/CancellationPolicyPage/cancellation.mdx +0 -108
  228. package/templates/content/en/LandingPage/blog.mdx +0 -83
  229. package/templates/content/en/LandingPage/features.mdx +0 -103
  230. package/templates/content/en/LandingPage/how-it-works.mdx +0 -143
  231. package/templates/content/en/ReturnsPolicyPage/returns.mdx +0 -108
  232. package/templates/content/en/ShippingPolicyPage/shipping.mdx +0 -108
@@ -1,169 +0,0 @@
1
- # Page-Type → schema.org Mapping
2
-
3
- The lookup table the `scaffold-page` skill reads at runtime to
4
- resolve a slug or page-purpose hint to a primary schema.org `@type`
5
- plus the matching `@working-theory/schema` builder name.
6
-
7
- The skill resolves in this order:
8
-
9
- 1. **Exact slug match** — `pricing` → `Service`.
10
- 2. **Slug-prefix match** — `blog/<anything>` → `BlogPosting`.
11
- 3. **Free-text hint match** — "company story" / "team" → `AboutPage`.
12
- 4. **Ask** — if nothing matches, ask the consumer rather than
13
- guessing.
14
-
15
- This file's table must agree with the entries
16
- `suggest-site-pages` (#361) emits in `categories.md`. When new types
17
- land in `@working-theory/schema`, both files update in the same follow-up PR.
18
-
19
- ## Identity / surface pages
20
-
21
- | Slug | Primary `@type` | Builder | When to pick |
22
- | ------- | --------------- | ---------------- | --------------------------------------------------------------------- |
23
- | `home` | `HomePage` | `buildHomePage` | The site's root landing page. Anchors hero, value prop, primary CTAs. |
24
- | `about` | `AboutPage` | `buildAboutPage` | Company story / team / founders. Trust + narrative. |
25
-
26
- ## Conversion pages
27
-
28
- | Slug | Primary `@type` | Builder | When to pick |
29
- | --------- | --------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- |
30
- | `pricing` | `Service` | `buildService` | Public price tiers and feature comparison. (Or `Product` if the consumer sells discrete physical/digital products with SKUs.) |
31
- | `contact` | `ContactPage` | `buildContactPage` | Sales / support entry point. Form, address, hours. |
32
- | `book` | `Reservation` | _consumer-defined_ | Service businesses with appointment booking (salon, contractor, restaurant table). Requires consumer to wire the reservation flow. |
33
-
34
- ## Trust pages
35
-
36
- | Slug | Primary `@type` | Builder | When to pick |
37
- | --------- | --------------- | ------------------ | ----------------- |
38
- | `privacy` | `PrivacyPage` | `buildPrivacyPage` | Privacy policy. |
39
- | `terms` | `TermsPage` | `buildTermsPage` | Terms of service. |
40
-
41
- ## Editorial / blog
42
-
43
- | Slug | Primary `@type` | Builder | When to pick |
44
- | ------------- | --------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------- |
45
- | `blog` | `Blog` | _consumer-defined_ | Blog index page. Lists posts. |
46
- | `blog/<slug>` | `BlogPosting` | _consumer-defined_ | Individual blog post. The skill's chained input handles the per-post case naturally — ask `scaffold-page` per post. |
47
-
48
- > Builder availability for editorial types depends on `@working-theory/schema`
49
- > exports at the consumer's installed version. If
50
- > `buildBlogPosting` is missing, fall back to manually authoring
51
- > the JSON-LD via `<JsonLd schema={{...}} />`.
52
-
53
- ## Catalog / commerce
54
-
55
- | Slug | Primary `@type` | Builder | When to pick |
56
- | ----------------- | --------------- | ------------------ | ----------------------------------------------------- |
57
- | `products` | `ItemList` | _consumer-defined_ | Product index. Lists products. |
58
- | `products/<slug>` | `Product` | _consumer-defined_ | Individual product page. |
59
- | `services` | `ServicesList` | _consumer-defined_ | Service index for service-business consumer profiles. |
60
- | `services/<slug>` | `Service` | `buildService` | Individual service page. |
61
-
62
- > For commerce wiring (Stripe products + lookup_keys), use
63
- > `scaffold-commerce` (#363). This skill emits the page; commerce
64
- > wires it.
65
-
66
- ## Q&A / how-to
67
-
68
- | Slug | Primary `@type` | Builder | When to pick |
69
- | --------------- | --------------- | ------------------ | -------------------------------- |
70
- | `faq` | `FAQPage` | _consumer-defined_ | Frequently-asked-questions page. |
71
- | `how-to/<slug>` | `HowTo` | _consumer-defined_ | Step-by-step instructions page. |
72
-
73
- ## Real estate / listings
74
-
75
- | Slug | Primary `@type` | Builder | When to pick |
76
- | ----------------- | ------------------- | ------------------ | ----------------------------- |
77
- | `listings` | `ItemList` | _consumer-defined_ | Property index. |
78
- | `listings/<slug>` | `RealEstateListing` | _consumer-defined_ | Individual listing. |
79
- | `agent` | `RealEstateAgent` | _consumer-defined_ | Solo realtor / agent profile. |
80
-
81
- ## Healthcare / medical
82
-
83
- | Slug | Primary `@type` | Builder | When to pick |
84
- | ----------------- | ------------------------------ | ------------------ | ------------------------------------------------- |
85
- | `practice` | `MedicalBusiness` | _consumer-defined_ | Practice / clinic landing. |
86
- | `provider` | `Physician` / `Dentist` / etc. | _consumer-defined_ | Solo provider profile. Type depends on specialty. |
87
- | `services/<slug>` | `MedicalProcedure` | _consumer-defined_ | Procedure / treatment page. |
88
-
89
- ## Course / education
90
-
91
- | Slug | Primary `@type` | Builder | When to pick |
92
- | ---------------- | ------------------ | ------------------ | --------------------- |
93
- | `courses` | `ItemList` | _consumer-defined_ | Course catalog. |
94
- | `courses/<slug>` | `Course` | _consumer-defined_ | Individual course. |
95
- | `lesson/<slug>` | `LearningResource` | _consumer-defined_ | Free / sample lesson. |
96
-
97
- ## Nonprofit / org
98
-
99
- | Slug | Primary `@type` | Builder | When to pick |
100
- | ----------------- | --------------- | ------------------ | -------------------------------- |
101
- | `mission` | `AboutPage` | `buildAboutPage` | Mission statement / what we do. |
102
- | `donate` | `DonateAction` | _consumer-defined_ | Donation page. |
103
- | `programs/<slug>` | `Program` | _consumer-defined_ | Individual program / initiative. |
104
-
105
- ## Identity entity (Organization vs Person)
106
-
107
- The site's **identity entity** is emitted on `home` (or in a layout
108
- component). Two flavors:
109
-
110
- | Site profile | Identity `@type` | Builder |
111
- | ------------------ | ---------------- | ------------------- |
112
- | Business / company | `Organization` | `buildOrganization` |
113
- | Solo individual | `Person` | `buildPerson` |
114
-
115
- For categories that admit both (real estate, healthcare,
116
- professional services, course/education), `suggest-site-pages`
117
- (#361) disambiguates Person vs Organization based on the consumer's
118
- free-text. This skill receives the resolved type as part of the
119
- chained input or asks if free-text is ambiguous.
120
-
121
- ## When a slug doesn't match anything above
122
-
123
- Don't guess. Ask the consumer:
124
-
125
- > "I don't have a default schema.org type mapped for `/<slug>`. Two
126
- > options:
127
- >
128
- > - Tell me which schema.org `@type` to use (e.g., `WebPage`,
129
- > `Article`, `Event`).
130
- > - Skip JSON-LD on this page; I emit a vanilla route + MDX stub
131
- > and you wire schema later via `add-schema` (#366).
132
- >
133
- > Which?"
134
-
135
- ## Generic fallbacks
136
-
137
- For pages that don't match a specific category, two safe fallbacks:
138
-
139
- - `WebPage` — the most generic schema.org `@type`. Always valid, low
140
- citation value.
141
- - `Article` — for editorial / longform content that isn't a blog
142
- post specifically.
143
-
144
- The `WebPage` fallback is the implicit default if the consumer
145
- explicitly says "no schema" — emit the route + MDX without an
146
- emitted `<JsonLd>` block; consumer can add later via #366.
147
-
148
- ## When `@working-theory/schema` doesn't yet export the builder
149
-
150
- Some types in this table say `_consumer-defined_` for the builder
151
- column. That means `@working-theory/schema` doesn't export a typed builder
152
- for that type yet. The skill's behavior:
153
-
154
- 1. Surface the gap to the consumer:
155
-
156
- > "`@working-theory/schema` doesn't export `build<Type>` yet. I can:
157
- >
158
- > - Emit the route with an inline JSON-LD object literal (less
159
- > type-safe but works).
160
- > - Skip JSON-LD on this page; you wire it via `add-schema`
161
- > (#366) once the builder ships upstream.
162
- > - File an upstream issue requesting the builder.
163
- >
164
- > Which?"
165
-
166
- 2. Wait for the consumer's choice. Don't fabricate a builder.
167
-
168
- The fallback to inline literals is documented in `add-schema`
169
- (#366) too — both skills handle this case the same way.
@@ -1,242 +0,0 @@
1
- ---
2
- name: suggest-site-pages
3
- description: Recommend a starter set of website pages — each tagged with the schema.org type to use — from a free-text business description. Use when the user is opening a new AI Launch Kit project, asks "what pages should this site have?", "help me plan my pages", "what should I build first" for a website, or describes a business in plain language and wants a page plan back. The output is shaped so each line can be passed straight to the `scaffold-page` skill.
4
- ---
5
-
6
- # suggest-site-pages
7
-
8
- Turn a free-text business description into an ordered list of pages, with the
9
- right schema.org type per page, that the user can build with `scaffold-page`.
10
-
11
- ## When to use
12
-
13
- The user is in a fresh `pnpm create ailk` project (or any AI Launch Kit
14
- project that has no pages yet) and needs a plan for what to build. They
15
- describe their business — "I'm building a SaaS for accountants", "I'm
16
- opening a pizza restaurant", "I'm launching my law firm" — and want a
17
- page list back, not a generic site-builder questionnaire.
18
-
19
- Skip this skill when:
20
-
21
- - The user already has a page list and just wants one more page added
22
- (use `scaffold-page` directly).
23
- - The user is asking about page _content_, not page _structure_ (answer
24
- conversationally; this skill is about which pages exist, not what
25
- goes inside them).
26
- - The user wants schema added to an _existing_ page (use `add-schema`).
27
-
28
- ## What you produce
29
-
30
- An ordered list, one line per page, in this exact format:
31
-
32
- ```
33
- <slug> — <Schema.orgType> — <one-sentence purpose>
34
- ```
35
-
36
- Example for a SaaS for accountants:
37
-
38
- ```
39
- home — HomePage — top-of-funnel landing with the headline value prop
40
- about — AboutPage — company story and team
41
- pricing — Product — public price tiers and feature comparison
42
- features — ServicesList — what the product does, broken into capabilities
43
- contact — ContactPage — sales and support entry point
44
- privacy — PrivacyPage — privacy policy
45
- terms — TermsPage — terms of service
46
- ```
47
-
48
- Each line is a copy-paste plan: the user (or you, on their next turn)
49
- can hand any line to `scaffold-page` and the chain works because the
50
- schema type is the input contract `scaffold-page` expects.
51
-
52
- ## The mechanic
53
-
54
- ### Step 1 — Identify the category
55
-
56
- Match the user's description to one of the **10 v1 categories**:
57
-
58
- 1. SaaS
59
- 2. E-commerce
60
- 3. Service business (restaurant / salon / contractor / gym)
61
- 4. Professional services (law / accounting / consulting / agency)
62
- 5. Marketplace
63
- 6. Content / Blog
64
- 7. Course / Education
65
- 8. Real estate
66
- 9. Healthcare / Medical
67
- 10. Nonprofit / Org
68
-
69
- The full corpus — each category's entity tag, page list, and schemas —
70
- lives in `references/categories.md`. **Read that file** before producing
71
- the page list. Don't try to remember it.
72
-
73
- If the description doesn't match any of the 10, do **not** invent a
74
- category. Say:
75
-
76
- > "That's not in the v1 catalog. The closest matches are **\<X\>** and
77
- > **\<Y\>**. Would you like to use one of those, or describe your business
78
- > differently?"
79
-
80
- The two closest matches come from `references/categories.md` — pick
81
- whichever categories share the most surface area with the user's
82
- description (e.g., "research consortium" → Professional services and
83
- Nonprofit / Org).
84
-
85
- ### Step 2 — Disambiguate Person vs Organization (when needed)
86
-
87
- Each category in `references/categories.md` carries an **entity tag**:
88
- `organization`, `person`, or `both`. The tag drives the next step.
89
-
90
- - **`organization`** — skip the question. Marketplaces are always
91
- organizations, SaaS is always an organization. Proceed to Step 3.
92
- - **`person`** — skip the question. A "personal poetry blog" is always
93
- a Person. Proceed to Step 3.
94
- - **`both`** — the consumer could be either. This is where the
95
- disambiguation matters: a solo lawyer's home page anchors on `Person`,
96
- a law firm's anchors on `Organization`, and the page recommendations
97
- shift accordingly.
98
-
99
- For `both`-tagged categories, first check whether the user's free-text
100
- **already settles it**. Phrases like:
101
-
102
- - "my brokerage", "our firm", "the company", "we're a clinic" → Organization
103
- - "I'm a solo \<role\>", "as an independent \<role\>", "my personal", "I'm a freelance" → Person
104
-
105
- If the description settles it, **infer and confirm** rather than ask blind:
106
-
107
- > "Got it — sounds like you're operating as an individual. I'll plan
108
- > the pages around a Person identity. Does that match?"
109
-
110
- If it's genuinely ambiguous, **ask once**:
111
-
112
- > "Are you operating as an individual practitioner or as a business
113
- > entity (firm / company / organization)? It changes which schemas
114
- > anchor your home, about, and contact pages."
115
-
116
- Then proceed to Step 3 with the answer.
117
-
118
- ### Step 3 — Emit the page list
119
-
120
- Look up the category in `references/categories.md`. Use:
121
-
122
- - The **page list** for that category, in the listed order.
123
- - The **primary schema.org type** for each page, adjusted for the
124
- Person-vs-Organization choice from Step 2 where the corpus calls it
125
- out (typically the home, about, and contact pages).
126
-
127
- Format every line as `<slug> — <Schema.orgType> — <one-sentence purpose>`.
128
- The slugs come from the corpus; don't invent new ones. The one-sentence
129
- purpose can be lifted from the corpus or rephrased — keep it short.
130
-
131
- After the list, add one line:
132
-
133
- > "Pass any of these to `scaffold-page` to generate the page."
134
-
135
- ## Person vs Organization — how it actually maps
136
-
137
- The Person/Organization choice cascades into the **identity attached to
138
- the page**, not into a different per-page type. `HomePage`, `AboutPage`,
139
- and `ContactPage` are entity-agnostic; only the `Organization` vs
140
- `Person` identity inside the JSON-LD changes.
141
-
142
- `@working-theory/schema` does **not** ship narrower types like `Attorney`,
143
- `Physician`, `RealEstateAgent`, `LegalService`, `MedicalBusiness`, or
144
- `EducationalOrganization` at v1. If the user mentions a category whose
145
- "natural" schema is one of those, fall back to the closest type from
146
- the supported catalog — typically `ServicesList` / `Service` for
147
- service-shaped categories. The corpus already does this for you.
148
-
149
- ## Invocation contract
150
-
151
- This skill is **conversational only**. It is not a CLI command, not an
152
- MCP tool. The user invokes it by talking to Claude in plain language.
153
-
154
- ## The `references/` convention
155
-
156
- This skill establishes a pattern: **`SKILL.md` holds the mechanic; the
157
- knowledge corpus lives in `references/<corpus>.md`**.
158
-
159
- - `SKILL.md` describes how to invoke the skill, the steps to run, the
160
- output format, and pointers into the corpus. It stays short — under
161
- 500 lines is the budget — so the whole skill is auditable in under
162
- ten minutes.
163
- - `references/<corpus>.md` holds the data the skill operates on. For
164
- this skill, that's `references/categories.md`: 10 categories, each
165
- with entity tag, page list, and primary schema per page. Editing the
166
- corpus is a single-file change; the mechanic stays untouched.
167
-
168
- Other OSS skills that need a knowledge corpus (`add-schema` for
169
- primary/supplementary tagging, `provision-config` for persistence
170
- options) should adopt the same shape.
171
-
172
- ## Worked examples
173
-
174
- **Example 1 — SaaS (unambiguous Organization)**
175
-
176
- User: "I'm building a SaaS for dental practices to manage appointments."
177
-
178
- You:
179
-
180
- 1. Category → SaaS
181
- 2. Entity tag → `organization`. No question.
182
- 3. Read `references/categories.md` § SaaS, emit:
183
-
184
- ```
185
- home — HomePage — top-of-funnel landing with the headline value prop
186
- about — AboutPage — company story and team
187
- pricing — Product — public price tiers and feature comparison
188
- features — ServicesList — what the product does, broken into capabilities
189
- contact — ContactPage — sales and support entry point
190
- privacy — PrivacyPage — privacy policy
191
- terms — TermsPage — terms of service
192
-
193
- Pass any of these to scaffold-page to generate the page.
194
- ```
195
-
196
- **Example 2 — Law firm (ambiguous, asks)**
197
-
198
- User: "What pages should I have for my law firm?"
199
-
200
- You: "Are you operating as an individual lawyer or as a law firm
201
- entity? It changes which schemas anchor your home, about, and contact
202
- pages."
203
-
204
- User: "It's a firm with five attorneys."
205
-
206
- You: read `references/categories.md` § Professional services, render
207
- the list with `Organization` as the home/about/contact identity.
208
-
209
- **Example 3 — Real estate (free-text settles it)**
210
-
211
- User: "What pages should I have for a real estate brokerage?"
212
-
213
- You: "Got it — 'brokerage' tells me you're operating as an organization,
214
- not a solo agent. I'll plan around an Organization identity. Does that
215
- match?" Then proceed.
216
-
217
- **Example 4 — Personal blog (unambiguous Person)**
218
-
219
- User: "What pages should I have for my personal poetry blog?"
220
-
221
- You:
222
-
223
- 1. Category → Content / Blog
224
- 2. Entity tag → `person` (the corpus tags personal blogs as Person). No
225
- question.
226
- 3. Render the blog page list with `Person` as the home/about identity.
227
-
228
- **Example 5 — Out of catalog**
229
-
230
- User: "What pages should I have for a quantum-computing research
231
- consortium?"
232
-
233
- You: "That's not in the v1 catalog. The closest matches are
234
- **Professional services** and **Nonprofit / Org**. Would you like to use
235
- one of those, or describe your business differently?"
236
-
237
- ## When the user pushes back
238
-
239
- The corpus is opinionated, not authoritative. If the user disputes a
240
- schema choice, explain why the corpus tagged it that way, then offer
241
- to override — `scaffold-page` accepts any type from the supported
242
- catalog. Don't argue.