create-ailk 0.7.0 → 0.9.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 +112 -10
- package/component-catalog.json +798 -49
- package/component-catalog.md +9 -6
- package/dist/add-module.d.ts +20 -0
- package/dist/add-module.js +43 -7
- package/dist/add-route.d.ts +56 -0
- package/dist/add-route.js +286 -0
- package/dist/apply-design-md.d.ts +7 -0
- package/dist/apply-design-md.js +50 -0
- package/dist/apply-design.d.ts +64 -0
- package/dist/apply-design.js +273 -0
- package/dist/claude-md.d.ts +111 -0
- package/dist/claude-md.js +334 -0
- package/dist/cli.js +114 -28
- package/dist/derive-architecture.js +41 -36
- package/dist/design-compile.d.ts +71 -0
- package/dist/design-compile.js +98 -0
- package/dist/design-package.d.ts +83 -0
- package/dist/design-package.js +468 -0
- package/dist/design-presets.d.ts +86 -0
- package/dist/design-presets.js +642 -0
- package/dist/design-scaffold.d.ts +76 -0
- package/dist/design-scaffold.js +220 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -1
- package/dist/legacy-nav-renderers.d.ts +45 -0
- package/dist/legacy-nav-renderers.js +545 -0
- package/dist/lib/auth-secret-file.d.ts +19 -0
- package/dist/lib/auth-secret-file.js +112 -0
- package/dist/lib/design-checks.d.ts +78 -0
- package/dist/lib/design-checks.js +174 -0
- package/dist/lib/extract-module-bundle.js +5 -1
- package/dist/lib/license-key-files.d.ts +9 -0
- package/dist/lib/license-key-files.js +2 -2
- package/dist/lib/module-license-gate.d.ts +89 -0
- package/dist/lib/module-license-gate.js +171 -12
- package/dist/lib/module-tier.d.ts +45 -16
- package/dist/lib/module-tier.js +76 -0
- package/dist/lib/pro-callout.js +10 -2
- package/dist/lib/render-verdict.d.ts +52 -0
- package/dist/lib/render-verdict.js +77 -0
- package/dist/lib/scaffold-render-sweep.d.ts +105 -0
- package/dist/lib/scaffold-render-sweep.js +236 -0
- package/dist/module-architecture.d.ts +19 -16
- package/dist/module-architecture.js +64 -21
- package/dist/parse-args.d.ts +88 -10
- package/dist/parse-args.js +272 -21
- package/dist/programmatic.d.ts +66 -12
- package/dist/programmatic.js +361 -34
- package/dist/site-chrome.d.ts +19 -9
- package/dist/site-chrome.js +23 -13
- package/dist/site-manifest.d.ts +25 -0
- package/dist/site-manifest.js +254 -0
- package/dist/site-roster.d.ts +41 -0
- package/dist/site-roster.js +149 -11
- package/dist/starter-grid.d.ts +232 -0
- package/dist/starter-grid.js +545 -0
- package/dist/surfaces.d.ts +41 -9
- package/dist/surfaces.js +268 -92
- package/dist/template-manifest.d.ts +65 -29
- package/dist/template-manifest.js +161 -382
- package/dist/template-names.d.ts +14 -12
- package/dist/template-names.js +13 -17
- package/package.json +5 -4
- package/site-templates/_base/content/en/Feature/feature-1.mdx +69 -0
- package/site-templates/_base/content/en/Feature/feature-2.mdx +69 -0
- package/site-templates/_base/content/en/Feature/feature-3.mdx +69 -0
- package/site-templates/_base/content/en/FeaturesList/features.mdx +91 -0
- package/site-templates/_base/content/en/GlossaryList/glossary.mdx +0 -1
- package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +0 -1
- package/site-templates/_base/content/en/PortfolioItem/sample-four.mdx +105 -0
- package/site-templates/_base/content/en/PortfolioItem/sample-one.mdx +34 -0
- package/site-templates/_base/content/en/PortfolioItem/sample-three.mdx +94 -0
- package/site-templates/_base/content/en/PortfolioItem/sample-two.mdx +45 -0
- package/site-templates/_base/content/en/PortfolioList/portfolio.mdx +169 -0
- package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +15 -0
- package/site-templates/_base/content/en/UseCase/persona-1.mdx +70 -0
- package/site-templates/_base/content/en/UseCase/persona-2.mdx +70 -0
- package/site-templates/_base/content/en/UseCase/persona-3.mdx +70 -0
- package/site-templates/{minimalism-site/TEMPLATE-MANIFEST.json → aliases/minimalism-site.TEMPLATE-MANIFEST.json} +72 -40
- package/site-templates/designs/minimalism/DESIGN.md +98 -6
- package/site-templates/designs/minimalism/sample/README.md +48 -0
- package/site-templates/designs/standard/DESIGN.md +103 -6
- package/site-templates/marketing-site/DESIGN.md +103 -6
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +144 -47
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +82 -41
- package/site-templates/marketing-site-free/DESIGN.md +103 -6
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +150 -48
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +114 -67
- package/site-templates/marketing-site-free/ailk-template.json +1 -1
- package/site-templates/marketing-site-free/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/marketing-site-free/content/en/Pricing/pricing.mdx +199 -0
- package/site-templates/saas-product/DESIGN.md +103 -6
- package/site-templates/saas-product/TEMPLATE-MANIFEST.md +9 -1
- package/site-templates/{simple-service → shapes/local-business-service}/TEMPLATE-MANIFEST.json +210 -81
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +356 -0
- package/site-templates/shapes/local-business-service/ailk-template.json +10 -0
- package/site-templates/{simple-service → shapes/local-business-service}/content/en/AboutPage/about.mdx +4 -4
- package/site-templates/shapes/local-business-service/content/en/HomePage/home.mdx +70 -0
- package/site-templates/shapes/local-business-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/shapes/local-business-service/content/en/PortfolioList/portfolio.mdx +171 -0
- package/site-templates/{minimalism-site → shapes/local-business-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +7 -8
- package/site-templates/shapes/local-business-service/content/en/Service/first-job.mdx +39 -0
- package/site-templates/shapes/local-business-service/content/en/Service/second-job.mdx +39 -0
- package/site-templates/shapes/local-business-service/content/en/Service/third-job.mdx +39 -0
- package/site-templates/shapes/local-business-service/content/en/ServicesList/services.mdx +61 -0
- package/site-templates/shapes/local-business-service/provenance.json +4 -0
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.json +471 -0
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +354 -0
- package/site-templates/shapes/organization-service/ailk-template.json +10 -0
- package/site-templates/shapes/organization-service/content/en/AboutPage/about.mdx +38 -0
- package/site-templates/shapes/organization-service/content/en/HomePage/home.mdx +85 -0
- package/site-templates/shapes/organization-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/shapes/organization-service/content/en/PortfolioList/portfolio.mdx +171 -0
- package/site-templates/shapes/organization-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
- package/site-templates/{minimalism-site → shapes/organization-service}/content/en/ServicesList/services.mdx +3 -4
- package/site-templates/shapes/organization-service/provenance.json +4 -0
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +478 -0
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +353 -0
- package/site-templates/shapes/person-service/ailk-template.json +10 -0
- package/site-templates/shapes/person-service/content/_site.mdx +85 -0
- package/site-templates/shapes/person-service/content/en/AboutPage/about.mdx +39 -0
- package/site-templates/shapes/person-service/content/en/HomePage/home.mdx +97 -0
- package/site-templates/shapes/person-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/shapes/person-service/content/en/PortfolioList/portfolio.mdx +171 -0
- package/site-templates/{simple-service → shapes/person-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +10 -11
- package/site-templates/shapes/person-service/content/en/Service/first-engagement.mdx +38 -0
- package/site-templates/shapes/person-service/content/en/Service/second-engagement.mdx +38 -0
- package/site-templates/shapes/person-service/content/en/Service/third-engagement.mdx +38 -0
- package/site-templates/{simple-service → shapes/person-service}/content/en/ServicesList/services.mdx +16 -16
- package/site-templates/shapes/person-service/provenance.json +4 -0
- package/templates/.claude/rules/architecture.md +7 -0
- package/templates/.claude/skills/README.md +5 -3
- package/templates/.claude/skills/add-auth/references/env-vars.md +22 -15
- package/templates/.claude/skills/add-auth/references/oauth-app-setup.md +3 -2
- package/templates/.claude/skills/add-page/SKILL.md +241 -238
- package/templates/.claude/skills/add-page/references/page-types.md +85 -72
- package/templates/.claude/skills/add-page/scripts/site-pages.mjs +87 -0
- package/templates/.claude/skills/add-page/templates/comparison-page.mdx.tmpl +99 -0
- package/templates/.claude/skills/add-page/templates/content.mdx.tmpl +8 -18
- package/templates/.claude/skills/add-page/templates/flow-landing-page.mdx.tmpl +43 -0
- package/templates/.claude/skills/add-page/templates/report-page.mdx.tmpl +52 -0
- package/templates/.claude/skills/add-page/templates/reports-list.mdx.tmpl +38 -0
- package/templates/.claude/skills/check-site/SKILL.md +23 -0
- package/templates/.claude/skills/fill-page/SKILL.md +26 -7
- package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +1 -1
- package/templates/.claude/skills/setup-database/SKILL.md +156 -0
- package/templates/.claude/skills/setup-database/scripts/verify-inbox.ts +154 -0
- package/templates/.claude/skills/setup-deploy/SKILL.md +64 -32
- package/templates/.claude/skills/setup-deploy/references/env-vars-template.md +44 -36
- package/templates/.claude/skills/setup-deploy/references/runbook-template.md +58 -102
- package/templates/.claude/skills/update-page/SKILL.md +117 -0
- package/templates/.claude/skills/update-page/scripts/update-page.ts +640 -0
- package/templates/.claude/skills/update-page/templates/redirects.mjs.tmpl +31 -0
- package/templates/.claude/skills/upgrade-plan/SKILL.md +12 -8
- package/templates/.github/workflows/ci.yml +4 -0
- package/templates/.prettierignore +1 -0
- package/templates/CLAUDE.md +146 -103
- package/templates/DESIGN.md +103 -6
- package/templates/README.md +63 -43
- package/templates/apps/api/.env.example +2 -1
- package/templates/apps/api/CLAUDE.md +3 -2
- package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +2 -0
- package/templates/apps/api/src/__tests__/server.test.ts +116 -0
- package/templates/apps/api/src/config/__tests__/index.test.ts +115 -14
- package/templates/apps/api/src/config/index.ts +35 -16
- package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +30 -0
- package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +96 -0
- package/templates/apps/api/src/lib/lead-capture-store.ts +12 -0
- package/templates/apps/api/src/lib/lead-delivery.ts +52 -0
- package/templates/apps/api/src/lib/stripe.ts +9 -0
- package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +140 -0
- package/templates/apps/api/src/middleware/auth.ts +54 -0
- package/templates/apps/api/src/openapi/spec.ts +63 -12
- package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +5 -2
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +628 -0
- package/templates/apps/api/src/routes/checkout/sessions.ts +222 -24
- package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +88 -0
- package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +100 -0
- package/templates/apps/api/src/routes/leads/index.ts +46 -1
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +1 -1
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +5 -1
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +521 -20
- package/templates/apps/api/src/routes/webhooks/stripe.ts +124 -32
- package/templates/apps/api/src/server.ts +35 -0
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +194 -0
- package/templates/apps/api/src/services/__tests__/leads-inbox.test.ts +124 -0
- package/templates/apps/api/src/services/__tests__/revalidation.test.ts +90 -15
- package/templates/apps/api/src/services/checkout-buyer.ts +72 -0
- package/templates/apps/api/src/services/lead-routing.ts +140 -30
- package/templates/apps/api/src/services/leads-inbox.ts +48 -11
- package/templates/apps/api/src/services/revalidation.ts +60 -15
- package/templates/apps/mcp/__tests__/parity.test.ts +5 -4
- package/templates/apps/mcp/__tests__/tools/create_project.test.ts +30 -24
- package/templates/apps/mcp/src/tools/create_project.ts +21 -6
- package/templates/apps/mcp/src/tools/purchase.ts +4 -2
- package/templates/apps/web/.env.example +13 -0
- package/templates/apps/web/CLAUDE.md +22 -28
- package/templates/apps/web/app/[locale]/(auth)/layout.tsx +1 -1
- package/templates/apps/web/app/[locale]/(authed)/leads/__tests__/page.test.tsx +24 -0
- package/templates/apps/web/app/[locale]/(authed)/leads/page.tsx +17 -6
- package/templates/apps/web/app/[locale]/[slug]/[detail]/__tests__/page.test.tsx +110 -0
- package/templates/apps/web/app/[locale]/[slug]/[detail]/page.tsx +60 -0
- package/templates/apps/web/app/[locale]/[slug]/page.tsx +1 -1
- package/templates/apps/web/app/[locale]/alternatives/__tests__/page.test.tsx +161 -0
- package/templates/apps/web/app/[locale]/alternatives/page.tsx +104 -0
- package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +14 -6
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +10 -9
- package/templates/apps/web/app/[locale]/contact/__tests__/contact-form-text.test.ts +32 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +129 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +227 -84
- package/templates/apps/web/app/[locale]/contact/contact-form-text.ts +50 -0
- package/templates/apps/web/app/[locale]/contact/contact.actions.ts +73 -20
- package/templates/apps/web/app/[locale]/contact/page.tsx +105 -15
- package/templates/apps/web/app/[locale]/contact/site-contact-email.ts +54 -0
- package/templates/apps/web/app/[locale]/features/[slug]/page.tsx +64 -0
- package/templates/apps/web/app/[locale]/features/page.tsx +52 -0
- package/templates/apps/web/app/[locale]/{use-cases → for}/[slug]/page.tsx +21 -5
- package/templates/apps/web/app/[locale]/for/__tests__/page-renderer-migration.test.tsx +73 -0
- package/templates/apps/web/app/[locale]/{use-cases → for}/page.tsx +8 -7
- package/templates/apps/web/app/[locale]/glossary/page.tsx +1 -1
- package/templates/apps/web/app/[locale]/layout.tsx +65 -17
- package/templates/apps/web/app/[locale]/newsletter/__tests__/newsletter.actions.test.ts +75 -0
- package/templates/apps/web/app/[locale]/newsletter/__tests__/page.test.tsx +163 -0
- package/templates/apps/web/app/[locale]/newsletter/newsletter.actions.ts +66 -0
- package/templates/apps/web/app/[locale]/newsletter/page.tsx +106 -14
- package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +59 -0
- package/templates/apps/web/app/[locale]/{book-a-call → portfolio}/page.tsx +12 -13
- package/templates/apps/web/app/[locale]/vs/[slug]/__tests__/page.test.tsx +112 -0
- package/templates/apps/web/app/[locale]/vs/[slug]/page.tsx +70 -0
- package/templates/apps/web/app/api/revalidate/__tests__/route.test.ts +236 -44
- package/templates/apps/web/app/api/revalidate/route.ts +78 -36
- package/templates/apps/web/lib/__tests__/site-brand.test.ts +79 -0
- package/templates/apps/web/lib/__tests__/site-theme.test.ts +104 -11
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +21 -4
- package/templates/apps/web/lib/locale-guard.ts +18 -0
- package/templates/apps/web/lib/meet-placeholder.ts +5 -0
- package/templates/apps/web/lib/nav-config.ts +50 -37
- package/templates/apps/web/lib/site-brand.tsx +13 -9
- package/templates/apps/web/lib/site-identity.ts +14 -0
- package/templates/apps/web/lib/site-logo.tsx +36 -0
- package/templates/apps/web/lib/site-theme.ts +46 -26
- package/templates/apps/web/messages/en.json +45 -5
- package/templates/apps/web/middleware.ts +28 -4
- package/templates/content/_site.mdx +4 -2
- package/templates/content/en/BlogList/blog.mdx +37 -16
- package/templates/content/en/BookCall/book-a-call.mdx +80 -0
- package/templates/content/en/BookCall/onsite-estimate.mdx +56 -0
- package/templates/content/en/BookCall/onsite-service.mdx +56 -0
- package/templates/content/en/BookCall/start-project.mdx +56 -0
- package/templates/content/en/ContactPage/contact.mdx +43 -34
- package/templates/content/en/HomePage/home.mdx +10 -22
- package/templates/content/en/LandingPage/meet.mdx +59 -0
- package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +0 -1
- package/templates/content/en/UseCasesList/{use-cases.mdx → for.mdx} +19 -18
- package/templates/database/CHANGELOG.md +14 -0
- package/templates/database/package.json +1 -1
- package/templates/package.json +2 -1
- package/templates/tools/check-claude-md.ts +128 -0
- package/versions.json +33 -33
- package/site-templates/_base/content/en/BookCall/book-call.mdx +0 -53
- package/site-templates/_base/content/en/UseCase/first-use-case.mdx +0 -23
- package/site-templates/_base/content/en/UseCase/second-use-case.mdx +0 -23
- package/site-templates/_base/content/en/UseCase/third-use-case.mdx +0 -23
- package/site-templates/minimalism-site/DESIGN.md +0 -162
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +0 -470
- package/site-templates/minimalism-site/ailk-template.json +0 -23
- package/site-templates/minimalism-site/content/en/AboutPage/about.mdx +0 -110
- package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +0 -53
- package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +0 -34
- package/site-templates/minimalism-site/content/en/FAQPage/faq.mdx +0 -57
- package/site-templates/minimalism-site/content/en/LandingPage/referral.mdx +0 -77
- package/site-templates/minimalism-site/content/en/LandingPage/reports.mdx +0 -73
- package/site-templates/minimalism-site/content/en/ReportPage/annual-letter-2024.mdx +0 -52
- package/site-templates/minimalism-site/content/en/ReportPage/field-notes-2023.mdx +0 -52
- package/site-templates/minimalism-site/content/en/ReportPage/platform-shift-2025.mdx +0 -52
- package/site-templates/minimalism-site/content/en/ReportPage/state-of-the-market-2026.mdx +0 -52
- package/site-templates/minimalism-site/flows/referral.flow.json +0 -71
- package/site-templates/minimalism-site/provenance.json +0 -4
- package/site-templates/simple-service/DESIGN.md +0 -162
- package/site-templates/simple-service/TEMPLATE-MANIFEST.md +0 -333
- package/site-templates/simple-service/ailk-template.json +0 -11
- package/site-templates/simple-service/content/en/BookCall/book-call.mdx +0 -53
- package/site-templates/simple-service/content/en/ContactPage/contact.mdx +0 -32
- package/site-templates/simple-service/content/en/FAQPage/faq.mdx +0 -56
- package/site-templates/simple-service/content/en/HomePage/home.mdx +0 -85
- package/site-templates/simple-service/content/en/Service/landscape-design.mdx +0 -40
- package/site-templates/simple-service/content/en/Service/lawn-maintenance.mdx +0 -40
- package/site-templates/simple-service/content/en/Service/seasonal-cleanup.mdx +0 -40
- package/site-templates/simple-service/provenance.json +0 -4
- package/templates/.claude/skills/add-page/templates/route.tsx.tmpl +0 -28
- package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +0 -211
- package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +0 -96
- package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +0 -72
- package/templates/content/en/SoftwareProduct/product.mdx +0 -175
- /package/site-templates/{minimalism-site → designs/minimalism/sample}/content/en/HomePage/home.mdx +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-1.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-2.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-3.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-4.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-5.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-6.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/hero-backdrop.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-1.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-2.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-3.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/wordmark-placeholder.svg +0 -0
- /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/first-engagement.mdx +0 -0
- /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/second-engagement.mdx +0 -0
- /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/third-engagement.mdx +0 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The starter grid's data (#6753): the shape rosters and the alias table
|
|
3
|
+
* every `--template` name resolves through. A starter is one shape rendered
|
|
4
|
+
* in one design with a module list (starter-template contract § The three
|
|
5
|
+
* axes); an alias names those coordinates plus how its own rows differ from
|
|
6
|
+
* the shape's standard roster.
|
|
7
|
+
*
|
|
8
|
+
* DATA ONLY, AND IMPORT-FREE AT RUNTIME. Every import below is `import type`,
|
|
9
|
+
* erased at emit. `template-names.ts` derives `RECOGNIZED_TEMPLATES` from
|
|
10
|
+
* `ALIASES` and `parse-args.ts` imports that at runtime, so a runtime import
|
|
11
|
+
* here could reach `lib/module-tier.ts` and re-open the `RECOGNIZED_MODULES`
|
|
12
|
+
* temporal-dead-zone cycle `template-names.ts`'s header records (spec 6753
|
|
13
|
+
* D1). The composition itself — shape roster, minus `drop`, plus `add` —
|
|
14
|
+
* lives in `template-manifest.ts`, whose `resolveTemplate` is the one reader
|
|
15
|
+
* that yields a template's roster. Nothing but those two files imports this one.
|
|
16
|
+
*/
|
|
17
|
+
import type { CategorySlug } from "@working-theory/schema/categories";
|
|
18
|
+
import type { ModuleName } from "./parse-args.js";
|
|
19
|
+
import type { TemplateLayout } from "./site-chrome.js";
|
|
20
|
+
import type { StarterDesign, StarterShape, TemplateRosterRow } from "./template-manifest.js";
|
|
21
|
+
/** The shapes a starter can be built from — every StarterShape but the reserved one. */
|
|
22
|
+
export type BuildableShape = Exclude<StarterShape, "local-business-product">;
|
|
23
|
+
/** How an alias's own rows differ from its shape's standard roster. */
|
|
24
|
+
export interface AliasDifferences {
|
|
25
|
+
/** Shape-roster routes this alias does not carry. */
|
|
26
|
+
readonly drop?: readonly string[];
|
|
27
|
+
/** Rows this alias carries that its shape roster does not. */
|
|
28
|
+
readonly add?: readonly TemplateRosterRow[];
|
|
29
|
+
/** The retained shape route `add` is inserted before; absent → appended. */
|
|
30
|
+
readonly before?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Further positioned groups (#6757 D7): each group's rows go before its
|
|
33
|
+
* own `before` route, applied group by group in array order, AFTER `add`
|
|
34
|
+
* is placed. The one alias that needs more than one anchor
|
|
35
|
+
* (`minimalism-site`, which interleaves rows at two separate points in the
|
|
36
|
+
* shape's row order) uses this; every other alias leaves it unset.
|
|
37
|
+
*/
|
|
38
|
+
readonly insert?: readonly {
|
|
39
|
+
readonly before: string;
|
|
40
|
+
readonly rows: readonly TemplateRosterRow[];
|
|
41
|
+
}[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* One `--template` name: the grid coordinates it stands for.
|
|
45
|
+
*
|
|
46
|
+
* No `tier`, `level`, `price` or optional-module member, for the reason
|
|
47
|
+
* `TemplateManifest` carries none (parent § D4, D12): the level is derived
|
|
48
|
+
* from `modules`, never declared, and the type is what makes declaring one a
|
|
49
|
+
* compile error.
|
|
50
|
+
*/
|
|
51
|
+
export interface TemplateAlias {
|
|
52
|
+
readonly shape: BuildableShape;
|
|
53
|
+
readonly design: StarterDesign;
|
|
54
|
+
/** Becomes the manifest's `requires`. */
|
|
55
|
+
readonly modules: readonly ModuleName[];
|
|
56
|
+
readonly categories: readonly CategorySlug[];
|
|
57
|
+
readonly layout?: TemplateLayout;
|
|
58
|
+
readonly differences?: AliasDifferences;
|
|
59
|
+
/**
|
|
60
|
+
* Whether this alias ships its own `site-templates/<name>/` tree (spec 6892
|
|
61
|
+
* D1). Absent means `true` — every alias but `minimalism-site` keeps its
|
|
62
|
+
* own directory. `false` declares that the alias resolves purely from the
|
|
63
|
+
* grid: its seed layer is its shape's tree (`templateTreeDir`), and its
|
|
64
|
+
* generated roster record lives under `site-templates/aliases/` rather
|
|
65
|
+
* than a directory of its own (`shippedManifestPath`).
|
|
66
|
+
*/
|
|
67
|
+
readonly ownTree?: boolean;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Each buildable shape's standard roster (#6753 D3) — the rows an alias starts
|
|
71
|
+
* from before its `differences` apply.
|
|
72
|
+
*
|
|
73
|
+
* `organization-product` is today's base roster, the `/blog` teaser and the
|
|
74
|
+
* portfolio pair. `organization-service`, `local-business-service` (#6757)
|
|
75
|
+
* and `person-service` (#6758, roadmap § 6 Phase 2) are each their own rows,
|
|
76
|
+
* the `/blog` teaser and the portfolio pair. Every shape's own rows carry
|
|
77
|
+
* `/sign-in` and `/sign-up` (#6797): the locale layout's header links both on
|
|
78
|
+
* every shape, so the roster of record lists them as code routes.
|
|
79
|
+
*/
|
|
80
|
+
export declare const SHAPE_ROSTERS: Readonly<Record<BuildableShape, readonly TemplateRosterRow[]>>;
|
|
81
|
+
/**
|
|
82
|
+
* The `--template` names and the grid coordinates each stands for (#6753) —
|
|
83
|
+
* the one table `TEMPLATE_MANIFESTS` and `RECOGNIZED_TEMPLATES` derive from,
|
|
84
|
+
* in the declaration order both keep. The plain name is the Pro one: it is
|
|
85
|
+
* the flagship and the demo (Sam, 2026-09-14, parent § D12).
|
|
86
|
+
*
|
|
87
|
+
* `workspace` appears in no module list. It is a Pro module, but an authed app
|
|
88
|
+
* surface contributing no PUBLIC page to a marketing site, and `modules` names
|
|
89
|
+
* what the roster uses (parent § D15). A Pro key unlocks it regardless of any
|
|
90
|
+
* template.
|
|
91
|
+
*
|
|
92
|
+
* `commerce` is a per-site add-on available at any level, so no alias exists
|
|
93
|
+
* FOR it (parent § D13); it still contributes rows to whichever alias takes
|
|
94
|
+
* it, through `mergeRoster`.
|
|
95
|
+
*
|
|
96
|
+
* Frozen (#5507): the registry composed from this table is also the issuer's
|
|
97
|
+
* authorization allowlist (spec 5480 § C7). A test needing a different table
|
|
98
|
+
* passes its own to `resolveTemplate(name, aliases)` rather than mutating
|
|
99
|
+
* this one.
|
|
100
|
+
*/
|
|
101
|
+
export declare const ALIASES: Readonly<{
|
|
102
|
+
/**
|
|
103
|
+
* The Free template, and the mechanism's own proof (parent § D11): it
|
|
104
|
+
* requires only `marketing`, so the keyless merge path is exercised by a
|
|
105
|
+
* template we ship anyway rather than by a throwaway fixture. The bare
|
|
106
|
+
* `organization-product` shape — no differences at all.
|
|
107
|
+
*/
|
|
108
|
+
readonly "marketing-site-free": {
|
|
109
|
+
readonly shape: "organization-product";
|
|
110
|
+
readonly design: "standard";
|
|
111
|
+
readonly modules: readonly ["marketing"];
|
|
112
|
+
readonly categories: readonly ["accounting", "legal", "technology"];
|
|
113
|
+
readonly layout: {
|
|
114
|
+
readonly announcementBanner: true;
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* The Pro flagship. Its module list is OFFERINGS § 4 offering 3's tiers line
|
|
119
|
+
* — "docs, scheduling and flows modules" — where "flows" is
|
|
120
|
+
* `signal-collectors` (`MODULE_SURFACES` maps it to `["flows"]`). It drops
|
|
121
|
+
* the shape's `/blog` teaser because docs-blog contributes the real `/blog`,
|
|
122
|
+
* and adds the signal-collectors sample rows ahead of the portfolio pair.
|
|
123
|
+
*/
|
|
124
|
+
readonly "marketing-site": {
|
|
125
|
+
readonly shape: "organization-product";
|
|
126
|
+
readonly design: "standard";
|
|
127
|
+
readonly modules: readonly ["marketing", "docs-blog", "scheduling", "signal-collectors"];
|
|
128
|
+
readonly categories: readonly ["accounting", "legal", "consulting", "hvac", "roofing", "plumbing", "electrical", "landscaping", "auto-repair", "real-estate", "technology", "medical-specialty"];
|
|
129
|
+
readonly differences: {
|
|
130
|
+
readonly drop: readonly ["/blog", "/meet", "/meet/[slug]"];
|
|
131
|
+
readonly add: readonly import("./module-architecture.js").PageRosterRow[];
|
|
132
|
+
readonly before: "/portfolio";
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Pro Plus — the Pro list plus `multi-tenant`, which is correctly in the
|
|
137
|
+
* list because it DOES contribute pages (the org and workspace surfaces).
|
|
138
|
+
* Its `pageContributions` is nonetheless unset today, deferred to its own
|
|
139
|
+
* instance, so this template's merged roster carries the same contributed
|
|
140
|
+
* rows as `marketing-site`'s and no more. That is a module which has
|
|
141
|
+
* declared no rows yet — visible in the diff — not a merge that dropped
|
|
142
|
+
* declared rows.
|
|
143
|
+
*/
|
|
144
|
+
readonly "saas-product": {
|
|
145
|
+
readonly shape: "organization-product";
|
|
146
|
+
readonly design: "standard";
|
|
147
|
+
readonly modules: readonly ["marketing", "docs-blog", "scheduling", "signal-collectors", "multi-tenant"];
|
|
148
|
+
readonly categories: readonly ["technology", "medical-specialty"];
|
|
149
|
+
readonly differences: {
|
|
150
|
+
readonly drop: readonly ["/blog", "/meet", "/meet/[slug]"];
|
|
151
|
+
readonly add: readonly import("./module-architecture.js").PageRosterRow[];
|
|
152
|
+
readonly before: "/portfolio";
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* The second Pro template (#5589) — the reports-first, scroll-snap deck
|
|
157
|
+
* site. NOT `marketing-site` plus a module: its `modules` omit `docs-blog`,
|
|
158
|
+
* so the two Pro templates are siblings under `_base` (#5618 D2), never a
|
|
159
|
+
* lineage. Level still derives from `modules`: `scheduling` and
|
|
160
|
+
* `signal-collectors` are paid, so `templateDelivery` returns `"paid"`
|
|
161
|
+
* exactly as it does for `marketing-site`.
|
|
162
|
+
*
|
|
163
|
+
* It composes the `organization-service` shape roster (#6757) rather than
|
|
164
|
+
* the organization-product one: the deck home replaces the document-scroll
|
|
165
|
+
* home, and `/how-it-works`, the product page, `/pricing` and `/sign-in`
|
|
166
|
+
* are not pages this site has. The roster is what the
|
|
167
|
+
* template IS, so an unrostered page has neither a route directory
|
|
168
|
+
* (`rosterSurfaces`) nor its `_base`/overlay seed (#6646 D1).
|
|
169
|
+
*
|
|
170
|
+
* It declares NO `layout` block (#6638): the deck home, mark-only nav and
|
|
171
|
+
* centered footer are the `minimalism` design's own `layout` (its
|
|
172
|
+
* `DESIGN.md`, resolved by `resolveDesign` off `design:` — #6813 D4) — the
|
|
173
|
+
* look any shape can wear. This alias ships no tree of its own (`ownTree:
|
|
174
|
+
* false`, spec 6892 D1); its GENERATED roster record (no narrative `.md`,
|
|
175
|
+
* D5) lives at `site-templates/aliases/minimalism-site.TEMPLATE-MANIFEST.json`.
|
|
176
|
+
*
|
|
177
|
+
* `/reports` (a `ReportsList` hub over `ReportPage`) and `/referral` (a
|
|
178
|
+
* flow landing page) are signal-collectors module samples (spec 6892 D3);
|
|
179
|
+
* neither carries a `GATEABLE_SURFACES` entry: `/referral` is a
|
|
180
|
+
* single-segment `LandingPage` slug served by the generic `[slug]` route
|
|
181
|
+
* (#5469 D2), the same mechanism Free's `/how-it-works` uses, and `/reports`
|
|
182
|
+
* is its own routes-map row. `/reports/[slug]` (the reader) is the
|
|
183
|
+
* signal-collectors module's own contributed row.
|
|
184
|
+
*
|
|
185
|
+
* `/services/[slug]` declares its seed DIRECTORY as `contentDir`
|
|
186
|
+
* (`content/en/Service`, as `routes-map.ts` records it). The three
|
|
187
|
+
* samples ride the template tree unmapped, landing at that directory.
|
|
188
|
+
*
|
|
189
|
+
* Since #6757, `organization-service` carries a real standard roster
|
|
190
|
+
* (D1), so this alias's `differences` is additions and drops only: it
|
|
191
|
+
* drops the `/blog` teaser (a Pro alias does not upsell its own level,
|
|
192
|
+
* D8), the portfolio pair (the reports are the proof, not a
|
|
193
|
+
* portfolio) and the two auth code routes the shape rosters (#6797 —
|
|
194
|
+
* this site has no `/sign-in`, above), adds the signal-collectors
|
|
195
|
+
* samples, and INSERTS its two own
|
|
196
|
+
* rows — `/reports` before `/about`, `/referral` before `/faq` (D7) — to
|
|
197
|
+
* reproduce its pre-#6757 row order (§ 1.2) exactly.
|
|
198
|
+
*/
|
|
199
|
+
readonly "minimalism-site": {
|
|
200
|
+
readonly shape: "organization-service";
|
|
201
|
+
readonly design: "minimalism";
|
|
202
|
+
readonly modules: readonly ["marketing", "scheduling", "signal-collectors"];
|
|
203
|
+
readonly categories: readonly ["real-estate", "technology", "legal"];
|
|
204
|
+
readonly ownTree: false;
|
|
205
|
+
readonly differences: {
|
|
206
|
+
readonly drop: readonly ["/sign-in", "/sign-up", "/blog", "/meet", "/meet/[slug]", "/portfolio", "/portfolio/[slug]"];
|
|
207
|
+
readonly add: readonly import("./module-architecture.js").PageRosterRow[];
|
|
208
|
+
readonly insert: readonly [{
|
|
209
|
+
readonly before: "/about";
|
|
210
|
+
readonly rows: readonly [import("./module-architecture.js").PageRosterRow];
|
|
211
|
+
}, {
|
|
212
|
+
readonly before: "/faq";
|
|
213
|
+
readonly rows: readonly [import("./module-architecture.js").PageRosterRow];
|
|
214
|
+
}];
|
|
215
|
+
};
|
|
216
|
+
};
|
|
217
|
+
}>;
|
|
218
|
+
/**
|
|
219
|
+
* The coordinates a keyless `--shape S` builds (#6757 D5) — the composed
|
|
220
|
+
* FREE manifest per shape, for a shape with no `--template` alias of its
|
|
221
|
+
* own. Frozen and `Partial`; `organization-product` needs none — its
|
|
222
|
+
* keyless tree is `marketing-site-free`'s (#6754 AC-2).
|
|
223
|
+
*
|
|
224
|
+
* No `differences` (a bare shape is its standard roster, D1) and no
|
|
225
|
+
* `layout`. Every category is a leaf of `packages/schema/src/categories.ts`,
|
|
226
|
+
* as `TemplateManifest.categories` requires. `person-service`'s single
|
|
227
|
+
* `consulting` category is the operator's disposition (2026-09-26,
|
|
228
|
+
* ai-launch-kit-internal#6758): the leaf did not exist when #6758's spec was
|
|
229
|
+
* written, and adding it replaced that spec's `["accounting", "legal",
|
|
230
|
+
* "technology"]` author-pick stand-in.
|
|
231
|
+
*/
|
|
232
|
+
export declare const SHAPE_STARTER_ALIASES: Readonly<Partial<Record<BuildableShape, TemplateAlias>>>;
|