create-ailk 0.5.0 → 0.6.1

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 (329) hide show
  1. package/README.md +55 -8
  2. package/component-catalog.json +336 -27
  3. package/component-catalog.md +25 -12
  4. package/dist/cli.js +54 -5
  5. package/dist/copy.d.ts +14 -0
  6. package/dist/copy.js +38 -1
  7. package/dist/lib/api-boot-assertion.d.ts +46 -0
  8. package/dist/lib/api-boot-assertion.js +70 -0
  9. package/dist/lib/extract-module-bundle.d.ts +20 -1
  10. package/dist/lib/extract-module-bundle.js +64 -5
  11. package/dist/lib/import-graph.d.ts +29 -0
  12. package/dist/lib/import-graph.js +140 -0
  13. package/dist/lib/module-license-gate.d.ts +6 -1
  14. package/dist/lib/module-license-gate.js +6 -1
  15. package/dist/lib/pro-callout.js +1 -1
  16. package/dist/module-architecture.d.ts +1 -0
  17. package/dist/module-architecture.js +253 -127
  18. package/dist/modules/commerce/0.6.0.tar.gz +0 -0
  19. package/dist/modules/docs-blog/0.6.0.tar.gz +0 -0
  20. package/dist/modules/multi-tenant/0.6.0.tar.gz +0 -0
  21. package/dist/modules/scheduling/0.6.0.tar.gz +0 -0
  22. package/dist/modules/signal-collectors/0.6.0.tar.gz +0 -0
  23. package/dist/modules/workspace/0.6.0.tar.gz +0 -0
  24. package/dist/programmatic.js +14 -10
  25. package/dist/surfaces.js +105 -7
  26. package/dist/template-manifest.d.ts +33 -0
  27. package/dist/template-manifest.js +99 -16
  28. package/dist/template-names.d.ts +1 -1
  29. package/dist/template-names.js +1 -0
  30. package/package.json +3 -2
  31. package/site-templates/marketing-site/DESIGN.md +148 -0
  32. package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +22 -2
  33. package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +9 -2
  34. package/site-templates/marketing-site/ailk-template.json +1 -1
  35. package/site-templates/marketing-site-free/DESIGN.md +148 -0
  36. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +2 -2
  37. package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +1 -0
  38. package/site-templates/minimalism-site/DESIGN.md +148 -0
  39. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +10 -2
  40. package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +47 -35
  41. package/site-templates/minimalism-site/ailk-template.json +2 -1
  42. package/site-templates/minimalism-site/assets/wordmark-placeholder.svg +28 -0
  43. package/site-templates/minimalism-site/content/en/HomePage/home.mdx +49 -19
  44. package/site-templates/saas-product/DESIGN.md +148 -0
  45. package/site-templates/simple-service/DESIGN.md +148 -0
  46. package/site-templates/simple-service/TEMPLATE-MANIFEST.json +240 -0
  47. package/site-templates/simple-service/TEMPLATE-MANIFEST.md +278 -0
  48. package/site-templates/simple-service/ailk-template.json +10 -0
  49. package/site-templates/simple-service/content/en/AboutPage/about.mdx +38 -0
  50. package/site-templates/simple-service/content/en/ContactPage/contact.mdx +67 -0
  51. package/site-templates/simple-service/content/en/FAQPage/faq.mdx +56 -0
  52. package/site-templates/simple-service/content/en/HomePage/home.mdx +85 -0
  53. package/site-templates/simple-service/content/en/Service/landscape-design.mdx +40 -0
  54. package/site-templates/simple-service/content/en/Service/lawn-maintenance.mdx +40 -0
  55. package/site-templates/simple-service/content/en/Service/seasonal-cleanup.mdx +40 -0
  56. package/site-templates/simple-service/content/en/ServicesList/services.mdx +72 -0
  57. package/site-templates/simple-service/provenance.json +4 -0
  58. package/templates/.env.example +72 -7
  59. package/templates/CLAUDE.md +2 -3
  60. package/templates/DESIGN.md +155 -0
  61. package/templates/README.md +42 -8
  62. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-31.552Z-fallback-1789916251590-037e9005.json +8 -0
  63. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.840Z-fallback-1789916253842-b52659e9.json +12 -0
  64. package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.844Z-fallback-1789916253845-6b266f8c.json +12 -0
  65. package/templates/apps/api/.env.example +13 -0
  66. package/templates/apps/api/CLAUDE.md +26 -2
  67. package/templates/apps/api/jest.config.cjs +3 -0
  68. package/templates/apps/api/package.json +1 -0
  69. package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +407 -0
  70. package/templates/apps/api/src/__tests__/module-exclusion.test.ts +83 -7
  71. package/templates/apps/api/src/__tests__/server.test.ts +471 -0
  72. package/templates/apps/api/src/__tests__/vercel-handler.test.ts +45 -0
  73. package/templates/apps/api/src/__tests__/workspace-module-registration.test.ts +2 -0
  74. package/templates/apps/api/src/config/index.ts +62 -0
  75. package/templates/apps/api/src/config/modules.ts +7 -3
  76. package/templates/apps/api/src/lib/__mocks__/prisma.ts +238 -2
  77. package/templates/apps/api/src/lib/__tests__/auth-email-budget.test.ts +143 -0
  78. package/templates/apps/api/src/lib/__tests__/content-adapter.test.ts +23 -0
  79. package/templates/apps/api/src/lib/__tests__/deliverable-asset-store.test.ts +125 -0
  80. package/templates/apps/api/src/lib/__tests__/error-serializer.test.ts +20 -0
  81. package/templates/apps/api/src/lib/__tests__/require-commerce-claim.test.ts +317 -0
  82. package/templates/apps/api/src/lib/__tests__/site.test.ts +238 -0
  83. package/templates/apps/api/src/lib/__tests__/stripe.test.ts +75 -0
  84. package/templates/apps/api/src/lib/auth-email-budget.ts +160 -0
  85. package/templates/apps/api/src/lib/content-adapter.ts +57 -31
  86. package/templates/apps/api/src/lib/deliverable-asset-store.ts +76 -0
  87. package/templates/apps/api/src/lib/error-serializer.ts +23 -3
  88. package/templates/apps/api/src/lib/outbound-http.ts +7 -2
  89. package/templates/apps/api/src/lib/require-commerce-claim.ts +250 -0
  90. package/templates/apps/api/src/lib/site.ts +208 -9
  91. package/templates/apps/api/src/lib/stripe.ts +66 -0
  92. package/templates/apps/api/src/middleware/__tests__/default-tenant.test.ts +182 -0
  93. package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +42 -0
  94. package/templates/apps/api/src/middleware/rate-limit.ts +7 -1
  95. package/templates/apps/api/src/openapi/spec.ts +543 -2
  96. package/templates/apps/api/src/routes/auth/__tests__/auth-user.functional.test.ts +48 -0
  97. package/templates/apps/api/src/routes/auth/__tests__/transactional-email.test.ts +309 -0
  98. package/templates/apps/api/src/routes/auth/__tests__/user.test.ts +123 -0
  99. package/templates/apps/api/src/routes/auth/transactional-email.ts +273 -0
  100. package/templates/apps/api/src/routes/auth/user.ts +61 -0
  101. package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +434 -0
  102. package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +888 -0
  103. package/templates/apps/api/src/routes/checkout/index.ts +34 -0
  104. package/templates/apps/api/src/routes/checkout/session.ts +139 -0
  105. package/templates/apps/api/src/routes/checkout/sessions.ts +197 -0
  106. package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +554 -0
  107. package/templates/apps/api/src/routes/content/__tests__/list-pages.test.ts +108 -0
  108. package/templates/apps/api/src/routes/content/__tests__/search.test.ts +450 -0
  109. package/templates/apps/api/src/routes/content/get-page.ts +94 -12
  110. package/templates/apps/api/src/routes/content/index.ts +13 -73
  111. package/templates/apps/api/src/routes/content/list-pages.ts +15 -3
  112. package/templates/apps/api/src/routes/content/rate-limit.ts +15 -6
  113. package/templates/apps/api/src/routes/content/search.ts +129 -0
  114. package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +447 -31
  115. package/templates/apps/api/src/routes/leads/index.ts +100 -13
  116. package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +51 -0
  117. package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +351 -0
  118. package/templates/apps/api/src/routes/project-listings/__tests__/founder-identity.test.ts +51 -0
  119. package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +5 -2
  120. package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +4 -1
  121. package/templates/apps/api/src/routes/project-listings/__tests__/resume-email.test.ts +58 -0
  122. package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +107 -6
  123. package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +87 -2
  124. package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +51 -0
  125. package/templates/apps/api/src/routes/project-listings/start.ts +5 -1
  126. package/templates/apps/api/src/routes/requests/__tests__/confirm.test.ts +686 -0
  127. package/templates/apps/api/src/routes/requests/confirm.ts +601 -0
  128. package/templates/apps/api/src/routes/requests/index.ts +54 -0
  129. package/templates/apps/api/src/routes/webhooks/README.md +265 -0
  130. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-dunning.test.ts +749 -0
  131. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +330 -0
  132. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +262 -0
  133. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +285 -0
  134. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +213 -0
  135. package/templates/apps/api/src/routes/webhooks/__tests__/stripe-request-paid.test.ts +301 -0
  136. package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +648 -0
  137. package/templates/apps/api/src/routes/webhooks/index.ts +89 -0
  138. package/templates/apps/api/src/routes/webhooks/stripe.ts +1399 -0
  139. package/templates/apps/api/src/server.ts +439 -49
  140. package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +39 -0
  141. package/templates/apps/api/src/services/__tests__/aeo-score.test.ts +217 -40
  142. package/templates/apps/api/src/services/__tests__/audit-log.test.ts +620 -0
  143. package/templates/apps/api/src/services/__tests__/consent.test.ts +2 -0
  144. package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +300 -5
  145. package/templates/apps/api/src/services/__tests__/deliverable-resend.test.ts +20 -0
  146. package/templates/apps/api/src/services/__tests__/dunning-policy.test.ts +368 -0
  147. package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +160 -0
  148. package/templates/apps/api/src/services/__tests__/listing-config.test.ts +166 -0
  149. package/templates/apps/api/src/services/__tests__/project-listings.fence.test.ts +154 -0
  150. package/templates/apps/api/src/services/__tests__/public-site-resolver.test.ts +137 -0
  151. package/templates/apps/api/src/services/__tests__/request-confirm.test.ts +444 -0
  152. package/templates/apps/api/src/services/__tests__/revalidation.test.ts +238 -0
  153. package/templates/apps/api/src/services/__tests__/verified-email.test.ts +78 -0
  154. package/templates/apps/api/src/services/abandon-email.ts +8 -2
  155. package/templates/apps/api/src/services/aeo-score.ts +49 -12
  156. package/templates/apps/api/src/services/audit-log.ts +668 -0
  157. package/templates/apps/api/src/services/consent.ts +18 -0
  158. package/templates/apps/api/src/services/default-tenant.ts +70 -31
  159. package/templates/apps/api/src/services/deliverable-fulfillment.ts +141 -13
  160. package/templates/apps/api/src/services/dunning-policy.ts +294 -0
  161. package/templates/apps/api/src/services/entitlements.ts +80 -0
  162. package/templates/apps/api/src/services/lead-promotion.ts +13 -14
  163. package/templates/apps/api/src/services/lead-routing.ts +161 -2
  164. package/templates/apps/api/src/services/leads-inbox.ts +23 -2
  165. package/templates/apps/api/src/services/listing-config.ts +27 -9
  166. package/templates/apps/api/src/services/project-listings.ts +201 -6
  167. package/templates/apps/api/src/services/public-site-resolver.ts +106 -0
  168. package/templates/apps/api/src/services/request-confirm.ts +646 -0
  169. package/templates/apps/api/src/services/revalidation.ts +173 -0
  170. package/templates/apps/api/src/services/verified-email.ts +71 -0
  171. package/templates/apps/api/src/vercel-handler.ts +75 -35
  172. package/templates/apps/mcp/.env.example +17 -0
  173. package/templates/apps/mcp/CLAUDE.md +57 -24
  174. package/templates/apps/mcp/__tests__/aeo-cli-parity.test.ts +6 -0
  175. package/templates/apps/mcp/__tests__/audit.test.ts +137 -8
  176. package/templates/apps/mcp/__tests__/catalog-drift.test.ts +79 -36
  177. package/templates/apps/mcp/__tests__/get_offerings.test.ts +111 -2
  178. package/templates/apps/mcp/__tests__/get_pricing.test.ts +82 -2
  179. package/templates/apps/mcp/__tests__/http-transport.test.ts +541 -2
  180. package/templates/apps/mcp/__tests__/index.test.ts +39 -0
  181. package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +143 -0
  182. package/templates/apps/mcp/__tests__/lib/commerce-claim.test.ts +111 -0
  183. package/templates/apps/mcp/__tests__/lib/content-adapter-parity.test.ts +65 -0
  184. package/templates/apps/mcp/__tests__/lib/content-adapter.test.ts +188 -0
  185. package/templates/apps/mcp/__tests__/lib/fail-closed-tools.test.ts +165 -0
  186. package/templates/apps/mcp/__tests__/lib/public-workspace.test.ts +124 -0
  187. package/templates/apps/mcp/__tests__/list_pages.test.ts +116 -0
  188. package/templates/apps/mcp/__tests__/module-exclusion.test.ts +7 -1
  189. package/templates/apps/mcp/__tests__/parity.test.ts +10 -7
  190. package/templates/apps/mcp/__tests__/purchase-disabled.test.ts +89 -22
  191. package/templates/apps/mcp/__tests__/read_content.test.ts +322 -1
  192. package/templates/apps/mcp/__tests__/search_content.test.ts +105 -2
  193. package/templates/apps/mcp/__tests__/server.test.ts +67 -14
  194. package/templates/apps/mcp/__tests__/start_purchase.test.ts +252 -0
  195. package/templates/apps/mcp/__tests__/tools/purchase.test.ts +300 -123
  196. package/templates/apps/mcp/jest.config.cjs +13 -0
  197. package/templates/apps/mcp/package.json +2 -0
  198. package/templates/apps/mcp/src/abuse/index.ts +159 -24
  199. package/templates/apps/mcp/src/config/modules.ts +10 -5
  200. package/templates/apps/mcp/src/http-transport.ts +102 -29
  201. package/templates/apps/mcp/src/index.ts +73 -11
  202. package/templates/apps/mcp/src/lib/audit-single-page.ts +90 -3
  203. package/templates/apps/mcp/src/lib/commerce-claim.ts +94 -0
  204. package/templates/apps/mcp/src/lib/content-adapter.ts +113 -0
  205. package/templates/apps/mcp/src/lib/empty-content-adapter.ts +139 -0
  206. package/templates/apps/mcp/src/lib/prisma.ts +39 -0
  207. package/templates/apps/mcp/src/lib/public-workspace.ts +133 -0
  208. package/templates/apps/mcp/src/lib/stripe-tax-signal.ts +59 -0
  209. package/templates/apps/mcp/src/server.ts +59 -35
  210. package/templates/apps/mcp/src/tools/audit.ts +26 -2
  211. package/templates/apps/mcp/src/tools/get_business_hours.ts +4 -3
  212. package/templates/apps/mcp/src/tools/get_faq.ts +4 -3
  213. package/templates/apps/mcp/src/tools/get_locations.ts +5 -3
  214. package/templates/apps/mcp/src/tools/get_offerings.ts +16 -4
  215. package/templates/apps/mcp/src/tools/get_pricing.ts +25 -6
  216. package/templates/apps/mcp/src/tools/get_site_info.ts +4 -3
  217. package/templates/apps/mcp/src/tools/index.ts +6 -4
  218. package/templates/apps/mcp/src/tools/list_pages.ts +4 -3
  219. package/templates/apps/mcp/src/tools/purchase.ts +128 -45
  220. package/templates/apps/mcp/src/tools/read_content.ts +20 -6
  221. package/templates/apps/mcp/src/tools/search_content.ts +11 -4
  222. package/templates/apps/web/.env.example +71 -5
  223. package/templates/apps/web/CLAUDE.md +44 -0
  224. package/templates/apps/web/PRODUCT.md +86 -0
  225. package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +18 -2
  226. package/templates/apps/web/app/.well-known/mcp.json/route.ts +11 -3
  227. package/templates/apps/web/app/[locale]/(auth)/__tests__/auth-pages.test.tsx +282 -0
  228. package/templates/apps/web/app/[locale]/(auth)/__tests__/password-reset.test.tsx +515 -0
  229. package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +89 -0
  230. package/templates/apps/web/app/[locale]/(auth)/forgot-password/page.tsx +109 -0
  231. package/templates/apps/web/app/[locale]/(auth)/layout.tsx +92 -0
  232. package/templates/apps/web/app/[locale]/(auth)/reset-password/page.tsx +135 -0
  233. package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +109 -0
  234. package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/__tests__/page.test.tsx +48 -2
  235. package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/page.tsx +20 -6
  236. package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +125 -0
  237. package/templates/apps/web/app/[locale]/(auth)/sign-up/page.tsx +96 -0
  238. package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +101 -0
  239. package/templates/apps/web/app/[locale]/(auth)/use-auth-card-flow.ts +102 -0
  240. package/templates/apps/web/app/[locale]/(auth)/verify-email/page.tsx +87 -0
  241. package/templates/apps/web/app/[locale]/(authed)/__tests__/gate.test.tsx +20 -10
  242. package/templates/apps/web/app/[locale]/(authed)/account/__tests__/page.test.tsx +84 -0
  243. package/templates/apps/web/app/[locale]/(authed)/account/actions.ts +58 -0
  244. package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +63 -8
  245. package/templates/apps/web/app/[locale]/(authed)/layout.tsx +18 -1
  246. package/templates/apps/web/app/[locale]/cancellation/page.tsx +44 -0
  247. package/templates/apps/web/app/[locale]/layout.tsx +133 -87
  248. package/templates/apps/web/app/[locale]/purchase/__tests__/cancel.test.tsx +162 -0
  249. package/templates/apps/web/app/[locale]/purchase/__tests__/module-scope.test.ts +68 -0
  250. package/templates/apps/web/app/[locale]/purchase/__tests__/success.test.tsx +361 -0
  251. package/templates/apps/web/app/[locale]/purchase/cancel/page.tsx +115 -0
  252. package/templates/apps/web/app/[locale]/purchase/success/page.tsx +307 -0
  253. package/templates/apps/web/app/[locale]/returns/page.tsx +44 -0
  254. package/templates/apps/web/app/[locale]/shipping/page.tsx +44 -0
  255. package/templates/apps/web/app/api/revalidate/__tests__/route.test.ts +670 -0
  256. package/templates/apps/web/app/api/revalidate/route.ts +194 -0
  257. package/templates/apps/web/auth.ts +407 -8
  258. package/templates/apps/web/jest.config.cjs +8 -4
  259. package/templates/apps/web/lib/__tests__/auth-email.test.ts +214 -0
  260. package/templates/apps/web/lib/__tests__/auth-routes.test.ts +74 -0
  261. package/templates/apps/web/lib/__tests__/meeting-slugs.test.ts +72 -0
  262. package/templates/apps/web/lib/__tests__/site-theme.test.ts +135 -20
  263. package/templates/apps/web/lib/__tests__/structured-data.test.tsx +18 -1
  264. package/templates/apps/web/lib/auth-email.ts +318 -0
  265. package/templates/apps/web/lib/auth-env.ts +85 -0
  266. package/templates/apps/web/lib/auth-routes.ts +55 -0
  267. package/templates/apps/web/lib/meeting-slugs.ts +53 -0
  268. package/templates/apps/web/lib/site-brand.tsx +4 -8
  269. package/templates/apps/web/lib/telemetry-scrub.ts +5 -1
  270. package/templates/apps/web/messages/en.json +187 -0
  271. package/templates/apps/web/middleware.ts +1 -1
  272. package/templates/apps/web/package.json +2 -1
  273. package/templates/apps/web/src/lib/commerce-claim.ts +33 -0
  274. package/templates/apps/web/src/lib/commerce-sections.ts +93 -0
  275. package/templates/content/_site.mdx +18 -3
  276. package/templates/content/en/CancellationPolicyPage/cancellation.mdx +108 -0
  277. package/templates/content/en/ReturnsPolicyPage/returns.mdx +108 -0
  278. package/templates/content/en/ShippingPolicyPage/shipping.mdx +108 -0
  279. package/templates/database/CHANGELOG.md +149 -0
  280. package/templates/database/README.md +10 -3
  281. package/templates/database/__tests__/appointment.db.test.ts +106 -0
  282. package/templates/database/__tests__/artifact-content-store.db.test.ts +316 -0
  283. package/templates/database/__tests__/composite-fence.db.test.ts +206 -0
  284. package/templates/database/__tests__/fence-fan-out.db.test.ts +711 -0
  285. package/templates/database/__tests__/fixtures/appointment-create-probe.ts +79 -0
  286. package/templates/database/__tests__/fixtures/project-listing-consent-probe.ts +100 -0
  287. package/templates/database/__tests__/flow-workspace-key.db.test.ts +263 -0
  288. package/templates/database/__tests__/prefixed-ids.db.test.ts +85 -9
  289. package/templates/database/__tests__/project-listing-consent-at.db.test.ts +111 -0
  290. package/templates/database/__tests__/tenancy.test.ts +141 -0
  291. package/templates/database/config/schema.prisma +79 -2
  292. package/templates/database/content/schema.prisma +87 -11
  293. package/templates/database/inbox/schema.prisma +452 -9
  294. package/templates/database/jest.config.cjs +5 -3
  295. package/templates/database/migrations/20260915120000_project_listing_solution/migration.sql +15 -0
  296. package/templates/database/migrations/20260916120000_artifact_content_store/migration.sql +158 -0
  297. package/templates/database/migrations/20260917120000_callback_request_confirm/migration.sql +40 -0
  298. package/templates/database/migrations/20260918120000_add_appointment/migration.sql +67 -0
  299. package/templates/database/migrations/20260918120000_asset_metadata_columns/migration.sql +70 -0
  300. package/templates/database/migrations/20260919120000_flow_workspace_key/migration.sql +181 -0
  301. package/templates/database/migrations/20260919130000_flow_definition_admin_columns/migration.sql +172 -0
  302. package/templates/database/migrations/20260919130000_workspace_meetings/migration.sql +41 -0
  303. package/templates/database/migrations/20260919140000_inbox_workspace_key/migration.sql +185 -0
  304. package/templates/database/migrations/20260920120000_lead_handled_at/migration.sql +70 -0
  305. package/templates/database/migrations/20260920130000_lead_workspace_source_index/migration.sql +57 -0
  306. package/templates/database/migrations/20260921120000_deliverable_grant_workspace_key/migration.sql +68 -0
  307. package/templates/database/migrations/20260922120000_tenancy_fence/migration.sql +1067 -0
  308. package/templates/database/migrations/20260923120000_listing_capturing_magnet/migration.sql +210 -0
  309. package/templates/database/package.json +3 -2
  310. package/templates/database/tenancy.ts +86 -1
  311. package/templates/database/tsconfig.json +1 -0
  312. package/versions.json +34 -34
  313. package/templates/apps/api/src/routes/content/__tests__/create.test.ts +0 -253
  314. package/templates/apps/api/src/routes/content/__tests__/delete.test.ts +0 -215
  315. package/templates/apps/api/src/routes/content/__tests__/update.test.ts +0 -266
  316. package/templates/apps/api/src/routes/content/create.ts +0 -115
  317. package/templates/apps/api/src/routes/content/delete.ts +0 -82
  318. package/templates/apps/api/src/routes/content/update.ts +0 -112
  319. package/templates/apps/mcp/__tests__/create_page.test.ts +0 -202
  320. package/templates/apps/mcp/__tests__/delete_page.test.ts +0 -177
  321. package/templates/apps/mcp/__tests__/update_page.test.ts +0 -196
  322. package/templates/apps/mcp/src/tools/create_page.ts +0 -96
  323. package/templates/apps/mcp/src/tools/delete_page.ts +0 -74
  324. package/templates/apps/mcp/src/tools/update_page.ts +0 -92
  325. package/templates/apps/web/app/[locale]/sign-in/sign-in-card.tsx +0 -123
  326. package/templates/apps/web/public/logo-dark.svg +0 -21
  327. package/templates/apps/web/public/logo-light.svg +0 -21
  328. /package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/__tests__/next-path.test.ts +0 -0
  329. /package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/next-path.ts +0 -0
