create-ailk 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/README.md +44 -5
  2. package/component-catalog.json +146 -21
  3. package/component-catalog.md +9 -6
  4. package/dist/add-module-core.d.ts +22 -0
  5. package/dist/add-module-core.js +50 -0
  6. package/dist/add-module.d.ts +89 -0
  7. package/dist/add-module.js +334 -0
  8. package/dist/category-profile.d.ts +126 -0
  9. package/dist/category-profile.js +262 -0
  10. package/dist/cli.js +124 -13
  11. package/dist/copy.d.ts +14 -0
  12. package/dist/copy.js +38 -1
  13. package/dist/index.d.ts +4 -2
  14. package/dist/index.js +6 -1
  15. package/dist/lib/extract-module-bundle.d.ts +76 -2
  16. package/dist/lib/extract-module-bundle.js +219 -8
  17. package/dist/lib/license-key-files.d.ts +15 -0
  18. package/dist/lib/license-key-files.js +102 -0
  19. package/dist/lib/module-license-gate.d.ts +6 -1
  20. package/dist/lib/module-license-gate.js +6 -1
  21. package/dist/lib/pro-callout.d.ts +16 -10
  22. package/dist/lib/pro-callout.js +27 -4
  23. package/dist/license-set.d.ts +34 -0
  24. package/dist/license-set.js +194 -0
  25. package/dist/module-architecture.d.ts +20 -0
  26. package/dist/module-architecture.js +77 -19
  27. package/dist/modules/commerce/0.6.0.tar.gz +0 -0
  28. package/dist/modules/commerce/0.6.1.tar.gz +0 -0
  29. package/dist/modules/docs-blog/0.6.0.tar.gz +0 -0
  30. package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
  31. package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
  32. package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
  33. package/dist/modules/multi-tenant/0.6.0.tar.gz +0 -0
  34. package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
  35. package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
  36. package/dist/modules/scheduling/0.6.0.tar.gz +0 -0
  37. package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
  38. package/dist/modules/signal-collectors/0.6.0.tar.gz +0 -0
  39. package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
  40. package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
  41. package/dist/modules/workspace/0.6.0.tar.gz +0 -0
  42. package/dist/modules/workspace/0.6.1.tar.gz +0 -0
  43. package/dist/parse-args.d.ts +7 -0
  44. package/dist/parse-args.js +23 -1
  45. package/dist/programmatic.d.ts +46 -0
  46. package/dist/programmatic.js +144 -19
  47. package/dist/site-chrome.d.ts +18 -7
  48. package/dist/site-chrome.js +32 -14
  49. package/dist/site-roster.d.ts +127 -0
  50. package/dist/site-roster.js +494 -0
  51. package/dist/surfaces.d.ts +20 -7
  52. package/dist/surfaces.js +149 -28
  53. package/dist/sync-routes.d.ts +9 -0
  54. package/dist/sync-routes.js +2 -2
  55. package/dist/template-manifest.d.ts +58 -2
  56. package/dist/template-manifest.js +196 -69
  57. package/package.json +6 -4
  58. package/site-templates/_base/content/en/BookCall/book-call.mdx +53 -0
  59. package/site-templates/_base/content/en/GlossaryList/glossary.mdx +66 -0
  60. package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +68 -0
  61. package/site-templates/_base/content/en/Pricing/pricing.mdx +71 -62
  62. package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +2 -3
  63. package/site-templates/_base/content/en/TermsPage/terms.mdx +2 -3
  64. package/site-templates/_base/content/en/UseCase/first-use-case.mdx +23 -0
  65. package/site-templates/_base/content/en/UseCase/second-use-case.mdx +23 -0
  66. package/site-templates/_base/content/en/UseCase/third-use-case.mdx +23 -0
  67. package/site-templates/designs/minimalism/DESIGN.md +162 -0
  68. package/site-templates/designs/standard/DESIGN.md +162 -0
  69. package/site-templates/marketing-site/DESIGN.md +162 -0
  70. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +312 -57
  71. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +209 -90
  72. package/site-templates/marketing-site/ailk-template.json +1 -0
  73. package/site-templates/marketing-site-free/DESIGN.md +162 -0
  74. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +260 -66
  75. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +294 -114
  76. package/site-templates/marketing-site-free/ailk-template.json +3 -2
  77. package/site-templates/minimalism-site/DESIGN.md +162 -0
  78. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +246 -19
  79. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +185 -51
  80. package/site-templates/minimalism-site/ailk-template.json +3 -2
  81. package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +53 -0
  82. package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +3 -37
  83. package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
  84. package/site-templates/saas-product/DESIGN.md +162 -0
  85. package/site-templates/simple-service/DESIGN.md +162 -0
  86. package/site-templates/simple-service/TEMPLATE-MANIFEST.json +135 -26
  87. package/site-templates/simple-service/TEMPLATE-MANIFEST.md +114 -59
  88. package/site-templates/simple-service/ailk-template.json +4 -3
  89. package/site-templates/simple-service/content/en/BookCall/book-call.mdx +53 -0
  90. package/site-templates/simple-service/content/en/ContactPage/contact.mdx +1 -36
  91. package/site-templates/simple-service/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
  92. package/templates/.claude/settings.json +15 -0
  93. package/templates/.claude/skills/README.md +8 -8
  94. package/templates/.claude/skills/{scaffold-auth → add-auth}/SKILL.md +7 -7
  95. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/env-vars.md +2 -2
  96. package/templates/.claude/skills/{scaffold-auth → add-auth}/references/oauth-app-setup.md +3 -3
  97. package/templates/.claude/skills/{scaffold-page → add-page}/SKILL.md +76 -62
  98. package/templates/.claude/skills/add-page/references/page-types.md +111 -0
  99. package/templates/.claude/skills/{scaffold-page → add-page}/templates/content.mdx.tmpl +4 -4
  100. package/templates/.claude/skills/{scaffold-page → add-page}/templates/route.tsx.tmpl +1 -1
  101. package/templates/.claude/skills/{audit-site → check-site}/SKILL.md +16 -17
  102. package/templates/.claude/skills/{audit-site → check-site}/references/common-errors.md +3 -3
  103. package/templates/.claude/skills/{audit-site → check-site}/references/findings-glossary.md +16 -14
  104. package/templates/.claude/skills/{audit-site → check-site}/references/severity-levels.md +1 -1
  105. package/templates/.claude/skills/fill-page/SKILL.md +180 -0
  106. package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +80 -0
  107. package/templates/.claude/skills/fill-page/references/section-sources.md +41 -0
  108. package/templates/.claude/skills/{provision-config → setup-deploy}/SKILL.md +8 -8
  109. package/templates/.claude/skills/{provision-config → setup-deploy}/references/env-vars-template.md +2 -2
  110. package/templates/.claude/skills/{provision-config → setup-deploy}/references/runbook-template.md +8 -8
  111. package/templates/.claude/skills/{provision-config → setup-deploy}/references/vercel-json-template.md +1 -1
  112. package/templates/.claude/skills/upgrade-plan/SKILL.md +117 -0
  113. package/templates/.claude/skills/upgrade-plan/references/options.md +24 -0
  114. package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +527 -0
  115. package/templates/.github/workflows/ci.yml +5 -0
  116. package/templates/CLAUDE.md +10 -5
  117. package/templates/DESIGN.md +162 -0
  118. package/templates/README.md +134 -38
  119. package/templates/apps/api/.env.example +2 -1
  120. package/templates/apps/api/package.json +1 -1
  121. package/templates/apps/api/src/config/__tests__/index.test.ts +37 -2
  122. package/templates/apps/api/src/config/index.ts +19 -6
  123. package/templates/apps/api/src/lib/license-key-store.ts +45 -0
  124. package/templates/apps/api/src/lib/site.ts +5 -3
  125. package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +97 -0
  126. package/templates/apps/api/src/middleware/auth.ts +9 -0
  127. package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +127 -5
  128. package/templates/apps/api/src/routes/content/get-page.ts +86 -2
  129. package/templates/apps/api/src/server.ts +6 -0
  130. package/templates/apps/mcp/__tests__/audit-single-page.test.ts +75 -1
  131. package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +57 -9
  132. package/templates/apps/mcp/package.json +2 -1
  133. package/templates/apps/mcp/src/index.ts +7 -0
  134. package/templates/apps/mcp/src/lib/audit-single-page.ts +36 -10
  135. package/templates/apps/mcp/src/lib/license-key-store.ts +45 -0
  136. package/templates/apps/web/PRODUCT.md +86 -0
  137. package/templates/apps/web/__tests__/setup.ts +18 -0
  138. package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +10 -2
  139. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +2 -2
  140. package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +10 -4
  141. package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +22 -14
  142. package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +26 -18
  143. package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +12 -4
  144. package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +35 -4
  145. package/templates/apps/web/app/[locale]/[slug]/page.tsx +49 -9
  146. package/templates/apps/web/app/[locale]/book-a-call/page.tsx +50 -0
  147. package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
  148. package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
  149. package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +3 -4
  150. package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +94 -33
  151. package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +53 -23
  152. package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +96 -0
  153. package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +84 -2
  154. package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +5 -6
  155. package/templates/apps/web/app/[locale]/contact/page.tsx +25 -7
  156. package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
  157. package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +3 -4
  158. package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +4 -5
  159. package/templates/apps/web/app/[locale]/glossary/page.tsx +50 -0
  160. package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
  161. package/templates/apps/web/app/[locale]/how-to/page.tsx +25 -15
  162. package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
  163. package/templates/apps/web/app/[locale]/layout.tsx +113 -51
  164. package/templates/apps/web/app/[locale]/newsletter/page.tsx +50 -0
  165. package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
  166. package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
  167. package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +4 -5
  168. package/templates/apps/web/app/[locale]/{shipping → purchase-policy}/page.tsx +15 -10
  169. package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +4 -5
  170. package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
  171. package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +14 -1
  172. package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
  173. package/templates/apps/web/app/[locale]/software/page.tsx +25 -15
  174. package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
  175. package/templates/apps/web/app/[locale]/tech-articles/page.tsx +25 -15
  176. package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +3 -4
  177. package/templates/apps/web/app/[locale]/use-cases/[slug]/page.tsx +48 -0
  178. package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +3 -4
  179. package/templates/apps/web/app/[locale]/use-cases/page.tsx +15 -2
  180. package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
  181. package/templates/apps/web/app/[locale]/whitepapers/page.tsx +25 -15
  182. package/templates/apps/web/app/error-fallback.tsx +17 -45
  183. package/templates/apps/web/app/not-found.tsx +14 -38
  184. package/templates/apps/web/app/og/route.tsx +6 -0
  185. package/templates/apps/web/eslint.config.mjs +3 -0
  186. package/templates/apps/web/instrumentation.ts +14 -0
  187. package/templates/apps/web/lib/__tests__/site-theme.test.ts +135 -20
  188. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +38 -0
  189. package/templates/apps/web/lib/license-key-store.ts +52 -0
  190. package/templates/apps/web/lib/nav-config.ts +64 -12
  191. package/templates/apps/web/lib/prisma-for-auth.ts +9 -6
  192. package/templates/apps/web/lib/site-brand.tsx +4 -8
  193. package/templates/apps/web/lib/site-chrome.ts +3 -3
  194. package/templates/apps/web/lib/site-identity.ts +134 -0
  195. package/templates/apps/web/lib/site-theme.ts +11 -0
  196. package/templates/apps/web/messages/en.json +52 -37
  197. package/templates/apps/web/middleware.ts +1 -1
  198. package/templates/apps/web/public/android-chrome-192x192.png +0 -0
  199. package/templates/apps/web/public/android-chrome-512x512.png +0 -0
  200. package/templates/apps/web/public/apple-touch-icon.png +0 -0
  201. package/templates/apps/web/public/favicon-16x16.png +0 -0
  202. package/templates/apps/web/public/favicon-32x32.png +0 -0
  203. package/templates/apps/web/public/favicon.ico +0 -0
  204. package/templates/apps/web/public/favicon.svg +3 -3
  205. package/templates/apps/web/public/logomark.svg +6 -3
  206. package/templates/apps/web/public/logos/ai-launch-kit-light.svg +4 -0
  207. package/templates/apps/web/public/logos/ai-launch-kit.svg +4 -0
  208. package/templates/apps/web/public/logos/atomic-agent-light.svg +4 -0
  209. package/templates/apps/web/public/logos/atomic-agent.svg +4 -0
  210. package/templates/apps/web/public/logos/salessmyth-light.svg +4 -0
  211. package/templates/apps/web/public/logos/salessmyth.svg +4 -0
  212. package/templates/apps/web/public/site.webmanifest +4 -4
  213. package/templates/apps/web/public/wordmark-light.svg +4 -0
  214. package/templates/apps/web/public/wordmark.svg +3 -3
  215. package/templates/apps/web/security-headers.config.ts +5 -1
  216. package/templates/apps/web/src/lib/commerce-sections.ts +35 -3
  217. package/templates/content/_site.mdx +41 -3
  218. package/templates/content/en/AboutPage/about.mdx +150 -144
  219. package/templates/content/en/BlogList/blog.mdx +105 -0
  220. package/templates/content/en/ContactPage/contact.mdx +44 -85
  221. package/templates/content/en/FAQPage/faq.mdx +86 -57
  222. package/templates/content/en/HomePage/home.mdx +276 -217
  223. package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +182 -0
  224. package/templates/content/en/SoftwareProduct/product.mdx +175 -0
  225. package/templates/content/en/UseCasesList/use-cases.mdx +170 -0
  226. package/templates/database/CHANGELOG.md +14 -0
  227. package/templates/database/package.json +3 -2
  228. package/templates/package.json +3 -1
  229. package/templates/tools/lint-architecture.ts +315 -0
  230. package/templates/tools/tsconfig.json +14 -0
  231. package/versions.json +33 -33
  232. package/templates/.claude/skills/add-schema/SKILL.md +0 -277
  233. package/templates/.claude/skills/add-schema/references/conflict-handling.md +0 -200
  234. package/templates/.claude/skills/add-schema/references/file-finding.md +0 -123
  235. package/templates/.claude/skills/add-schema/references/schema-types.md +0 -234
  236. package/templates/.claude/skills/scaffold-page/references/page-types.md +0 -169
  237. package/templates/.claude/skills/suggest-site-pages/SKILL.md +0 -242
  238. package/templates/.claude/skills/suggest-site-pages/references/categories.md +0 -287
  239. package/templates/apps/web/app/[locale]/cancellation/page.tsx +0 -44
  240. package/templates/apps/web/app/[locale]/returns/page.tsx +0 -44
  241. package/templates/apps/web/public/logo-dark.svg +0 -21
  242. package/templates/apps/web/public/logo-light.svg +0 -21
  243. package/templates/content/en/CancellationPolicyPage/cancellation.mdx +0 -108
  244. package/templates/content/en/LandingPage/blog.mdx +0 -83
  245. package/templates/content/en/LandingPage/features.mdx +0 -103
  246. package/templates/content/en/LandingPage/how-it-works.mdx +0 -143
  247. package/templates/content/en/ReturnsPolicyPage/returns.mdx +0 -108
  248. package/templates/content/en/ShippingPolicyPage/shipping.mdx +0 -108
