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
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Minimalism
|
|
3
|
-
description: The minimalism design — the same black-on-white foundation, presented as a nine-slide scroll-snap deck home with a mark-only navigation and a centred footer.
|
|
4
|
-
colors:
|
|
5
|
-
bg: "#ffffff"
|
|
6
|
-
fg: "#000000"
|
|
7
|
-
surface: "#ffffff"
|
|
8
|
-
surface-secondary: "#ffffff"
|
|
9
|
-
border: "#000000"
|
|
10
|
-
text-muted: "#333333"
|
|
11
|
-
brand: "#000000"
|
|
12
|
-
fg-on-brand: "#ffffff"
|
|
13
|
-
accent: "#000000"
|
|
14
|
-
bg-dark: "#000000"
|
|
15
|
-
fg-dark: "#ffffff"
|
|
16
|
-
border-dark: "#ffffff"
|
|
17
|
-
brand-dark: "#ffffff"
|
|
18
|
-
typography:
|
|
19
|
-
display:
|
|
20
|
-
fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
|
|
21
|
-
fontSize: "3.5rem"
|
|
22
|
-
fontWeight: 700
|
|
23
|
-
lineHeight: 1.1
|
|
24
|
-
letterSpacing: "normal"
|
|
25
|
-
heading-section:
|
|
26
|
-
fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
|
|
27
|
-
fontSize: "3rem"
|
|
28
|
-
fontWeight: 700
|
|
29
|
-
lineHeight: 1.1
|
|
30
|
-
letterSpacing: "normal"
|
|
31
|
-
heading-item:
|
|
32
|
-
fontSize: "2rem"
|
|
33
|
-
fontWeight: 700
|
|
34
|
-
lineHeight: 1.375
|
|
35
|
-
letterSpacing: "normal"
|
|
36
|
-
body:
|
|
37
|
-
fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
|
|
38
|
-
fontSize: "1.125rem"
|
|
39
|
-
fontWeight: 400
|
|
40
|
-
lineHeight: 1.5
|
|
41
|
-
eyebrow:
|
|
42
|
-
fontSize: "0.875rem"
|
|
43
|
-
fontWeight: 600
|
|
44
|
-
lineHeight: 1.4
|
|
45
|
-
letterSpacing: "0.05em"
|
|
46
|
-
rounded:
|
|
47
|
-
button: "0.5rem"
|
|
48
|
-
card: "0.75rem"
|
|
49
|
-
spacing:
|
|
50
|
-
section: "7rem"
|
|
51
|
-
section-mobile: "4rem"
|
|
52
|
-
card: "1.5rem"
|
|
53
|
-
grid: "1.5rem"
|
|
54
|
-
container: "1280px"
|
|
55
|
-
measure: "36rem"
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
<!--
|
|
59
|
-
Source template: minimalism-site
|
|
60
|
-
Design: minimalism
|
|
61
|
-
Version: create-ailk {{CREATE_AILK_VERSION}}
|
|
62
|
-
|
|
63
|
-
This is the `minimalism` design's DESIGN.md. Its one authored source is
|
|
64
|
-
create-ailk's site-templates/designs/minimalism/DESIGN.md; every template on
|
|
65
|
-
this design ships a copy of it that differs only in the "Source template"
|
|
66
|
-
line above, and a template installed with `--template <name>` replaces the
|
|
67
|
-
base scaffold's DESIGN.md with its own. The impeccable design skill reads
|
|
68
|
-
it at the start of every design session, so an agent building a new page
|
|
69
|
-
stays on-system.
|
|
70
|
-
Edit the canonical file, never a copy — a test holds every copy to it.
|
|
71
|
-
|
|
72
|
-
The tokens above describe what the site RENDERS today. Colours come from
|
|
73
|
-
content/_site.mdx (`theme.colors`); type, radius and spacing are platform
|
|
74
|
-
defaults a site cannot override yet — see "Where this is heading" below.
|
|
75
|
-
-->
|
|
76
|
-
|
|
77
|
-
# Minimalism
|
|
78
|
-
|
|
79
|
-
## Overview
|
|
80
|
-
|
|
81
|
-
The minimalism design is the standard foundation — the same black-on-white wireframe, the same type and the same components — presented as a deck. The home page is a nine-slide deck that snaps one slide per scroll, so the site reads like a presentation before it reads like a website; the rest of the site is quiet and document-like. Its character comes from structure, not a palette: it carries no theme of its own.
|
|
82
|
-
|
|
83
|
-
Every page is composed from the AI Launch Kit component library (`@working-theory/ui`). Nothing is hand-built: a page is a list of registered sections, each with a bounded set of variants.
|
|
84
|
-
|
|
85
|
-
## Colors
|
|
86
|
-
|
|
87
|
-
### Primary
|
|
88
|
-
|
|
89
|
-
**Black** (`brand` `#000000`) fills the primary button; its label is white. The secondary button is white with a black hairline and black label.
|
|
90
|
-
|
|
91
|
-
### Neutral
|
|
92
|
-
|
|
93
|
-
Pure white ground (`bg` `#ffffff`), pure black ink for headings (`fg` `#000000`), and near-black `#333333` for body copy — well above AA on white. **Borders are black** (`#000000`): card outlines, the rule under the navigation, the rules between sections and the rule above the footer are all 1px black lines. Cards are white, not tinted (`surface-secondary` is white too). There is no accent colour — `accent` is black.
|
|
94
|
-
|
|
95
|
-
Dark mode inverts: black ground, white ink, white rules, white primary button with black label.
|
|
96
|
-
|
|
97
|
-
### Named Rules
|
|
98
|
-
|
|
99
|
-
- **Rules, not fills.** A container is drawn with a black hairline on the white ground. Grey fills are reserved for image placeholders.
|
|
100
|
-
|
|
101
|
-
## Typography
|
|
102
|
-
|
|
103
|
-
System sans throughout; no web font.
|
|
104
|
-
|
|
105
|
-
### Hierarchy
|
|
106
|
-
|
|
107
|
-
| Role | Size | Weight | Notes |
|
|
108
|
-
| --------------- | -------- | ------ | ------------------------------------------------------------------------------------- |
|
|
109
|
-
| Hero headline | 3.5rem | 700 | Normal tracking, line-height 1.1; 2.5rem below 1024px |
|
|
110
|
-
| Section heading | 3rem | 700 | Normal tracking, line-height 1.1; 2.25rem below 1024px, always under the hero |
|
|
111
|
-
| Item heading | 2rem | 700 | Card, feature and step titles; 1.5rem below 1024px |
|
|
112
|
-
| Body | 1.125rem | 400 | `#333333`, line-height 1.5; section copy capped at 36rem (about 70 characters a line) |
|
|
113
|
-
| Section label | 0.875rem | 600 | Uppercase, +0.05em tracking today — the small label above a section heading |
|
|
114
|
-
|
|
115
|
-
Measured from the rendered scaffold (1440px and 390px wide), not transcribed from tokens. Bold headings at normal tracking follow the foundation's pinned direction (#6493).
|
|
116
|
-
|
|
117
|
-
The small label above a section heading is **kept** as part of this foundation's voice (operator-disposed 2026-09-22) and is headed toward the treatment below.
|
|
118
|
-
|
|
119
|
-
## Layout
|
|
120
|
-
|
|
121
|
-
Home is the `deck` layout: nine full-viewport slides with scroll-snap. The navigation is `mark-only`, the footer is `centered`, and there is no announcement banner (`layout.home: deck`, `layout.nav: mark-only`, `layout.footer: centered` — the design's own knobs, which any template on this design gets without declaring a `layout`). Every page this site carries is listed in its roster of record, `.ailk-site-manifest.json` at the site root. Shared foundation: a 1280px container, sections at 7rem (4rem below 1024px), card grids at 1.5rem, breakpoints 320 / 768 / 1024 / 1440.
|
|
122
|
-
|
|
123
|
-
## Shapes
|
|
124
|
-
|
|
125
|
-
Square corners everywhere (`theme.corners: square`) — buttons, cards, the auth card, image placeholders; the tokens above are the base foundation's defaults a site overrides.
|
|
126
|
-
|
|
127
|
-
## Components
|
|
128
|
-
|
|
129
|
-
### Buttons
|
|
130
|
-
|
|
131
|
-
Primary: black fill, white label, 0.5rem corners. Secondary: transparent with a black 1px outline and black label. Both are the library `Button`.
|
|
132
|
-
|
|
133
|
-
### Cards / Containers
|
|
134
|
-
|
|
135
|
-
White panels with a black 1px outline, 0.75rem corners, `card` (1.5rem) padding. The one exception today: the "how it works" steps render as dark filled cards (see below).
|
|
136
|
-
|
|
137
|
-
### Navigation
|
|
138
|
-
|
|
139
|
-
Mark-only: the logomark alone, top left. No link row and no buttons in the header.
|
|
140
|
-
|
|
141
|
-
## Where this is heading
|
|
142
|
-
|
|
143
|
-
The foundation's pinned direction is the pacing of a classic wireframe marketing kit — `standardissue.webflow.io` is the reference for rhythm, type scale, spacing density and section pacing only; no image, copy or code is taken from it. The four traits this section used to list as blocked now ship as settings, so the rendered site matches the reference:
|
|
144
|
-
|
|
145
|
-
| Trait | How it is set |
|
|
146
|
-
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
|
|
147
|
-
| Square corners on buttons, cards and inputs | `theme.corners: square` in `_site.mdx` |
|
|
148
|
-
| Section label in sentence case, bold, no tracking | `theme.eyebrowCase: sentence` |
|
|
149
|
-
| Solid grey image placeholders, no outline | `theme.placeholders: fill` |
|
|
150
|
-
| Bare check and cross marks, no circle badge | `theme.checkmarks: plain` |
|
|
151
|
-
| Plain, uncarded feature and step items | per section: `itemStyle: plain`, and `variant: steps` for an image beside a numbered list |
|
|
152
|
-
| A left hero whose headline wraps at half the container | `measure: narrow` on the hero (pricing); `gapBelow: tight` where a list follows the hero directly |
|
|
153
|
-
| A three-up post grid on the blog index | `blog-list` `variant: grid` (cover · date · read time · title · excerpt · Read more) |
|
|
154
|
-
| A plans section that leads its page | drop the hero; the pricing section owns the `<h1>` (`ownsPageTitle`) |
|
|
155
|
-
|
|
156
|
-
## Do's and Don'ts
|
|
157
|
-
|
|
158
|
-
- **Do** keep every page built from registered sections. If a section you need does not exist, request it rather than writing one-off markup.
|
|
159
|
-
- **Do** change colours in `content/_site.mdx` `theme.colors`; they reach every section.
|
|
160
|
-
- **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through the theme.
|
|
161
|
-
- **Don't** replace a black rule with a shadow or a grey fill.
|
|
162
|
-
- **Don't** hard-code the "heading toward" values above into a page. They arrive through the platform, or not at all.
|
|
@@ -1,470 +0,0 @@
|
|
|
1
|
-
# Template manifest — `minimalism-site`
|
|
2
|
-
|
|
3
|
-
> The second Pro template (#5589) — a reports-first site whose home is a **nine-slide scroll-snap deck**, shaped after the reference captured in `docs/research/bondcap-capture/`. Structure and design are the reference; **the copy is not** — every line here is placeholder English of the same shape and length. Generated file: the regions between `<!-- generated:begin <id> -->` and `<!-- generated:end -->` are produced by `scripts/build-template-manifest.mjs --template minimalism-site` from the composed layer stack (this tree → its required modules → `_base` → the always-copied overlay), each roster row's MDX `sections[]`, and `component-catalog.json`. Everything outside the markers is written by hand.
|
|
4
|
-
|
|
5
|
-
| Field | Value |
|
|
6
|
-
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
7
|
-
| Template | `minimalism-site` |
|
|
8
|
-
| Level | Pro (derived from `requires` — `scheduling` and `signal-collectors` are paid; never declared) |
|
|
9
|
-
| `requires` | `[marketing, scheduling, signal-collectors]` — **no `docs-blog`**, which is what makes this a sibling of `marketing-site` rather than `marketing-site` plus a module (#5618 D2) |
|
|
10
|
-
| `extends` | `_base` — lineage only, never level |
|
|
11
|
-
| Delivery | licence-checked module bundle (#5441); never in the Free tarball |
|
|
12
|
-
| Sample content posture | every sample report, service and flow in the demo is **public** and **placeholder** |
|
|
13
|
-
| Reference | `docs/research/bondcap-capture/{home.behavior.md,home.snapshot.yml,repro/}` — panel shapes and the rescued section reproduction. No reference copy and no reference asset ships. |
|
|
14
|
-
|
|
15
|
-
## 1. Chrome
|
|
16
|
-
|
|
17
|
-
This template's chrome is the `minimalism` design's (#6638), not a `layout` block of its own; it was the first non-default chrome (#5612). The deck is the reason: a nine-panel scroll-snap home with a revealed brand mark has no room for a nav row, an announcement bar or a four-column footer.
|
|
18
|
-
|
|
19
|
-
| Piece | Value |
|
|
20
|
-
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
21
|
-
| Nav | `mark-only` — **no nav items render**. The revealed brand mark plus the right-hand controls are the only header chrome. Every page a reader reaches, they reach from a slide action or the footer bottom bar. |
|
|
22
|
-
| Footer | `centered` — the slide-9 bottom bar: Privacy · Terms · FAQ, the social row, the theme toggle and the locale switcher. |
|
|
23
|
-
| Announcement banner | off. The cookie-consent banner is unaffected — it is not an announcement. |
|
|
24
|
-
| Home | `deck` — the locale-root route mounts `MarketingShell` with `snap="mandatory"` + `deckHero` (#5612 D3 / #5426 D7). Every other route renders normally. |
|
|
25
|
-
|
|
26
|
-
### Layout knobs (#5612)
|
|
27
|
-
|
|
28
|
-
The `minimalism` design's knobs (#6638) — the template declares no `layout` block of its own; `design: minimalism` supplies these through `DESIGN_LAYOUTS`, resolved with `resolveSiteChrome(layout, design)`, defaults filled. Any shape that names this design gets the same chrome.
|
|
29
|
-
|
|
30
|
-
<!-- generated:begin layout -->
|
|
31
|
-
|
|
32
|
-
| Knob | Value |
|
|
33
|
-
| -------------------- | ----------- |
|
|
34
|
-
| `nav` | `mark-only` |
|
|
35
|
-
| `footer` | `centered` |
|
|
36
|
-
| `announcementBanner` | `false` |
|
|
37
|
-
| `home` | `deck` |
|
|
38
|
-
|
|
39
|
-
<!-- generated:end -->
|
|
40
|
-
|
|
41
|
-
### Theme (locked)
|
|
42
|
-
|
|
43
|
-
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).
|
|
44
|
-
|
|
45
|
-
<!-- generated:begin theme -->
|
|
46
|
-
|
|
47
|
-
| Setting | Value |
|
|
48
|
-
| ------------------------ | ---------- |
|
|
49
|
-
| `corners` | `square` |
|
|
50
|
-
| `eyebrowCase` | `sentence` |
|
|
51
|
-
| `placeholders` | `fill` |
|
|
52
|
-
| `checkmarks` | `plain` |
|
|
53
|
-
| `colors.light.bg` | `#ffffff` |
|
|
54
|
-
| `colors.light.bgMuted` | `#ffffff` |
|
|
55
|
-
| `colors.light.surface` | `#ffffff` |
|
|
56
|
-
| `colors.light.border` | `#000000` |
|
|
57
|
-
| `colors.light.text` | `#000000` |
|
|
58
|
-
| `colors.light.textMuted` | `#333333` |
|
|
59
|
-
| `colors.light.primary` | `#000000` |
|
|
60
|
-
| `colors.light.primaryFg` | `#ffffff` |
|
|
61
|
-
| `colors.light.accent` | `#000000` |
|
|
62
|
-
| `colors.dark.bg` | `#000000` |
|
|
63
|
-
| `colors.dark.bgMuted` | `#000000` |
|
|
64
|
-
| `colors.dark.surface` | `#000000` |
|
|
65
|
-
| `colors.dark.border` | `#ffffff` |
|
|
66
|
-
| `colors.dark.text` | `#ffffff` |
|
|
67
|
-
| `colors.dark.textMuted` | `#cccccc` |
|
|
68
|
-
| `colors.dark.primary` | `#ffffff` |
|
|
69
|
-
| `colors.dark.primaryFg` | `#000000` |
|
|
70
|
-
| `colors.dark.accent` | `#ffffff` |
|
|
71
|
-
|
|
72
|
-
<!-- generated:end -->
|
|
73
|
-
|
|
74
|
-
## 2. The home deck — nine slides
|
|
75
|
-
|
|
76
|
-
`layout.home: "deck"` makes every direct section child of `home.mdx` one full-viewport snap target, in order. The mark is hidden on slide 1 (the deck-hero landing state) and revealed from slide 2 on.
|
|
77
|
-
|
|
78
|
-
| # | Slide | Section | Ground | Action |
|
|
79
|
-
| --- | ----------------- | -------------------------------------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------- |
|
|
80
|
-
| 1 | Landing | `hero` (`backdrop`) | gradient band + backdrop | `{Primary CTA} →` → `/reports`, centered; 44px scroll cue. _No mark — but see the Nav-wiring note below._ |
|
|
81
|
-
| 2 | Tagline | `content-block` (`align: center`, `fill: viewport`) | light | — (_the mark reveals here once #5697 lands_) |
|
|
82
|
-
| 3 | Our community | `logoCloud` (`actions`) | light | `Refer someone →` → `/referral`, bottom-centered at 44px |
|
|
83
|
-
| 4 | Reports headline | `content-block` (`align: center`, `fill: viewport`) | light | — |
|
|
84
|
-
| 5 | Special reports | `reports-list` (`list`, `tone: on-dark`) | dark (`gradient-dark`) | four dated titles → `/reports/<slug>` |
|
|
85
|
-
| 6 | Favorites | `reports-list` (`list`, `tone: on-dark`) | dark (`gradient-dark`) | year-only titles → `/reports/<slug>` |
|
|
86
|
-
| 7 | Services headline | `content-block` (`align: center`, `fill: viewport`) | light | `Hire me →` → `/meet` |
|
|
87
|
-
| 8 | Partners | `team` (`with-large-images`, `hoverReveal`, `phoneColumns: 2`) | light | `About us →` → `/about`, bottom-centered at 44px |
|
|
88
|
-
| 9 | Closing | `cta` (`minimal`) | light | `Contact me →` → `/contact`, centered |
|
|
89
|
-
|
|
90
|
-
### How the deck honours the site principle
|
|
91
|
-
|
|
92
|
-
Sam's site principle for this template — _every slide's action sits at the bottom, centered, at 44px or larger; grids are 2-up on a phone_ — is held by bounded section props, never by a `className` override or hand-rolled markup in a template (`.claude/rules/frontend.md` § Chrome Composes Blocks). #5691 landed the seven the deck was missing and this tree sets all seven; the composition of every slide is unchanged from the table above.
|
|
93
|
-
|
|
94
|
-
| Prop | Owner | Slides that set it | What it does here |
|
|
95
|
-
| ------------------------------------------- | ---------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
96
|
-
| `hero.backdrop` | `packages/ui/src/sections/Hero.tsx` | 1 | paints `assets/hero-backdrop.svg` (installed at `/hero-backdrop.svg`) full-bleed behind the copy. A distinct slot from `image`, which counts as a stacked reveal — so the 44px scroll cue survives it. |
|
|
97
|
-
| `content-block.align` | `.../ContentBlock.tsx` | 2, 4, 7 | centers the headline cluster, the body and the CTA row, through `SectionHeader`'s own `align` prop |
|
|
98
|
-
| `content-block.fill` | `.../ContentBlock.tsx` | 2, 4, 7 | the copy centers in the middle of the full-viewport snap panel instead of sitting at its top |
|
|
99
|
-
| `logoCloud.actions` | `.../LogoCloud.tsx` | 3 | one bottom-centered action at the 44px floor beneath the strip (the #5622 `stair-steps` footer placement) |
|
|
100
|
-
| `team.actions` | `.../Team.tsx` | 8 | the same row beneath the member wall |
|
|
101
|
-
| `'gradient-dark'` on `SectionSurfaceSchema` | `packages/validation/…/page-sections.ts` | 5, 6 | the dark ground `tone: "on-dark"` (#5562, shipped **for** this template) was always meant to sit on. `SectionFrameBand` has carried the band itself since 2026-08-29. |
|
|
102
|
-
| `CardGrid.phoneColumns` | `packages/ui/src/panels/CardGrid.tsx` | 8 | the six-tile wall is two-up at 390 rather than overflowing the snap panel one tile at a time |
|
|
103
|
-
|
|
104
|
-
Two notes on the last row. `CardGrid`'s 1-up-below-`md` ramp stays the system-wide default — the recorded #2803 fix, since an `sm` step made every phone 2-up-cramped — and `phoneColumns: 2` is the opt-in Sam disposed on 2026-09-16 for this deck and the client decks built from it; nothing else in the repo sets it. And slide 8 is the only deck slide that reaches `CardGrid` at all: slide 3's logo strip is a reflowing flex row with no column count, and `reports-list`'s `list` variant has no grid — so one knob on one slide satisfies the whole principle.
|
|
105
|
-
|
|
106
|
-
### The Nav wiring — #5697, and not this template's to fix
|
|
107
|
-
|
|
108
|
-
The deck's brand-mark story is the other half of `layout.home: "deck"`, and it is not wired. `apps/web/app/[locale]/layout.tsx` forwards `snap` and `deckHero` to `MarketingShell` but forwards neither `sticky` nor `deckMorph` to `Nav`, so today the lockup is pushed out of view by the first snap and the morph hooks the #5426 CSS keys off are never in the document. A template declares layout; it cannot forward a prop in an app's layout file. Filed as **#5697**, with both states photographed (`home-*` vs `home-wired-*` under `docs/design-evidence/5589/`).
|
|
109
|
-
|
|
110
|
-
One thing #5697 also settles: #5589's text says slide 1 shows "no visible logo", while what #5426 D4 ships is a cross-fade — wordmark on the landing slide, mark from slide 2 on. The mark's absence from slide 1 holds either way.
|
|
111
|
-
|
|
112
|
-
## 3. Pages
|
|
113
|
-
|
|
114
|
-
One `page=<route>` region per roster row, generated from the seed file the composed layer stack lands for that route.
|
|
115
|
-
|
|
116
|
-
`/`:
|
|
117
|
-
|
|
118
|
-
<!-- generated:begin page=/ -->
|
|
119
|
-
|
|
120
|
-
| # | Section | Component | Copy (first line) |
|
|
121
|
-
| --- | ------------------------------------------------------------------ | -------------- | ---------------------------------------------------------------------- |
|
|
122
|
-
| 1 | `hero` (centered · surface=gradient-brand · fill=viewport · 1 CTA) | `Hero` | Your Company |
|
|
123
|
-
| 2 | `content-block` (narrow · align=center · fill=viewport) | `ContentBlock` | A working partnership with the teams building {what your market needs… |
|
|
124
|
-
| 3 | `logoCloud` (layout=grid · logos ×3 · 1 CTA) | `LogoCloud` | Our community |
|
|
125
|
-
| 4 | `content-block` (narrow · align=center · fill=viewport) | `ContentBlock` | Research on {your field}, and on where the next decade of it is going |
|
|
126
|
-
| 5 | `reports-list` (list · surface=gradient-dark · tone=on-dark) | `ReportsList` | Special reports |
|
|
127
|
-
| 6 | `reports-list` (list · surface=gradient-dark · tone=on-dark) | `ReportsList` | Favorites |
|
|
128
|
-
| 7 | `content-block` (narrow · align=center · fill=viewport · 1 CTA) | `ContentBlock` | Trusted work for the people who carry {the outcome you deliver} |
|
|
129
|
-
| 8 | `team` (with-large-images · members ×6 · 1 CTA) | `Team` | Partners |
|
|
130
|
-
| 9 | `cta` (minimal · 1 CTA) | `CTA` | Your Company |
|
|
131
|
-
|
|
132
|
-
<!-- generated:end -->
|
|
133
|
-
|
|
134
|
-
`/reports`:
|
|
135
|
-
|
|
136
|
-
<!-- generated:begin page=/reports -->
|
|
137
|
-
|
|
138
|
-
| # | Section | Component | Copy (first line) |
|
|
139
|
-
| --- | ------------------------------------- | ------------- | ------------------------------------------- |
|
|
140
|
-
| 1 | `hero` (centered · eyebrow "Reports") | `Hero` | Research on {your field}, published in full |
|
|
141
|
-
| 2 | `reports-list` (cards) | `ReportsList` | |
|
|
142
|
-
| 3 | `cta` (minimal · 1 CTA) | `CTA` | Want the next one as it lands? |
|
|
143
|
-
|
|
144
|
-
<!-- generated:end -->
|
|
145
|
-
|
|
146
|
-
`/about`:
|
|
147
|
-
|
|
148
|
-
<!-- generated:begin page=/about -->
|
|
149
|
-
|
|
150
|
-
| # | Section | Component | Copy (first line) |
|
|
151
|
-
| --- | ------------------------------------------ | -------------- | ---------------------------------------------------------------------- |
|
|
152
|
-
| 1 | `content-block` (narrow · eyebrow "About") | `ContentBlock` | We work with a small number of {the people you serve}, for a long time |
|
|
153
|
-
| 2 | `team` (with-large-images · members ×6) | `Team` | Partners |
|
|
154
|
-
| 3 | `cta` (minimal · 2 CTAs) | `CTA` | Work with us |
|
|
155
|
-
|
|
156
|
-
<!-- generated:end -->
|
|
157
|
-
|
|
158
|
-
`/services`:
|
|
159
|
-
|
|
160
|
-
<!-- generated:begin page=/services -->
|
|
161
|
-
|
|
162
|
-
| # | Section | Component | Copy (first line) |
|
|
163
|
-
| --- | -------------------------------------- | --------- | --------------------------- |
|
|
164
|
-
| 1 | `hero` (centered · eyebrow "Services") | `Hero` | Three ways to work together |
|
|
165
|
-
| 2 | `items` (columns=3 · items ×3) | `Items` | Engagements |
|
|
166
|
-
| 3 | `cta` (minimal · 1 CTA) | `CTA` | Not sure which one? |
|
|
167
|
-
|
|
168
|
-
<!-- generated:end -->
|
|
169
|
-
|
|
170
|
-
`/services/[slug]`:
|
|
171
|
-
|
|
172
|
-
<!-- generated:begin page=/services/[slug] -->
|
|
173
|
-
|
|
174
|
-
_Detail route over `content/en/Service/` — 3 seed pages: `first-engagement.mdx`, `second-engagement.mdx`, `third-engagement.mdx`._
|
|
175
|
-
<!-- generated:end -->
|
|
176
|
-
|
|
177
|
-
`/contact`:
|
|
178
|
-
|
|
179
|
-
<!-- generated:begin page=/contact -->
|
|
180
|
-
|
|
181
|
-
| # | Section | Component | Copy (first line) |
|
|
182
|
-
| --- | ------------------------------------- | --------- | ----------------------------- |
|
|
183
|
-
| 1 | `hero` (centered · eyebrow "Contact") | `Hero` | Say what you are trying to do |
|
|
184
|
-
| 2 | `cta` (minimal · 1 CTA) | `CTA` | Would a call be faster? |
|
|
185
|
-
|
|
186
|
-
<!-- generated:end -->
|
|
187
|
-
|
|
188
|
-
`/referral`:
|
|
189
|
-
|
|
190
|
-
<!-- generated:begin page=/referral -->
|
|
191
|
-
|
|
192
|
-
| # | Section | Component | Copy (first line) |
|
|
193
|
-
| --- | -------------------------------------------------------------- | ------------ | ---------------------------------------- |
|
|
194
|
-
| 1 | `hero` (centered · eyebrow "Referrals" · checklist ×3 · 1 CTA) | `Hero` | Know someone who should be on this list? |
|
|
195
|
-
| 2 | `stair-steps` (tiles ×3) | `StairSteps` | Three steps, about a minute |
|
|
196
|
-
| 3 | `cta` (minimal · 1 CTA) | `CTA` | Make an introduction |
|
|
197
|
-
|
|
198
|
-
<!-- generated:end -->
|
|
199
|
-
|
|
200
|
-
`/faq`:
|
|
201
|
-
|
|
202
|
-
<!-- generated:begin page=/faq -->
|
|
203
|
-
|
|
204
|
-
| # | Section | Component | Copy (first line) |
|
|
205
|
-
| --- | ------------------------------------------------------------- | --------- | ---------------------- |
|
|
206
|
-
| 1 | `faq` (centered · items ×5 · supportLink · initialOpen first) | `FAQ` | Questions |
|
|
207
|
-
| 2 | `cta` (minimal · 1 CTA) | `CTA` | Still have a question? |
|
|
208
|
-
|
|
209
|
-
<!-- generated:end -->
|
|
210
|
-
|
|
211
|
-
`/glossary`, `/newsletter` (base-layer seeds every starter carries, #6658 D5):
|
|
212
|
-
|
|
213
|
-
<!-- generated:begin page=/glossary -->
|
|
214
|
-
|
|
215
|
-
| # | Section | Component | Copy (first line) |
|
|
216
|
-
| --- | ----------------------------------- | --------------- | -------------------------------------------- |
|
|
217
|
-
| 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
|
|
218
|
-
| 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
|
|
219
|
-
|
|
220
|
-
<!-- generated:end -->
|
|
221
|
-
|
|
222
|
-
<!-- generated:begin page=/newsletter -->
|
|
223
|
-
|
|
224
|
-
| # | Section | Component | Copy (first line) |
|
|
225
|
-
| --- | ------------------------------------- | ------------ | ------------------------------------------------ |
|
|
226
|
-
| 1 | `hero` (eyebrow "Newsletter" · 1 CTA) | `Hero` | {Newsletter: what subscribers get and how often} |
|
|
227
|
-
| 2 | `newsletter` | `Newsletter` | Subscribe |
|
|
228
|
-
| 3 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
|
|
229
|
-
|
|
230
|
-
<!-- generated:end -->
|
|
231
|
-
|
|
232
|
-
`/book-a-call` (this template's own override of the base seed — the call to action opens the `/meet` booker the scheduling module supplies, not `/contact`):
|
|
233
|
-
|
|
234
|
-
<!-- generated:begin page=/book-a-call -->
|
|
235
|
-
|
|
236
|
-
| # | Section | Component | Copy (first line) |
|
|
237
|
-
| --- | -------------------------------------- | --------- | ------------------------------------------ |
|
|
238
|
-
| 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
|
|
239
|
-
| 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
|
|
240
|
-
|
|
241
|
-
<!-- generated:end -->
|
|
242
|
-
|
|
243
|
-
`/privacy`:
|
|
244
|
-
|
|
245
|
-
<!-- generated:begin page=/privacy -->
|
|
246
|
-
|
|
247
|
-
| # | Section | Component | Copy (first line) |
|
|
248
|
-
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
249
|
-
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
|
|
250
|
-
|
|
251
|
-
<!-- generated:end -->
|
|
252
|
-
|
|
253
|
-
`/terms`:
|
|
254
|
-
|
|
255
|
-
<!-- generated:begin page=/terms -->
|
|
256
|
-
|
|
257
|
-
| # | Section | Component | Copy (first line) |
|
|
258
|
-
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
259
|
-
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
|
|
260
|
-
|
|
261
|
-
<!-- generated:end -->
|
|
262
|
-
|
|
263
|
-
`/purchase-policy`:
|
|
264
|
-
|
|
265
|
-
<!-- generated:begin page=/purchase-policy -->
|
|
266
|
-
|
|
267
|
-
| # | Section | Component | Copy (first line) |
|
|
268
|
-
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
269
|
-
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
|
|
270
|
-
|
|
271
|
-
<!-- generated:end -->
|
|
272
|
-
|
|
273
|
-
`/meet`:
|
|
274
|
-
|
|
275
|
-
<!-- generated:begin page=/meet -->
|
|
276
|
-
|
|
277
|
-
_Code route — no content, no sections._
|
|
278
|
-
<!-- generated:end -->
|
|
279
|
-
|
|
280
|
-
`/meet/[slug]`:
|
|
281
|
-
|
|
282
|
-
<!-- generated:begin page=/meet/[slug] -->
|
|
283
|
-
|
|
284
|
-
_Code route — no content, no sections._
|
|
285
|
-
<!-- generated:end -->
|
|
286
|
-
|
|
287
|
-
`/meet/confirmed`:
|
|
288
|
-
|
|
289
|
-
<!-- generated:begin page=/meet/confirmed -->
|
|
290
|
-
|
|
291
|
-
_Code route — no content, no sections._
|
|
292
|
-
<!-- generated:end -->
|
|
293
|
-
|
|
294
|
-
`/appointments`:
|
|
295
|
-
|
|
296
|
-
<!-- generated:begin page=/appointments -->
|
|
297
|
-
|
|
298
|
-
_Code route — no content, no sections._
|
|
299
|
-
<!-- generated:end -->
|
|
300
|
-
|
|
301
|
-
`/flows/[slug]`:
|
|
302
|
-
|
|
303
|
-
<!-- generated:begin page=/flows/[slug] -->
|
|
304
|
-
|
|
305
|
-
_Code route — no content, no sections._
|
|
306
|
-
<!-- generated:end -->
|
|
307
|
-
|
|
308
|
-
`/flows/[slug]/start`:
|
|
309
|
-
|
|
310
|
-
<!-- generated:begin page=/flows/[slug]/start -->
|
|
311
|
-
|
|
312
|
-
_Code route — no content, no sections._
|
|
313
|
-
<!-- generated:end -->
|
|
314
|
-
|
|
315
|
-
`/flows/[slug]/results/[payload]`:
|
|
316
|
-
|
|
317
|
-
<!-- generated:begin page=/flows/[slug]/results/[payload] -->
|
|
318
|
-
|
|
319
|
-
_Code route — no content, no sections._
|
|
320
|
-
<!-- generated:end -->
|
|
321
|
-
|
|
322
|
-
`/reports/[slug]`:
|
|
323
|
-
|
|
324
|
-
<!-- generated:begin page=/reports/[slug] -->
|
|
325
|
-
|
|
326
|
-
_Detail route over `content/en/ReportPage/` — 4 seed pages: `annual-letter-2024.mdx`, `field-notes-2023.mdx`, `platform-shift-2025.mdx`, `state-of-the-market-2026.mdx`._
|
|
327
|
-
<!-- generated:end -->
|
|
328
|
-
|
|
329
|
-
The signal-collectors bundle's sample pages — the project listing, two projects and three thank-you pages — are this template's own roster rows (#6646), so the roster lists every page the scaffold installs.
|
|
330
|
-
|
|
331
|
-
<!-- generated:begin page=/projects -->
|
|
332
|
-
|
|
333
|
-
| # | Section | Component | Copy (first line) |
|
|
334
|
-
| --- | ------------------------------ | --------- | -------------------------- |
|
|
335
|
-
| 1 | `hero` (centered) | `Hero` | Projects |
|
|
336
|
-
| 2 | `items` (columns=2 · items ×2) | `Items` | Selected engagements |
|
|
337
|
-
| 3 | `cta` (2 CTAs) | `CTA` | Have a project like these? |
|
|
338
|
-
|
|
339
|
-
<!-- generated:end -->
|
|
340
|
-
|
|
341
|
-
<!-- generated:begin page=/projects/[slug] -->
|
|
342
|
-
|
|
343
|
-
_Detail route over `content/en/Project/` — 2 seed pages: `fit-check-funnel.mdx`, `launch-site-in-fourteen-days.mdx`._
|
|
344
|
-
<!-- generated:end -->
|
|
345
|
-
|
|
346
|
-
<!-- generated:begin page=/thanks/[slug] -->
|
|
347
|
-
|
|
348
|
-
_Detail route over `content/en/ThankYouPage/` — 3 seed pages: `apply.mdx`, `contact.mdx`, `newsletter.mdx`._
|
|
349
|
-
<!-- generated:end -->
|
|
350
|
-
|
|
351
|
-
### 3a. Deviations from the standard roster (recorded, #6638)
|
|
352
|
-
|
|
353
|
-
This template is the `organization-service` shape (`shape: organization-service`) rendered in the `minimalism` design (`design: minimalism`). The standard page set for that shape (`derive-roster.py` —
|
|
354
|
-
`entityType=organization · offeringType=services · primaryGoal=generate-leads · scale=global`,
|
|
355
|
-
`mainEntity: Organization`, 33 rows) is the baseline; the design adds no rows of its own —
|
|
356
|
-
the deck home, the mark-only nav and the centered footer are layout, not pages. What this
|
|
357
|
-
roster keeps from the standard set: `HomePage`, `AboutPage`, `ContactPage`, `FAQPage`,
|
|
358
|
-
`PrivacyPage`, `TermsPage`, `ServicesList`, `Service`, and — since #6658, which gives every
|
|
359
|
-
starter these three whatever its shape (`docs/decisions/starter-roster-page-set.md` D4, D7) —
|
|
360
|
-
`GlossaryList`, `NewsletterSignup` and `BookCall` (its `/book-a-call` seed is this template's
|
|
361
|
-
own, pointing at the `/meet` booker).
|
|
362
|
-
|
|
363
|
-
| Row added | Why |
|
|
364
|
-
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
365
|
-
| `/reports` | the site is reports-first: the deck's landing CTA and slides 5–6 lead here, and it indexes the `signal-collectors` reader at `/reports/<slug>` (§ 2) |
|
|
366
|
-
| `/referral` | the referral magnet — the pitch and what a referrer gets, opening the `referral` flow (§ 6); slide 3's action leads here. Both rows are `LandingPage` slugs, not new types |
|
|
367
|
-
|
|
368
|
-
| Standard row omitted | Why |
|
|
369
|
-
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
|
|
370
|
-
| `TeamList` · `TeamMember` (entity spine) | the partners are one `team` slide on the deck and the `/about` page (§ 2, § 5), not a directory |
|
|
371
|
-
| `CareersList` · `JobPosting` (entity spine) | not a hiring site; nothing to seed |
|
|
372
|
-
| `PartnersList` · `Partner` (entity spine) | the partner/community strip is a `logoCloud` slide on the deck, not a page |
|
|
373
|
-
| `ProjectsList` · `Project` (offering branch) | the proof is the reports, not a project portfolio |
|
|
374
|
-
| `Pricing` (offering branch) | engagements are booked, not priced on the page; `/pricing` is unrostered, so its seed does not install (§ 4) |
|
|
375
|
-
|
|
376
|
-
The lead-generation tier (CaseStudies, Testimonials, Clients, UseCases, Events, Downloads) and
|
|
377
|
-
the Resources content system (ResourcesHub, ResourceDetail, HowTo, Whitepaper) are the
|
|
378
|
-
goal-driven default a site prunes; the reports stand in for them here.
|
|
379
|
-
|
|
380
|
-
## 4. Roster, as the registry declares it
|
|
381
|
-
|
|
382
|
-
`minimalism-site` is the one declared template that does not reuse `TEMPLATE_BASE_ROSTER`: the deck replaces the document-scroll home, and `/how-it-works`, the product page (`/software/product`), `/pricing` and `/sign-in` are not pages this site has. The roster is what the template IS, so an unrostered page has neither a route directory nor its seed: `scaffold()` installs a `_base` or overlay seed only for a row that names it (#6646), so `content/en/Pricing/pricing.mdx` does not land. The merged roster, as the registry composes it:
|
|
383
|
-
|
|
384
|
-
<!-- generated:begin roster -->
|
|
385
|
-
|
|
386
|
-
```
|
|
387
|
-
minimalism-site:
|
|
388
|
-
requires: [marketing, scheduling, signal-collectors]
|
|
389
|
-
categories: [real-estate, technology, legal]
|
|
390
|
-
shape: organization-service
|
|
391
|
-
design: minimalism
|
|
392
|
-
roster:
|
|
393
|
-
- { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
|
|
394
|
-
- { route: "/reports", kind: page, content: ["content/en/LandingPage/reports.mdx"] }
|
|
395
|
-
- { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
|
|
396
|
-
- { route: "/services", kind: page, content: ["content/en/ServicesList/services.mdx"] }
|
|
397
|
-
- { route: "/services/[slug]", kind: page, contentDir: "content/en/Service" }
|
|
398
|
-
- { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
|
|
399
|
-
- { route: "/referral", kind: page, content: ["content/en/LandingPage/referral.mdx"] }
|
|
400
|
-
- { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
|
|
401
|
-
- { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
|
|
402
|
-
- { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
|
|
403
|
-
- { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
|
|
404
|
-
- { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
|
|
405
|
-
- { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
|
|
406
|
-
- { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
|
|
407
|
-
- { route: "/projects", kind: page, content: ["content/en/ProjectsList/projects.mdx"] }
|
|
408
|
-
- { route: "/projects/[slug]", kind: page, contentDir: "content/en/Project" }
|
|
409
|
-
- { route: "/thanks/[slug]", kind: page, contentDir: "content/en/ThankYouPage" }
|
|
410
|
-
- { route: "/meet", kind: route }
|
|
411
|
-
- { route: "/meet/[slug]", kind: route }
|
|
412
|
-
- { route: "/meet/confirmed", kind: route }
|
|
413
|
-
- { route: "/appointments", kind: route }
|
|
414
|
-
- { route: "/flows/[slug]", kind: route }
|
|
415
|
-
- { route: "/flows/[slug]/start", kind: route }
|
|
416
|
-
- { route: "/flows/[slug]/results/[payload]", kind: route }
|
|
417
|
-
- { route: "/reports/[slug]", kind: page, contentDir: "content/en/ReportPage" }
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
<!-- generated:end -->
|
|
421
|
-
|
|
422
|
-
By source:
|
|
423
|
-
|
|
424
|
-
```
|
|
425
|
-
template: / · /reports · /about · /services · /services/<slug> · /contact
|
|
426
|
-
/referral · /faq · /privacy · /terms
|
|
427
|
-
scheduling: /meet · /meet/<slug> · /meet/confirmed
|
|
428
|
-
signal-collectors: /flows/<slug> · /flows/<slug>/start · /flows/<slug>/results/<payload>
|
|
429
|
-
/reports/<slug> (#5562)
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
`/reports` and `/referral` carry no `GATEABLE_SURFACES` entry and need none: both are single-segment `LandingPage` slugs served by the generic `[slug]` route (#5469 D2), the same mechanism Free's `/how-it-works` uses. The three module-less surfaces this roster enables are `privacy`, `services` and `terms`.
|
|
433
|
-
|
|
434
|
-
## 5. Renaming `/about`
|
|
435
|
-
|
|
436
|
-
Many sites want this page at `/partners`, `/team`, `/family` or `/company`. That is a ROUTE rename in the customer's scaffold, never a content move and never something the template does for them — `AboutPage` is a content type in the schema registry, not a URL.
|
|
437
|
-
|
|
438
|
-
1. Keep `content/en/AboutPage/`.
|
|
439
|
-
2. `git mv "apps/web/app/[locale]/about" "apps/web/app/[locale]/partners"`.
|
|
440
|
-
3. Update the one footer label that names it (`messages/<locale>.json`).
|
|
441
|
-
|
|
442
|
-
Once #5572's routes map ships in the scaffold this collapses to one row: the `/about` row's `route`, plus a `legacyRoutes` entry so the old path 301s. The `postInstall` message says the same thing to the buyer.
|
|
443
|
-
|
|
444
|
-
## 6. The referral request
|
|
445
|
-
|
|
446
|
-
`/referral` is the magnet — the pitch and what a referrer gets. Its bottom action opens the REQUEST, which is a `signal-collectors` flow: `flows/referral.flow.json` in this tree installs to `database/flows/referral.flow.json` and is served at `/flows/referral/start` (`InstrumentCapturePage`). One field step (name, email, who and why), then a `message` step that confirms inline.
|
|
447
|
-
|
|
448
|
-
The issue named the path `/referral/request`. That path has no `ROUTES` row and no route directory, so serving it would mean shipping a `page.tsx` into every scaffold for one template's page — which a template may never do. **The lead's `source` is `flow:referral`**, not the bare `referral`: `flow-engine.ts` composes it as `` `flow:${slug}` `` for every flow, and that is not a template-level knob. Recorded on #5589 for Sam; his call supersedes.
|
|
449
|
-
|
|
450
|
-
## 7. Component inventory
|
|
451
|
-
|
|
452
|
-
Every component the roster rows' seed content composes today (generated):
|
|
453
|
-
|
|
454
|
-
<!-- generated:begin inventory -->
|
|
455
|
-
|
|
456
|
-
| Tier | Used by this template |
|
|
457
|
-
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
458
|
-
| Shell | `MarketingShell` |
|
|
459
|
-
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
|
|
460
|
-
| Sections | `ContentBlock`, `CTA`, `DocumentChassis`, `FAQ`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `Newsletter`, `ReportsList`, `StairSteps`, `Team` |
|
|
461
|
-
|
|
462
|
-
<!-- generated:end -->
|
|
463
|
-
|
|
464
|
-
## 8. Known gaps this manifest depends on
|
|
465
|
-
|
|
466
|
-
| Gap | Issue |
|
|
467
|
-
| ------------------------------------------------------------------- | ---------- |
|
|
468
|
-
| The deck's Nav wiring (`sticky` + `deckMorph` under `home: "deck"`) | #5697 |
|
|
469
|
-
| `/about` rename as one routes-map row | #5572 |
|
|
470
|
-
| The Pro demo host `minimalism-site.ailaunchkit.ai` — provisioning | #5589 body |
|