@@ -1,96 +0,0 @@
1
- // oss: false
2
- /**
3
- * create_page — Paid-tier MCP tool for authoring a new content page.
4
- *
5
- * D14a Stage 1 Unit C — wires the McpServer create_page handler to the
6
- * ContentAdapter.createPage method (Stage 1 Unit A implements the MDX
7
- * adapter; tests inject a fake adapter).
8
- *
9
- * Surface contract: validates input via FrontmatterSchema.extend({ body }),
10
- * runs the Paid-tier license guard, calls adapter.createPage, and maps adapter
11
- * errors to canonical MCP error bodies (see apps/mcp/src/lib/errors.ts).
12
- *
13
- * Input shape mirrors the Stage 0 catalog entry in
14
- * packages/metadata/src/mcp-tool-catalog.ts. Catalog parses a permissive
15
- * outer shape (`page: record`); this handler parses strictly via
16
- * FrontmatterSchema so bad frontmatter surfaces as a validation_failed body.
17
- */
18
-
19
- import { join } from "node:path";
20
-
21
- import {
22
- FrontmatterSchema,
23
- createMdxAdapter,
24
- mapAdapterError,
25
- type ContentAdapter,
26
- } from "@working-theory/content-adapters";
27
- import { z } from "zod";
28
-
29
- import { validationError, type ErrorBody } from "../lib/errors.js";
30
- import { requirePaidTier } from "../lib/require-paid-tier.js";
31
-
32
- const CreatePageInputSchema = FrontmatterSchema.extend({
33
- body: z.string().min(1),
34
- });
35
-
36
- interface CreatePageSuccess {
37
- page: Record<string, unknown>;
38
- version: string;
39
- }
40
-
41
- export type CreatePageResult = CreatePageSuccess | ErrorBody;
42
-
43
- export interface CreatePageInput {
44
- type: string;
45
- slug: string;
46
- page: Record<string, unknown>;
47
- body: string;
48
- }
49
-
50
- /**
51
- * ailkCreatePage handler.
52
- *
53
- * Optional `adapter` injection mirrors the Q3 resolution in the resource plan
54
- * (tests construct adapters directly with isolated content roots). When
55
- * omitted, falls back to the default MDX adapter rooted at process.cwd()/content.
56
- */
57
- export async function ailkCreatePage(
58
- input: CreatePageInput,
59
- adapter?: ContentAdapter,
60
- ): Promise<CreatePageResult> {
61
- const guard = await requirePaidTier();
62
- if (guard) return guard;
63
-
64
- const parsed = CreatePageInputSchema.safeParse({
65
- ...input.page,
66
- type: input.type,
67
- slug: input.slug,
68
- body: input.body,
69
- });
70
-
71
- if (!parsed.success) {
72
- return validationError("Invalid frontmatter or body for create_page.", {
73
- issues: parsed.error.issues,
74
- });
75
- }
76
-
77
- const resolved =
78
- adapter ??
79
- createMdxAdapter({ contentRoot: join(process.cwd(), "content") });
80
-
81
- try {
82
- const result = await resolved.createPage(
83
- parsed.data.type,
84
- parsed.data.slug,
85
- parsed.data,
86
- );
87
- return { page: result.page, version: result.version };
88
- } catch (err) {
89
- const mapped = mapAdapterError(err, {
90
- type: parsed.data.type,
91
- slug: parsed.data.slug,
92
- });
93
- if (mapped) return mapped;
94
- throw err;
95
- }
96
- }
@@ -1,74 +0,0 @@
1
- // oss: false
2
- /**
3
- * delete_page — Paid-tier MCP tool for removing a content page.
4
- *
5
- * D14a Stage 1 Unit C — wires McpServer delete_page to ContentAdapter.deletePage.
6
- * Mandatory optimistic locking: caller supplies `ifMatch`; stale or missing
7
- * tokens yield canonical conflict bodies.
8
- *
9
- * Success body is `{ ok: true }` per the Stage 0 catalog `deletePageOutputSchema`.
10
- */
11
-
12
- import { join } from "node:path";
13
-
14
- import {
15
- SCHEMA_ORG_TYPES,
16
- SLUG_PATTERN,
17
- createMdxAdapter,
18
- mapAdapterError,
19
- type ContentAdapter,
20
- } from "@working-theory/content-adapters";
21
- import { z } from "zod";
22
-
23
- import { validationError, type ErrorBody } from "../lib/errors.js";
24
- import { requirePaidTier } from "../lib/require-paid-tier.js";
25
-
26
- const DeletePageInputSchema = z.object({
27
- type: z.enum(SCHEMA_ORG_TYPES),
28
- // Defence-in-depth slug allowlist matches create_page / update_page;
29
- // the adapter also enforces the pattern, but a fail-fast validation_failed
30
- // here keeps the tool's surface contract consistent (issue #398).
31
- slug: z.string().regex(SLUG_PATTERN),
32
- ifMatch: z.string().min(1),
33
- });
34
-
35
- interface DeletePageSuccess {
36
- ok: true;
37
- }
38
-
39
- export type DeletePageResult = DeletePageSuccess | ErrorBody;
40
-
41
- export interface DeletePageInput {
42
- type: string;
43
- slug: string;
44
- ifMatch: string;
45
- }
46
-
47
- export async function ailkDeletePage(
48
- input: DeletePageInput,
49
- adapter?: ContentAdapter,
50
- ): Promise<DeletePageResult> {
51
- const guard = await requirePaidTier();
52
- if (guard) return guard;
53
-
54
- const parsed = DeletePageInputSchema.safeParse(input);
55
- if (!parsed.success) {
56
- return validationError("Invalid input for delete_page.", {
57
- issues: parsed.error.issues,
58
- });
59
- }
60
-
61
- const { type, slug, ifMatch } = parsed.data;
62
- const resolved =
63
- adapter ??
64
- createMdxAdapter({ contentRoot: join(process.cwd(), "content") });
65
-
66
- try {
67
- await resolved.deletePage(type, slug, { ifMatch });
68
- return { ok: true };
69
- } catch (err) {
70
- const mapped = mapAdapterError(err, { type, slug });
71
- if (mapped) return mapped;
72
- throw err;
73
- }
74
- }
@@ -1,92 +0,0 @@
1
- // oss: false
2
- /**
3
- * update_page — Paid-tier MCP tool for revising an existing content page.
4
- *
5
- * D14a Stage 1 Unit C — wires McpServer update_page to ContentAdapter.updatePage.
6
- * Mandatory optimistic locking: caller supplies `ifMatch` (version token from a
7
- * prior read or write); stale or missing tokens yield canonical conflict bodies.
8
- *
9
- * Validation strategy mirrors create_page — strict parse via
10
- * FrontmatterSchema.extend({ body, ifMatch }) inside the handler so bad
11
- * frontmatter surfaces as validation_failed (the Stage 0 catalog uses a
12
- * permissive outer shape because @working-theory/metadata cannot import
13
- * @working-theory/content-adapters).
14
- */
15
-
16
- import { join } from "node:path";
17
-
18
- import {
19
- FrontmatterSchema,
20
- createMdxAdapter,
21
- mapAdapterError,
22
- type ContentAdapter,
23
- } from "@working-theory/content-adapters";
24
- import { z } from "zod";
25
-
26
- import { validationError, type ErrorBody } from "../lib/errors.js";
27
- import { requirePaidTier } from "../lib/require-paid-tier.js";
28
-
29
- const UpdatePageInputSchema = FrontmatterSchema.extend({
30
- body: z.string().min(1),
31
- ifMatch: z.string().min(1),
32
- });
33
-
34
- interface UpdatePageSuccess {
35
- page: Record<string, unknown>;
36
- version: string;
37
- }
38
-
39
- export type UpdatePageResult = UpdatePageSuccess | ErrorBody;
40
-
41
- export interface UpdatePageInput {
42
- type: string;
43
- slug: string;
44
- page: Record<string, unknown>;
45
- body: string;
46
- ifMatch: string;
47
- }
48
-
49
- export async function ailkUpdatePage(
50
- input: UpdatePageInput,
51
- adapter?: ContentAdapter,
52
- ): Promise<UpdatePageResult> {
53
- const guard = await requirePaidTier();
54
- if (guard) return guard;
55
-
56
- const parsed = UpdatePageInputSchema.safeParse({
57
- ...input.page,
58
- type: input.type,
59
- slug: input.slug,
60
- body: input.body,
61
- ifMatch: input.ifMatch,
62
- });
63
-
64
- if (!parsed.success) {
65
- return validationError(
66
- "Invalid frontmatter, body, or ifMatch for update_page.",
67
- { issues: parsed.error.issues },
68
- );
69
- }
70
-
71
- const { ifMatch, ...pageWithBody } = parsed.data;
72
- const resolved =
73
- adapter ??
74
- createMdxAdapter({ contentRoot: join(process.cwd(), "content") });
75
-
76
- try {
77
- const result = await resolved.updatePage(
78
- pageWithBody.type,
79
- pageWithBody.slug,
80
- pageWithBody,
81
- { ifMatch },
82
- );
83
- return { page: result.page, version: result.version };
84
- } catch (err) {
85
- const mapped = mapAdapterError(err, {
86
- type: pageWithBody.type,
87
- slug: pageWithBody.slug,
88
- });
89
- if (mapped) return mapped;
90
- throw err;
91
- }
92
- }
@@ -1,123 +0,0 @@
1
- "use client"; // Better Auth's client calls (signIn.social / signIn.email) + error state
2
-
3
- /**
4
- * SignInCard — the /sign-in page's client island (#4984).
5
- *
6
- * Composes the shipped `AuthCard` block (`intent="sign-in"`, `footer="none"`)
7
- * and wires its provider buttons / password form to the Better Auth client,
8
- * using the SAME `createAuthClient()` idiom the `(authed)` group's
9
- * `SignInGate` uses. The page (RSC) decides providers + method from auth-env
10
- * and hands them in; this component never reads env itself.
11
- *
12
- * No sign-up affordance anywhere: `footer="none"` drops the "Not a member?
13
- * Create an account" cross-link (Better Auth `emailAndPassword.disableSignUp`
14
- * posture).
15
- *
16
- * Password path: `apps/web/auth.ts` does not enable `emailAndPassword` today,
17
- * so `signIn.email` is wired but inert (Better Auth answers with an error)
18
- * until an operator enables it server-side — the page only selects
19
- * `method="password"` when auth-env reports the "email" provider.
20
- *
21
- * Zero providers (method sso, providers []): the card renders in its inert
22
- * state — heading + `notConfiguredSubhead`, no buttons, no form. Never a
23
- * fabricated session.
24
- *
25
- * Error surface: AuthCard's `errors` prop is per-field. A failed provider
26
- * launch lands on `errors.email` — the social row sits inside the password
27
- * form beside the email field, so it renders there. The SSO body has no
28
- * fields at all, so for `method="sso"` the same message is rendered as an
29
- * `Alert` above the card instead.
30
- */
31
-
32
- import { AuthCard, type AuthCardLabels } from "@working-theory/ui/blocks";
33
- import { Alert, AlertDescription } from "@working-theory/ui/primitives";
34
- import { createAuthClient } from "better-auth/react";
35
- import type { ReactElement, ReactNode } from "react";
36
- import { useState } from "react";
37
-
38
- const authClient = createAuthClient();
39
-
40
- /** The OAuth providers this page can launch — a subset of AuthCard's. */
41
- export type SignInProvider = "google" | "github";
42
-
43
- export interface SignInCardProps {
44
- /** Active OAuth providers, exactly as auth-env reports them. */
45
- providers: SignInProvider[];
46
- /** "password" when the email provider is active; otherwise "sso". */
47
- method: "sso" | "password";
48
- /** Sanitised post-sign-in path (see `next-path.ts`). */
49
- next: string;
50
- /** Brand mark rendered top-center inside the card. */
51
- logo?: ReactNode;
52
- /** Translated AuthCard labels (resolved server-side by the page). */
53
- labels: AuthCardLabels;
54
- /** Subhead shown when no provider is configured. */
55
- notConfiguredSubhead: string;
56
- /** Translated error copy. */
57
- errorLabels: { signInFailed: string; providerFailed: string };
58
- }
59
-
60
- type FieldErrors = { email?: string; password?: string };
61
-
62
- export function SignInCard({
63
- providers,
64
- method,
65
- next,
66
- logo,
67
- labels,
68
- notConfiguredSubhead,
69
- errorLabels,
70
- }: SignInCardProps): ReactElement {
71
- const [errors, setErrors] = useState<FieldErrors>({});
72
- const [providerError, setProviderError] = useState<string | null>(null);
73
-
74
- const notConfigured = method === "sso" && providers.length === 0;
75
-
76
- const launchProvider = async (provider: SignInProvider): Promise<void> => {
77
- setProviderError(null);
78
- // Better Auth reports a failed launch as `{ error }`; a network/runtime
79
- // failure rejects. Both land on the same providerFailed message.
80
- const failed = await authClient.signIn
81
- .social({ provider, callbackURL: next })
82
- .then((res) => Boolean(res?.error), () => true);
83
- if (failed) {
84
- setProviderError(errorLabels.providerFailed);
85
- setErrors((prev) => ({ ...prev, email: errorLabels.providerFailed }));
86
- }
87
- };
88
-
89
- const submitPassword = async (email: string, password: string): Promise<void> => {
90
- setErrors({});
91
- const res = await authClient.signIn.email({ email, password, callbackURL: next });
92
- if (res?.error) setErrors({ password: errorLabels.signInFailed });
93
- };
94
-
95
- return (
96
- <div
97
- className="flex min-h-screen items-center justify-center py-section"
98
- data-testid="sign-in-page"
99
- >
100
- <div className="flex w-full max-w-md flex-col gap-4">
101
- {method === "sso" && providerError ? (
102
- <Alert variant="error" data-testid="sign-in-provider-error">
103
- <AlertDescription>{providerError}</AlertDescription>
104
- </Alert>
105
- ) : null}
106
- <AuthCard
107
- intent="sign-in"
108
- method={method}
109
- footer="none"
110
- {...(logo !== undefined ? { logo } : {})}
111
- {...(notConfigured ? { subhead: notConfiguredSubhead } : {})}
112
- providers={providers.map((provider) => ({
113
- provider,
114
- onClick: () => void launchProvider(provider),
115
- }))}
116
- onSubmit={(data) => void submitPassword(data.email, data.password ?? "")}
117
- errors={errors}
118
- labels={labels}
119
- />
120
- </div>
121
- </div>
122
- );
123
- }
@@ -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>