create-ailk 0.22.0 → 0.24.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.
- package/README.md +27 -14
- package/component-catalog.json +149 -5
- package/component-catalog.md +7 -6
- package/dist/add-module.js +17 -10
- package/dist/add-route.d.ts +55 -1
- package/dist/add-route.js +301 -13
- package/dist/cli.js +27 -10
- package/dist/derive-architecture.d.ts +7 -5
- package/dist/derive-architecture.js +26 -32
- package/dist/lib/design-checks.js +4 -2
- package/dist/lib/env-catalog.js +0 -4
- package/dist/lib/npm-auth.d.ts +9 -0
- package/dist/lib/npm-auth.js +48 -0
- package/dist/lib/scaffold-render-sweep.d.ts +36 -2
- package/dist/lib/scaffold-render-sweep.js +50 -8
- package/dist/module-architecture.js +115 -10
- package/dist/paid-sections.d.ts +21 -2
- package/dist/paid-sections.js +69 -7
- package/dist/seed-flows.d.ts +4 -1
- package/dist/seed-flows.js +50 -4
- package/dist/spoke-checkout.d.ts +38 -35
- package/dist/spoke-checkout.js +66 -229
- package/dist/starter-grid.d.ts +0 -3
- package/dist/starter-grid.js +24 -14
- package/dist/surfaces.js +33 -12
- package/dist/sync-routes.d.ts +68 -5
- package/dist/sync-routes.js +455 -29
- package/dist/template-record.d.ts +1 -1
- package/dist/template-record.js +3 -2
- package/dist/update.js +10 -0
- package/package.json +3 -3
- package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +4 -49
- package/site-templates/_base/content/en/Pricing/pricing.mdx +3 -21
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +23 -20
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +28 -14
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +15 -39
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +38 -34
- package/site-templates/marketing-site-free/content/en/NewsletterSignup/newsletter.mdx +6 -43
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.json +14 -31
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +26 -25
- package/site-templates/shapes/local-business-service/content/en/NewsletterSignup/newsletter.mdx +6 -43
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.json +14 -31
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +26 -25
- package/site-templates/shapes/organization-service/content/en/NewsletterSignup/newsletter.mdx +6 -43
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +14 -31
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +26 -25
- package/site-templates/shapes/person-service/content/en/NewsletterSignup/newsletter.mdx +6 -43
- package/templates/.env.example +13 -7
- package/templates/.github/workflows/ci.yml +13 -0
- package/templates/CLAUDE.md +4 -2
- package/templates/README.md +1 -0
- package/templates/_gitignore +4 -0
- package/templates/apps/api/.env.example +34 -0
- package/templates/apps/api/CLAUDE.md +94 -19
- package/templates/apps/api/package.json +1 -0
- package/templates/apps/api/src/__tests__/factories/in-memory-prisma.ts +2 -0
- package/templates/apps/api/src/bin/stripe-connections-rekey.ts +45 -0
- package/templates/apps/api/src/config/__tests__/stripe-connection-key.test.ts +185 -0
- package/templates/apps/api/src/config/index.ts +109 -0
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +7 -1
- package/templates/apps/api/src/lib/__tests__/flow-rename-race.db.test.ts +116 -0
- package/templates/apps/api/src/lib/__tests__/site.test.ts +16 -0
- package/templates/apps/api/src/lib/error-serializer.ts +74 -7
- package/templates/apps/api/src/lib/site.ts +4 -1
- package/templates/apps/api/src/lib/stripe.ts +77 -4
- package/templates/apps/api/src/lib/webhook-idempotency.ts +66 -2
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +218 -0
- package/templates/apps/api/src/middleware/__tests__/write-budget.test.ts +174 -0
- package/templates/apps/api/src/middleware/rate-limit.ts +226 -4
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +127 -0
- package/templates/apps/api/src/openapi/spec.ts +343 -7
- package/templates/apps/api/src/routes/billing/plan-checkout.ts +332 -0
- package/templates/apps/api/src/routes/checkout/__tests__/live-key.test.ts +11 -0
- package/templates/apps/api/src/routes/checkout/__tests__/offerings-authorization.test.ts +1426 -0
- package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +11 -0
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +49 -0
- package/templates/apps/api/src/routes/checkout/session.ts +57 -25
- package/templates/apps/api/src/routes/checkout/sessions.ts +232 -82
- package/templates/apps/api/src/routes/consent/__tests__/account.test.ts +5 -5
- package/templates/apps/api/src/routes/consent/__tests__/sign-up-rate-limit.test.ts +160 -0
- package/templates/apps/api/src/routes/consent/account.ts +4 -2
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +2 -2
- package/templates/apps/api/src/routes/content/__tests__/offerings.test.ts +731 -0
- package/templates/apps/api/src/routes/content/__tests__/pricing.test.ts +753 -0
- package/templates/apps/api/src/routes/content/__tests__/shown-offerings.test.ts +762 -0
- package/templates/apps/api/src/routes/content/get-page.ts +34 -119
- package/templates/apps/api/src/routes/content/index.ts +16 -2
- package/templates/apps/api/src/routes/content/list-pages.ts +15 -36
- package/templates/apps/api/src/routes/content/offerings.ts +184 -0
- package/templates/apps/api/src/routes/content/pricing.ts +176 -0
- package/templates/apps/api/src/routes/content/search.ts +16 -45
- package/templates/apps/api/src/routes/content/shown-offerings.ts +229 -0
- package/templates/apps/api/src/routes/leads/index.ts +377 -308
- package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +20 -9
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +17 -6
- package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +1 -1
- package/templates/apps/api/src/routes/webhooks/README.md +66 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +1 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-offerings.test.ts +814 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +80 -68
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-site-filter.test.ts +6 -5
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +8 -2
- package/templates/apps/api/src/routes/webhooks/index.ts +23 -0
- package/templates/apps/api/src/routes/webhooks/stripe-offerings.ts +384 -0
- package/templates/apps/api/src/routes/webhooks/stripe.ts +93 -17
- package/templates/apps/api/src/server.ts +165 -51
- package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +121 -4
- package/templates/apps/api/src/services/__tests__/checkout-plan.test.ts +313 -0
- package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +61 -2
- package/templates/apps/api/src/services/__tests__/keyless-workspace-predicate.test.ts +234 -0
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +374 -44
- package/templates/apps/api/src/services/__tests__/person.test.ts +260 -1
- package/templates/apps/api/src/services/__tests__/plan-offerings.test.ts +450 -0
- package/templates/apps/api/src/services/__tests__/project-listings.counts.test.ts +202 -0
- package/templates/apps/api/src/services/__tests__/project-listings.fence.test.ts +15 -18
- package/templates/apps/api/src/services/abandon-email.ts +28 -5
- package/templates/apps/api/src/services/deliverable-fulfillment.ts +15 -12
- package/templates/apps/api/src/services/entitlements.ts +157 -1
- package/templates/apps/api/src/services/lead-routing.ts +113 -58
- package/templates/apps/api/src/services/offerings/__tests__/catalog.test.ts +348 -0
- package/templates/apps/api/src/services/offerings/__tests__/checkout-session-record.test.ts +268 -0
- package/templates/apps/api/src/services/offerings/__tests__/connection.test.ts +975 -0
- package/templates/apps/api/src/services/offerings/__tests__/fixtures.ts +416 -0
- package/templates/apps/api/src/services/offerings/__tests__/org-products.test.ts +400 -0
- package/templates/apps/api/src/services/offerings/__tests__/readers.test.ts +685 -0
- package/templates/apps/api/src/services/offerings/__tests__/source.test.ts +231 -0
- package/templates/apps/api/src/services/offerings/catalog.ts +318 -0
- package/templates/apps/api/src/services/offerings/checkout-authorization.ts +403 -0
- package/templates/apps/api/src/services/offerings/checkout-session-record.ts +192 -0
- package/templates/apps/api/src/services/offerings/connection.ts +1083 -0
- package/templates/apps/api/src/services/offerings/index.ts +614 -0
- package/templates/apps/api/src/services/offerings/source.ts +140 -0
- package/templates/apps/api/src/services/offerings/store.ts +150 -0
- package/templates/apps/api/src/services/person.ts +147 -9
- package/templates/apps/api/src/services/plan-offerings.ts +96 -30
- package/templates/apps/api/src/services/project-listings.ts +43 -31
- package/templates/apps/api/src/services/public-site-resolver.ts +19 -14
- package/templates/apps/mcp/CLAUDE.md +32 -18
- package/templates/apps/mcp/__tests__/app-entry.test.ts +2 -2
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +9 -4
- package/templates/apps/mcp/__tests__/get_offerings.test.ts +358 -0
- package/templates/apps/mcp/__tests__/get_pricing.test.ts +364 -0
- package/templates/apps/mcp/__tests__/http-transport.test.ts +95 -14
- package/templates/apps/mcp/__tests__/lib/content-adapter-parity.test.ts +8 -3
- package/templates/apps/mcp/__tests__/lib/content-adapter.test.ts +0 -25
- package/templates/apps/mcp/__tests__/lib/fail-closed-tools.test.ts +22 -7
- package/templates/apps/mcp/__tests__/list_pages.test.ts +84 -44
- package/templates/apps/mcp/__tests__/locale.test.ts +41 -56
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +2 -2
- package/templates/apps/mcp/__tests__/rate-limit-write.test.ts +189 -0
- package/templates/apps/mcp/__tests__/read_content.test.ts +115 -78
- package/templates/apps/mcp/__tests__/request_callback.test.ts +63 -128
- package/templates/apps/mcp/__tests__/search_content.test.ts +76 -61
- package/templates/apps/mcp/__tests__/server.test.ts +13 -11
- package/templates/apps/mcp/__tests__/start_purchase.test.ts +208 -12
- package/templates/apps/mcp/__tests__/submit_lead.test.ts +82 -167
- package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +59 -130
- package/templates/apps/mcp/__tests__/tools/purchase.test.ts +11 -11
- package/templates/apps/mcp/package.json +1 -0
- package/templates/apps/mcp/src/abuse/index.ts +18 -11
- package/templates/apps/mcp/src/http-transport.ts +47 -9
- package/templates/apps/mcp/src/lib/content-adapter.ts +0 -26
- package/templates/apps/mcp/src/lib/empty-content-adapter.ts +5 -4
- package/templates/apps/mcp/src/lib/shown-offerings.ts +105 -0
- package/templates/apps/mcp/src/lib/site-config.ts +53 -0
- package/templates/apps/mcp/src/server.ts +5 -0
- package/templates/apps/mcp/src/tools/capture_lead.ts +30 -28
- package/templates/apps/mcp/src/tools/get_offerings.ts +47 -30
- package/templates/apps/mcp/src/tools/get_pricing.ts +40 -40
- package/templates/apps/mcp/src/tools/index.ts +22 -21
- package/templates/apps/mcp/src/tools/list_pages.ts +27 -33
- package/templates/apps/mcp/src/tools/purchase.ts +30 -2
- package/templates/apps/mcp/src/tools/read_content.ts +46 -40
- package/templates/apps/mcp/src/tools/request_callback.ts +21 -28
- package/templates/apps/mcp/src/tools/search_content.ts +20 -24
- package/templates/apps/mcp/src/tools/subscribe_newsletter.ts +23 -26
- package/templates/apps/mcp/src/workspace-server.ts +15 -0
- package/templates/apps/web/.env.example +10 -31
- package/templates/apps/web/CLAUDE.md +324 -42
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/agreements-prompt.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/layout.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/privacy.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/careers/[slug]/[action]/page.tsx +189 -0
- package/templates/apps/web/app/[locale]/careers/[slug]/apply.actions.ts +4 -2
- package/templates/apps/web/app/[locale]/careers/[slug]/job-application-form.ts +8 -3
- package/templates/apps/web/app/[locale]/careers/[slug]/page.tsx +22 -144
- package/templates/apps/web/app/[locale]/careers/__tests__/apply.actions.test.ts +9 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/careers-hub.test.tsx +172 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/careers-set.test.tsx +149 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/job-application-form.test.ts +22 -24
- package/templates/apps/web/app/[locale]/careers/__tests__/job-apply-page.test.tsx +140 -66
- package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +57 -22
- package/templates/apps/web/app/[locale]/careers/page.tsx +129 -5
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/contact/__tests__/contact-magnet-page.test.tsx +119 -11
- package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +28 -5
- package/templates/apps/web/app/[locale]/contact/contact.actions.ts +20 -6
- package/templates/apps/web/app/[locale]/contact/intake-script.ts +1 -1
- package/templates/apps/web/app/[locale]/contact/page.tsx +99 -92
- package/templates/apps/web/app/[locale]/flows/[slug]/FlowStepperClient.tsx +237 -5
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.count.test.tsx +43 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.deliverable.test.tsx +200 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.ending.test.tsx +197 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/magnet-page.test.tsx +430 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/two-route-tool.test.tsx +21 -9
- package/templates/apps/web/app/[locale]/flows/[slug]/magnet-page.tsx +369 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/page.tsx +12 -73
- package/templates/apps/web/app/[locale]/flows/[slug]/start/page.tsx +10 -31
- package/templates/apps/web/app/[locale]/layout.tsx +55 -4
- package/templates/apps/web/app/[locale]/newsletter/__tests__/page.test.tsx +174 -104
- package/templates/apps/web/app/[locale]/newsletter/page.tsx +95 -58
- package/templates/apps/web/app/[locale]/pricing/__tests__/__snapshots__/unconnected.test.tsx.snap +7 -0
- package/templates/apps/web/app/[locale]/pricing/__tests__/offerings.test.tsx +599 -0
- package/templates/apps/web/app/[locale]/pricing/__tests__/page.test.tsx +216 -0
- package/templates/apps/web/app/[locale]/pricing/__tests__/unconnected.test.tsx +236 -0
- package/templates/apps/web/app/[locale]/pricing/page.tsx +367 -6
- package/templates/apps/web/app/[locale]/team/__tests__/team-routes.test.tsx +4 -1
- package/templates/apps/web/app/[locale]/unsubscribe/__tests__/unsubscribe-rsc-boundary.test.tsx +17 -0
- package/templates/apps/web/app/[locale]/unsubscribe/__tests__/unsubscribe.test.tsx +62 -3
- package/templates/apps/web/app/[locale]/unsubscribe/page.tsx +70 -18
- package/templates/apps/web/app/[locale]/unsubscribe/unsubscribe-button.tsx +30 -9
- package/templates/apps/web/app/api/offerings/checkout/[lookupKey]/route.ts +316 -0
- package/templates/apps/web/app/api/offerings/checkout/__tests__/route.test.ts +810 -0
- package/templates/apps/web/lib/__tests__/auth-routes.test.ts +27 -1
- package/templates/apps/web/lib/__tests__/deck-page.test.ts +2 -1
- package/templates/apps/web/lib/__tests__/in-page-magnet.test.ts +265 -0
- package/templates/apps/web/lib/__tests__/magnet-routes.test.ts +64 -0
- package/templates/apps/web/lib/__tests__/newsletter.actions.test.ts +293 -0
- package/templates/apps/web/lib/__tests__/offerings-pricing.test.ts +601 -0
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +67 -8
- package/templates/apps/web/lib/auth-routes.ts +36 -2
- package/templates/apps/web/lib/checkout-config.ts +9 -20
- package/templates/apps/web/lib/deck-page.ts +1 -0
- package/templates/apps/web/lib/deliverable-grant.ts +18 -0
- package/templates/apps/web/lib/in-page-magnet.ts +416 -0
- package/templates/apps/web/lib/magnet-routes.ts +44 -0
- package/templates/apps/web/lib/modules.generated.ts +9 -0
- package/templates/apps/web/lib/newsletter.actions.ts +205 -0
- package/templates/apps/web/lib/offerings-pricing.ts +326 -0
- package/templates/apps/web/lib/posting-title.ts +17 -0
- package/templates/apps/web/lib/sign-up-agreements.ts +4 -2
- package/templates/apps/web/messages/en.json +49 -15
- package/templates/apps/web/middleware.ts +12 -2
- package/templates/apps/web/security-headers.config.ts +17 -0
- package/templates/content/en/BlogList/blog.mdx +4 -71
- package/templates/content/en/BookCall/book-a-call.mdx +1 -41
- package/templates/content/en/BookCall/onsite-estimate.mdx +1 -17
- package/templates/content/en/BookCall/onsite-service.mdx +1 -17
- package/templates/content/en/BookCall/start-project.mdx +1 -17
- package/templates/content/en/ContactPage/contact.mdx +6 -63
- package/templates/content/en/HomePage/home.mdx +3 -21
- package/templates/database/CHANGELOG.md +51 -0
- package/templates/database/__tests__/in-page-magnets-migration.test.ts +161 -0
- package/templates/database/__tests__/offerings-checkout-session.db.test.ts +270 -0
- package/templates/database/__tests__/offerings-migration.test.ts +197 -0
- package/templates/database/__tests__/offerings-shown-price-ids-migration.test.ts +86 -0
- package/templates/database/__tests__/offerings.db.test.ts +303 -0
- package/templates/database/__tests__/seed.test.ts +63 -1
- package/templates/database/__tests__/trial-magnet-migration.test.ts +186 -0
- package/templates/database/auth/schema.prisma +4 -0
- package/templates/database/config/schema.prisma +91 -0
- package/templates/database/migrations/20261020120000_offerings_data_model/migration.sql +146 -0
- package/templates/database/migrations/20261021120000_offerings_checkout_session/migration.sql +77 -0
- package/templates/database/migrations/20261022120000_in_page_magnets/migration.sql +45 -0
- package/templates/database/migrations/20261023120000_offerings_shown_price_ids/migration.sql +47 -0
- package/templates/database/migrations/20261024120000_organization_plan_checkout_session/migration.sql +16 -0
- package/templates/database/migrations/20261025120000_trial_magnet/migration.sql +28 -0
- package/templates/database/migrations/20261026120000_trial_magnet_proof_line/migration.sql +23 -0
- package/templates/database/package.json +1 -1
- package/templates/database/seed.ts +57 -2
- package/templates/tools/lint-architecture.ts +205 -1
- package/versions.json +35 -35
- package/site-templates/marketing-site-free/content/en/Pricing/pricing.mdx +0 -199
- package/templates/apps/api/src/routes/content/slug.ts +0 -9
- package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +0 -93
- package/templates/apps/web/app/[locale]/downloads/page.tsx +0 -37
- package/templates/apps/web/app/[locale]/newsletter/__tests__/newsletter.actions.test.ts +0 -139
- package/templates/apps/web/app/[locale]/newsletter/newsletter.actions.ts +0 -93
- package/templates/apps/web/app/api/checkout/[offering]/route.ts +0 -48
- package/templates/apps/web/app/api/checkout/__tests__/route.test.ts +0 -120
- package/templates/apps/web/app/api/checkout/__tests__/success-path.test.ts +0 -86
- package/templates/apps/web/app/api/webhooks/stripe/__tests__/route.test.ts +0 -92
- package/templates/apps/web/app/api/webhooks/stripe/route.ts +0 -31
- package/templates/apps/web/lib/__tests__/checkout.test.ts +0 -243
- package/templates/apps/web/lib/__tests__/meeting-slugs.test.ts +0 -120
- package/templates/apps/web/lib/checkout.ts +0 -93
- package/templates/apps/web/lib/meeting-slugs.ts +0 -63
package/dist/starter-grid.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The pages every starter carries whatever its shape (#6658 D5,
|
|
3
3
|
* `docs/decisions/starter-roster-page-set.md` D4/D7): a glossary and a
|
|
4
|
-
* newsletter signup
|
|
5
|
-
* roster enables, with its seed in `_base
|
|
4
|
+
* newsletter signup — each a module-less `GATEABLE_SURFACES` entry the
|
|
5
|
+
* roster enables, with its seed in `_base` — and the `/unsubscribe` landing
|
|
6
|
+
* every signed link calls (#8850 D1). That one is a code route with no
|
|
7
|
+
* `content`, like `/sign-in`: a `CORE_ROUTE_DIRS` entry every scaffold
|
|
8
|
+
* already serves, never gated (#8438 D17), declared here so the roster of
|
|
9
|
+
* record lists it beside the newsletter.
|
|
6
10
|
*
|
|
7
|
-
*
|
|
8
|
-
* former `/book-a-call` link now points at `/meet/book-a-call`,
|
|
9
|
-
* `FREE_MEET_PLACEHOLDER_ROWS` below (a Free placeholder) or by
|
|
10
|
-
* scheduling module's own live `/meet/[slug]` page.
|
|
11
|
+
* A former third page — `/book-a-call` — was retired by #6897 D10: every
|
|
12
|
+
* scaffold's former `/book-a-call` link now points at `/meet/book-a-call`,
|
|
13
|
+
* served by `FREE_MEET_PLACEHOLDER_ROWS` below (a Free placeholder) or by
|
|
14
|
+
* the scheduling module's own live `/meet/[slug]` page.
|
|
11
15
|
*/
|
|
12
16
|
const SHAPE_INDEPENDENT_ROWS = [
|
|
13
17
|
{ route: "/glossary", content: ["content/en/GlossaryList/glossary.mdx"] },
|
|
@@ -15,6 +19,7 @@ const SHAPE_INDEPENDENT_ROWS = [
|
|
|
15
19
|
route: "/newsletter",
|
|
16
20
|
content: ["content/en/NewsletterSignup/newsletter.mdx"],
|
|
17
21
|
},
|
|
22
|
+
{ route: "/unsubscribe" },
|
|
18
23
|
];
|
|
19
24
|
/**
|
|
20
25
|
* The Free `/meet` placeholder pages (#6897 D5) — a meeting-types hub
|
|
@@ -30,10 +35,12 @@ const SHAPE_INDEPENDENT_ROWS = [
|
|
|
30
35
|
* Every alias that takes the `scheduling` module drops `"/meet"` and
|
|
31
36
|
* `"/meet/[slug]"` (D5) — otherwise `mergeRoster` refuses the duplicate
|
|
32
37
|
* route the module's own rows also contribute. The ROWS go; the SEEDS stay
|
|
33
|
-
* (#6942, operator 2026-09-28, partly reversing D5):
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* (`site-roster.ts`) folds them onto the module's rows.
|
|
38
|
+
* (#6942, operator 2026-09-28, partly reversing D5): the module's meeting
|
|
39
|
+
* page reads a `BookCall/<slug>` seed for its URL, its JSON-LD and its
|
|
40
|
+
* fallback title, never its sections (#8843 C5). `withMeetPlaceholderSeeds`
|
|
41
|
+
* (`site-roster.ts`) folds them onto the module's rows. The hub-driven
|
|
42
|
+
* `/private` index has no row here: it reaches those aliases through the
|
|
43
|
+
* module's own `pageContributions` (#8843 D8, #8850 D2).
|
|
37
44
|
*/
|
|
38
45
|
const FREE_MEET_PLACEHOLDER_ROWS = [
|
|
39
46
|
{ route: "/meet", content: ["content/en/LandingPage/meet.mdx"] },
|
|
@@ -391,9 +398,12 @@ export const ALIASES = Object.freeze({
|
|
|
391
398
|
design: "standard",
|
|
392
399
|
modules: ["marketing"],
|
|
393
400
|
categories: ["accounting", "legal", "technology"],
|
|
394
|
-
//
|
|
395
|
-
//
|
|
396
|
-
|
|
401
|
+
// No `layout`: every knob keeps its default. The "Get started for free or
|
|
402
|
+
// upgrade to Pro" banner this alias carried for the demo site (operator
|
|
403
|
+
// ruling 2026-09-23) reached every keyless `organization-product`
|
|
404
|
+
// scaffold too, so Epic #8845's "no starter page ships our own brands or
|
|
405
|
+
// upsells" retires it (#8850, spec C6); a demo deployment that wants it
|
|
406
|
+
// sets it in its own config.
|
|
397
407
|
},
|
|
398
408
|
/**
|
|
399
409
|
* The Pro flagship. Its module list is OFFERINGS § 4 offering 3's tiers line
|
package/dist/surfaces.js
CHANGED
|
@@ -229,15 +229,15 @@ export const GATEABLE_SURFACES = [
|
|
|
229
229
|
content: [],
|
|
230
230
|
},
|
|
231
231
|
{
|
|
232
|
-
// The `scheduling` MODULE's presentation tier — the
|
|
233
|
-
//
|
|
234
|
-
//
|
|
235
|
-
//
|
|
236
|
-
//
|
|
237
|
-
//
|
|
238
|
-
// so there is no MDX of its own.
|
|
232
|
+
// The `scheduling` MODULE's presentation tier — the meeting index, the
|
|
233
|
+
// meeting page and the confirmation page the module OWNS (`/meet`,
|
|
234
|
+
// `/meet/:slug`, `/meet/confirmed`, one directory; renamed from the
|
|
235
|
+
// schedule/ directory by #5563), and the private index `/private`
|
|
236
|
+
// (#8843 D10), a second directory gated with it. API-backed like
|
|
237
|
+
// `flows`: every meeting fact comes from apps/api's
|
|
238
|
+
// `GET /v1/schedule/meetings`, so there is no MDX of its own.
|
|
239
239
|
id: "meet",
|
|
240
|
-
routes: [`${ROUTE_ROOT}/meet`],
|
|
240
|
+
routes: [`${ROUTE_ROOT}/meet`, `${ROUTE_ROOT}/private`],
|
|
241
241
|
content: [],
|
|
242
242
|
// `navLabelKey` names COPY, not a route — D1 R2 (#5563): renaming it would
|
|
243
243
|
// orphan an operator's customised `messages/<locale>.json` for zero
|
|
@@ -395,7 +395,9 @@ export const MODULE_SURFACES = {
|
|
|
395
395
|
// vocabulary assertion covers exactly the recognized module set.
|
|
396
396
|
workspace: [],
|
|
397
397
|
scheduling: ["meet"],
|
|
398
|
-
|
|
398
|
+
// #8848 D12 — `/downloads` is now a redirect into `/reports`, both this
|
|
399
|
+
// module's, so `--surfaces downloads` without it is refused as `flows` is.
|
|
400
|
+
"signal-collectors": ["flows", "downloads"],
|
|
399
401
|
commerce: [],
|
|
400
402
|
};
|
|
401
403
|
/** Thrown on an unrecognized surface id. Mirrors parse-args' ParseError shape. */
|
|
@@ -563,6 +565,13 @@ export const ROUTE_SINCE = {
|
|
|
563
565
|
"blog/[[...slug]]": "0.0.0",
|
|
564
566
|
careers: "0.0.0",
|
|
565
567
|
"careers/[slug]": "0.0.0",
|
|
568
|
+
// #8840 D11 — the Job application magnet's two walks, signal-collectors
|
|
569
|
+
// slice files. Genuinely new, so they attach at the fixed group's next
|
|
570
|
+
// release line, the same rule #8661 D10 applied.
|
|
571
|
+
"careers/apply": "0.44.0",
|
|
572
|
+
"careers/[slug]/apply": "0.44.0",
|
|
573
|
+
// #8849 D7 — the Free apply page, a core file of the careers surface.
|
|
574
|
+
"careers/[slug]/[action]": "0.44.0",
|
|
566
575
|
"case-studies": "0.0.0",
|
|
567
576
|
"case-studies/[slug]": "0.0.0",
|
|
568
577
|
clients: "0.0.0",
|
|
@@ -572,6 +581,9 @@ export const ROUTE_SINCE = {
|
|
|
572
581
|
"dev/purchase": "0.0.0",
|
|
573
582
|
"docs/[[...slug]]": "0.0.0",
|
|
574
583
|
downloads: "0.0.0",
|
|
584
|
+
// #8848 D12 — the per-slug redirect into `/reports/<slug>`, a
|
|
585
|
+
// signal-collectors slice file at the fixed group's next release line.
|
|
586
|
+
"downloads/[slug]": "0.44.0",
|
|
575
587
|
events: "0.0.0",
|
|
576
588
|
"events/[slug]": "0.0.0",
|
|
577
589
|
// #6721 — the feature pages, a new route pair at today's line.
|
|
@@ -751,6 +763,9 @@ export const ROUTE_SINCE = {
|
|
|
751
763
|
// new route directory, so it attaches at today's fixed-group version, the
|
|
752
764
|
// same rule applied above.
|
|
753
765
|
"[slug]/[detail]": "0.28.0",
|
|
766
|
+
// #8843 D8 — the private meeting index, a new route directory gated with
|
|
767
|
+
// `meet`, attached at today's fixed-group version by the same rule.
|
|
768
|
+
private: "0.43.0",
|
|
754
769
|
};
|
|
755
770
|
/**
|
|
756
771
|
* Surface id of the registry that owns `routeDir` (ROUTE_ROOT-relative): the
|
|
@@ -1044,9 +1059,13 @@ export const ROUTE_DEPENDENCIES = {
|
|
|
1044
1059
|
`${ROUTE_ROOT}/(authed)/waitlist/components/ForbiddenState.tsx`,
|
|
1045
1060
|
],
|
|
1046
1061
|
"(authed)/waitlist": ["apps/web/lib/server-api.ts"],
|
|
1047
|
-
// #
|
|
1048
|
-
meet
|
|
1049
|
-
|
|
1062
|
+
// #8843 D6 — the booking pages share one builder over the meetings read;
|
|
1063
|
+
// `/private` returns the index frame that lives under `meet/`.
|
|
1064
|
+
meet: ["apps/web/lib/meetings.tsx"],
|
|
1065
|
+
"meet/[slug]": ["apps/web/lib/meetings.tsx"],
|
|
1066
|
+
private: ["apps/web/lib/meetings.tsx", `${ROUTE_ROOT}/meet/meeting-index.tsx`],
|
|
1067
|
+
// #8927 D8 — /pricing maps the Offerings shown set through the mapper.
|
|
1068
|
+
pricing: ["apps/web/lib/offerings-pricing.ts"],
|
|
1050
1069
|
};
|
|
1051
1070
|
/**
|
|
1052
1071
|
* i18n message namespaces (dot-path into `apps/web/messages/<locale>.json`) a
|
|
@@ -1093,6 +1112,8 @@ export const ROUTE_MESSAGE_NAMESPACES = {
|
|
|
1093
1112
|
team: ["team"],
|
|
1094
1113
|
// #8438 D21 — the unsubscribe landing's own namespace.
|
|
1095
1114
|
unsubscribe: ["unsubscribe"],
|
|
1115
|
+
// #8927 D6 — the Offerings cards' CTA, recommendation and period phrases.
|
|
1116
|
+
pricing: ["pricing", "pricingOfferings"],
|
|
1096
1117
|
};
|
|
1097
1118
|
/** Template-relative path of the generated site-nav registry. */
|
|
1098
1119
|
export const NAV_CONFIG_PATH = "apps/web/lib/nav-config.ts";
|
package/dist/sync-routes.d.ts
CHANGED
|
@@ -49,12 +49,23 @@ export interface SyncRoutesResult {
|
|
|
49
49
|
missing: RouteReport[];
|
|
50
50
|
/** Route dirs present but with a direct file absent or changed, sorted. */
|
|
51
51
|
modified: RouteReport[];
|
|
52
|
-
/** Route dirs copied this run (the missing list when applying, else empty). */
|
|
52
|
+
/** Route dirs copied this run (the missing list minus `refused` when applying, else empty). */
|
|
53
53
|
applied: string[];
|
|
54
54
|
/**
|
|
55
|
-
* `
|
|
56
|
-
*
|
|
57
|
-
|
|
55
|
+
* Missing routes `--apply` does not write because an import does not
|
|
56
|
+
* resolve (#9406 DD4) — reported in check mode too. Sorted.
|
|
57
|
+
*/
|
|
58
|
+
refused: string[];
|
|
59
|
+
/**
|
|
60
|
+
* Per missing route, the local modules its files import (#9406 DD5): one
|
|
61
|
+
* entry per route with any non-empty list, sorted by route.
|
|
62
|
+
*/
|
|
63
|
+
routeImports: RouteImportReport[];
|
|
64
|
+
/**
|
|
65
|
+
* Files, of any route in `missing` not `refused`, absent from the target:
|
|
66
|
+
* its `ROUTE_DEPENDENCIES` entries unioned with the `copies` its imports
|
|
67
|
+
* resolve to (#9406). Copied when `apply` is set (never overwriting), else
|
|
68
|
+
* reported only. Sorted, deduplicated.
|
|
58
69
|
*/
|
|
59
70
|
missingDependencies: string[];
|
|
60
71
|
/** Dependency files copied this run. Sorted. */
|
|
@@ -78,6 +89,38 @@ export interface SyncRoutesResult {
|
|
|
78
89
|
routes: string[];
|
|
79
90
|
entry: string;
|
|
80
91
|
}>;
|
|
92
|
+
/**
|
|
93
|
+
* The retired legacy spoke checkout (#9142), on a spoke only — empty lists
|
|
94
|
+
* on a hub. See `retireLegacySpokeCheckout`.
|
|
95
|
+
*/
|
|
96
|
+
retiredCheckout: RetiredCheckoutReport;
|
|
97
|
+
}
|
|
98
|
+
/** What `retireLegacySpokeCheckout` found, and did when `apply` was set. */
|
|
99
|
+
export interface RetiredCheckoutReport {
|
|
100
|
+
/** Files deleted (without `apply`: to delete), scaffold-relative, sorted. */
|
|
101
|
+
retired: string[];
|
|
102
|
+
/** Retired files left in place, with why — the site deletes them by hand. Sorted by path. */
|
|
103
|
+
kept: Array<{
|
|
104
|
+
path: string;
|
|
105
|
+
reason: string;
|
|
106
|
+
}>;
|
|
107
|
+
/** Generated files rewritten (without `apply`: to rewrite) — the billing action. */
|
|
108
|
+
rewritten: string[];
|
|
109
|
+
}
|
|
110
|
+
/** One missing route's site-local imports (#9406 DD5) — see `walkRouteImports`. */
|
|
111
|
+
export interface RouteImportReport {
|
|
112
|
+
/** ROUTE_ROOT-relative, `/`-separated. */
|
|
113
|
+
route: string;
|
|
114
|
+
/** Template files the route reaches that the site lacks — copied with `--apply`. Sorted. */
|
|
115
|
+
copies: string[];
|
|
116
|
+
/** Files the route reaches that the site has, whose bytes differ from the template's — never written. Sorted. */
|
|
117
|
+
differs: string[];
|
|
118
|
+
/** Imports that resolve nowhere this sync can write; any entry refuses the route. Sorted by `from`, then `specifier`. */
|
|
119
|
+
unresolved: Array<{
|
|
120
|
+
specifier: string;
|
|
121
|
+
from: string;
|
|
122
|
+
reason: string;
|
|
123
|
+
}>;
|
|
81
124
|
}
|
|
82
125
|
/** One `NO_STRUCTURED_DATA_ROUTES` element: its source text, dedented, and the routes it exempts. */
|
|
83
126
|
interface StructuredDataExemption {
|
|
@@ -102,6 +145,26 @@ export declare function parseStructuredDataExemptions(source: string): Structure
|
|
|
102
145
|
* the registry recognizes (`surfaceForRouteDir`).
|
|
103
146
|
*/
|
|
104
147
|
export declare function listTemplateRouteDirs(templatesDir: string): string[];
|
|
148
|
+
/**
|
|
149
|
+
* Retire the legacy env-key spoke checkout from a spoke (#9142): its buy
|
|
150
|
+
* route, Stripe webhook route, `lib/checkout.ts`, their tests
|
|
151
|
+
* (`RETIRED_SPOKE_CHECKOUT_PATHS`) and the generated checkout e2e workflow.
|
|
152
|
+
*
|
|
153
|
+
* - A copied file is deleted only when the template record lists it and its
|
|
154
|
+
* bytes still hash to the recorded copy — the rule `create-ailk update`
|
|
155
|
+
* uses for a file the template dropped; its record row goes with it. An
|
|
156
|
+
* edited file, or one the record does not list, is reported in `kept`.
|
|
157
|
+
* - The workflow, never recorded, is deleted only when its first line is
|
|
158
|
+
* still create-ailk's generated marker.
|
|
159
|
+
* - The billing action (a spoke that signs in through its hub) imported
|
|
160
|
+
* `lib/checkout.ts`; when its first line is still the generated marker and
|
|
161
|
+
* it differs from the current render, it is rewritten to `BILLING_ACTION`.
|
|
162
|
+
* An edited one that still imports `lib/checkout` is reported in `kept`.
|
|
163
|
+
*
|
|
164
|
+
* Without `apply` nothing is written: the lists say what `--apply` would do.
|
|
165
|
+
* Directories the deletes leave empty are removed, up to `RETIRE_STOP_DIRS`.
|
|
166
|
+
*/
|
|
167
|
+
export declare function retireLegacySpokeCheckout(targetAbs: string, apply: boolean): RetiredCheckoutReport;
|
|
105
168
|
/**
|
|
106
169
|
* Compare an already-scaffolded repo's route tree with the template's and,
|
|
107
170
|
* when `apply` is set, copy in the route dirs it is missing.
|
|
@@ -120,7 +183,7 @@ export interface SyncRoutesArgs {
|
|
|
120
183
|
apply: boolean;
|
|
121
184
|
help: boolean;
|
|
122
185
|
}
|
|
123
|
-
export declare const SYNC_ROUTES_HELP = "create-ailk sync-routes \u2014 copy template routes an existing site is missing.\n\nUsage:\n create-ailk sync-routes [<target-dir>] [--apply]\n\nArguments:\n <target-dir> An already-scaffolded repo (contains\n architecture.yaml). Defaults to the current dir.\n\nOptions:\n --apply Copy the missing route directories into the target.\n Without it the command only reports: exit 1 when a\n route is missing, 0 when in sync.\n --help, -h Print this message.\n\nChecks every core route plus the routes of each surface the site carries; a\nsurface gated off at scaffold time is skipped, not drift. A route the site has\nchanged locally is reported and never overwritten. Nothing is
|
|
186
|
+
export declare const SYNC_ROUTES_HELP = "create-ailk sync-routes \u2014 copy template routes an existing site is missing.\n\nUsage:\n create-ailk sync-routes [<target-dir>] [--apply]\n\nArguments:\n <target-dir> An already-scaffolded repo (contains\n architecture.yaml). Defaults to the current dir.\n\nOptions:\n --apply Copy the missing route directories into the target.\n Without it the command only reports: exit 1 when a\n route is missing, 0 when in sync.\n --help, -h Print this message.\n\nChecks every core route plus the routes of each surface the site carries; a\nsurface gated off at scaffold time is skipped, not drift. A route the site has\nchanged locally is reported and never overwritten. Nothing is deleted except,\non a spoke, the retired legacy checkout's files that still match create-ailk's\ncopy: --apply removes them and rewrites the generated billing action (#9142).\n";
|
|
124
187
|
/**
|
|
125
188
|
* Parse the argv AFTER the `sync-routes` word. Strict `node:util` parseArgs,
|
|
126
189
|
* like `parseCliArgs`; at most one positional.
|