@@ -1,287 +0,0 @@
1
- # Site-page categories — v1 corpus
2
-
3
- The 10 business categories `suggest-site-pages` knows about, with the
4
- ordered page list and primary schema.org type for each page. Schemas
5
- are drawn from the 60 page types `@working-theory/schema` builds; nothing in
6
- this file should reference a type the package can't generate.
7
-
8
- ## How to read this file
9
-
10
- Each category section has:
11
-
12
- 1. **Name and description** — what the category covers.
13
- 2. **Entity tag** — `organization`, `person`, or `both`. Drives whether
14
- `suggest-site-pages` asks the Person-vs-Organization disambiguation
15
- question.
16
- 3. **Page list** — ordered. The slug is what `scaffold-page` will use.
17
- 4. **Primary schema per page** — the `Schema.orgType` to emit.
18
-
19
- When the entity tag is `both`, some pages (typically home, about,
20
- contact) carry an identity that flips between `Organization` and
21
- `Person` based on the consumer's answer. The page's _own_ schema type
22
- (`HomePage`, `AboutPage`, `ContactPage`) does not change; only the
23
- identity attached inside the JSON-LD does.
24
-
25
- ---
26
-
27
- ## SaaS
28
-
29
- Software-as-a-service products — anything where the value prop is
30
- "sign up and use the software." Includes vertical SaaS, horizontal
31
- tools, dev platforms, and self-serve B2B.
32
-
33
- - **Entity tag:** `organization`
34
- - **Pages:**
35
-
36
- | Slug | Schema.orgType | Purpose |
37
- | ---------- | -------------- | -------------------------------------------------- |
38
- | `home` | `HomePage` | top-of-funnel landing with the headline value prop |
39
- | `about` | `AboutPage` | company story and team |
40
- | `pricing` | `Product` | public price tiers and feature comparison |
41
- | `features` | `ServicesList` | what the product does, broken into capabilities |
42
- | `contact` | `ContactPage` | sales and support entry point |
43
- | `privacy` | `PrivacyPage` | privacy policy |
44
- | `terms` | `TermsPage` | terms of service |
45
-
46
- ---
47
-
48
- ## E-commerce
49
-
50
- Direct-to-consumer or B2B storefronts selling physical or digital
51
- goods. The catalog is the primary surface; everything else supports it.
52
-
53
- - **Entity tag:** `organization`
54
- - **Pages:**
55
-
56
- | Slug | Schema.orgType | Purpose |
57
- | --------- | -------------- | ------------------------------------------- |
58
- | `home` | `HomePage` | featured products and category entry points |
59
- | `shop` | `ProductsList` | the full catalog |
60
- | `about` | `AboutPage` | brand story and what the company makes |
61
- | `contact` | `ContactPage` | customer-service entry point |
62
- | `faq` | `FAQPage` | shipping, returns, sizing, common questions |
63
- | `privacy` | `PrivacyPage` | privacy policy |
64
- | `terms` | `TermsPage` | terms of service |
65
-
66
- Per-product pages use `Product` and live under `shop/<product-slug>`.
67
- `scaffold-page` handles them one at a time once the user has the
68
- catalog page.
69
-
70
- ---
71
-
72
- ## Service business
73
-
74
- Restaurant, salon, contractor, gym, plumber, cleaner — anyone whose
75
- business is "show up and do the work." Owner is usually an entity
76
- (LLC / corp), occasionally a sole proprietor.
77
-
78
- - **Entity tag:** `both`
79
- - **Pages:**
80
-
81
- | Slug | Schema.orgType | Purpose |
82
- | -------------- | ------------------ | --------------------------------------------------- |
83
- | `home` | `HomePage` | what the business does, where, and how to book |
84
- | `services` | `ServicesList` | menu of services offered |
85
- | `about` | `AboutPage` | the operator's story and credentials |
86
- | `contact` | `ContactPage` | hours, address, booking link |
87
- | `testimonials` | `TestimonialsList` | customer reviews and quotes |
88
- | `faq` | `FAQPage` | common questions about service, pricing, scheduling |
89
- | `privacy` | `PrivacyPage` | privacy policy |
90
- | `terms` | `TermsPage` | terms of service |
91
-
92
- Individual services go under `services/<service-slug>` with `Service`
93
- as the type. The home/about/contact pages anchor on `Organization` for
94
- a business entity, `Person` for a sole proprietor.
95
-
96
- ---
97
-
98
- ## Professional services
99
-
100
- Law firms, accounting firms, consulting shops, marketing agencies — fee-for-engagement
101
- expertise. Almost always firm-shaped at scale, but plenty of solo practitioners.
102
-
103
- - **Entity tag:** `both`
104
- - **Pages:**
105
-
106
- | Slug | Schema.orgType | Purpose |
107
- | -------------- | ----------------- | ------------------------------------------------- |
108
- | `home` | `HomePage` | who the firm serves and what kinds of engagements |
109
- | `services` | `ServicesList` | practice areas or service lines |
110
- | `team` | `TeamList` | the people clients will work with |
111
- | `case-studies` | `CaseStudiesList` | engagement outcomes and references |
112
- | `about` | `AboutPage` | firm history, philosophy, credentials |
113
- | `contact` | `ContactPage` | how to reach out about an engagement |
114
- | `blog` | `BlogList` | thought leadership and updates |
115
- | `privacy` | `PrivacyPage` | privacy policy |
116
- | `terms` | `TermsPage` | terms of service |
117
-
118
- For solo practitioners, drop the `team` page and anchor home/about/contact
119
- on `Person` instead of `Organization`.
120
-
121
- ---
122
-
123
- ## Marketplace
124
-
125
- Two-sided platforms — buyers on one side, sellers/providers on the
126
- other. Always organizational; an individual cannot be a marketplace.
127
-
128
- - **Entity tag:** `organization`
129
- - **Pages:**
130
-
131
- | Slug | Schema.orgType | Purpose |
132
- | ------------- | -------------- | ------------------------------------------------ |
133
- | `home` | `HomePage` | the value prop for both sides of the marketplace |
134
- | `for-buyers` | `ServicesList` | what buyers get and how it works |
135
- | `for-sellers` | `ServicesList` | what sellers get and how to onboard |
136
- | `browse` | `ProductsList` | the searchable catalog of listings |
137
- | `about` | `AboutPage` | who runs the platform and why |
138
- | `contact` | `ContactPage` | support entry point |
139
- | `faq` | `FAQPage` | trust, payments, dispute resolution |
140
- | `privacy` | `PrivacyPage` | privacy policy |
141
- | `terms` | `TermsPage` | terms of service |
142
-
143
- ---
144
-
145
- ## Content / Blog
146
-
147
- Publications, personal blogs, newsletters with a website. The
148
- defining feature: posts are the primary surface, not products or
149
- services.
150
-
151
- - **Entity tag:** `both`
152
- - **Pages:**
153
-
154
- | Slug | Schema.orgType | Purpose |
155
- | --------- | -------------- | ----------------------------------------- |
156
- | `home` | `HomePage` | recent and featured posts |
157
- | `blog` | `BlogList` | the full archive |
158
- | `about` | `AboutPage` | who writes and why |
159
- | `contact` | `ContactPage` | how to reach the author or editorial team |
160
- | `privacy` | `PrivacyPage` | privacy policy |
161
- | `terms` | `TermsPage` | terms of service |
162
-
163
- Individual posts use `BlogPosting`. A "personal" blog (one writer,
164
- their name on the site) is `Person`; an editorial publication with a
165
- masthead is `Organization`. Phrases like "personal" or "my" in the
166
- description settle it as Person without asking.
167
-
168
- ---
169
-
170
- ## Course / Education
171
-
172
- Course providers, schools, online academies, individual instructors
173
- selling courses. Core surface is the course catalog.
174
-
175
- - **Entity tag:** `both`
176
- - **Pages:**
177
-
178
- | Slug | Schema.orgType | Purpose |
179
- | -------------- | ------------------ | ------------------------------------------------ |
180
- | `home` | `HomePage` | who the courses are for and the headline outcome |
181
- | `courses` | `CoursesList` | catalog of available courses |
182
- | `about` | `AboutPage` | instructor or institution story |
183
- | `testimonials` | `TestimonialsList` | student outcomes and quotes |
184
- | `contact` | `ContactPage` | enrollment and support |
185
- | `faq` | `FAQPage` | format, prerequisites, certification |
186
- | `privacy` | `PrivacyPage` | privacy policy |
187
- | `terms` | `TermsPage` | terms of service |
188
-
189
- Individual courses use `Course`. A solo instructor anchors on `Person`;
190
- a school anchors on `Organization`.
191
-
192
- ---
193
-
194
- ## Real estate
195
-
196
- Brokerages, individual agents, property-management firms. The
197
- disambiguation matters here: a solo agent's site looks different from
198
- a brokerage's.
199
-
200
- - **Entity tag:** `both`
201
- - **Pages:**
202
-
203
- | Slug | Schema.orgType | Purpose |
204
- | -------------- | ------------------ | ------------------------------------------------------- |
205
- | `home` | `HomePage` | what kinds of properties and which markets |
206
- | `listings` | `ProductsList` | available properties (treat each property as a Product) |
207
- | `services` | `ServicesList` | buyer / seller / rental representation |
208
- | `about` | `AboutPage` | the agent's or brokerage's story and credentials |
209
- | `team` | `TeamList` | the agents at the brokerage (skip for solo agents) |
210
- | `testimonials` | `TestimonialsList` | client reviews |
211
- | `contact` | `ContactPage` | how to reach out about a property |
212
- | `privacy` | `PrivacyPage` | privacy policy |
213
- | `terms` | `TermsPage` | terms of service |
214
-
215
- Words like "brokerage", "team", "our agents" → `Organization`. "Solo
216
- agent", "I represent" → `Person`. Drop the `team` page for solo
217
- agents.
218
-
219
- ---
220
-
221
- ## Healthcare / Medical
222
-
223
- Clinics, solo practitioners, group practices, dental offices,
224
- therapists, specialty practices. Privacy and credibility are
225
- load-bearing here.
226
-
227
- - **Entity tag:** `both`
228
- - **Pages:**
229
-
230
- | Slug | Schema.orgType | Purpose |
231
- | ---------- | -------------- | ------------------------------------------------------ |
232
- | `home` | `HomePage` | what care is offered and for whom |
233
- | `services` | `ServicesList` | conditions treated and procedures offered |
234
- | `team` | `TeamList` | the providers (skip for solo practitioners) |
235
- | `about` | `AboutPage` | practice philosophy, credentials, affiliations |
236
- | `faq` | `FAQPage` | insurance, scheduling, what to expect |
237
- | `contact` | `ContactPage` | hours, address, intake form link |
238
- | `privacy` | `PrivacyPage` | privacy policy (HIPAA-relevant; flag this to the user) |
239
- | `terms` | `TermsPage` | terms of service |
240
-
241
- Solo practitioner → `Person`; clinic or group practice → `Organization`.
242
- Drop `team` for solo practitioners.
243
-
244
- When emitting the privacy line, mention HIPAA: "Healthcare sites need
245
- a HIPAA-aware privacy policy. The default `PrivacyPage` is a starting
246
- point, not a finished policy."
247
-
248
- ---
249
-
250
- ## Nonprofit / Org
251
-
252
- Nonprofits, advocacy groups, professional associations, foundations.
253
- Always organizational by nature; even a one-person foundation
254
- operates as an entity.
255
-
256
- - **Entity tag:** `organization`
257
- - **Pages:**
258
-
259
- | Slug | Schema.orgType | Purpose |
260
- | ---------- | -------------- | ------------------------------------------------------------- |
261
- | `home` | `HomePage` | mission and what the org does this year |
262
- | `programs` | `ServicesList` | programs the org runs |
263
- | `about` | `AboutPage` | history, mission, governance |
264
- | `team` | `TeamList` | staff and board |
265
- | `partners` | `PartnersList` | funders, partners, supporting organizations |
266
- | `events` | `EventsList` | upcoming events and campaigns |
267
- | `donate` | `Service` | donation entry point (treat the act of donating as a Service) |
268
- | `contact` | `ContactPage` | how to reach the org |
269
- | `privacy` | `PrivacyPage` | privacy policy |
270
- | `terms` | `TermsPage` | terms of service |
271
-
272
- ---
273
-
274
- ## Schema-builder coverage
275
-
276
- Every `Schema.orgType` referenced above is a member of the
277
- `SchemaOrgType` union exported by `@working-theory/schema` and has a builder
278
- function. The v1 catalog uses 21 of the 60 supported types:
279
-
280
- `HomePage`, `AboutPage`, `ContactPage`, `PrivacyPage`, `TermsPage`,
281
- `Organization`, `Person`, `ServicesList`, `Service`, `ProductsList`,
282
- `Product`, `FAQPage`, `TestimonialsList`, `TeamList`, `PartnersList`,
283
- `EventsList`, `CoursesList`, `Course`, `BlogList`, `BlogPosting`,
284
- `CaseStudiesList`.
285
-
286
- The remaining 39 types are available to `scaffold-page` and `add-schema`
287
- for per-page use but don't drive category recommendations.
@@ -1,44 +0,0 @@
1
- // CancellationPolicyPage route (#5947). Reads the CancellationPolicyPage MDX frontmatter, renders sections via
2
- // SectionRenderer, and emits a JSON-LD <script>.
3
- import type {
4
- getMdxSource as defaultGetMdxSource,
5
- getPageSections as defaultGetPageSections} from "@working-theory/page-renderer";
6
- import {
7
- renderPage,
8
- renderPageMetadata
9
- } from "@working-theory/page-renderer";
10
- import type { Metadata } from "next";
11
- import type { ReactElement } from "react";
12
-
13
- interface Props {
14
- params: Promise<{ locale: string }>;
15
- getMdxSource?: typeof defaultGetMdxSource;
16
- getPageSections?: typeof defaultGetPageSections;
17
- }
18
-
19
- export async function generateMetadata({
20
- params,
21
- }: Pick<Props, "params">): Promise<Metadata> {
22
- const { locale } = await params;
23
- return renderPageMetadata({ type: "CancellationPolicyPage", slug: "cancellation", locale });
24
- }
25
-
26
- export default async function Page({
27
- params,
28
- getMdxSource,
29
- getPageSections,
30
- }: Props): Promise<ReactElement> {
31
- const { locale } = await params;
32
- return renderPage({
33
- type: "CancellationPolicyPage",
34
- slug: "cancellation",
35
- locale,
36
- // Without a namespace `renderPage` 404s on a missing seed — and a scaffold
37
- // IS a missing-seed environment, since `build-templates.mjs` snapshots
38
- // `apps/` but deliberately not `content/`. The namespace makes this route
39
- // render the #4154 authoring empty state at 200, exactly as /terms does.
40
- translationsNamespace: "cancellation",
41
- ...(getMdxSource !== undefined && { getMdxSource }),
42
- ...(getPageSections !== undefined && { getPageSections }),
43
- });
44
- }
@@ -1,44 +0,0 @@
1
- // ReturnsPolicyPage route (#5947). Reads the ReturnsPolicyPage MDX frontmatter, renders sections via
2
- // SectionRenderer, and emits a JSON-LD <script>.
3
- import type {
4
- getMdxSource as defaultGetMdxSource,
5
- getPageSections as defaultGetPageSections} from "@working-theory/page-renderer";
6
- import {
7
- renderPage,
8
- renderPageMetadata
9
- } from "@working-theory/page-renderer";
10
- import type { Metadata } from "next";
11
- import type { ReactElement } from "react";
12
-
13
- interface Props {
14
- params: Promise<{ locale: string }>;
15
- getMdxSource?: typeof defaultGetMdxSource;
16
- getPageSections?: typeof defaultGetPageSections;
17
- }
18
-
19
- export async function generateMetadata({
20
- params,
21
- }: Pick<Props, "params">): Promise<Metadata> {
22
- const { locale } = await params;
23
- return renderPageMetadata({ type: "ReturnsPolicyPage", slug: "returns", locale });
24
- }
25
-
26
- export default async function Page({
27
- params,
28
- getMdxSource,
29
- getPageSections,
30
- }: Props): Promise<ReactElement> {
31
- const { locale } = await params;
32
- return renderPage({
33
- type: "ReturnsPolicyPage",
34
- slug: "returns",
35
- locale,
36
- // Without a namespace `renderPage` 404s on a missing seed — and a scaffold
37
- // IS a missing-seed environment, since `build-templates.mjs` snapshots
38
- // `apps/` but deliberately not `content/`. The namespace makes this route
39
- // render the #4154 authoring empty state at 200, exactly as /terms does.
40
- translationsNamespace: "returns",
41
- ...(getMdxSource !== undefined && { getMdxSource }),
42
- ...(getPageSections !== undefined && { getPageSections }),
43
- });
44
- }
@@ -1,21 +0,0 @@
1
- <svg width="2030" height="280" viewBox="0 0 2030 280" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M9.93994 193.411C9.93994 193.411 67.0399 108.811 165.59 103.851C165.59 103.851 237.49 96.2805 236.48 174.231C236.48 174.231 236.48 235.261 183 262.271C133.55 287.251 92.1799 254.451 93.1899 210.551C94.1299 169.681 120.33 113.551 236.49 29.1605L226.14 14.9505L278.11 9.06055L258.94 58.1705L248.68 44.5505C248.68 44.5505 140.71 115.021 122.96 184.311C122.96 184.311 109.08 240.321 150.2 241.601C192.49 242.921 226.9 171.701 195.03 138.481C167.97 110.281 88.7199 126.351 21.6099 202.791L9.93994 193.391V193.411Z" fill="white"/>
3
- <path d="M637.61 160.87C637.63 154.62 636.59 148.15 635.13 142.13C632.94 133.15 628.62 125.05 622.74 118.38C614.7 109.27 603.75 102.84 591.32 100.6C586.99 99.8205 582.24 99.3305 577.13 99.2305C572.02 99.3405 567.27 99.8205 562.93 100.6C550.5 102.84 539.55 109.26 531.51 118.38C525.63 125.05 521.3 133.16 519.12 142.13C517.65 148.15 516.62 154.62 516.64 160.87C516.64 162.11 516.69 163.35 516.78 164.59C517.73 177.68 523.18 189.49 531.57 198.63V198.66C532.43 199.83 536.29 204.3 543.67 208.68C550.94 213.23 559.29 216.27 568.23 217.33C569.21 217.45 570.62 217.55 572.14 217.63C573.8 217.72 575.47 217.74 577.14 217.72C578.8 217.74 580.47 217.72 582.13 217.63C583.65 217.55 585.06 217.45 586.04 217.33C594.98 216.28 603.32 213.24 610.6 208.68C617.98 204.3 621.84 199.83 622.71 198.66V198.63C631.09 189.49 636.53 177.68 637.48 164.59C637.57 163.35 637.62 162.11 637.62 160.87H637.61ZM575.36 206.24C566.13 205.88 557.29 199.8 553.69 196.26C551.02 193.63 548.42 189.82 546.2 185.23C539.48 171.3 536.35 150.06 545.84 131.91C547.64 128.47 549.89 125.13 552.66 121.98C557.44 116.54 566.12 111.25 575.35 110.9C575.68 110.89 576 110.9 576.33 110.9C576.59 110.9 576.85 110.9 577.11 110.9C577.37 110.9 577.63 110.9 577.89 110.9C578.22 110.9 578.54 110.89 578.87 110.9C588.1 111.26 596.78 116.55 601.56 121.98C604.33 125.13 606.58 128.46 608.38 131.91C617.87 150.06 614.74 171.29 608.02 185.23C605.81 189.82 603.2 193.63 600.53 196.26C596.94 199.8 588.09 205.88 578.86 206.24C578.53 206.25 575.67 206.25 575.34 206.24H575.36Z" fill="white"/>
4
- <path d="M505.68 85.8203L505.53 85.8403H505.68V85.8203Z" fill="white"/>
5
- <path d="M327.62 85.8105V85.8405H327.8L327.62 85.8105Z" fill="white"/>
6
- <path d="M505.53 85.8398L494.94 87.3498L484.07 85.8398H484.05C484.05 85.8398 484.05 86.7899 483.89 88.7999C483.4 94.9599 481.42 111.05 473.33 140L455.99 201.17L429.11 85.8398H405.93L376.12 201.17L349.99 87.4198L349.63 85.8699L338.96 87.3498L327.79 85.8398H327.61L331.06 100.44L358.78 217.72H385.47L414.69 112.33L439.82 217.72H465.15L501.18 100.44L505.67 85.8398H505.53Z" fill="white"/>
7
- <path d="M728.22 217.349L745.98 217.719L713.14 163.199C721.26 161.599 728.25 158.669 732.61 154.419C738.84 148.309 741.96 140.699 741.96 131.589C741.96 124.799 740.21 118.819 736.71 113.629C733.21 108.449 728.59 104.749 722.85 102.529C717.11 100.309 705.58 99.1992 694.56 99.1992H666.3V217.719H685.27V164.649H696.54L728.23 217.339L728.22 217.349ZM685.59 104.789H694.4C703.1 104.789 710.22 105.479 715.76 110.699C721.3 115.909 724.08 123.039 724.08 132.079C724.08 141.119 721.31 148.169 715.76 153.419C710.21 158.669 703.24 159.619 694.83 159.619H685.59V104.789Z" fill="white"/>
8
- <path d="M820.6 142.339L856.1 99.9395H848.7L796.87 161.859V99.9494L785.92 101.539L774.66 99.9395V217.729H796.87V170.949L805.62 160.349L837.25 217.729H862.83L820.6 142.339Z" fill="white"/>
9
- <path d="M902.32 100.75L891.52 99.25V104.85V217.73H912.98V104.85V99.25L902.32 100.75Z" fill="white"/>
10
- <path d="M1039.33 100.59L1028.57 99.1003V104.69V187.73H1027.53L971.68 99.0703H952.44V217.73H973.94V129.55H974.92L1030.83 217.73H1049.95V104.69V99.1003L1039.33 100.59Z" fill="white"/>
11
- <path d="M1195.3 158.031H1129.76V166.471H1175.76C1169.26 217.871 1110.97 219.621 1102.73 168.571C1099.6 152.161 1103.17 134.121 1114.51 121.491C1129.92 103.751 1157.79 107.831 1165.58 131.511C1168.67 131.481 1176.64 131.411 1179.82 131.391L1184.91 117.861C1164.6 94.3305 1123.71 92.2005 1099.67 111.651C1074.53 132.211 1070.62 174.681 1093.29 198.491V198.511C1121.22 227.991 1169.39 221.981 1186.42 191.221C1191.17 182.641 1195.48 171.141 1195.3 158.031Z" fill="white"/>
12
- <path d="M1749.04 160.98C1749.06 154.74 1748.02 148.27 1746.56 142.26C1744.38 133.29 1740.06 125.2 1734.18 118.54C1726.15 109.44 1715.21 103.02 1702.8 100.79C1698.47 100.01 1693.73 99.5199 1688.62 99.4199C1683.51 99.5299 1678.77 100.01 1674.44 100.79C1662.03 103.03 1651.09 109.44 1643.06 118.54C1637.18 125.2 1632.86 133.3 1630.68 142.26C1629.22 148.27 1628.18 154.74 1628.2 160.98C1628.2 162.22 1628.25 163.46 1628.34 164.69C1629.29 177.77 1634.73 189.56 1643.11 198.69V198.72C1643.97 199.89 1647.83 204.36 1655.2 208.73C1662.46 213.28 1670.8 216.31 1679.73 217.37C1680.71 217.49 1682.12 217.59 1683.64 217.67C1685.3 217.76 1686.97 217.78 1688.63 217.76C1690.29 217.78 1691.96 217.76 1693.62 217.67C1695.14 217.59 1696.55 217.49 1697.53 217.37C1706.46 216.32 1714.79 213.28 1722.06 208.73C1729.43 204.35 1733.29 199.89 1734.16 198.72V198.69C1742.53 189.56 1747.97 177.77 1748.92 164.69C1749.01 163.45 1749.06 162.21 1749.06 160.98H1749.04ZM1686.87 206.29C1677.65 205.93 1668.82 199.86 1665.23 196.32C1662.56 193.69 1659.96 189.89 1657.75 185.3C1651.04 171.38 1647.92 150.17 1657.39 132.04C1659.19 128.6 1661.44 125.27 1664.21 122.13C1668.98 116.7 1677.66 111.42 1686.87 111.06C1687.2 111.05 1687.52 111.06 1687.85 111.06C1688.11 111.06 1688.37 111.06 1688.63 111.06C1688.89 111.06 1689.15 111.06 1689.41 111.06C1689.74 111.06 1690.06 111.05 1690.39 111.06C1699.61 111.42 1708.28 116.7 1713.05 122.13C1715.82 125.28 1718.07 128.6 1719.87 132.04C1729.35 150.17 1726.22 171.38 1719.51 185.3C1717.3 189.89 1714.7 193.69 1712.03 196.32C1708.44 199.86 1699.6 205.93 1690.39 206.29C1690.06 206.3 1687.2 206.3 1686.87 206.29Z" fill="white"/>
13
- <path d="M1611.56 107.62L1611.46 99.25L1544.77 99.43V217.59L1611.46 217.77V209.14L1564.58 211.2L1564.62 158.2L1601.82 158.64V151.84L1564.81 152.98L1564.88 106.32L1611.56 107.62Z" fill="white"/>
14
- <path d="M1962.37 100.82L1962.22 100.79C1962.22 100.79 1958.47 99.99 1953.46 99.34C1953.22 99.31 1953.03 99.28 1952.86 99.25L1924.61 152.5L1893.92 99.59C1892.11 99.69 1886.03 100.06 1881.61 100.72L1881.49 100.74H1881.38C1881.31 100.72 1874.59 99.93 1868.44 99.69L1911.28 165.9L1911.22 217.76H1931.48L1931.53 166.7L1972.21 99.85C1970.08 100.01 1966.24 100.32 1962.51 100.8L1962.36 100.82H1962.37Z" fill="white"/>
15
- <path d="M1308.42 217.77H1330.5V92.3595L1373.65 96.9095L1373.68 85.5195H1265.24L1265.21 96.7495L1308.42 92.3695V217.77Z" fill="white"/>
16
- <path d="M1488.06 98.8398L1487.98 149.98L1453.07 152.05L1419.34 149.68L1419.42 99.1398L1409.2 100.73L1398.68 99.1298V217.77L1408.32 217.66L1419.42 217.77L1419.49 157.59L1453.21 157.19L1487.84 157.59L1488.06 217.48L1498.28 217.38L1508.81 217.48V98.8398L1498.59 100.44L1488.06 98.8398Z" fill="white"/>
17
- <path d="M1838.64 217.401L1856.38 217.771L1823.58 163.311C1831.69 161.711 1838.67 158.791 1843.03 154.541C1849.26 148.431 1852.37 140.831 1852.37 131.741C1852.37 124.961 1850.62 118.981 1847.13 113.801C1843.64 108.631 1839.02 104.931 1833.28 102.711C1827.54 100.491 1816.03 99.3809 1805.03 99.3809H1776.8V217.761H1795.75V164.761H1807.01L1838.66 217.391L1838.64 217.401ZM1796.06 104.961H1804.86C1813.55 104.961 1820.66 105.651 1826.2 110.861C1831.74 116.071 1834.51 123.191 1834.51 132.221C1834.51 141.251 1831.74 148.291 1826.2 153.531C1820.66 158.771 1813.69 159.731 1805.29 159.731H1796.06V104.961Z" fill="white"/>
18
- <path d="M2000.62 112V113.89H1997.43V122.66H1995.19V113.89H1991.99V112H2000.63H2000.62Z" fill="white"/>
19
- <path d="M2009 112H2012.21V122.66H2010.13V115.45C2010.13 115.24 2010.13 114.95 2010.13 114.58C2010.13 114.21 2010.13 113.92 2010.13 113.72L2008.11 122.67H2005.95L2003.94 113.72C2003.94 113.92 2003.94 114.21 2003.94 114.58C2003.94 114.95 2003.94 115.24 2003.94 115.45V122.66H2001.86V112H2005.1L2007.04 120.38L2008.97 112H2009Z" fill="white"/>
20
- <path d="M2002.09 134.78C1992.18 134.78 1984.12 126.72 1984.12 116.81C1984.12 106.9 1992.18 98.8398 2002.09 98.8398C2012 98.8398 2020.06 106.9 2020.06 116.81C2020.06 126.72 2012 134.78 2002.09 134.78ZM2002.09 102.93C1994.44 102.93 1988.22 109.15 1988.22 116.81C1988.22 124.47 1994.44 130.69 2002.09 130.69C2009.74 130.69 2015.97 124.47 2015.97 116.81C2015.97 109.15 2009.75 102.93 2002.09 102.93Z" fill="white"/>
21
- </svg>
@@ -1,21 +0,0 @@
1
- <svg width="2030" height="280" viewBox="0 0 2030 280" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <path d="M9.93994 193.411C9.93994 193.411 67.0399 108.811 165.59 103.851C165.59 103.851 237.49 96.2805 236.48 174.231C236.48 174.231 236.48 235.261 183 262.271C133.55 287.251 92.1799 254.451 93.1899 210.551C94.1299 169.681 120.33 113.551 236.49 29.1605L226.14 14.9505L278.11 9.06055L258.94 58.1705L248.68 44.5505C248.68 44.5505 140.71 115.021 122.96 184.311C122.96 184.311 109.08 240.321 150.2 241.601C192.49 242.921 226.9 171.701 195.03 138.481C167.97 110.281 88.7199 126.351 21.6099 202.791L9.93994 193.391V193.411Z" fill="black"/>
3
- <path d="M637.61 160.87C637.63 154.62 636.59 148.15 635.13 142.13C632.94 133.15 628.62 125.05 622.74 118.38C614.7 109.27 603.75 102.84 591.32 100.6C586.99 99.8205 582.24 99.3305 577.13 99.2305C572.02 99.3405 567.27 99.8205 562.93 100.6C550.5 102.84 539.55 109.26 531.51 118.38C525.63 125.05 521.3 133.16 519.12 142.13C517.65 148.15 516.62 154.62 516.64 160.87C516.64 162.11 516.69 163.35 516.78 164.59C517.73 177.68 523.18 189.49 531.57 198.63V198.66C532.43 199.83 536.29 204.3 543.67 208.68C550.94 213.23 559.29 216.27 568.23 217.33C569.21 217.45 570.62 217.55 572.14 217.63C573.8 217.72 575.47 217.74 577.14 217.72C578.8 217.74 580.47 217.72 582.13 217.63C583.65 217.55 585.06 217.45 586.04 217.33C594.98 216.28 603.32 213.24 610.6 208.68C617.98 204.3 621.84 199.83 622.71 198.66V198.63C631.09 189.49 636.53 177.68 637.48 164.59C637.57 163.35 637.62 162.11 637.62 160.87H637.61ZM575.36 206.24C566.13 205.88 557.29 199.8 553.69 196.26C551.02 193.63 548.42 189.82 546.2 185.23C539.48 171.3 536.35 150.06 545.84 131.91C547.64 128.47 549.89 125.13 552.66 121.98C557.44 116.54 566.12 111.25 575.35 110.9C575.68 110.89 576 110.9 576.33 110.9C576.59 110.9 576.85 110.9 577.11 110.9C577.37 110.9 577.63 110.9 577.89 110.9C578.22 110.9 578.54 110.89 578.87 110.9C588.1 111.26 596.78 116.55 601.56 121.98C604.33 125.13 606.58 128.46 608.38 131.91C617.87 150.06 614.74 171.29 608.02 185.23C605.81 189.82 603.2 193.63 600.53 196.26C596.94 199.8 588.09 205.88 578.86 206.24C578.53 206.25 575.67 206.25 575.34 206.24H575.36Z" fill="black"/>
4
- <path d="M505.68 85.8203L505.53 85.8403H505.68V85.8203Z" fill="black"/>
5
- <path d="M327.62 85.8105V85.8405H327.8L327.62 85.8105Z" fill="black"/>
6
- <path d="M505.53 85.8398L494.94 87.3498L484.07 85.8398H484.05C484.05 85.8398 484.05 86.7899 483.89 88.7999C483.4 94.9599 481.42 111.05 473.33 140L455.99 201.17L429.11 85.8398H405.93L376.12 201.17L349.99 87.4198L349.63 85.8699L338.96 87.3498L327.79 85.8398H327.61L331.06 100.44L358.78 217.72H385.47L414.69 112.33L439.82 217.72H465.15L501.18 100.44L505.67 85.8398H505.53Z" fill="black"/>
7
- <path d="M728.22 217.349L745.98 217.719L713.14 163.199C721.26 161.599 728.25 158.669 732.61 154.419C738.84 148.309 741.96 140.699 741.96 131.589C741.96 124.799 740.21 118.819 736.71 113.629C733.21 108.449 728.59 104.749 722.85 102.529C717.11 100.309 705.58 99.1992 694.56 99.1992H666.3V217.719H685.27V164.649H696.54L728.23 217.339L728.22 217.349ZM685.59 104.789H694.4C703.1 104.789 710.22 105.479 715.76 110.699C721.3 115.909 724.08 123.039 724.08 132.079C724.08 141.119 721.31 148.169 715.76 153.419C710.21 158.669 703.24 159.619 694.83 159.619H685.59V104.789Z" fill="black"/>
8
- <path d="M820.6 142.339L856.1 99.9395H848.7L796.87 161.859V99.9494L785.92 101.539L774.66 99.9395V217.729H796.87V170.949L805.62 160.349L837.25 217.729H862.83L820.6 142.339Z" fill="black"/>
9
- <path d="M902.32 100.75L891.52 99.25V104.85V217.73H912.98V104.85V99.25L902.32 100.75Z" fill="black"/>
10
- <path d="M1039.33 100.59L1028.57 99.1003V104.69V187.73H1027.53L971.68 99.0703H952.44V217.73H973.94V129.55H974.92L1030.83 217.73H1049.95V104.69V99.1003L1039.33 100.59Z" fill="black"/>
11
- <path d="M1195.3 158.031H1129.76V166.471H1175.76C1169.26 217.871 1110.97 219.621 1102.73 168.571C1099.6 152.161 1103.17 134.121 1114.51 121.491C1129.92 103.751 1157.79 107.831 1165.58 131.511C1168.67 131.481 1176.64 131.411 1179.82 131.391L1184.91 117.861C1164.6 94.3305 1123.71 92.2005 1099.67 111.651C1074.53 132.211 1070.62 174.681 1093.29 198.491V198.511C1121.22 227.991 1169.39 221.981 1186.42 191.221C1191.17 182.641 1195.48 171.141 1195.3 158.031Z" fill="black"/>
12
- <path d="M1749.04 160.98C1749.06 154.74 1748.02 148.27 1746.56 142.26C1744.38 133.29 1740.06 125.2 1734.18 118.54C1726.15 109.44 1715.21 103.02 1702.8 100.79C1698.47 100.01 1693.73 99.5199 1688.62 99.4199C1683.51 99.5299 1678.77 100.01 1674.44 100.79C1662.03 103.03 1651.09 109.44 1643.06 118.54C1637.18 125.2 1632.86 133.3 1630.68 142.26C1629.22 148.27 1628.18 154.74 1628.2 160.98C1628.2 162.22 1628.25 163.46 1628.34 164.69C1629.29 177.77 1634.73 189.56 1643.11 198.69V198.72C1643.97 199.89 1647.83 204.36 1655.2 208.73C1662.46 213.28 1670.8 216.31 1679.73 217.37C1680.71 217.49 1682.12 217.59 1683.64 217.67C1685.3 217.76 1686.97 217.78 1688.63 217.76C1690.29 217.78 1691.96 217.76 1693.62 217.67C1695.14 217.59 1696.55 217.49 1697.53 217.37C1706.46 216.32 1714.79 213.28 1722.06 208.73C1729.43 204.35 1733.29 199.89 1734.16 198.72V198.69C1742.53 189.56 1747.97 177.77 1748.92 164.69C1749.01 163.45 1749.06 162.21 1749.06 160.98H1749.04ZM1686.87 206.29C1677.65 205.93 1668.82 199.86 1665.23 196.32C1662.56 193.69 1659.96 189.89 1657.75 185.3C1651.04 171.38 1647.92 150.17 1657.39 132.04C1659.19 128.6 1661.44 125.27 1664.21 122.13C1668.98 116.7 1677.66 111.42 1686.87 111.06C1687.2 111.05 1687.52 111.06 1687.85 111.06C1688.11 111.06 1688.37 111.06 1688.63 111.06C1688.89 111.06 1689.15 111.06 1689.41 111.06C1689.74 111.06 1690.06 111.05 1690.39 111.06C1699.61 111.42 1708.28 116.7 1713.05 122.13C1715.82 125.28 1718.07 128.6 1719.87 132.04C1729.35 150.17 1726.22 171.38 1719.51 185.3C1717.3 189.89 1714.7 193.69 1712.03 196.32C1708.44 199.86 1699.6 205.93 1690.39 206.29C1690.06 206.3 1687.2 206.3 1686.87 206.29Z" fill="black"/>
13
- <path d="M1611.56 107.62L1611.46 99.25L1544.77 99.43V217.59L1611.46 217.77V209.14L1564.58 211.2L1564.62 158.2L1601.82 158.64V151.84L1564.81 152.98L1564.88 106.32L1611.56 107.62Z" fill="black"/>
14
- <path d="M1962.37 100.82L1962.22 100.79C1962.22 100.79 1958.47 99.99 1953.46 99.34C1953.22 99.31 1953.03 99.28 1952.86 99.25L1924.61 152.5L1893.92 99.59C1892.11 99.69 1886.03 100.06 1881.61 100.72L1881.49 100.74H1881.38C1881.31 100.72 1874.59 99.93 1868.44 99.69L1911.28 165.9L1911.22 217.76H1931.48L1931.53 166.7L1972.21 99.85C1970.08 100.01 1966.24 100.32 1962.51 100.8L1962.36 100.82H1962.37Z" fill="black"/>
15
- <path d="M1308.42 217.77H1330.5V92.3595L1373.65 96.9095L1373.68 85.5195H1265.24L1265.21 96.7495L1308.42 92.3695V217.77Z" fill="black"/>
16
- <path d="M1488.06 98.8398L1487.98 149.98L1453.07 152.05L1419.34 149.68L1419.42 99.1398L1409.2 100.73L1398.68 99.1298V217.77L1408.32 217.66L1419.42 217.77L1419.49 157.59L1453.21 157.19L1487.84 157.59L1488.06 217.48L1498.28 217.38L1508.81 217.48V98.8398L1498.59 100.44L1488.06 98.8398Z" fill="black"/>
17
- <path d="M1838.64 217.401L1856.38 217.771L1823.58 163.311C1831.69 161.711 1838.67 158.791 1843.03 154.541C1849.26 148.431 1852.37 140.831 1852.37 131.741C1852.37 124.961 1850.62 118.981 1847.13 113.801C1843.64 108.631 1839.02 104.931 1833.28 102.711C1827.54 100.491 1816.03 99.3809 1805.03 99.3809H1776.8V217.761H1795.75V164.761H1807.01L1838.66 217.391L1838.64 217.401ZM1796.06 104.961H1804.86C1813.55 104.961 1820.66 105.651 1826.2 110.861C1831.74 116.071 1834.51 123.191 1834.51 132.221C1834.51 141.251 1831.74 148.291 1826.2 153.531C1820.66 158.771 1813.69 159.731 1805.29 159.731H1796.06V104.961Z" fill="black"/>
18
- <path d="M2000.62 112V113.89H1997.43V122.66H1995.19V113.89H1991.99V112H2000.63H2000.62Z" fill="black"/>
19
- <path d="M2009 112H2012.21V122.66H2010.13V115.45C2010.13 115.24 2010.13 114.95 2010.13 114.58C2010.13 114.21 2010.13 113.92 2010.13 113.72L2008.11 122.67H2005.95L2003.94 113.72C2003.94 113.92 2003.94 114.21 2003.94 114.58C2003.94 114.95 2003.94 115.24 2003.94 115.45V122.66H2001.86V112H2005.1L2007.04 120.38L2008.97 112H2009Z" fill="black"/>
20
- <path d="M2002.09 134.78C1992.18 134.78 1984.12 126.72 1984.12 116.81C1984.12 106.9 1992.18 98.8398 2002.09 98.8398C2012 98.8398 2020.06 106.9 2020.06 116.81C2020.06 126.72 2012 134.78 2002.09 134.78ZM2002.09 102.93C1994.44 102.93 1988.22 109.15 1988.22 116.81C1988.22 124.47 1994.44 130.69 2002.09 130.69C2009.74 130.69 2015.97 124.47 2015.97 116.81C2015.97 109.15 2009.75 102.93 2002.09 102.93Z" fill="black"/>
21
- </svg>
@@ -1,108 +0,0 @@
1
- ---
2
- type: "CancellationPolicyPage"
3
- slug: "cancellation"
4
- title: "Cancellation Policy"
5
- description: "How to cancel or reschedule a booking on this site, the notice required, and what a late cancellation or no-show costs."
6
- updatedAt: "2026-09-17"
7
- sections:
8
- [
9
- {
10
- "id": "cancellation-document",
11
- "type": "document-chassis",
12
- "data":
13
- {
14
- "headline": "Cancellation Policy",
15
- "backHref": "/",
16
- "backLabel": "Back home",
17
- "navGroupLabel": "Contents",
18
- "stats":
19
- [
20
- { "label": "Last updated", "sublabel": "17 September 2026" },
21
- { "label": "Applies to", "sublabel": "Bookings made on this site" },
22
- ],
23
- "sections":
24
- [
25
- {
26
- "id": "intro",
27
- "heading": "Cancellation Policy",
28
- "blocks":
29
- [
30
- {
31
- "kind": "paragraph",
32
- "text": "This page explains how cancellations and reschedules work for bookings made on this site. Replace the starter copy below with the policy you actually operate — the headings are the ones a customer and an agent both look for, so keep them and fill in your own terms.",
33
- },
34
- ],
35
- },
36
- {
37
- "id": "notice",
38
- "heading": "How much notice is required",
39
- "blocks":
40
- [
41
- {
42
- "kind": "paragraph",
43
- "text": "State the notice period in hours before the appointment, and say how it is measured. A customer reading at midnight should be able to work out, without arithmetic you have not shown them, whether they are still inside it.",
44
- },
45
- ],
46
- },
47
- {
48
- "id": "how-to-cancel",
49
- "heading": "How to cancel or reschedule",
50
- "blocks":
51
- [
52
- {
53
- "kind": "paragraph",
54
- "text": "Give one route to cancel and one to reschedule, and say whether a reschedule inside the notice period counts as a cancellation. If a booking confirmation carries a self-service link, name it here.",
55
- },
56
- ],
57
- },
58
- {
59
- "id": "fees",
60
- "heading": "Late cancellations and no-shows",
61
- "blocks":
62
- [
63
- {
64
- "kind": "paragraph",
65
- "text": "Say what a late cancellation costs and what a no-show costs, as a figure or a share of the booking, and when each is charged. If you hold a deposit, say what happens to it in each case.",
66
- },
67
- ],
68
- },
69
- {
70
- "id": "our-cancellations",
71
- "heading": "If we cancel",
72
- "blocks":
73
- [
74
- {
75
- "kind": "paragraph",
76
- "text": "Set out what a customer gets if you cancel or move an appointment — a full refund, a rebooking, or both — and how quickly you tell them. A policy that only binds one side reads as one.",
77
- },
78
- ],
79
- },
80
- {
81
- "id": "exceptions",
82
- "heading": "Exceptions",
83
- "blocks":
84
- [
85
- {
86
- "kind": "paragraph",
87
- "text": "Name the circumstances in which you waive a fee — illness, bereavement, severe weather — and say what you need from the customer to apply the waiver. Vague discretion is worse for you than a short written list.",
88
- },
89
- ],
90
- },
91
- {
92
- "id": "contact",
93
- "heading": "Questions about a booking",
94
- "blocks":
95
- [
96
- {
97
- "kind": "paragraph",
98
- "text": "Point to the one place a customer should write, and say roughly how quickly you answer.",
99
- },
100
- ],
101
- },
102
- ],
103
- },
104
- },
105
- ]
106
- ---
107
-
108
- {/* Rendered from frontmatter `sections[]`; the MDX body is not read by the section-catalog renderer. schema.org has no cancellation-policy type, so this page emits a plain WebPage (#5947, D2) — a real policy field reaches the JSON-LD through the `schema:` escape hatch, never a coined @type. */}
@@ -1,83 +0,0 @@
1
- ---
2
- type: "LandingPage"
3
- slug: "blog"
4
- title: "Resources for {customer profile}"
5
- description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
6
- sections:
7
- [
8
- {
9
- "id": "hero",
10
- "type": "hero",
11
- "data":
12
- {
13
- "variant": "centered",
14
- "eyebrow": "Blog",
15
- "headline": "Resources for {customer profile}",
16
- "subheadline": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
17
- },
18
- },
19
- {
20
- "id": "pro-blog",
21
- "type": "cta",
22
- "data":
23
- {
24
- "headline": "The blog listing ships with the Pro docs-blog module",
25
- "description": "This Free site carries one static resources page. The Pro docs-blog module adds the full blog — MDX posts, the paginated listing and the documentation surface — at this same /blog route; install it and this page is replaced by the real listing.",
26
- "primaryCta": { "label": "See Pro pricing", "href": "/pricing" },
27
- "secondaryCta":
28
- { "label": "Talk to us", "href": "/contact", "variant": "outline" },
29
- },
30
- },
31
- {
32
- "id": "newsletter",
33
- "type": "newsletter",
34
- "data":
35
- {
36
- "headline": "Stay Up to Date with our {fequency} Newsletter",
37
- "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
38
- "placeholder": "Enter your email",
39
- "submitLabel": "Sign Up",
40
- "consentText": "By clicking Sign Up you're confirming that you agree with our Terms and Conditions",
41
- "successMessage": "Thank you! Your submission has been received!",
42
- "action": "/v1/leads/subscribe",
43
- },
44
- },
45
- {
46
- "id": "logo-cloud",
47
- "type": "logoCloud",
48
- "data":
49
- {
50
- "headline": "Don’t just take our word for it",
51
- "logos":
52
- [
53
- { "name": "Placeholder logo", "src": "/logomark.svg" },
54
- { "name": "Placeholder logo", "src": "/logomark.svg" },
55
- { "name": "Placeholder logo", "src": "/logomark.svg" },
56
- { "name": "Placeholder logo", "src": "/logomark.svg" },
57
- { "name": "Placeholder logo", "src": "/logomark.svg" },
58
- { "name": "Placeholder logo", "src": "/logomark.svg" },
59
- ],
60
- "layout": "inline",
61
- "treatment": "monochrome",
62
- },
63
- },
64
- {
65
- "id": "testimonial",
66
- "type": "testimonials",
67
- "data":
68
- {
69
- "variant": "featured",
70
- "items":
71
- [
72
- {
73
- "quote": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat.",
74
- "author": "John Smith",
75
- "role": "CEO, Google",
76
- },
77
- ],
78
- },
79
- },
80
- ]
81
- ---
82
-
83
- {/* The Free blog teaser (one static page, rendered by the generic `[slug]` route). With the Pro docs-blog module installed its own `blog/` route directory takes precedence and this file is inert. Placeholder copy — replace before you launch. */}