create-ailk 0.6.1 → 0.8.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 +87 -14
- package/component-catalog.json +735 -95
- package/component-catalog.md +13 -7
- package/dist/add-module-core.d.ts +22 -0
- package/dist/add-module-core.js +50 -0
- package/dist/add-module.d.ts +89 -0
- package/dist/add-module.js +334 -0
- package/dist/category-profile.d.ts +126 -0
- package/dist/category-profile.js +262 -0
- package/dist/cli.js +89 -29
- package/dist/index.d.ts +4 -2
- package/dist/index.js +6 -1
- package/dist/lib/extract-module-bundle.d.ts +56 -1
- package/dist/lib/extract-module-bundle.js +170 -14
- package/dist/lib/license-key-files.d.ts +15 -0
- package/dist/lib/license-key-files.js +102 -0
- package/dist/lib/module-license-gate.d.ts +79 -0
- package/dist/lib/module-license-gate.js +160 -12
- package/dist/lib/module-tier.d.ts +45 -16
- package/dist/lib/module-tier.js +76 -0
- package/dist/lib/pro-callout.d.ts +16 -10
- package/dist/lib/pro-callout.js +34 -3
- package/dist/license-set.d.ts +34 -0
- package/dist/license-set.js +194 -0
- package/dist/module-architecture.d.ts +20 -0
- package/dist/module-architecture.js +77 -19
- package/dist/modules/commerce/0.6.1.tar.gz +0 -0
- package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
- package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
- package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
- package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
- package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
- package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
- package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
- package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
- package/dist/modules/workspace/0.6.1.tar.gz +0 -0
- package/dist/parse-args.d.ts +85 -10
- package/dist/parse-args.js +227 -15
- package/dist/programmatic.d.ts +81 -5
- package/dist/programmatic.js +291 -32
- package/dist/site-chrome.d.ts +18 -7
- package/dist/site-chrome.js +32 -14
- package/dist/site-roster.d.ts +127 -0
- package/dist/site-roster.js +499 -0
- package/dist/starter-grid.d.ts +216 -0
- package/dist/starter-grid.js +449 -0
- package/dist/surfaces.d.ts +20 -7
- package/dist/surfaces.js +204 -24
- package/dist/sync-routes.d.ts +9 -0
- package/dist/sync-routes.js +2 -2
- package/dist/template-manifest.d.ts +94 -19
- package/dist/template-manifest.js +170 -289
- package/dist/template-names.d.ts +14 -12
- package/dist/template-names.js +13 -17
- package/package.json +6 -4
- package/site-templates/_base/content/en/BookCall/book-call.mdx +52 -0
- 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 +65 -0
- package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +67 -0
- 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/Pricing/pricing.mdx +71 -62
- package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +17 -3
- package/site-templates/_base/content/en/TermsPage/terms.mdx +2 -3
- package/site-templates/_base/content/en/UseCase/persona-1.mdx +69 -0
- package/site-templates/_base/content/en/UseCase/persona-2.mdx +69 -0
- package/site-templates/_base/content/en/UseCase/persona-3.mdx +69 -0
- package/site-templates/designs/minimalism/DESIGN.md +162 -0
- package/site-templates/designs/standard/DESIGN.md +167 -0
- package/site-templates/marketing-site/DESIGN.md +59 -40
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +376 -57
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +230 -90
- package/site-templates/marketing-site/ailk-template.json +1 -0
- package/site-templates/marketing-site-free/DESIGN.md +59 -40
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +323 -63
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +323 -113
- package/site-templates/marketing-site-free/ailk-template.json +3 -2
- 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/minimalism-site/DESIGN.md +54 -40
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +246 -19
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +173 -51
- package/site-templates/minimalism-site/ailk-template.json +3 -2
- package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +52 -0
- package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +3 -37
- package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
- package/site-templates/saas-product/DESIGN.md +59 -40
- package/site-templates/saas-product/TEMPLATE-MANIFEST.md +9 -1
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.json +369 -0
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +302 -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/shapes/local-business-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
- 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 +362 -0
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +300 -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/shapes/organization-service/content/en/Service/first-engagement.mdx +38 -0
- package/site-templates/shapes/organization-service/content/en/Service/second-engagement.mdx +38 -0
- package/site-templates/shapes/organization-service/content/en/Service/third-engagement.mdx +38 -0
- package/site-templates/shapes/organization-service/content/en/ServicesList/services.mdx +72 -0
- package/site-templates/shapes/organization-service/provenance.json +4 -0
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +369 -0
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +299 -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 +169 -0
- package/site-templates/shapes/person-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
- 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/settings.json +15 -0
- package/templates/.claude/skills/README.md +10 -9
- package/templates/.claude/skills/{scaffold-auth → add-auth}/SKILL.md +7 -7
- package/templates/.claude/skills/{scaffold-auth → add-auth}/references/env-vars.md +2 -2
- package/templates/.claude/skills/{scaffold-auth → add-auth}/references/oauth-app-setup.md +3 -3
- package/templates/.claude/skills/{scaffold-page → add-page}/SKILL.md +76 -62
- package/templates/.claude/skills/add-page/references/page-types.md +115 -0
- package/templates/.claude/skills/{scaffold-page → add-page}/templates/content.mdx.tmpl +4 -4
- package/templates/.claude/skills/{scaffold-page → add-page}/templates/route.tsx.tmpl +1 -1
- package/templates/.claude/skills/{audit-site → check-site}/SKILL.md +16 -17
- package/templates/.claude/skills/{audit-site → check-site}/references/common-errors.md +3 -3
- package/templates/.claude/skills/{audit-site → check-site}/references/findings-glossary.md +16 -14
- package/templates/.claude/skills/{audit-site → check-site}/references/severity-levels.md +1 -1
- package/templates/.claude/skills/fill-page/SKILL.md +180 -0
- package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +80 -0
- package/templates/.claude/skills/fill-page/references/section-sources.md +41 -0
- 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/{provision-config → setup-deploy}/SKILL.md +73 -41
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/env-vars-template.md +21 -30
- package/templates/.claude/skills/setup-deploy/references/runbook-template.md +204 -0
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/vercel-json-template.md +1 -1
- package/templates/.claude/skills/upgrade-plan/SKILL.md +117 -0
- package/templates/.claude/skills/upgrade-plan/references/options.md +24 -0
- package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +527 -0
- package/templates/.github/workflows/ci.yml +5 -0
- package/templates/CLAUDE.md +8 -2
- package/templates/DESIGN.md +56 -44
- package/templates/README.md +116 -46
- package/templates/apps/api/.env.example +2 -1
- package/templates/apps/api/CLAUDE.md +3 -2
- package/templates/apps/api/package.json +1 -1
- package/templates/apps/api/src/config/__tests__/index.test.ts +146 -10
- package/templates/apps/api/src/config/index.ts +46 -14
- 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/license-key-store.ts +45 -0
- package/templates/apps/api/src/lib/site.ts +5 -3
- package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +97 -0
- package/templates/apps/api/src/middleware/auth.ts +9 -0
- package/templates/apps/api/src/openapi/spec.ts +63 -12
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +127 -5
- package/templates/apps/api/src/routes/content/get-page.ts +86 -2
- 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/server.ts +13 -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/lead-routing.ts +140 -30
- package/templates/apps/api/src/services/leads-inbox.ts +48 -11
- package/templates/apps/mcp/__tests__/audit-single-page.test.ts +75 -1
- package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +57 -9
- package/templates/apps/mcp/__tests__/parity.test.ts +5 -4
- package/templates/apps/mcp/package.json +2 -1
- package/templates/apps/mcp/src/index.ts +7 -0
- package/templates/apps/mcp/src/lib/audit-single-page.ts +36 -10
- package/templates/apps/mcp/src/lib/license-key-store.ts +45 -0
- package/templates/apps/mcp/src/tools/create_project.ts +21 -6
- package/templates/apps/web/__tests__/setup.ts +18 -0
- package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +10 -2
- package/templates/apps/web/app/[locale]/(auth)/layout.tsx +2 -2
- package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +10 -4
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +22 -14
- package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +26 -18
- package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +12 -4
- package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +35 -4
- package/templates/apps/web/app/[locale]/[slug]/page.tsx +49 -9
- package/templates/apps/web/app/[locale]/book-a-call/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +67 -29
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +94 -11
- 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 +228 -86
- 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 +115 -7
- package/templates/apps/web/app/[locale]/contact/site-contact-email.ts +54 -0
- package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +4 -5
- 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]/glossary/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/how-to/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/layout.tsx +146 -52
- 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 +142 -0
- package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +59 -0
- package/templates/apps/web/app/[locale]/portfolio/page.tsx +49 -0
- package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/{cancellation → purchase-policy}/page.tsx +15 -10
- package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +14 -1
- package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/software/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/tech-articles/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/use-cases/[slug]/page.tsx +63 -0
- package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/use-cases/page.tsx +15 -2
- package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/whitepapers/page.tsx +25 -15
- package/templates/apps/web/app/error-fallback.tsx +17 -45
- package/templates/apps/web/app/not-found.tsx +14 -38
- package/templates/apps/web/app/og/route.tsx +6 -0
- package/templates/apps/web/eslint.config.mjs +3 -0
- package/templates/apps/web/instrumentation.ts +14 -0
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +38 -0
- package/templates/apps/web/lib/license-key-store.ts +52 -0
- package/templates/apps/web/lib/nav-config.ts +82 -18
- package/templates/apps/web/lib/prisma-for-auth.ts +9 -6
- package/templates/apps/web/lib/site-brand.tsx +1 -1
- package/templates/apps/web/lib/site-chrome.ts +3 -3
- package/templates/apps/web/lib/site-identity.ts +148 -0
- package/templates/apps/web/lib/site-theme.ts +11 -0
- package/templates/apps/web/messages/en.json +78 -37
- package/templates/apps/web/public/android-chrome-192x192.png +0 -0
- package/templates/apps/web/public/android-chrome-512x512.png +0 -0
- package/templates/apps/web/public/apple-touch-icon.png +0 -0
- package/templates/apps/web/public/favicon-16x16.png +0 -0
- package/templates/apps/web/public/favicon-32x32.png +0 -0
- package/templates/apps/web/public/favicon.ico +0 -0
- package/templates/apps/web/public/favicon.svg +3 -3
- package/templates/apps/web/public/logomark.svg +6 -3
- package/templates/apps/web/public/logos/ai-launch-kit-light.svg +4 -0
- package/templates/apps/web/public/logos/ai-launch-kit.svg +4 -0
- package/templates/apps/web/public/logos/atomic-agent-light.svg +4 -0
- package/templates/apps/web/public/logos/atomic-agent.svg +4 -0
- package/templates/apps/web/public/logos/salessmyth-light.svg +4 -0
- package/templates/apps/web/public/logos/salessmyth.svg +4 -0
- package/templates/apps/web/public/site.webmanifest +4 -4
- package/templates/apps/web/public/wordmark-light.svg +4 -0
- package/templates/apps/web/public/wordmark.svg +3 -3
- package/templates/apps/web/security-headers.config.ts +5 -1
- package/templates/content/_site.mdx +25 -0
- package/templates/content/en/AboutPage/about.mdx +150 -144
- package/templates/content/en/BlogList/blog.mdx +126 -0
- package/templates/content/en/ContactPage/contact.mdx +21 -92
- package/templates/content/en/FAQPage/faq.mdx +86 -57
- package/templates/content/en/HomePage/home.mdx +268 -217
- package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +181 -0
- package/templates/content/en/UseCasesList/use-cases.mdx +170 -0
- package/templates/database/CHANGELOG.md +14 -0
- package/templates/database/package.json +1 -1
- package/templates/package.json +3 -1
- package/templates/tools/lint-architecture.ts +315 -0
- package/templates/tools/tsconfig.json +14 -0
- package/versions.json +33 -33
- package/site-templates/simple-service/DESIGN.md +0 -148
- package/site-templates/simple-service/TEMPLATE-MANIFEST.json +0 -240
- package/site-templates/simple-service/TEMPLATE-MANIFEST.md +0 -278
- package/site-templates/simple-service/ailk-template.json +0 -10
- package/site-templates/simple-service/content/en/ContactPage/contact.mdx +0 -67
- 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-schema/SKILL.md +0 -277
- package/templates/.claude/skills/add-schema/references/conflict-handling.md +0 -200
- package/templates/.claude/skills/add-schema/references/file-finding.md +0 -123
- package/templates/.claude/skills/add-schema/references/schema-types.md +0 -234
- package/templates/.claude/skills/provision-config/references/runbook-template.md +0 -248
- package/templates/.claude/skills/scaffold-page/references/page-types.md +0 -169
- package/templates/.claude/skills/suggest-site-pages/SKILL.md +0 -242
- package/templates/.claude/skills/suggest-site-pages/references/categories.md +0 -287
- package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +0 -150
- package/templates/apps/web/app/[locale]/returns/page.tsx +0 -44
- package/templates/apps/web/app/[locale]/shipping/page.tsx +0 -44
- package/templates/content/en/CancellationPolicyPage/cancellation.mdx +0 -108
- package/templates/content/en/LandingPage/blog.mdx +0 -83
- package/templates/content/en/LandingPage/features.mdx +0 -103
- package/templates/content/en/LandingPage/how-it-works.mdx +0 -143
- package/templates/content/en/ReturnsPolicyPage/returns.mdx +0 -108
- package/templates/content/en/ShippingPolicyPage/shipping.mdx +0 -108
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
|
|
17
17
|
## 1. Chrome (every page)
|
|
18
18
|
|
|
19
|
-
| Piece | Component | Props that matter
|
|
20
|
-
| ---------------- | -------------------------------------------------------- |
|
|
21
|
-
| Shell | `MarketingShell` | `gutters="
|
|
22
|
-
| Announcement bar | `Banner` (chrome) | `variant="contrast"`, `routes={{ include: ["/"] }}` — **home only**, no dismiss
|
|
23
|
-
| Nav | `Nav` → `BrandLogo` (mark + wordmark, mark-only < md) | items: Product (flyout: How it works · Features · FAQ) · How it works · Pricing · About; actions: Get started (primary → `/contact`), Sign in (outline → `/sign-in`); `showThemeToggle={false}`; mobile = mark + hamburger only | ✅ |
|
|
24
|
-
| Footer | `Footer` → `FooterBottomBar` | columns: Site pages · Product · Legal · Subscribe (`Newsletter` block); bottom bar: theme toggle · © 2026 SalesSmyth LLC · Privacy Policy · Terms of Service · social ×5 · `LocaleSwitcher`
|
|
25
|
-
| Cookie consent | `Banner variant="info"` + `BannerConsentIsland` (bottom) | consent copy from `messages/en.json`; hidden on the sample
|
|
19
|
+
| Piece | Component | Props that matter | Status |
|
|
20
|
+
| ---------------- | -------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
21
|
+
| Shell | `MarketingShell` | `gutters="none"` (#6536 — no gutter frame, so header/sections/footer share one left/right edge), `contentOwnsMain`, `bannerPlacement="above-nav"` | ✅ |
|
|
22
|
+
| Announcement bar | `Banner` (chrome) | `variant="contrast"`, `routes={{ include: ["/"] }}` — **home only**, no dismiss; **off by default** (#6469), on with `layout.announcementBanner: true` | ✅ · 🔧 #5558 message colour |
|
|
23
|
+
| Nav | `Nav` → `BrandLogo` (mark + wordmark, mark-only < md) | items: Product (flyout: How it works · Features · FAQ) · How it works · Pricing · About; actions: Get started (primary → `/contact`), Sign in (outline → `/sign-in`); `showThemeToggle={false}`; mobile = mark + hamburger only; `frame="contained"` (#6536 — puts the header row on the section Container's edge, matching `gutters="none"`) | ✅ |
|
|
24
|
+
| Footer | `Footer` → `FooterBottomBar` | columns: Site pages · Product · Legal · Subscribe (`Newsletter` block); bottom bar: theme toggle · © 2026 SalesSmyth LLC · Privacy Policy · Terms of Service · social ×5 · `LocaleSwitcher`; `bottomBarAlign="content"` (#6536 — puts the footer divider on the same edge, forwarded to `FooterBottomBar`'s own `bleed={false}`) | ✅ bar · 🟡 columns + subscribe · 🔧 `LanguageSwitcher` client wrapper is scaffold code, not a block |
|
|
25
|
+
| Cookie consent | `Banner variant="info"` + `BannerConsentIsland` (bottom) | consent copy from `messages/en.json`; hidden on the sample | 🔧 #5557 |
|
|
26
26
|
|
|
27
27
|
### Layout knobs (#5612)
|
|
28
28
|
|
|
@@ -39,77 +39,129 @@ The template's `layout` block — resolved with `resolveSiteChrome`, defaults fi
|
|
|
39
39
|
|
|
40
40
|
<!-- generated:end -->
|
|
41
41
|
|
|
42
|
+
### Theme (locked)
|
|
43
|
+
|
|
44
|
+
The template's `theme:` block as `_site.mdx` declares it — the shape knobs and the colour overlay. Generated, so a change to a locked template's look is a red `manifest:check`, not a silent drift (starter-template contract R3.5).
|
|
45
|
+
|
|
46
|
+
<!-- generated:begin theme -->
|
|
47
|
+
|
|
48
|
+
| Setting | Value |
|
|
49
|
+
| ------------------------ | ---------- |
|
|
50
|
+
| `corners` | `square` |
|
|
51
|
+
| `eyebrowCase` | `sentence` |
|
|
52
|
+
| `placeholders` | `fill` |
|
|
53
|
+
| `checkmarks` | `plain` |
|
|
54
|
+
| `colors.light.bg` | `#ffffff` |
|
|
55
|
+
| `colors.light.bgMuted` | `#ffffff` |
|
|
56
|
+
| `colors.light.surface` | `#ffffff` |
|
|
57
|
+
| `colors.light.border` | `#000000` |
|
|
58
|
+
| `colors.light.text` | `#000000` |
|
|
59
|
+
| `colors.light.textMuted` | `#333333` |
|
|
60
|
+
| `colors.light.primary` | `#000000` |
|
|
61
|
+
| `colors.light.primaryFg` | `#ffffff` |
|
|
62
|
+
| `colors.light.accent` | `#000000` |
|
|
63
|
+
| `colors.dark.bg` | `#000000` |
|
|
64
|
+
| `colors.dark.bgMuted` | `#000000` |
|
|
65
|
+
| `colors.dark.surface` | `#000000` |
|
|
66
|
+
| `colors.dark.border` | `#ffffff` |
|
|
67
|
+
| `colors.dark.text` | `#ffffff` |
|
|
68
|
+
| `colors.dark.textMuted` | `#cccccc` |
|
|
69
|
+
| `colors.dark.primary` | `#ffffff` |
|
|
70
|
+
| `colors.dark.primaryFg` | `#000000` |
|
|
71
|
+
| `colors.dark.accent` | `#ffffff` |
|
|
72
|
+
|
|
73
|
+
<!-- generated:end -->
|
|
74
|
+
|
|
42
75
|
## 2. Pages
|
|
43
76
|
|
|
44
77
|
Sections are listed in render order. Components resolve through `component-catalog.json`; every section named here exists in `packages/ui` (§ 4). _Live_ = what the scaffold rendered on 2026-09-15; _Target_ = the standardissue-matched composition. **Corrected 2026-09-15** against the captured copy (`docs/research/standardissue-capture/copy/<slug>.txt`) after a prop-coverage check of every beat against `packages/validation/src/schemas/page-sections.ts`; three bounded fields the reproduction needs are commissioned in **#5576** (Hero `checklist`, Feature `actions`, CTA `closingLine`) and are marked 🔧 #5576 below.
|
|
45
78
|
|
|
46
|
-
**Copy rule (Sam, 2026-09-15): verbatim, mad-lib style exactly.** Every headline, body, bullet, label and CTA is the reference's text from `copy/<slug>.txt`, braces included (`{outcome}`, `{Primary CTA}`, `{Social Proof goes here}`). Lorem ipsum stays lorem ipsum where the reference has it. Nothing is paraphrased, shortened or "improved"; the operator rewrites the copy after the match is achieved. Only chrome text differs (§ 1).
|
|
79
|
+
**Copy rule (Sam, 2026-09-15): verbatim, mad-lib style exactly.** Every headline, body, bullet, label and CTA is the reference's text from `copy/<slug>.txt`, braces included (`{outcome}`, `{Primary CTA}`, `{Social Proof goes here}`). Lorem ipsum stays lorem ipsum where the reference has it. Nothing is paraphrased, shortened or "improved"; the operator rewrites the copy after the match is achieved. Only chrome text differs (§ 1). Superseded for the base and overlay pages by #6469 (operator, 2026-09-22): every fill-in slot is a `{brace}` instruction and every page carries the `PLACEHOLDER — REPLACE BEFORE LAUNCH` label.
|
|
47
80
|
|
|
48
81
|
### `/` — HomePage · schema `HomePage` · `MarketingShell` · chrome on
|
|
49
82
|
|
|
50
|
-
Reference: `screenshots/home.png`, `copy/home.txt`.
|
|
83
|
+
Reference: `screenshots/home.png`, `copy/home.txt`. Ten page sections; the newsletter and the blog list on the reference are in its footer, not the page (§ 1).
|
|
51
84
|
|
|
52
85
|
<!-- generated:begin page=/ -->
|
|
53
86
|
|
|
54
|
-
| # | Section
|
|
55
|
-
| --- |
|
|
56
|
-
| 1 | `hero` (
|
|
57
|
-
| 2 | `logoCloud` (logos ×
|
|
58
|
-
| 3 | `decision-split` (panels ×2)
|
|
59
|
-
| 4 | `feature` (eyebrow "Core Features" · features ×5 · 2 CTAs)
|
|
60
|
-
| 5 | `cta` (2 CTAs)
|
|
61
|
-
| 6 | `
|
|
62
|
-
| 7 | `
|
|
63
|
-
| 8 | `
|
|
64
|
-
| 9 | `
|
|
87
|
+
| # | Section | Component | Copy (first line) |
|
|
88
|
+
| --- | ---------------------------------------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------- |
|
|
89
|
+
| 1 | `hero` (illustration · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `Hero` | {How to get outcome without problem} |
|
|
90
|
+
| 2 | `logoCloud` (layout=inline · logos ×3) | `LogoCloud` | Don’t just take our word for it |
|
|
91
|
+
| 3 | `decision-split` (imagerySlot=true · eyebrow "Comparison" · panels ×2) | `DecisionSplit` | {There's a better way to fix problem / get result} |
|
|
92
|
+
| 4 | `feature` (itemStyle=plain · actionsPosition=below · eyebrow "Core Features" · features ×5 · 2 CTAs) | `Feature` | {Everything you need to achieve a desired outcome} |
|
|
93
|
+
| 5 | `cta` (minimal · eyebrow "Integrations" · 2 CTAs) | `CTA` | Direct integrations with your favorite tools |
|
|
94
|
+
| 6 | `media-band` (imagerySlot=true) | `MediaBand` | |
|
|
95
|
+
| 7 | `feature` (itemStyle=plain · actionsPosition=below · imagerySlot=true · eyebrow "How It Works" · features ×3 · 2 CTAs) | `Feature` | {Get set up in number easy steps} |
|
|
96
|
+
| 8 | `cta` (box · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
97
|
+
| 9 | `content-block` (media-right · imagerySlot=true · eyebrow "Manifesto" · 2 CTAs) | `ContentBlock` | {We want you to ability they couldn't do before} |
|
|
98
|
+
| 10 | `content-block` (eyebrow "{Your Product} Demo" · 2 CTAs) | `ContentBlock` | {See your product in action} |
|
|
65
99
|
|
|
66
100
|
<!-- generated:end -->
|
|
67
101
|
|
|
68
|
-
### `/
|
|
102
|
+
### `/use-cases` — UseCasesList · schema `CollectionPage` · chrome on
|
|
69
103
|
|
|
70
|
-
|
|
104
|
+
Rendered by the `/use-cases` route over `content/en/UseCasesList/use-cases.mdx` — a UseCasesList page composing `sections[]` (operator ruling 2026-09-23), emitting the UseCasesList builder's `CollectionPage`. Since #6658 D4 it is a real list: one `items` section of three cards, each linking a `UseCase` page and titled with that page's title, so the `ItemList` names the three pages. The how-it-works steps moved to the product page.
|
|
71
105
|
|
|
72
|
-
<!-- generated:begin page=/
|
|
106
|
+
<!-- generated:begin page=/use-cases -->
|
|
73
107
|
|
|
74
|
-
| # | Section
|
|
75
|
-
| --- |
|
|
76
|
-
| 1 | `hero` (eyebrow "
|
|
77
|
-
| 2 | `
|
|
78
|
-
| 3 | `logoCloud` (logos ×6)
|
|
79
|
-
| 4 | `testimonials` (
|
|
80
|
-
| 5 | `cta` (box ·
|
|
81
|
-
| 6 | `faq` (accordion · items ×5 ·
|
|
108
|
+
| # | Section | Component | Copy (first line) |
|
|
109
|
+
| --- | -------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
|
|
110
|
+
| 1 | `hero` (eyebrow "Use cases" · 2 CTAs) | `Hero` | {Use cases: who your product is for} |
|
|
111
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product to do} |
|
|
112
|
+
| 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
113
|
+
| 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
114
|
+
| 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
115
|
+
| 6 | `faq` (accordion · items ×5 · 1 CTA · initialOpen first) | `FAQ` | FAQs |
|
|
82
116
|
|
|
83
117
|
<!-- generated:end -->
|
|
84
118
|
|
|
85
|
-
### `/
|
|
119
|
+
### `/use-cases/<slug>` — UseCase · schema `WebPage` → `Article` · chrome on
|
|
86
120
|
|
|
87
|
-
|
|
121
|
+
Three placeholder use cases from the base layer (#6658 D4): `first-use-case`, `second-use-case` and `third-use-case`, rendered as prose by the `/use-cases/[slug]` route.
|
|
122
|
+
|
|
123
|
+
<!-- generated:begin page=/use-cases/[slug] -->
|
|
124
|
+
|
|
125
|
+
_Detail route over `content/en/UseCase/` — 3 seed pages: `persona-1.mdx`, `persona-2.mdx`, `persona-3.mdx`._
|
|
126
|
+
<!-- generated:end -->
|
|
127
|
+
|
|
128
|
+
### `/software` — code route (the product listing) · chrome on
|
|
129
|
+
|
|
130
|
+
Lists every `SoftwareProduct` page by slug. The route is core since #6658: the product's own page replaced the `/features` stand-in, so every scaffold carries it.
|
|
88
131
|
|
|
89
132
|
<!-- generated:begin page=/features -->
|
|
90
133
|
|
|
91
|
-
| # | Section | Component | Copy (first line)
|
|
92
|
-
| --- | ------------------------------------------------- | --------- |
|
|
93
|
-
| 1 | `
|
|
94
|
-
| 2 | `
|
|
95
|
-
| 3 | `cta` (box ·
|
|
134
|
+
| # | Section | Component | Copy (first line) |
|
|
135
|
+
| --- | ------------------------------------------------- | --------- | ----------------------------------------------- |
|
|
136
|
+
| 1 | `hero` (eyebrow "Features" · 2 CTAs) | `Hero` | {Features: what your product does} |
|
|
137
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | {Everything your product does for the customer} |
|
|
138
|
+
| 3 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
96
139
|
|
|
97
140
|
<!-- generated:end -->
|
|
98
141
|
|
|
142
|
+
### `/features/<slug>` (seeds: `feature-1` · `feature-2` · `feature-3`) — Feature · schema `WebPage` → `SoftwareApplication` (named for the feature, `featureList: [it]`) · chrome on
|
|
143
|
+
|
|
144
|
+
Reference: `screenshots/features.png`, `copy/features.txt`, plus the how-it-works steps. One page per feature (#6721, reversing #6658 D5), rendered by the `/features/[slug]` route over `content/en/Feature/<slug>.mdx`; the `/features` hub (`FeaturesList`) lists them. Its JSON-LD is a `WebPage` whose `mainEntity` is a `SoftwareApplication` named by the page title; its feature titles become the site's `featureList` when `_site.mdx` declares a `SoftwareApplication` secondary. It carries the former `/features` sections, with their links re-pointed to in-page anchors, and the how-it-works steps that moved off `/use-cases` (the brief's "how-it-works folds into the product page"). The nav's Features links and the home page's feature links point here.
|
|
145
|
+
|
|
146
|
+
<!-- generated:begin page=/features/[slug] -->
|
|
147
|
+
|
|
148
|
+
_Detail route over `content/en/Feature/` — 3 seed pages: `feature-1.mdx`, `feature-2.mdx`, `feature-3.mdx`._
|
|
149
|
+
<!-- generated:end -->
|
|
150
|
+
|
|
99
151
|
### `/pricing` — Pricing · schema `Pricing` · chrome on
|
|
100
152
|
|
|
101
|
-
Reference: `screenshots/pricing.png`, `copy/pricing.txt`. The reference opens on a hero
|
|
153
|
+
Reference: `screenshots/pricing.png`, `copy/pricing.txt`. The reference opens on a hero that repeats the plans section's own eyebrow/headline/subtitle; the template drops that hero (operator, 2026-09-23) and the plans section leads the page and owns its `<h1>` (`ownsPageTitle`). Route enabled by the roster (#5469 D10).
|
|
102
154
|
|
|
103
155
|
<!-- generated:begin page=/pricing -->
|
|
104
156
|
|
|
105
|
-
| # | Section
|
|
106
|
-
| --- |
|
|
107
|
-
| 1 | `hero` (eyebrow "Pricing" · 2 CTAs)
|
|
108
|
-
| 2 | `pricing` (three-tiers-with-toggle ·
|
|
109
|
-
| 3 | `logoCloud` (logos ×
|
|
110
|
-
| 4 | `testimonials` (
|
|
111
|
-
| 5 | `cta` (box ·
|
|
112
|
-
| 6 | `faq` (accordion · items ×5 ·
|
|
157
|
+
| # | Section | Component | Copy (first line) |
|
|
158
|
+
| --- | ------------------------------------------------------------------------------------ | -------------- | ----------------------------------------------------------------- |
|
|
159
|
+
| 1 | `hero` (centered · gapBelow=tight · eyebrow "Pricing" · 2 CTAs) | `Hero` | {Upgrade to Pro with Commerce} |
|
|
160
|
+
| 2 | `pricing` (three-tiers-with-toggle · cardLayout=centered · plans ×3 · billingToggle) | `Pricing` | Basic plan |
|
|
161
|
+
| 3 | `logoCloud` (layout=inline · logos ×3) | `LogoCloud` | {Don’t just take our word for it} |
|
|
162
|
+
| 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
163
|
+
| 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
164
|
+
| 6 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {FAQs} |
|
|
113
165
|
|
|
114
166
|
<!-- generated:end -->
|
|
115
167
|
|
|
@@ -119,14 +171,13 @@ Reference: `screenshots/about.png`, `copy/about.txt`. No hero: the page opens on
|
|
|
119
171
|
|
|
120
172
|
<!-- generated:begin page=/about -->
|
|
121
173
|
|
|
122
|
-
| # | Section
|
|
123
|
-
| --- |
|
|
124
|
-
| 1 | `content-block` (media-right · eyebrow "
|
|
125
|
-
| 2 | `team` (members ×5)
|
|
126
|
-
| 3 | `
|
|
127
|
-
| 4 | `
|
|
128
|
-
| 5 | `
|
|
129
|
-
| 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
|
|
174
|
+
| # | Section | Component | Copy (first line) |
|
|
175
|
+
| --- | --------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
|
|
176
|
+
| 1 | `content-block` (media-right · imagerySlot=true · eyebrow "About" · 2 CTAs) | `ContentBlock` | {We want you to ability they couldn't do before} |
|
|
177
|
+
| 2 | `team` (with-side-images · eyebrow "Tagline" · members ×5) | `Team` | Our team |
|
|
178
|
+
| 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
179
|
+
| 4 | `cta` (box · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
180
|
+
| 5 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | FAQs |
|
|
130
181
|
|
|
131
182
|
<!-- generated:end -->
|
|
132
183
|
|
|
@@ -136,11 +187,11 @@ No standardissue page; folded into the Product flyout. Copy: the reference's FAQ
|
|
|
136
187
|
|
|
137
188
|
<!-- generated:begin page=/faq -->
|
|
138
189
|
|
|
139
|
-
| # | Section
|
|
140
|
-
| --- |
|
|
141
|
-
| 1 | `hero`
|
|
142
|
-
| 2 | `faq` (accordion · items ×5 ·
|
|
143
|
-
| 3 | `
|
|
190
|
+
| # | Section | Component | Copy (first line) |
|
|
191
|
+
| --- | ------------------------------------------------------- | --------- | ---------------------------------------- |
|
|
192
|
+
| 1 | `hero` (gapBelow=tight · eyebrow "FAQ") | `Hero` | FAQs |
|
|
193
|
+
| 2 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A question your customers actually ask} |
|
|
194
|
+
| 3 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A second group of questions} |
|
|
144
195
|
|
|
145
196
|
<!-- generated:end -->
|
|
146
197
|
|
|
@@ -150,28 +201,63 @@ Reference: `screenshots/contact.png`, `copy/contact.txt`. The reference is a spl
|
|
|
150
201
|
|
|
151
202
|
<!-- generated:begin page=/contact -->
|
|
152
203
|
|
|
153
|
-
| # | Section
|
|
154
|
-
| --- |
|
|
155
|
-
| 1 | `hero` (split · eyebrow "
|
|
156
|
-
| 2 | `contact-form` (card · fields ×3) | `ContactForm` | Name · Email · Message |
|
|
157
|
-
| 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
158
|
-
| 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
|
|
204
|
+
| # | Section | Component | Copy (first line) |
|
|
205
|
+
| --- | --------------------------------------------------------- | --------- | ------------------------------------- |
|
|
206
|
+
| 1 | `hero` (split · eyebrow "Contact" · checklist ×3 · 1 CTA) | `Hero` | Get every message in your email, free |
|
|
159
207
|
|
|
160
208
|
<!-- generated:end -->
|
|
161
209
|
|
|
162
|
-
### `/
|
|
210
|
+
### `/glossary` — GlossaryList · schema `CollectionPage` → `DefinedTermSet` · chrome on
|
|
163
211
|
|
|
164
|
-
|
|
212
|
+
A base-layer seed every starter carries (#6658 D5): a hero, then a `glossary-index` of five placeholder terms, each a `DefinedTerm` in the page's `DefinedTermSet`. Linked from the footer's Resources column.
|
|
213
|
+
|
|
214
|
+
<!-- generated:begin page=/glossary -->
|
|
215
|
+
|
|
216
|
+
| # | Section | Component | Copy (first line) |
|
|
217
|
+
| --- | ----------------------------------- | --------------- | -------------------------------------------- |
|
|
218
|
+
| 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
|
|
219
|
+
| 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
|
|
220
|
+
|
|
221
|
+
<!-- generated:end -->
|
|
222
|
+
|
|
223
|
+
### `/newsletter` — NewsletterSignup · schema `WebPage` → `Offer` · chrome on
|
|
224
|
+
|
|
225
|
+
A base-layer seed every starter carries (#6658 D5). The form posts to lead capture (`/v1/leads/subscribe`), which records a subscriber and sends no verification email. The frontmatter `schema:` names the free subscription as the page's `Offer`. Linked from the footer's Resources column.
|
|
226
|
+
|
|
227
|
+
<!-- generated:begin page=/newsletter -->
|
|
228
|
+
|
|
229
|
+
| # | Section | Component | Copy (first line) |
|
|
230
|
+
| --- | -------------------------------------- | --------- | --------------------------------------- |
|
|
231
|
+
| 1 | `hero` (eyebrow "Newsletter" · 2 CTAs) | `Hero` | {Start a free newsletter with Substack} |
|
|
232
|
+
| 2 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
|
|
233
|
+
|
|
234
|
+
<!-- generated:end -->
|
|
235
|
+
|
|
236
|
+
### `/book-a-call` — BookCall · schema `WebPage` → `Offer` · chrome on
|
|
237
|
+
|
|
238
|
+
A base-layer seed every starter carries (#6658 D5): a hero whose call to action is `/contact`, then what happens on the call. A template carrying the scheduling module overrides the seed so the call to action opens `/meet`. Linked from the footer's Site pages column.
|
|
239
|
+
|
|
240
|
+
<!-- generated:begin page=/book-a-call -->
|
|
241
|
+
|
|
242
|
+
| # | Section | Component | Copy (first line) |
|
|
243
|
+
| --- | -------------------------------------- | --------- | ------------------------------------------ |
|
|
244
|
+
| 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
|
|
245
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
|
|
246
|
+
|
|
247
|
+
<!-- generated:end -->
|
|
248
|
+
|
|
249
|
+
### `/blog` — BlogList · schema `Blog` · chrome on (Free teaser)
|
|
250
|
+
|
|
251
|
+
Reference: `screenshots/blog.png`, `copy/blog.txt` for the opener and the newsletter. Free ships **one static page** with the correct page type — a BlogList (`content/en/BlogList/blog.mdx`, emitting the BlogList builder's `Blog` with an empty `ItemList`) served by the generic `[slug]` route, which probes BlogList after LandingPage: the reference's opener, a CTA to the Pro docs-blog module (the one non-verbatim block), the newsletter, and the reference's logo strip + testimonial. Pro replaces this route with the real listing by directory precedence (#5469 D3).
|
|
165
252
|
|
|
166
253
|
<!-- generated:begin page=/blog -->
|
|
167
254
|
|
|
168
|
-
| # | Section
|
|
169
|
-
| --- |
|
|
170
|
-
| 1 | `hero` (centered · eyebrow "Blog")
|
|
171
|
-
| 2 | `
|
|
172
|
-
| 3 | `
|
|
173
|
-
| 4 | `
|
|
174
|
-
| 5 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
|
|
255
|
+
| # | Section | Component | Copy (first line) |
|
|
256
|
+
| --- | ------------------------------------------------------------ | -------------- | ----------------------------------------------------------------- |
|
|
257
|
+
| 1 | `hero` (centered · gapBelow=tight · eyebrow "Blog" · 2 CTAs) | `Hero` | Get free blog/docs from Fumadocs |
|
|
258
|
+
| 2 | `blog-list` (grid) | `BlogList` | |
|
|
259
|
+
| 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
260
|
+
| 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
175
261
|
|
|
176
262
|
<!-- generated:end -->
|
|
177
263
|
|
|
@@ -184,6 +270,15 @@ Renders the `SignInCard` client island (providers from env) inside the locale la
|
|
|
184
270
|
_Code route — no content, no sections._
|
|
185
271
|
<!-- generated:end -->
|
|
186
272
|
|
|
273
|
+
### `/sign-up` — code route (sign-up form) · chrome on
|
|
274
|
+
|
|
275
|
+
The account-creation form inside the locale layout — a code route like `/sign-in`, listed so the manifest is a complete install record (#6646). No reference page.
|
|
276
|
+
|
|
277
|
+
<!-- generated:begin page=/sign-up -->
|
|
278
|
+
|
|
279
|
+
_Code route — no content, no sections._
|
|
280
|
+
<!-- generated:end -->
|
|
281
|
+
|
|
187
282
|
### `/privacy`, `/terms` — PrivacyPage / TermsPage · schema same · chrome on
|
|
188
283
|
|
|
189
284
|
Reference: `screenshots/legal--privacy-policy.png`, `copy/legal--*.txt`. Content ✅ (the `document-chassis` placeholder document, not re-authored — the two pages stay as #5565 shipped them). Route enabled by the roster (#5469 D10).
|
|
@@ -192,9 +287,9 @@ Reference: `screenshots/legal--privacy-policy.png`, `copy/legal--*.txt`. Content
|
|
|
192
287
|
|
|
193
288
|
<!-- generated:begin page=/privacy -->
|
|
194
289
|
|
|
195
|
-
| # | Section
|
|
196
|
-
| --- |
|
|
197
|
-
| 1 | `document-chassis` (
|
|
290
|
+
| # | Section | Component | Copy (first line) |
|
|
291
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
292
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
|
|
198
293
|
|
|
199
294
|
<!-- generated:end -->
|
|
200
295
|
|
|
@@ -202,35 +297,83 @@ Reference: `screenshots/legal--privacy-policy.png`, `copy/legal--*.txt`. Content
|
|
|
202
297
|
|
|
203
298
|
<!-- generated:begin page=/terms -->
|
|
204
299
|
|
|
205
|
-
| # | Section
|
|
206
|
-
| --- |
|
|
207
|
-
| 1 | `document-chassis` (
|
|
300
|
+
| # | Section | Component | Copy (first line) |
|
|
301
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
302
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
|
|
208
303
|
|
|
209
304
|
<!-- generated:end -->
|
|
210
305
|
|
|
306
|
+
### `/purchase-policy` — `PurchasePolicyPage` (product shape) · chrome on
|
|
307
|
+
|
|
308
|
+
One document-chassis page with the shape's policy sections — returns, shipping and refunds (#6646). Its Returns section makes the JSON-LD a `MerchantReturnPolicy` at `#return-policy`.
|
|
309
|
+
|
|
310
|
+
<!-- generated:begin page=/purchase-policy -->
|
|
311
|
+
|
|
312
|
+
| # | Section | Component | Copy (first line) |
|
|
313
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
314
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
|
|
315
|
+
|
|
316
|
+
<!-- generated:end -->
|
|
317
|
+
|
|
318
|
+
### `/portfolio` — PortfolioList · chrome on
|
|
319
|
+
|
|
320
|
+
The before/after portfolio hub (#6687). A shape row since #6753: portfolio belongs to the `organization-product` shape, Free included (operator 2026-09-25).
|
|
321
|
+
|
|
322
|
+
<!-- generated:begin page=/portfolio -->
|
|
323
|
+
|
|
324
|
+
| # | Section | Component | Copy (first line) |
|
|
325
|
+
| --- | ---------------------------------------------------------------------------------------------------------- | --------- | --------------------------------------- |
|
|
326
|
+
| 1 | `hero` (default · gapBelow=tight · size=display · surface=wash-secondary · eyebrow "{Portfolio}" · 2 CTAs) | `Hero` | {The work, before and after.} |
|
|
327
|
+
| 2 | `items` (tile · surface=none · columns=2 · items ×4) | `Items` | |
|
|
328
|
+
| 3 | `cta` (beam · chips ×3 · 2 CTAs) | `CTA` | {Is your site the before or the after?} |
|
|
329
|
+
| 4 | `faq` (centered · surface=gray-100 · accordion · items ×3 · initialOpen first) | `FAQ` | Frequently Asked Questions |
|
|
330
|
+
|
|
331
|
+
<!-- generated:end -->
|
|
332
|
+
|
|
333
|
+
### `/portfolio/<slug>` (seeds: `sample-one` … `sample-four`) — PortfolioItem · chrome on
|
|
334
|
+
|
|
335
|
+
One `before-after` comparison per page, seeded from `site-templates/_base/content/en/PortfolioItem/` (#6687, #6753).
|
|
336
|
+
|
|
337
|
+
<!-- generated:begin page=/portfolio/[slug] -->
|
|
338
|
+
|
|
339
|
+
_Detail route over `content/en/PortfolioItem/` — 4 seed pages: `sample-four.mdx`, `sample-one.mdx`, `sample-three.mdx`, `sample-two.mdx`._
|
|
340
|
+
<!-- generated:end -->
|
|
341
|
+
|
|
211
342
|
### `/thanks/<slug>` — per-form confirmation (InstrumentDeliveryPage) · chrome on
|
|
212
343
|
|
|
213
344
|
Not a hub page by design (#3960). Free ships none because the contact form confirms inline. Listed so nobody re-files it.
|
|
214
345
|
|
|
346
|
+
## 1b. Structured data (every page)
|
|
347
|
+
|
|
348
|
+
Every content route emits one `application/ld+json` script whose `@graph` carries the site's own entity graph, built from `content/_site.mdx` `siteIdentity` — never from a page title (#6597):
|
|
349
|
+
|
|
350
|
+
| Node | `@id` | Built from | Links |
|
|
351
|
+
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
352
|
+
| Identity (`Organization` · `Person` · `LocalBusiness`) | `<origin>/#organization` (`#person` for a Person) | `siteIdentity` `name` · `url` · `logo`/`image` · `description` · `sameAs` | — |
|
|
353
|
+
| Secondary (optional) | `<origin>/#product` (a `SoftwareApplication`) · `<origin>/#organization` (a Person's company) | `siteIdentity.secondary` | product `publisher` → `#organization`, `featureList` from the product page's (`/software/product`) feature items; a Person `worksFor` its company, which has the Person as `founder` |
|
|
354
|
+
| `WebSite` | `<origin>/#website` | `siteName` · `baseUrl` · the render locale | `publisher` → the identity node |
|
|
355
|
+
|
|
356
|
+
Each page's primary node is `isPartOf` the `WebSite`; the home page's `mainEntity` is the secondary when declared, else the identity. A testimonials `Review` points its `itemReviewed` at the identity node, declared in the same graph. Free declares no secondary, so a fresh site emits the Organization and the WebSite. `/sign-in` emits no JSON-LD.
|
|
357
|
+
|
|
215
358
|
## 2a. State and persistence (every interactive element)
|
|
216
359
|
|
|
217
360
|
The template is content and config; the states live in the components. This table is what the local review clicks through (#5469 AC), per element: the states, where they persist, and what a returning visitor sees.
|
|
218
361
|
|
|
219
|
-
| Element | States
|
|
220
|
-
| -------------------------------------- |
|
|
221
|
-
| Announcement banner (home only) |
|
|
222
|
-
| Cookie consent (`BannerConsentIsland`) | unset → shown; accepted; declined
|
|
223
|
-
| Theme toggle (footer) | light · dark · system
|
|
224
|
-
| Locale switcher (footer) | one of `NEXT_PUBLIC_ENABLED_LOCALES`
|
|
225
|
-
| Nav (mobile) | closed · open (hamburger)
|
|
226
|
-
| Product flyout (desktop) | closed · open on hover/focus
|
|
227
|
-
| Contact form | idle · sending · success (inline) · error
|
|
228
|
-
| Newsletter (footer + `/blog`) | idle · sending · success · error
|
|
229
|
-
| Pricing billing toggle | monthly · yearly
|
|
230
|
-
| FAQ accordion | per item open/closed (`initialOpen`)
|
|
231
|
-
| Video section | poster · playing (`playBadge`)
|
|
232
|
-
| Sign-in card | providers listed · magic-link sent · error
|
|
233
|
-
| Legal document chassis | contents nav scroll position
|
|
362
|
+
| Element | States | Persists in | Returning visitor sees | Empty / error state |
|
|
363
|
+
| -------------------------------------- | -------------------------------------------------- | ------------------------------------------- | -------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
364
|
+
| Announcement banner (home only) | off by default (#6469); when on: shown, no dismiss | — | when on: shown on `/`, never elsewhere | — |
|
|
365
|
+
| Cookie consent (`BannerConsentIsland`) | unset → shown; accepted; declined | consent cookie (the island's) | nothing until the cookie expires | a blocked storage write leaves it shown |
|
|
366
|
+
| Theme toggle (footer) | light · dark · system | `data-theme` + localStorage (`ThemeToggle`) | last choice | falls back to system |
|
|
367
|
+
| Locale switcher (footer) | one of `NEXT_PUBLIC_ENABLED_LOCALES` | `NEXT_LOCALE` cookie + the URL prefix | last locale, unprefixed when default | single-locale site shows one option |
|
|
368
|
+
| Nav (mobile) | closed · open (hamburger) | — | closed | — |
|
|
369
|
+
| Product flyout (desktop) | closed · open on hover/focus | — | closed | — |
|
|
370
|
+
| Contact form | idle · sending · success (inline) · error | — | idle | validation errors per field; consent unchecked blocks submit |
|
|
371
|
+
| Newsletter (footer + `/blog`) | idle · sending · success · error | — | idle | the reference's two lines: "Thank you! Your submission has been received!" / "Oops! Something went wrong…" |
|
|
372
|
+
| Pricing billing toggle | monthly · yearly | — | monthly | — |
|
|
373
|
+
| FAQ accordion | per item open/closed (`initialOpen`) | — | first open | no items → section hidden |
|
|
374
|
+
| Video section | poster · playing (`playBadge`) | — | poster | missing asset → poster only |
|
|
375
|
+
| Sign-in card | providers listed · magic-link sent · error | session cookie (auth) | signed in → redirected by `next-path` | no provider configured → honest empty state |
|
|
376
|
+
| Legal document chassis | contents nav scroll position | — | top | — |
|
|
234
377
|
|
|
235
378
|
## 3. Roster, as the registry declares it
|
|
236
379
|
|
|
@@ -240,33 +383,83 @@ The template is content and config; the states live in the components. This tabl
|
|
|
240
383
|
marketing-site-free:
|
|
241
384
|
requires: [marketing]
|
|
242
385
|
categories: [accounting, legal, technology]
|
|
386
|
+
shape: organization-product
|
|
387
|
+
design: standard
|
|
243
388
|
roster:
|
|
244
|
-
- { route: "/",
|
|
245
|
-
- { route: "/
|
|
246
|
-
- { route: "/features",
|
|
247
|
-
- { route: "/
|
|
248
|
-
- { route: "/
|
|
249
|
-
- { route: "/
|
|
250
|
-
- { route: "/
|
|
251
|
-
- { route: "/
|
|
252
|
-
- { route: "/
|
|
253
|
-
- { route: "/
|
|
254
|
-
- { route: "/
|
|
389
|
+
- { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
|
|
390
|
+
- { route: "/features", kind: page, content: ["content/en/FeaturesList/features.mdx"] }
|
|
391
|
+
- { route: "/features/[slug]", kind: page, contentDir: "content/en/Feature" }
|
|
392
|
+
- { route: "/use-cases", kind: page, content: ["content/en/UseCasesList/use-cases.mdx"] }
|
|
393
|
+
- { route: "/use-cases/[slug]", kind: page, contentDir: "content/en/UseCase" }
|
|
394
|
+
- { route: "/pricing", kind: page, content: ["content/en/Pricing/pricing.mdx"] }
|
|
395
|
+
- { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
|
|
396
|
+
- { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
|
|
397
|
+
- { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
|
|
398
|
+
- { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
|
|
399
|
+
- { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
|
|
400
|
+
- { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
|
|
401
|
+
- { route: "/sign-in", kind: route }
|
|
402
|
+
- { route: "/sign-up", kind: route }
|
|
403
|
+
- { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
|
|
404
|
+
- { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
|
|
405
|
+
- { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
|
|
406
|
+
- { route: "/blog", kind: page, content: ["content/en/BlogList/blog.mdx"] }
|
|
407
|
+
- { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
|
|
408
|
+
- { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
|
|
255
409
|
```
|
|
256
410
|
|
|
257
411
|
<!-- generated:end -->
|
|
258
412
|
|
|
259
|
-
All
|
|
413
|
+
All twenty rows are declared on the registry — the `organization-product` shape roster in `src/starter-grid.ts`: `TEMPLATE_BASE_ROSTER` + the `/blog` teaser row + the two portfolio rows (#5469 D3/D4, re-derived by #6658, portfolio added by #6753), so the template is one declared page set whichever mechanism scaffolds each: the always-copied overlay for the core pages, `site-templates/_base/content/**` for the module-less ones and the three use cases. The scaffold carries this roster as `.ailk-site-manifest.json` at its root (#6658 D7); this Markdown stays in the template.
|
|
414
|
+
|
|
415
|
+
### 3a. Deviations from the standard roster (recorded, #6658)
|
|
416
|
+
|
|
417
|
+
The roster is the standard page set for this template's shape, edited only by
|
|
418
|
+
the rows below. The standard set is the `page_type` column of
|
|
419
|
+
`python3 scripts/derive-roster.py --entity-type software --offering-type software --primary-goal convert --scale global --registry packages/schema/src/registry/entries.ts`
|
|
420
|
+
(20 rows, `mainEntity: SoftwareApplication`) — the `--shape organization-product`
|
|
421
|
+
invocation once claude-setup#9145's `--shape` flag is vendored into this repo.
|
|
422
|
+
The roster's page rows equal that set minus the dropped rows, plus the added
|
|
423
|
+
rows (`R = (S − D) ∪ A`). This supersedes the 2026-09-23 disposition, whose
|
|
424
|
+
three omissions (`GlossaryList`, `BookCall`, `NewsletterSignup`) the brief
|
|
425
|
+
reversed (`docs/decisions/starter-roster-page-set.md` D4, D7).
|
|
426
|
+
|
|
427
|
+
**Standard rows dropped:**
|
|
428
|
+
|
|
429
|
+
| Standard row | Reason |
|
|
430
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------ |
|
|
431
|
+
| `IntegrationsList` | a placeholder starter has no integrations to list |
|
|
432
|
+
| `Integration` | a placeholder starter has no integrations to list |
|
|
433
|
+
| `CoursesList` | there is no course offering |
|
|
434
|
+
| `Course` | there is no course offering |
|
|
435
|
+
| `CaseStudiesList` | proof pages need real customers; the use-cases page carries one placeholder testimonial and one logo strip instead |
|
|
436
|
+
| `CaseStudy` | proof pages need real customers; the use-cases page carries one placeholder testimonial and one logo strip instead |
|
|
437
|
+
| `TestimonialsList` | proof pages need real customers; the use-cases page carries one placeholder testimonial and one logo strip instead |
|
|
438
|
+
| `ClientsList` | proof pages need real customers; the use-cases page carries one placeholder testimonial and one logo strip instead |
|
|
439
|
+
|
|
440
|
+
**Rows added:**
|
|
441
|
+
|
|
442
|
+
| Added row | Reason |
|
|
443
|
+
| -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
444
|
+
| `SoftwareProduct` | the single product's own detail page — the standard's multi-product opt-in, taken by the one product |
|
|
445
|
+
| `PurchasePolicyPage` | the product-shape purchase policy every shape carries (#6646 D3) |
|
|
446
|
+
| `BlogList` (the `/blog` teaser) | the standard's `convert` goal carries no blog (`blog_enabled: false`); the Free teaser stays by operator ruling 2026-09-24, and where the docs-blog module is present its own `BlogList` serves `/blog` instead |
|
|
447
|
+
| `/software`, `/sign-in`, `/sign-up` | code routes (`kind: route`): the product listing and the two auth pages carry no page type of their own |
|
|
448
|
+
| `PortfolioList`, `PortfolioItem` (`/portfolio`, `/portfolio/[slug]`) | portfolio belongs to the shape, Free included (roadmap § 4, operator 2026-09-25, reversing #6687's "Pro and up"; #6753). `pnpm starter:check` R3.2 counts two more missing anchor captures for these routes — the pre-existing, non-CI anchor gap, now 14 |
|
|
449
|
+
|
|
450
|
+
### 3b. Site entity (operator-disposed 2026-09-24)
|
|
451
|
+
|
|
452
|
+
`derive-roster.py` names `SoftwareApplication` as the main entity for this template's inputs. The template deliberately declares the **Organization** as the site's primary node and the software as its **secondary** node (`siteIdentity.secondary`, kind `SoftwareApplication`, #6597): the Free template is a company's own site about its product, so the entity the site is _about_ is the maker. The inverse — `SoftwareApplication` primary — is for a product whose canonical site is elsewhere (Positionary, whose maker has its own site). A fresh Free scaffold declares no `secondary` until the owner names the product; the overlay `_site.mdx` documents the field.
|
|
260
453
|
|
|
261
454
|
## 4. Component inventory (Free, by tier)
|
|
262
455
|
|
|
263
456
|
<!-- generated:begin inventory -->
|
|
264
457
|
|
|
265
|
-
| Tier | Used by this template
|
|
266
|
-
| -------- |
|
|
267
|
-
| Shell | `MarketingShell`
|
|
268
|
-
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`)
|
|
269
|
-
| Sections | `
|
|
458
|
+
| Tier | Used by this template |
|
|
459
|
+
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
460
|
+
| Shell | `MarketingShell` |
|
|
461
|
+
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
|
|
462
|
+
| Sections | `BlogList`, `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `Pricing`, `Team`, `Testimonials` |
|
|
270
463
|
|
|
271
464
|
<!-- generated:end -->
|
|
272
465
|
|
|
@@ -284,3 +477,20 @@ Every section above already exists in `packages/ui`; the reproduction is composi
|
|
|
284
477
|
| Footer columns + subscribe not composed on the default path | this template's build |
|
|
285
478
|
| `/meet` rename (Pro) | #5563 |
|
|
286
479
|
| `ReportPage` (Pro) | #5562 |
|
|
480
|
+
| CTA `box` variant's checklist + imagery-slot split (the product page's switch box) | #6526 |
|
|
481
|
+
|
|
482
|
+
## 6. Not included (starter-template contract R2.4)
|
|
483
|
+
|
|
484
|
+
Named so nothing is assumed. Each is a scaffold-time or post-launch addition, not a gap in this template.
|
|
485
|
+
|
|
486
|
+
| Not included | What the template does instead |
|
|
487
|
+
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
488
|
+
| Email delivery of form submissions | the contact form persists in file mode (`AILK_LOCAL_LEAD_CAPTURE`) or to the leads API; no mail is sent |
|
|
489
|
+
| Newsletter backend | the footer Subscribe block is composed but posts nowhere until the owner wires a provider (§ 5) |
|
|
490
|
+
| Translated content | one locale (`en`); the i18n routing and message files ship, the copy does not |
|
|
491
|
+
| Error monitoring | none wired; the scaffold carries no Sentry or equivalent |
|
|
492
|
+
| Blog | `/blog` is a teaser (`BlogList`, empty list by design); posts need the `docs` module (Pro) |
|
|
493
|
+
| Auth-backed pages | `/sign-in` renders; sessions need Postgres (README § When you need a database) |
|
|
494
|
+
| Payments | none; commerce is the add-on (`docs/strategy/OFFERINGS.md`) |
|
|
495
|
+
| Analytics | `analytics.vercelAnalytics: false` in `_site.mdx`; the consent banner ships, nothing loads behind it until toggled |
|
|
496
|
+
| Search | none |
|