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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"categories": ["accounting", "legal", "technology"],
|
|
5
5
|
"shape": "organization-product",
|
|
6
6
|
"design": "standard",
|
|
7
|
-
"generatedHash": "
|
|
7
|
+
"generatedHash": "54b11878a0ad8b1f1dccae73ba4580c08b7135bec274bd52182ffd431a6108ee",
|
|
8
8
|
"layout": {
|
|
9
9
|
"nav": "full",
|
|
10
10
|
"footer": "columns",
|
|
@@ -120,27 +120,47 @@
|
|
|
120
120
|
]
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
|
-
"route": "/
|
|
124
|
-
"kind": "
|
|
125
|
-
"pageType":
|
|
126
|
-
"schema":
|
|
123
|
+
"route": "/features",
|
|
124
|
+
"kind": "page",
|
|
125
|
+
"pageType": "FeaturesList",
|
|
126
|
+
"schema": "FeaturesList",
|
|
127
127
|
"shell": "MarketingShell",
|
|
128
128
|
"chrome": "on",
|
|
129
|
-
"sections": [
|
|
129
|
+
"sections": [
|
|
130
|
+
{
|
|
131
|
+
"type": "hero",
|
|
132
|
+
"component": "Hero"
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"type": "items",
|
|
136
|
+
"component": "Items",
|
|
137
|
+
"options": {
|
|
138
|
+
"columns": 3
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"type": "cta",
|
|
143
|
+
"component": "CTA"
|
|
144
|
+
}
|
|
145
|
+
]
|
|
130
146
|
},
|
|
131
147
|
{
|
|
132
|
-
"route": "/
|
|
148
|
+
"route": "/features/[slug]",
|
|
133
149
|
"kind": "page",
|
|
134
|
-
"contentDir": "content/en/
|
|
135
|
-
"seeds": [
|
|
136
|
-
|
|
137
|
-
|
|
150
|
+
"contentDir": "content/en/Feature",
|
|
151
|
+
"seeds": [
|
|
152
|
+
"content/en/Feature/feature-1.mdx",
|
|
153
|
+
"content/en/Feature/feature-2.mdx",
|
|
154
|
+
"content/en/Feature/feature-3.mdx"
|
|
155
|
+
],
|
|
156
|
+
"pageType": "Feature",
|
|
157
|
+
"schema": "Feature",
|
|
138
158
|
"shell": "MarketingShell",
|
|
139
159
|
"chrome": "on",
|
|
140
160
|
"sections": []
|
|
141
161
|
},
|
|
142
162
|
{
|
|
143
|
-
"route": "/
|
|
163
|
+
"route": "/for",
|
|
144
164
|
"kind": "page",
|
|
145
165
|
"pageType": "UseCasesList",
|
|
146
166
|
"schema": "UseCasesList",
|
|
@@ -180,13 +200,13 @@
|
|
|
180
200
|
]
|
|
181
201
|
},
|
|
182
202
|
{
|
|
183
|
-
"route": "/
|
|
203
|
+
"route": "/for/[slug]",
|
|
184
204
|
"kind": "page",
|
|
185
205
|
"contentDir": "content/en/UseCase",
|
|
186
206
|
"seeds": [
|
|
187
|
-
"content/en/UseCase/
|
|
188
|
-
"content/en/UseCase/
|
|
189
|
-
"content/en/UseCase/
|
|
207
|
+
"content/en/UseCase/persona-1.mdx",
|
|
208
|
+
"content/en/UseCase/persona-2.mdx",
|
|
209
|
+
"content/en/UseCase/persona-3.mdx"
|
|
190
210
|
],
|
|
191
211
|
"pageType": "UseCase",
|
|
192
212
|
"schema": "UseCase",
|
|
@@ -202,6 +222,13 @@
|
|
|
202
222
|
"shell": "MarketingShell",
|
|
203
223
|
"chrome": "on",
|
|
204
224
|
"sections": [
|
|
225
|
+
{
|
|
226
|
+
"type": "hero",
|
|
227
|
+
"component": "Hero",
|
|
228
|
+
"options": {
|
|
229
|
+
"gapBelow": "tight"
|
|
230
|
+
}
|
|
231
|
+
},
|
|
205
232
|
{
|
|
206
233
|
"type": "pricing",
|
|
207
234
|
"component": "Pricing",
|
|
@@ -304,15 +331,11 @@
|
|
|
304
331
|
"component": "Hero"
|
|
305
332
|
},
|
|
306
333
|
{
|
|
307
|
-
"type": "
|
|
308
|
-
"component": "
|
|
334
|
+
"type": "items",
|
|
335
|
+
"component": "Items",
|
|
309
336
|
"options": {
|
|
310
|
-
"
|
|
337
|
+
"columns": 2
|
|
311
338
|
}
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
"type": "testimonials",
|
|
315
|
-
"component": "Testimonials"
|
|
316
339
|
}
|
|
317
340
|
]
|
|
318
341
|
},
|
|
@@ -346,37 +369,12 @@
|
|
|
346
369
|
"type": "hero",
|
|
347
370
|
"component": "Hero"
|
|
348
371
|
},
|
|
349
|
-
{
|
|
350
|
-
"type": "newsletter",
|
|
351
|
-
"component": "Newsletter"
|
|
352
|
-
},
|
|
353
372
|
{
|
|
354
373
|
"type": "faq",
|
|
355
374
|
"component": "FAQ"
|
|
356
375
|
}
|
|
357
376
|
]
|
|
358
377
|
},
|
|
359
|
-
{
|
|
360
|
-
"route": "/book-a-call",
|
|
361
|
-
"kind": "page",
|
|
362
|
-
"pageType": "BookCall",
|
|
363
|
-
"schema": "BookCall",
|
|
364
|
-
"shell": "MarketingShell",
|
|
365
|
-
"chrome": "on",
|
|
366
|
-
"sections": [
|
|
367
|
-
{
|
|
368
|
-
"type": "hero",
|
|
369
|
-
"component": "Hero"
|
|
370
|
-
},
|
|
371
|
-
{
|
|
372
|
-
"type": "items",
|
|
373
|
-
"component": "Items",
|
|
374
|
-
"options": {
|
|
375
|
-
"columns": 3
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
]
|
|
379
|
-
},
|
|
380
378
|
{
|
|
381
379
|
"route": "/sign-in",
|
|
382
380
|
"kind": "route",
|
|
@@ -477,6 +475,110 @@
|
|
|
477
475
|
"component": "Testimonials"
|
|
478
476
|
}
|
|
479
477
|
]
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"route": "/meet",
|
|
481
|
+
"kind": "page",
|
|
482
|
+
"pageType": "LandingPage",
|
|
483
|
+
"schema": "WebPage",
|
|
484
|
+
"shell": "MarketingShell",
|
|
485
|
+
"chrome": "on",
|
|
486
|
+
"sections": [
|
|
487
|
+
{
|
|
488
|
+
"type": "hero",
|
|
489
|
+
"component": "Hero"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"type": "items",
|
|
493
|
+
"component": "Items",
|
|
494
|
+
"options": {
|
|
495
|
+
"columns": 2
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
]
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"route": "/meet/[slug]",
|
|
502
|
+
"kind": "page",
|
|
503
|
+
"pageType": "BookCall",
|
|
504
|
+
"schema": "BookCall",
|
|
505
|
+
"shell": "MarketingShell",
|
|
506
|
+
"chrome": "on",
|
|
507
|
+
"sections": [
|
|
508
|
+
{
|
|
509
|
+
"type": "hero",
|
|
510
|
+
"component": "Hero"
|
|
511
|
+
},
|
|
512
|
+
{
|
|
513
|
+
"type": "cta",
|
|
514
|
+
"component": "CTA"
|
|
515
|
+
},
|
|
516
|
+
{
|
|
517
|
+
"type": "items",
|
|
518
|
+
"component": "Items",
|
|
519
|
+
"options": {
|
|
520
|
+
"columns": 3
|
|
521
|
+
}
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"type": "content-block",
|
|
525
|
+
"component": "ContentBlock"
|
|
526
|
+
}
|
|
527
|
+
]
|
|
528
|
+
},
|
|
529
|
+
{
|
|
530
|
+
"route": "/portfolio",
|
|
531
|
+
"kind": "page",
|
|
532
|
+
"pageType": "PortfolioList",
|
|
533
|
+
"schema": "PortfolioList",
|
|
534
|
+
"shell": "MarketingShell",
|
|
535
|
+
"chrome": "on",
|
|
536
|
+
"sections": [
|
|
537
|
+
{
|
|
538
|
+
"type": "hero",
|
|
539
|
+
"component": "Hero",
|
|
540
|
+
"options": {
|
|
541
|
+
"gapBelow": "tight",
|
|
542
|
+
"size": "display",
|
|
543
|
+
"surface": "wash-secondary"
|
|
544
|
+
}
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"type": "items",
|
|
548
|
+
"component": "Items",
|
|
549
|
+
"options": {
|
|
550
|
+
"surface": "none",
|
|
551
|
+
"columns": 2
|
|
552
|
+
}
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"type": "cta",
|
|
556
|
+
"component": "CTA"
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"type": "faq",
|
|
560
|
+
"component": "FAQ",
|
|
561
|
+
"options": {
|
|
562
|
+
"surface": "gray-100"
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
]
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"route": "/portfolio/[slug]",
|
|
569
|
+
"kind": "page",
|
|
570
|
+
"contentDir": "content/en/PortfolioItem",
|
|
571
|
+
"seeds": [
|
|
572
|
+
"content/en/PortfolioItem/sample-four.mdx",
|
|
573
|
+
"content/en/PortfolioItem/sample-one.mdx",
|
|
574
|
+
"content/en/PortfolioItem/sample-three.mdx",
|
|
575
|
+
"content/en/PortfolioItem/sample-two.mdx"
|
|
576
|
+
],
|
|
577
|
+
"pageType": "PortfolioItem",
|
|
578
|
+
"schema": "PortfolioItem",
|
|
579
|
+
"shell": "MarketingShell",
|
|
580
|
+
"chrome": "on",
|
|
581
|
+
"sections": []
|
|
480
582
|
}
|
|
481
583
|
]
|
|
482
584
|
}
|
|
@@ -99,48 +99,53 @@ Reference: `screenshots/home.png`, `copy/home.txt`. Ten page sections; the newsl
|
|
|
99
99
|
|
|
100
100
|
<!-- generated:end -->
|
|
101
101
|
|
|
102
|
-
### `/
|
|
102
|
+
### `/for` — UseCasesList · schema `CollectionPage` · chrome on
|
|
103
103
|
|
|
104
|
-
Rendered by the `/
|
|
104
|
+
Rendered by the `/for` route over `content/en/UseCasesList/for.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.
|
|
105
105
|
|
|
106
|
-
<!-- generated:begin page=/
|
|
106
|
+
<!-- generated:begin page=/for -->
|
|
107
107
|
|
|
108
108
|
| # | Section | Component | Copy (first line) |
|
|
109
109
|
| --- | -------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
|
|
110
|
-
| 1 | `hero` (eyebrow "
|
|
111
|
-
| 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product to do}
|
|
110
|
+
| 1 | `hero` (eyebrow "Customers" · 2 CTAs) | `Hero` | {Customers: who your product or service is for} |
|
|
111
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product or service to do} |
|
|
112
112
|
| 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
113
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}
|
|
114
|
+
| 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product or service in time amount or less} |
|
|
115
115
|
| 6 | `faq` (accordion · items ×5 · 1 CTA · initialOpen first) | `FAQ` | FAQs |
|
|
116
116
|
|
|
117
117
|
<!-- generated:end -->
|
|
118
118
|
|
|
119
|
-
### `/
|
|
119
|
+
### `/for/<slug>` — UseCase · schema `WebPage` → `Article` · chrome on
|
|
120
120
|
|
|
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 `/
|
|
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 `/for/[slug]` route.
|
|
122
122
|
|
|
123
|
-
<!-- generated:begin page=/
|
|
123
|
+
<!-- generated:begin page=/for/[slug] -->
|
|
124
124
|
|
|
125
|
-
_Detail route over `content/en/UseCase/` — 3 seed pages: `
|
|
125
|
+
_Detail route over `content/en/UseCase/` — 3 seed pages: `persona-1.mdx`, `persona-2.mdx`, `persona-3.mdx`._
|
|
126
126
|
<!-- generated:end -->
|
|
127
127
|
|
|
128
128
|
### `/software` — code route (the product listing) · chrome on
|
|
129
129
|
|
|
130
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.
|
|
131
131
|
|
|
132
|
-
<!-- generated:begin page=/
|
|
132
|
+
<!-- generated:begin page=/features -->
|
|
133
|
+
|
|
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} |
|
|
133
139
|
|
|
134
|
-
_Code route — no content, no sections._
|
|
135
140
|
<!-- generated:end -->
|
|
136
141
|
|
|
137
|
-
### `/
|
|
142
|
+
### `/features/<slug>` (seeds: `feature-1` · `feature-2` · `feature-3`) — Feature · schema `WebPage` → `SoftwareApplication` (named for the feature, `featureList: [it]`) · chrome on
|
|
138
143
|
|
|
139
|
-
Reference: `screenshots/features.png`, `copy/features.txt`, plus the how-it-works steps.
|
|
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 `/for` (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.
|
|
140
145
|
|
|
141
|
-
<!-- generated:begin page=/
|
|
146
|
+
<!-- generated:begin page=/features/[slug] -->
|
|
142
147
|
|
|
143
|
-
_Detail route over `content/en/
|
|
148
|
+
_Detail route over `content/en/Feature/` — 3 seed pages: `feature-1.mdx`, `feature-2.mdx`, `feature-3.mdx`._
|
|
144
149
|
<!-- generated:end -->
|
|
145
150
|
|
|
146
151
|
### `/pricing` — Pricing · schema `Pricing` · chrome on
|
|
@@ -149,13 +154,14 @@ Reference: `screenshots/pricing.png`, `copy/pricing.txt`. The reference opens on
|
|
|
149
154
|
|
|
150
155
|
<!-- generated:begin page=/pricing -->
|
|
151
156
|
|
|
152
|
-
| # | Section
|
|
153
|
-
| --- |
|
|
154
|
-
| 1 | `
|
|
155
|
-
| 2 | `
|
|
156
|
-
| 3 | `
|
|
157
|
-
| 4 | `
|
|
158
|
-
| 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} |
|
|
159
165
|
|
|
160
166
|
<!-- generated:end -->
|
|
161
167
|
|
|
@@ -195,11 +201,10 @@ Reference: `screenshots/contact.png`, `copy/contact.txt`. The reference is a spl
|
|
|
195
201
|
|
|
196
202
|
<!-- generated:begin page=/contact -->
|
|
197
203
|
|
|
198
|
-
| # | Section
|
|
199
|
-
| --- |
|
|
200
|
-
| 1 | `hero` (split · eyebrow "
|
|
201
|
-
| 2 | `
|
|
202
|
-
| 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
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 |
|
|
207
|
+
| 2 | `items` (tiles · columns=2 · items ×4) | `Items` | {Add appointment scheduling to your site} |
|
|
203
208
|
|
|
204
209
|
<!-- generated:end -->
|
|
205
210
|
|
|
@@ -222,24 +227,38 @@ A base-layer seed every starter carries (#6658 D5). The form posts to lead captu
|
|
|
222
227
|
|
|
223
228
|
<!-- generated:begin page=/newsletter -->
|
|
224
229
|
|
|
225
|
-
| # | Section
|
|
226
|
-
| --- |
|
|
227
|
-
| 1 | `hero` (eyebrow "Newsletter" ·
|
|
228
|
-
| 2 | `
|
|
229
|
-
|
|
230
|
+
| # | Section | Component | Copy (first line) |
|
|
231
|
+
| --- | -------------------------------------- | --------- | --------------------------------------- |
|
|
232
|
+
| 1 | `hero` (eyebrow "Newsletter" · 2 CTAs) | `Hero` | {Start a free newsletter with Substack} |
|
|
233
|
+
| 2 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
|
|
234
|
+
|
|
235
|
+
<!-- generated:end -->
|
|
236
|
+
|
|
237
|
+
### `/meet` — LandingPage · schema `WebPage` · chrome on
|
|
238
|
+
|
|
239
|
+
An always-copied overlay seed (#6897 D3): a meeting-types hub, served by the generic `[slug]` route, listing the four `/meet/<slug>` tiles below through the same `items` `tiles` variant Contact uses. A template carrying the scheduling module serves its own `meet/` route directory instead, by Next.js static-segment precedence.
|
|
240
|
+
|
|
241
|
+
<!-- generated:begin page=/meet -->
|
|
242
|
+
|
|
243
|
+
| # | Section | Component | Copy (first line) |
|
|
244
|
+
| --- | -------------------------------------- | --------- | --------------------- |
|
|
245
|
+
| 1 | `hero` (eyebrow "Meet") | `Hero` | {Book a time with us} |
|
|
246
|
+
| 2 | `items` (tiles · columns=2 · items ×4) | `Items` | |
|
|
230
247
|
|
|
231
248
|
<!-- generated:end -->
|
|
232
249
|
|
|
233
|
-
### `/
|
|
250
|
+
### `/meet/[slug]` — BookCall · schema `WebPage` -> `Offer` · chrome on
|
|
234
251
|
|
|
235
|
-
|
|
252
|
+
Four always-copied overlay seeds (#6897 D4/D5), served by the new `[slug]/[detail]` route: each carries a visitor-facing "{Get in touch}" CTA to `/contact`, an owner-placeholder upgrade block linking the pricing page in place of the calendar, and a "<- All meeting types" link back to `/meet`. `book-a-call` also carries the retired `/book-a-call` page's "What happens on the call?" section, moved here verbatim (#6897 D10). Linked from the footer's Site pages column (`/meet/book-a-call`, always rendered - never gated on a surface, the same `/blog` precedent).
|
|
236
253
|
|
|
237
|
-
<!-- generated:begin page=/
|
|
254
|
+
<!-- generated:begin page=/meet/[slug] -->
|
|
238
255
|
|
|
239
|
-
| # | Section | Component
|
|
240
|
-
| --- | -------------------------------------- |
|
|
241
|
-
| 1 | `hero` (eyebrow "Book a
|
|
242
|
-
| 2 | `
|
|
256
|
+
| # | Section | Component | Copy (first line) |
|
|
257
|
+
| --- | -------------------------------------- | -------------- | ------------------------------------------------ |
|
|
258
|
+
| 1 | `hero` (eyebrow "Book a Call" · 1 CTA) | `Hero` | Book a Call |
|
|
259
|
+
| 2 | `cta` (box · 1 CTA) | `CTA` | {What booking a call would do for your visitors} |
|
|
260
|
+
| 3 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
|
|
261
|
+
| 4 | `content-block` (1 CTA) | `ContentBlock` | |
|
|
243
262
|
|
|
244
263
|
<!-- generated:end -->
|
|
245
264
|
|
|
@@ -249,12 +268,12 @@ Reference: `screenshots/blog.png`, `copy/blog.txt` for the opener and the newsle
|
|
|
249
268
|
|
|
250
269
|
<!-- generated:begin page=/blog -->
|
|
251
270
|
|
|
252
|
-
| # | Section
|
|
253
|
-
| --- |
|
|
254
|
-
| 1 | `hero` (centered · gapBelow=tight · eyebrow "Blog") | `Hero` |
|
|
255
|
-
| 2 | `blog-list` (grid)
|
|
256
|
-
| 3 | `logoCloud` (layout=inline · logos ×6)
|
|
257
|
-
| 4 | `testimonials` (quote · items ×1)
|
|
271
|
+
| # | Section | Component | Copy (first line) |
|
|
272
|
+
| --- | ------------------------------------------------------------ | -------------- | ----------------------------------------------------------------- |
|
|
273
|
+
| 1 | `hero` (centered · gapBelow=tight · eyebrow "Blog" · 2 CTAs) | `Hero` | Get free blog/docs from Fumadocs |
|
|
274
|
+
| 2 | `blog-list` (grid) | `BlogList` | |
|
|
275
|
+
| 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
276
|
+
| 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
258
277
|
|
|
259
278
|
<!-- generated:end -->
|
|
260
279
|
|
|
@@ -312,6 +331,30 @@ One document-chassis page with the shape's policy sections — returns, shipping
|
|
|
312
331
|
|
|
313
332
|
<!-- generated:end -->
|
|
314
333
|
|
|
334
|
+
### `/portfolio` — PortfolioList · chrome on
|
|
335
|
+
|
|
336
|
+
The before/after portfolio hub (#6687). A shape row since #6753: portfolio belongs to the `organization-product` shape, Free included (operator 2026-09-25).
|
|
337
|
+
|
|
338
|
+
<!-- generated:begin page=/portfolio -->
|
|
339
|
+
|
|
340
|
+
| # | Section | Component | Copy (first line) |
|
|
341
|
+
| --- | ---------------------------------------------------------------------------------------------------------- | --------- | --------------------------------------- |
|
|
342
|
+
| 1 | `hero` (default · gapBelow=tight · size=display · surface=wash-secondary · eyebrow "{Portfolio}" · 2 CTAs) | `Hero` | {The work, before and after.} |
|
|
343
|
+
| 2 | `items` (tile · surface=none · columns=2 · items ×4) | `Items` | |
|
|
344
|
+
| 3 | `cta` (beam · chips ×3 · 2 CTAs) | `CTA` | {Is your site the before or the after?} |
|
|
345
|
+
| 4 | `faq` (centered · surface=gray-100 · accordion · items ×3 · initialOpen first) | `FAQ` | Frequently Asked Questions |
|
|
346
|
+
|
|
347
|
+
<!-- generated:end -->
|
|
348
|
+
|
|
349
|
+
### `/portfolio/<slug>` (seeds: `sample-one` … `sample-four`) — PortfolioItem · chrome on
|
|
350
|
+
|
|
351
|
+
One `before-after` comparison per page, seeded from `site-templates/_base/content/en/PortfolioItem/` (#6687, #6753).
|
|
352
|
+
|
|
353
|
+
<!-- generated:begin page=/portfolio/[slug] -->
|
|
354
|
+
|
|
355
|
+
_Detail route over `content/en/PortfolioItem/` — 4 seed pages: `sample-four.mdx`, `sample-one.mdx`, `sample-three.mdx`, `sample-two.mdx`._
|
|
356
|
+
<!-- generated:end -->
|
|
357
|
+
|
|
315
358
|
### `/thanks/<slug>` — per-form confirmation (InstrumentDeliveryPage) · chrome on
|
|
316
359
|
|
|
317
360
|
Not a hub page by design (#3960). Free ships none because the contact form confirms inline. Listed so nobody re-files it.
|
|
@@ -360,28 +403,31 @@ marketing-site-free:
|
|
|
360
403
|
design: standard
|
|
361
404
|
roster:
|
|
362
405
|
- { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
|
|
363
|
-
- { route: "/
|
|
364
|
-
- { route: "/
|
|
365
|
-
- { route: "/
|
|
366
|
-
- { route: "/
|
|
406
|
+
- { route: "/features", kind: page, content: ["content/en/FeaturesList/features.mdx"] }
|
|
407
|
+
- { route: "/features/[slug]", kind: page, contentDir: "content/en/Feature" }
|
|
408
|
+
- { route: "/for", kind: page, content: ["content/en/UseCasesList/for.mdx"] }
|
|
409
|
+
- { route: "/for/[slug]", kind: page, contentDir: "content/en/UseCase" }
|
|
367
410
|
- { route: "/pricing", kind: page, content: ["content/en/Pricing/pricing.mdx"] }
|
|
368
411
|
- { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
|
|
369
412
|
- { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
|
|
370
413
|
- { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
|
|
371
414
|
- { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
|
|
372
415
|
- { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
|
|
373
|
-
- { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
|
|
374
416
|
- { route: "/sign-in", kind: route }
|
|
375
417
|
- { route: "/sign-up", kind: route }
|
|
376
418
|
- { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
|
|
377
419
|
- { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
|
|
378
420
|
- { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
|
|
379
421
|
- { route: "/blog", kind: page, content: ["content/en/BlogList/blog.mdx"] }
|
|
422
|
+
- { route: "/meet", kind: page, content: ["content/en/LandingPage/meet.mdx"] }
|
|
423
|
+
- { route: "/meet/[slug]", kind: page, content: ["content/en/BookCall/book-a-call.mdx", "content/en/BookCall/onsite-estimate.mdx", "content/en/BookCall/start-project.mdx", "content/en/BookCall/onsite-service.mdx"] }
|
|
424
|
+
- { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
|
|
425
|
+
- { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
|
|
380
426
|
```
|
|
381
427
|
|
|
382
428
|
<!-- generated:end -->
|
|
383
429
|
|
|
384
|
-
All
|
|
430
|
+
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.
|
|
385
431
|
|
|
386
432
|
### 3a. Deviations from the standard roster (recorded, #6658)
|
|
387
433
|
|
|
@@ -403,19 +449,20 @@ reversed (`docs/decisions/starter-roster-page-set.md` D4, D7).
|
|
|
403
449
|
| `Integration` | a placeholder starter has no integrations to list |
|
|
404
450
|
| `CoursesList` | there is no course offering |
|
|
405
451
|
| `Course` | there is no course offering |
|
|
406
|
-
| `CaseStudiesList` | proof pages need real customers; the
|
|
407
|
-
| `CaseStudy` | proof pages need real customers; the
|
|
408
|
-
| `TestimonialsList` | proof pages need real customers; the
|
|
409
|
-
| `ClientsList` | proof pages need real customers; the
|
|
452
|
+
| `CaseStudiesList` | proof pages need real customers; the customers page carries one placeholder testimonial and one logo strip instead |
|
|
453
|
+
| `CaseStudy` | proof pages need real customers; the customers page carries one placeholder testimonial and one logo strip instead |
|
|
454
|
+
| `TestimonialsList` | proof pages need real customers; the customers page carries one placeholder testimonial and one logo strip instead |
|
|
455
|
+
| `ClientsList` | proof pages need real customers; the customers page carries one placeholder testimonial and one logo strip instead |
|
|
410
456
|
|
|
411
457
|
**Rows added:**
|
|
412
458
|
|
|
413
|
-
| Added row
|
|
414
|
-
|
|
|
415
|
-
| `SoftwareProduct`
|
|
416
|
-
| `PurchasePolicyPage`
|
|
417
|
-
| `BlogList` (the `/blog` teaser)
|
|
418
|
-
| `/software`, `/sign-in`, `/sign-up`
|
|
459
|
+
| Added row | Reason |
|
|
460
|
+
| -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
461
|
+
| `SoftwareProduct` | the single product's own detail page — the standard's multi-product opt-in, taken by the one product |
|
|
462
|
+
| `PurchasePolicyPage` | the product-shape purchase policy every shape carries (#6646 D3) |
|
|
463
|
+
| `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 |
|
|
464
|
+
| `/software`, `/sign-in`, `/sign-up` | code routes (`kind: route`): the product listing and the two auth pages carry no page type of their own |
|
|
465
|
+
| `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 |
|
|
419
466
|
|
|
420
467
|
### 3b. Site entity (operator-disposed 2026-09-24)
|
|
421
468
|
|
|
@@ -425,11 +472,11 @@ reversed (`docs/decisions/starter-roster-page-set.md` D4, D7).
|
|
|
425
472
|
|
|
426
473
|
<!-- generated:begin inventory -->
|
|
427
474
|
|
|
428
|
-
| Tier | Used by this template
|
|
429
|
-
| -------- |
|
|
430
|
-
| Shell | `MarketingShell`
|
|
431
|
-
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`)
|
|
432
|
-
| Sections | `BlogList`, `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `
|
|
475
|
+
| Tier | Used by this template |
|
|
476
|
+
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
477
|
+
| Shell | `MarketingShell` |
|
|
478
|
+
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
|
|
479
|
+
| Sections | `BlogList`, `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `Pricing`, `Team`, `Testimonials` |
|
|
433
480
|
|
|
434
481
|
<!-- generated:end -->
|
|
435
482
|
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
"provenance.json": ".ailk-template.json",
|
|
7
7
|
"TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json"
|
|
8
8
|
},
|
|
9
|
-
"postInstall": "Template marketing-site-free installed. Its /pricing, /privacy, /terms, /glossary, /newsletter
|
|
9
|
+
"postInstall": "Template marketing-site-free installed. Its /pricing, /privacy, /terms, /glossary, /newsletter and three /for/<slug> seed pages came with the base layer it extends (content/en/); /meet and its four /meet/<slug> pages came with the always-copied overlay - replace the placeholder copy before you launch."
|
|
10
10
|
}
|