create-ailk 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -10
- package/component-catalog.json +798 -49
- package/component-catalog.md +9 -6
- package/dist/add-module.d.ts +20 -0
- package/dist/add-module.js +43 -7
- package/dist/add-route.d.ts +56 -0
- package/dist/add-route.js +286 -0
- package/dist/apply-design-md.d.ts +7 -0
- package/dist/apply-design-md.js +50 -0
- package/dist/apply-design.d.ts +64 -0
- package/dist/apply-design.js +273 -0
- package/dist/claude-md.d.ts +111 -0
- package/dist/claude-md.js +334 -0
- package/dist/cli.js +114 -28
- package/dist/derive-architecture.js +41 -36
- package/dist/design-compile.d.ts +71 -0
- package/dist/design-compile.js +98 -0
- package/dist/design-package.d.ts +83 -0
- package/dist/design-package.js +468 -0
- package/dist/design-presets.d.ts +86 -0
- package/dist/design-presets.js +642 -0
- package/dist/design-scaffold.d.ts +76 -0
- package/dist/design-scaffold.js +220 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +4 -1
- package/dist/legacy-nav-renderers.d.ts +45 -0
- package/dist/legacy-nav-renderers.js +545 -0
- package/dist/lib/auth-secret-file.d.ts +19 -0
- package/dist/lib/auth-secret-file.js +112 -0
- package/dist/lib/design-checks.d.ts +78 -0
- package/dist/lib/design-checks.js +174 -0
- package/dist/lib/extract-module-bundle.js +5 -1
- package/dist/lib/license-key-files.d.ts +9 -0
- package/dist/lib/license-key-files.js +2 -2
- package/dist/lib/module-license-gate.d.ts +89 -0
- package/dist/lib/module-license-gate.js +171 -12
- package/dist/lib/module-tier.d.ts +45 -16
- package/dist/lib/module-tier.js +76 -0
- package/dist/lib/pro-callout.js +10 -2
- package/dist/lib/render-verdict.d.ts +52 -0
- package/dist/lib/render-verdict.js +77 -0
- package/dist/lib/scaffold-render-sweep.d.ts +105 -0
- package/dist/lib/scaffold-render-sweep.js +236 -0
- package/dist/module-architecture.d.ts +19 -16
- package/dist/module-architecture.js +64 -21
- package/dist/parse-args.d.ts +88 -10
- package/dist/parse-args.js +272 -21
- package/dist/programmatic.d.ts +66 -12
- package/dist/programmatic.js +361 -34
- package/dist/site-chrome.d.ts +19 -9
- package/dist/site-chrome.js +23 -13
- package/dist/site-manifest.d.ts +25 -0
- package/dist/site-manifest.js +254 -0
- package/dist/site-roster.d.ts +41 -0
- package/dist/site-roster.js +149 -11
- package/dist/starter-grid.d.ts +232 -0
- package/dist/starter-grid.js +545 -0
- package/dist/surfaces.d.ts +41 -9
- package/dist/surfaces.js +268 -92
- package/dist/template-manifest.d.ts +65 -29
- package/dist/template-manifest.js +161 -382
- package/dist/template-names.d.ts +14 -12
- package/dist/template-names.js +13 -17
- package/package.json +5 -4
- package/site-templates/_base/content/en/Feature/feature-1.mdx +69 -0
- package/site-templates/_base/content/en/Feature/feature-2.mdx +69 -0
- package/site-templates/_base/content/en/Feature/feature-3.mdx +69 -0
- package/site-templates/_base/content/en/FeaturesList/features.mdx +91 -0
- package/site-templates/_base/content/en/GlossaryList/glossary.mdx +0 -1
- package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +0 -1
- package/site-templates/_base/content/en/PortfolioItem/sample-four.mdx +105 -0
- package/site-templates/_base/content/en/PortfolioItem/sample-one.mdx +34 -0
- package/site-templates/_base/content/en/PortfolioItem/sample-three.mdx +94 -0
- package/site-templates/_base/content/en/PortfolioItem/sample-two.mdx +45 -0
- package/site-templates/_base/content/en/PortfolioList/portfolio.mdx +169 -0
- package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +15 -0
- package/site-templates/_base/content/en/UseCase/persona-1.mdx +70 -0
- package/site-templates/_base/content/en/UseCase/persona-2.mdx +70 -0
- package/site-templates/_base/content/en/UseCase/persona-3.mdx +70 -0
- package/site-templates/{minimalism-site/TEMPLATE-MANIFEST.json → aliases/minimalism-site.TEMPLATE-MANIFEST.json} +72 -40
- package/site-templates/designs/minimalism/DESIGN.md +98 -6
- package/site-templates/designs/minimalism/sample/README.md +48 -0
- package/site-templates/designs/standard/DESIGN.md +103 -6
- package/site-templates/marketing-site/DESIGN.md +103 -6
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +144 -47
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +82 -41
- package/site-templates/marketing-site-free/DESIGN.md +103 -6
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +150 -48
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +114 -67
- package/site-templates/marketing-site-free/ailk-template.json +1 -1
- package/site-templates/marketing-site-free/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/marketing-site-free/content/en/Pricing/pricing.mdx +199 -0
- package/site-templates/saas-product/DESIGN.md +103 -6
- package/site-templates/saas-product/TEMPLATE-MANIFEST.md +9 -1
- package/site-templates/{simple-service → shapes/local-business-service}/TEMPLATE-MANIFEST.json +210 -81
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +356 -0
- package/site-templates/shapes/local-business-service/ailk-template.json +10 -0
- package/site-templates/{simple-service → shapes/local-business-service}/content/en/AboutPage/about.mdx +4 -4
- package/site-templates/shapes/local-business-service/content/en/HomePage/home.mdx +70 -0
- package/site-templates/shapes/local-business-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/shapes/local-business-service/content/en/PortfolioList/portfolio.mdx +171 -0
- package/site-templates/{minimalism-site → shapes/local-business-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +7 -8
- package/site-templates/shapes/local-business-service/content/en/Service/first-job.mdx +39 -0
- package/site-templates/shapes/local-business-service/content/en/Service/second-job.mdx +39 -0
- package/site-templates/shapes/local-business-service/content/en/Service/third-job.mdx +39 -0
- package/site-templates/shapes/local-business-service/content/en/ServicesList/services.mdx +61 -0
- package/site-templates/shapes/local-business-service/provenance.json +4 -0
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.json +471 -0
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +354 -0
- package/site-templates/shapes/organization-service/ailk-template.json +10 -0
- package/site-templates/shapes/organization-service/content/en/AboutPage/about.mdx +38 -0
- package/site-templates/shapes/organization-service/content/en/HomePage/home.mdx +85 -0
- package/site-templates/shapes/organization-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/shapes/organization-service/content/en/PortfolioList/portfolio.mdx +171 -0
- package/site-templates/shapes/organization-service/content/en/PurchasePolicyPage/purchase-policy.mdx +123 -0
- package/site-templates/{minimalism-site → shapes/organization-service}/content/en/ServicesList/services.mdx +3 -4
- package/site-templates/shapes/organization-service/provenance.json +4 -0
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.json +478 -0
- package/site-templates/shapes/person-service/TEMPLATE-MANIFEST.md +353 -0
- package/site-templates/shapes/person-service/ailk-template.json +10 -0
- package/site-templates/shapes/person-service/content/_site.mdx +85 -0
- package/site-templates/shapes/person-service/content/en/AboutPage/about.mdx +39 -0
- package/site-templates/shapes/person-service/content/en/HomePage/home.mdx +97 -0
- package/site-templates/shapes/person-service/content/en/NewsletterSignup/newsletter.mdx +59 -0
- package/site-templates/shapes/person-service/content/en/PortfolioList/portfolio.mdx +171 -0
- package/site-templates/{simple-service → shapes/person-service}/content/en/PurchasePolicyPage/purchase-policy.mdx +10 -11
- package/site-templates/shapes/person-service/content/en/Service/first-engagement.mdx +38 -0
- package/site-templates/shapes/person-service/content/en/Service/second-engagement.mdx +38 -0
- package/site-templates/shapes/person-service/content/en/Service/third-engagement.mdx +38 -0
- package/site-templates/{simple-service → shapes/person-service}/content/en/ServicesList/services.mdx +16 -16
- package/site-templates/shapes/person-service/provenance.json +4 -0
- package/templates/.claude/rules/architecture.md +7 -0
- package/templates/.claude/skills/README.md +5 -3
- package/templates/.claude/skills/add-auth/references/env-vars.md +22 -15
- package/templates/.claude/skills/add-auth/references/oauth-app-setup.md +3 -2
- package/templates/.claude/skills/add-page/SKILL.md +241 -238
- package/templates/.claude/skills/add-page/references/page-types.md +85 -72
- package/templates/.claude/skills/add-page/scripts/site-pages.mjs +87 -0
- package/templates/.claude/skills/add-page/templates/comparison-page.mdx.tmpl +99 -0
- package/templates/.claude/skills/add-page/templates/content.mdx.tmpl +8 -18
- package/templates/.claude/skills/add-page/templates/flow-landing-page.mdx.tmpl +43 -0
- package/templates/.claude/skills/add-page/templates/report-page.mdx.tmpl +52 -0
- package/templates/.claude/skills/add-page/templates/reports-list.mdx.tmpl +38 -0
- package/templates/.claude/skills/check-site/SKILL.md +23 -0
- package/templates/.claude/skills/fill-page/SKILL.md +26 -7
- package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +1 -1
- package/templates/.claude/skills/setup-database/SKILL.md +156 -0
- package/templates/.claude/skills/setup-database/scripts/verify-inbox.ts +154 -0
- package/templates/.claude/skills/setup-deploy/SKILL.md +64 -32
- package/templates/.claude/skills/setup-deploy/references/env-vars-template.md +44 -36
- package/templates/.claude/skills/setup-deploy/references/runbook-template.md +58 -102
- package/templates/.claude/skills/update-page/SKILL.md +117 -0
- package/templates/.claude/skills/update-page/scripts/update-page.ts +640 -0
- package/templates/.claude/skills/update-page/templates/redirects.mjs.tmpl +31 -0
- package/templates/.claude/skills/upgrade-plan/SKILL.md +12 -8
- package/templates/.github/workflows/ci.yml +4 -0
- package/templates/.prettierignore +1 -0
- package/templates/CLAUDE.md +146 -103
- package/templates/DESIGN.md +103 -6
- package/templates/README.md +63 -43
- package/templates/apps/api/.env.example +2 -1
- package/templates/apps/api/CLAUDE.md +3 -2
- package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +2 -0
- package/templates/apps/api/src/__tests__/server.test.ts +116 -0
- package/templates/apps/api/src/config/__tests__/index.test.ts +115 -14
- package/templates/apps/api/src/config/index.ts +35 -16
- package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +30 -0
- package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +96 -0
- package/templates/apps/api/src/lib/lead-capture-store.ts +12 -0
- package/templates/apps/api/src/lib/lead-delivery.ts +52 -0
- package/templates/apps/api/src/lib/stripe.ts +9 -0
- package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +140 -0
- package/templates/apps/api/src/middleware/auth.ts +54 -0
- package/templates/apps/api/src/openapi/spec.ts +63 -12
- package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +5 -2
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +628 -0
- package/templates/apps/api/src/routes/checkout/sessions.ts +222 -24
- package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +88 -0
- package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +100 -0
- package/templates/apps/api/src/routes/leads/index.ts +46 -1
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +1 -1
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +5 -1
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +521 -20
- package/templates/apps/api/src/routes/webhooks/stripe.ts +124 -32
- package/templates/apps/api/src/server.ts +35 -0
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +194 -0
- package/templates/apps/api/src/services/__tests__/leads-inbox.test.ts +124 -0
- package/templates/apps/api/src/services/__tests__/revalidation.test.ts +90 -15
- package/templates/apps/api/src/services/checkout-buyer.ts +72 -0
- package/templates/apps/api/src/services/lead-routing.ts +140 -30
- package/templates/apps/api/src/services/leads-inbox.ts +48 -11
- package/templates/apps/api/src/services/revalidation.ts +60 -15
- package/templates/apps/mcp/__tests__/parity.test.ts +5 -4
- package/templates/apps/mcp/__tests__/tools/create_project.test.ts +30 -24
- package/templates/apps/mcp/src/tools/create_project.ts +21 -6
- package/templates/apps/mcp/src/tools/purchase.ts +4 -2
- package/templates/apps/web/.env.example +13 -0
- package/templates/apps/web/CLAUDE.md +22 -28
- package/templates/apps/web/app/[locale]/(auth)/layout.tsx +1 -1
- package/templates/apps/web/app/[locale]/(authed)/leads/__tests__/page.test.tsx +24 -0
- package/templates/apps/web/app/[locale]/(authed)/leads/page.tsx +17 -6
- package/templates/apps/web/app/[locale]/[slug]/[detail]/__tests__/page.test.tsx +110 -0
- package/templates/apps/web/app/[locale]/[slug]/[detail]/page.tsx +60 -0
- package/templates/apps/web/app/[locale]/[slug]/page.tsx +1 -1
- package/templates/apps/web/app/[locale]/alternatives/__tests__/page.test.tsx +161 -0
- package/templates/apps/web/app/[locale]/alternatives/page.tsx +104 -0
- package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +14 -6
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +10 -9
- package/templates/apps/web/app/[locale]/contact/__tests__/contact-form-text.test.ts +32 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +129 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +227 -84
- package/templates/apps/web/app/[locale]/contact/contact-form-text.ts +50 -0
- package/templates/apps/web/app/[locale]/contact/contact.actions.ts +73 -20
- package/templates/apps/web/app/[locale]/contact/page.tsx +105 -15
- package/templates/apps/web/app/[locale]/contact/site-contact-email.ts +54 -0
- package/templates/apps/web/app/[locale]/features/[slug]/page.tsx +64 -0
- package/templates/apps/web/app/[locale]/features/page.tsx +52 -0
- package/templates/apps/web/app/[locale]/{use-cases → for}/[slug]/page.tsx +21 -5
- package/templates/apps/web/app/[locale]/for/__tests__/page-renderer-migration.test.tsx +73 -0
- package/templates/apps/web/app/[locale]/{use-cases → for}/page.tsx +8 -7
- package/templates/apps/web/app/[locale]/glossary/page.tsx +1 -1
- package/templates/apps/web/app/[locale]/layout.tsx +65 -17
- package/templates/apps/web/app/[locale]/newsletter/__tests__/newsletter.actions.test.ts +75 -0
- package/templates/apps/web/app/[locale]/newsletter/__tests__/page.test.tsx +163 -0
- package/templates/apps/web/app/[locale]/newsletter/newsletter.actions.ts +66 -0
- package/templates/apps/web/app/[locale]/newsletter/page.tsx +106 -14
- package/templates/apps/web/app/[locale]/portfolio/[slug]/page.tsx +59 -0
- package/templates/apps/web/app/[locale]/{book-a-call → portfolio}/page.tsx +12 -13
- package/templates/apps/web/app/[locale]/vs/[slug]/__tests__/page.test.tsx +112 -0
- package/templates/apps/web/app/[locale]/vs/[slug]/page.tsx +70 -0
- package/templates/apps/web/app/api/revalidate/__tests__/route.test.ts +236 -44
- package/templates/apps/web/app/api/revalidate/route.ts +78 -36
- package/templates/apps/web/lib/__tests__/site-brand.test.ts +79 -0
- package/templates/apps/web/lib/__tests__/site-theme.test.ts +104 -11
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +21 -4
- package/templates/apps/web/lib/locale-guard.ts +18 -0
- package/templates/apps/web/lib/meet-placeholder.ts +5 -0
- package/templates/apps/web/lib/nav-config.ts +50 -37
- package/templates/apps/web/lib/site-brand.tsx +13 -9
- package/templates/apps/web/lib/site-identity.ts +14 -0
- package/templates/apps/web/lib/site-logo.tsx +36 -0
- package/templates/apps/web/lib/site-theme.ts +46 -26
- package/templates/apps/web/messages/en.json +45 -5
- package/templates/apps/web/middleware.ts +28 -4
- package/templates/content/_site.mdx +4 -2
- package/templates/content/en/BlogList/blog.mdx +37 -16
- package/templates/content/en/BookCall/book-a-call.mdx +80 -0
- package/templates/content/en/BookCall/onsite-estimate.mdx +56 -0
- package/templates/content/en/BookCall/onsite-service.mdx +56 -0
- package/templates/content/en/BookCall/start-project.mdx +56 -0
- package/templates/content/en/ContactPage/contact.mdx +43 -34
- package/templates/content/en/HomePage/home.mdx +10 -22
- package/templates/content/en/LandingPage/meet.mdx +59 -0
- package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +0 -1
- package/templates/content/en/UseCasesList/{use-cases.mdx → for.mdx} +19 -18
- package/templates/database/CHANGELOG.md +14 -0
- package/templates/database/package.json +1 -1
- package/templates/package.json +2 -1
- package/templates/tools/check-claude-md.ts +128 -0
- package/versions.json +33 -33
- package/site-templates/_base/content/en/BookCall/book-call.mdx +0 -53
- package/site-templates/_base/content/en/UseCase/first-use-case.mdx +0 -23
- package/site-templates/_base/content/en/UseCase/second-use-case.mdx +0 -23
- package/site-templates/_base/content/en/UseCase/third-use-case.mdx +0 -23
- package/site-templates/minimalism-site/DESIGN.md +0 -162
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +0 -470
- package/site-templates/minimalism-site/ailk-template.json +0 -23
- package/site-templates/minimalism-site/content/en/AboutPage/about.mdx +0 -110
- package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +0 -53
- package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +0 -34
- package/site-templates/minimalism-site/content/en/FAQPage/faq.mdx +0 -57
- package/site-templates/minimalism-site/content/en/LandingPage/referral.mdx +0 -77
- package/site-templates/minimalism-site/content/en/LandingPage/reports.mdx +0 -73
- package/site-templates/minimalism-site/content/en/ReportPage/annual-letter-2024.mdx +0 -52
- package/site-templates/minimalism-site/content/en/ReportPage/field-notes-2023.mdx +0 -52
- package/site-templates/minimalism-site/content/en/ReportPage/platform-shift-2025.mdx +0 -52
- package/site-templates/minimalism-site/content/en/ReportPage/state-of-the-market-2026.mdx +0 -52
- package/site-templates/minimalism-site/flows/referral.flow.json +0 -71
- package/site-templates/minimalism-site/provenance.json +0 -4
- package/site-templates/simple-service/DESIGN.md +0 -162
- package/site-templates/simple-service/TEMPLATE-MANIFEST.md +0 -333
- package/site-templates/simple-service/ailk-template.json +0 -11
- package/site-templates/simple-service/content/en/BookCall/book-call.mdx +0 -53
- package/site-templates/simple-service/content/en/ContactPage/contact.mdx +0 -32
- package/site-templates/simple-service/content/en/FAQPage/faq.mdx +0 -56
- package/site-templates/simple-service/content/en/HomePage/home.mdx +0 -85
- package/site-templates/simple-service/content/en/Service/landscape-design.mdx +0 -40
- package/site-templates/simple-service/content/en/Service/lawn-maintenance.mdx +0 -40
- package/site-templates/simple-service/content/en/Service/seasonal-cleanup.mdx +0 -40
- package/site-templates/simple-service/provenance.json +0 -4
- package/templates/.claude/skills/add-page/templates/route.tsx.tmpl +0 -28
- package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +0 -211
- package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +0 -96
- package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +0 -72
- package/templates/content/en/SoftwareProduct/product.mdx +0 -175
- /package/site-templates/{minimalism-site → designs/minimalism/sample}/content/en/HomePage/home.mdx +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-1.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-2.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-3.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-4.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-5.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/avatar-placeholder-6.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/hero-backdrop.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-1.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-2.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/logo-placeholder-3.svg +0 -0
- /package/site-templates/{minimalism-site/assets → designs/minimalism/sample/public}/wordmark-placeholder.svg +0 -0
- /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/first-engagement.mdx +0 -0
- /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/second-engagement.mdx +0 -0
- /package/site-templates/{minimalism-site → shapes/organization-service}/content/en/Service/third-engagement.mdx +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "NewsletterSignup"
|
|
3
|
+
slug: "newsletter"
|
|
4
|
+
title: "{Start a free newsletter with Substack}"
|
|
5
|
+
description: "{Or upgrade to Pro to capture every subscriber and build your own marketing database.}"
|
|
6
|
+
schema:
|
|
7
|
+
mainEntity:
|
|
8
|
+
"@type": "Offer"
|
|
9
|
+
name: "{Your newsletter name}"
|
|
10
|
+
price: 0
|
|
11
|
+
priceCurrency: "USD"
|
|
12
|
+
sections:
|
|
13
|
+
[
|
|
14
|
+
{
|
|
15
|
+
"id": "hero",
|
|
16
|
+
"type": "hero",
|
|
17
|
+
"data":
|
|
18
|
+
{
|
|
19
|
+
"eyebrow": "Newsletter",
|
|
20
|
+
"headline": "{Start a free newsletter with Substack}",
|
|
21
|
+
"subheadline": "{Or upgrade to Pro to capture every subscriber and build your own marketing database.}",
|
|
22
|
+
"primaryCta":
|
|
23
|
+
{ "label": "{Connect Substack}", "href": "https://substack.com" },
|
|
24
|
+
"secondaryCta":
|
|
25
|
+
{
|
|
26
|
+
"label": "{Upgrade to Pro}",
|
|
27
|
+
"href": "https://ailaunchkit.ai/pricing",
|
|
28
|
+
"variant": "outline",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "faq",
|
|
34
|
+
"type": "faq",
|
|
35
|
+
"data":
|
|
36
|
+
{
|
|
37
|
+
"headline": "FAQs",
|
|
38
|
+
"presentation": "expanded",
|
|
39
|
+
"items":
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"question": "{How often will I hear from you?}",
|
|
43
|
+
"answer": "{Answer in one or two plain sentences}",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"question": "{What will I get?}",
|
|
47
|
+
"answer": "{Answer in one or two plain sentences}",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"question": "{Can I unsubscribe?}",
|
|
51
|
+
"answer": "{Answer in one or two plain sentences}",
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
]
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
{/* Rendered from frontmatter `sections[]` by the /newsletter route. The Free template has no signup form: the hero points the owner to Substack, or to Pro for subscriber capture. The `schema:` Offer is the page's JSON-LD main entity — a free subscription. Placeholder copy — replace every {brace} with your own words before you launch. */}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "Pricing"
|
|
3
|
+
slug: "pricing"
|
|
4
|
+
title: "{Upgrade to Pro with Commerce}"
|
|
5
|
+
description: "{Checkout isn't included on the Free template. Upgrade to Pro with Commerce and take payments on your site with Stripe.}"
|
|
6
|
+
sections:
|
|
7
|
+
[
|
|
8
|
+
{
|
|
9
|
+
"id": "hero",
|
|
10
|
+
"type": "hero",
|
|
11
|
+
"data":
|
|
12
|
+
{
|
|
13
|
+
"variant": "centered",
|
|
14
|
+
"gapBelow": "tight",
|
|
15
|
+
"eyebrow": "Pricing",
|
|
16
|
+
"headline": "{Upgrade to Pro with Commerce}",
|
|
17
|
+
"subheadline": "{Checkout isn't included on the Free template. Upgrade to Pro with Commerce and take payments on your site with Stripe.}",
|
|
18
|
+
"primaryCta":
|
|
19
|
+
{
|
|
20
|
+
"label": "{Add Commerce for SMB}",
|
|
21
|
+
"href": "https://ailaunchkit.ai/pricing",
|
|
22
|
+
},
|
|
23
|
+
"secondaryCta":
|
|
24
|
+
{
|
|
25
|
+
"label": "{Add Commerce for SaaS}",
|
|
26
|
+
"href": "https://ailaunchkit.ai/pricing",
|
|
27
|
+
"variant": "outline",
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"id": "plans",
|
|
33
|
+
"type": "pricing",
|
|
34
|
+
"data":
|
|
35
|
+
{
|
|
36
|
+
"variant": "three-tiers-with-toggle",
|
|
37
|
+
"billingToggle": true,
|
|
38
|
+
"toggleStyle": "switch",
|
|
39
|
+
"gapAbove": "tight",
|
|
40
|
+
"cardLayout": "centered",
|
|
41
|
+
"plans":
|
|
42
|
+
[
|
|
43
|
+
{
|
|
44
|
+
"name": "Basic plan",
|
|
45
|
+
"price": { "monthly": "{price}/mo", "annual": "{price}/yr" },
|
|
46
|
+
"features":
|
|
47
|
+
[
|
|
48
|
+
"{A feature this plan includes}",
|
|
49
|
+
"{A feature this plan includes}",
|
|
50
|
+
"{A feature this plan includes}",
|
|
51
|
+
],
|
|
52
|
+
"cta": { "label": "{Primary CTA}", "href": "/contact" },
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "Business plan",
|
|
56
|
+
"price": { "monthly": "{price}/mo", "annual": "{price}/yr" },
|
|
57
|
+
"features":
|
|
58
|
+
[
|
|
59
|
+
"{A feature this plan adds}",
|
|
60
|
+
"{A feature this plan includes}",
|
|
61
|
+
"{A feature this plan includes}",
|
|
62
|
+
"{A feature this plan includes}",
|
|
63
|
+
],
|
|
64
|
+
"cta": { "label": "{Primary CTA}", "href": "/contact" },
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"name": "Enterprise plan",
|
|
68
|
+
"price": { "monthly": "{price}/mo", "annual": "{price}/yr" },
|
|
69
|
+
"features":
|
|
70
|
+
[
|
|
71
|
+
"{A feature this plan adds}",
|
|
72
|
+
"{A feature this plan includes}",
|
|
73
|
+
"{A feature this plan includes}",
|
|
74
|
+
"{A feature this plan includes}",
|
|
75
|
+
"{A feature this plan includes}",
|
|
76
|
+
],
|
|
77
|
+
"cta": { "label": "{Primary CTA}", "href": "/contact" },
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"id": "logo-cloud",
|
|
84
|
+
"type": "logoCloud",
|
|
85
|
+
"data":
|
|
86
|
+
{
|
|
87
|
+
"headline": "{Don’t just take our word for it}",
|
|
88
|
+
"headlineStyle": "label",
|
|
89
|
+
"logos":
|
|
90
|
+
[
|
|
91
|
+
{
|
|
92
|
+
"name": "SalesSmyth",
|
|
93
|
+
"src": "/logos/salessmyth.svg",
|
|
94
|
+
"darkSrc": "/logos/salessmyth-light.svg",
|
|
95
|
+
"width": 1118,
|
|
96
|
+
"height": 147,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "AI Launch Kit",
|
|
100
|
+
"src": "/logos/ai-launch-kit.svg",
|
|
101
|
+
"darkSrc": "/logos/ai-launch-kit-light.svg",
|
|
102
|
+
"width": 1248,
|
|
103
|
+
"height": 144,
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "Atomic Agent",
|
|
107
|
+
"src": "/logos/atomic-agent.svg",
|
|
108
|
+
"darkSrc": "/logos/atomic-agent-light.svg",
|
|
109
|
+
"width": 1320,
|
|
110
|
+
"height": 148,
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
"layout": "inline",
|
|
114
|
+
"treatment": "monochrome",
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "testimonial",
|
|
119
|
+
"type": "testimonials",
|
|
120
|
+
"data":
|
|
121
|
+
{
|
|
122
|
+
"variant": "quote",
|
|
123
|
+
"items":
|
|
124
|
+
[
|
|
125
|
+
{
|
|
126
|
+
"quote": "{A customer quote, in their own words, about the result they got}",
|
|
127
|
+
"author": "{Customer name}",
|
|
128
|
+
"role": "{Their title, their company}",
|
|
129
|
+
},
|
|
130
|
+
],
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"id": "switch",
|
|
135
|
+
"type": "cta",
|
|
136
|
+
"data":
|
|
137
|
+
{
|
|
138
|
+
"variant": "box",
|
|
139
|
+
"headline": "{Switch to your product in time amount or less}",
|
|
140
|
+
"description": "{You shouldn't have to experience a painful problem. With your product, you can finally achieve a value outcome or get a big improvement.}",
|
|
141
|
+
"checklist":
|
|
142
|
+
["No credit card required", "Cancel any time", "Live chat support"],
|
|
143
|
+
"primaryCta": { "label": "{Primary CTA}", "href": "/contact" },
|
|
144
|
+
"secondaryCta":
|
|
145
|
+
{
|
|
146
|
+
"label": "{Secondary CTA}",
|
|
147
|
+
"href": "/pricing",
|
|
148
|
+
"variant": "outline",
|
|
149
|
+
},
|
|
150
|
+
"closingLine": "{Social Proof goes here}",
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "faq",
|
|
155
|
+
"type": "faq",
|
|
156
|
+
"data":
|
|
157
|
+
{
|
|
158
|
+
"headline": "{FAQs}",
|
|
159
|
+
"description": "{One sentence that invites visitors to ask what this list does not answer}",
|
|
160
|
+
"actions":
|
|
161
|
+
[
|
|
162
|
+
{
|
|
163
|
+
"kind": "button",
|
|
164
|
+
"label": "Contact",
|
|
165
|
+
"href": "/contact",
|
|
166
|
+
"variant": "outline",
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
"presentation": "accordion",
|
|
170
|
+
"initialOpen": "none",
|
|
171
|
+
"items":
|
|
172
|
+
[
|
|
173
|
+
{
|
|
174
|
+
"question": "{A question your customers actually ask}",
|
|
175
|
+
"answer": "{Answer the question in two or three plain sentences}",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"question": "{A question your customers actually ask}",
|
|
179
|
+
"answer": "{Answer the question in two or three plain sentences}",
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"question": "{A question your customers actually ask}",
|
|
183
|
+
"answer": "{Answer the question in two or three plain sentences}",
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"question": "{A question your customers actually ask}",
|
|
187
|
+
"answer": "{Answer the question in two or three plain sentences}",
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"question": "{A question your customers actually ask}",
|
|
191
|
+
"answer": "{Answer the question in two or three plain sentences}",
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
]
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
{/* Rendered from frontmatter `sections[]`. Seed content — replace the plan names, prices and features above with your own before you launch. */}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Standard
|
|
3
|
-
description: The standard design — the black-on-white foundation any shape wears by default: full navigation, a multi-column footer, the document-scroll home.
|
|
3
|
+
description: "The standard design — the black-on-white foundation any shape wears by default: full navigation, a multi-column footer, the document-scroll home."
|
|
4
4
|
colors:
|
|
5
5
|
bg: "#ffffff"
|
|
6
6
|
fg: "#000000"
|
|
@@ -15,6 +15,19 @@ colors:
|
|
|
15
15
|
fg-dark: "#ffffff"
|
|
16
16
|
border-dark: "#ffffff"
|
|
17
17
|
brand-dark: "#ffffff"
|
|
18
|
+
text-muted-dark: "#cccccc"
|
|
19
|
+
treatments:
|
|
20
|
+
corners: square
|
|
21
|
+
eyebrowCase: sentence
|
|
22
|
+
placeholders: fill
|
|
23
|
+
checkmarks: plain
|
|
24
|
+
layout:
|
|
25
|
+
nav: full
|
|
26
|
+
footer: columns
|
|
27
|
+
announcementBanner: false
|
|
28
|
+
home: default
|
|
29
|
+
copy:
|
|
30
|
+
density: standard
|
|
18
31
|
typography:
|
|
19
32
|
display:
|
|
20
33
|
fontFamily: "system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif"
|
|
@@ -69,9 +82,12 @@ spacing:
|
|
|
69
82
|
stays on-system.
|
|
70
83
|
Edit the canonical file, never a copy — a test holds every copy to it.
|
|
71
84
|
|
|
72
|
-
The tokens above describe what the site RENDERS today.
|
|
73
|
-
content/_site.mdx
|
|
74
|
-
|
|
85
|
+
The tokens above describe what the site RENDERS today. The design's own
|
|
86
|
+
colours and shape knobs live in content/_site.mdx `theme:`, which
|
|
87
|
+
`create-ailk apply-design` replaces wholesale; the owner's brand colours and
|
|
88
|
+
fonts live beside it in `brand.colors` and `brand.fonts`, which applying a
|
|
89
|
+
design never rewrites. Radius and spacing are platform defaults a site
|
|
90
|
+
cannot override yet — see "Where this is heading" below.
|
|
75
91
|
-->
|
|
76
92
|
|
|
77
93
|
# Standard
|
|
@@ -84,6 +100,27 @@ Every page is composed from the AI Launch Kit component library (`@working-theor
|
|
|
84
100
|
|
|
85
101
|
## Colors
|
|
86
102
|
|
|
103
|
+
<!-- generated:begin colors -->
|
|
104
|
+
|
|
105
|
+
| Key | Value | Compiles to |
|
|
106
|
+
| ------------------- | --------- | -------------------------------------------------------------------------------------------------------------- |
|
|
107
|
+
| `bg` | `#ffffff` | `light.bg` |
|
|
108
|
+
| `fg` | `#000000` | `light.text` |
|
|
109
|
+
| `surface` | `#ffffff` | `light.surface` |
|
|
110
|
+
| `surface-secondary` | `#ffffff` | `light.bgMuted` |
|
|
111
|
+
| `border` | `#000000` | `light.border` |
|
|
112
|
+
| `text-muted` | `#333333` | `light.textMuted` |
|
|
113
|
+
| `brand` | `#000000` | `light.primary` |
|
|
114
|
+
| `fg-on-brand` | `#ffffff` | `light.primaryFg` |
|
|
115
|
+
| `accent` | `#000000` | `light.accent` |
|
|
116
|
+
| `bg-dark` | `#000000` | `dark.bg`, `dark.bgMuted` (fallback of L1), `dark.surface` (fallback of L2), `dark.primaryFg` (fallback of L4) |
|
|
117
|
+
| `fg-dark` | `#ffffff` | `dark.text` |
|
|
118
|
+
| `border-dark` | `#ffffff` | `dark.border` |
|
|
119
|
+
| `brand-dark` | `#ffffff` | `dark.primary`, `dark.accent` (fallback of L5) |
|
|
120
|
+
| `text-muted-dark` | `#cccccc` | `dark.textMuted` |
|
|
121
|
+
|
|
122
|
+
<!-- generated:end -->
|
|
123
|
+
|
|
87
124
|
### Primary
|
|
88
125
|
|
|
89
126
|
**Black** (`brand` `#000000`) fills the primary button; its label is white. The secondary button is white with a black hairline and black label.
|
|
@@ -100,6 +137,18 @@ Dark mode inverts: black ground, white ink, white rules, white primary button wi
|
|
|
100
137
|
|
|
101
138
|
## Typography
|
|
102
139
|
|
|
140
|
+
<!-- generated:begin typography -->
|
|
141
|
+
|
|
142
|
+
| Role | Family | Size | Weight | Line height | Tracking |
|
|
143
|
+
| ----------------- | ------------------------------------------------------------------------ | ---------- | ------ | ----------- | -------- |
|
|
144
|
+
| `display` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3.5rem` | 700 | 1.1 | `normal` |
|
|
145
|
+
| `heading-section` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `3rem` | 700 | 1.1 | `normal` |
|
|
146
|
+
| `heading-item` | — | `2rem` | 700 | 1.375 | `normal` |
|
|
147
|
+
| `body` | `system-ui, -apple-system, Segoe UI, Roboto, Helvetica Neue, sans-serif` | `1.125rem` | 400 | 1.5 | — |
|
|
148
|
+
| `eyebrow` | — | `0.875rem` | 600 | 1.4 | `0.05em` |
|
|
149
|
+
|
|
150
|
+
<!-- generated:end -->
|
|
151
|
+
|
|
103
152
|
System sans throughout; no web font.
|
|
104
153
|
|
|
105
154
|
### Hierarchy
|
|
@@ -118,10 +167,53 @@ The small label above a section heading is **kept** as part of this foundation's
|
|
|
118
167
|
|
|
119
168
|
## Layout
|
|
120
169
|
|
|
170
|
+
<!-- generated:begin layout -->
|
|
171
|
+
|
|
172
|
+
| Knob | Value |
|
|
173
|
+
| -------------------- | --------- |
|
|
174
|
+
| `nav` | `full` |
|
|
175
|
+
| `footer` | `columns` |
|
|
176
|
+
| `announcementBanner` | `false` |
|
|
177
|
+
| `home` | `default` |
|
|
178
|
+
|
|
179
|
+
| Spacing | Value |
|
|
180
|
+
| ---------------- | -------- |
|
|
181
|
+
| `section` | `7rem` |
|
|
182
|
+
| `section-mobile` | `4rem` |
|
|
183
|
+
| `card` | `1.5rem` |
|
|
184
|
+
| `grid` | `1.5rem` |
|
|
185
|
+
| `container` | `1280px` |
|
|
186
|
+
| `measure` | `36rem` |
|
|
187
|
+
|
|
188
|
+
<!-- generated:end -->
|
|
189
|
+
|
|
121
190
|
Full navigation; a multi-column footer; the default home. The home-only announcement banner is off by default (`layout.announcementBanner`). 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
191
|
|
|
192
|
+
## Copy
|
|
193
|
+
|
|
194
|
+
<!-- generated:begin copy -->
|
|
195
|
+
|
|
196
|
+
Copy density: standard — pages carry the ordinary amount of body copy for their section.
|
|
197
|
+
<!-- generated:end -->
|
|
198
|
+
|
|
123
199
|
## Shapes
|
|
124
200
|
|
|
201
|
+
<!-- generated:begin shapes -->
|
|
202
|
+
|
|
203
|
+
| Rounded | Value |
|
|
204
|
+
| -------- | --------- |
|
|
205
|
+
| `button` | `0.5rem` |
|
|
206
|
+
| `card` | `0.75rem` |
|
|
207
|
+
|
|
208
|
+
| Treatment | Value |
|
|
209
|
+
| ------------------------- | ---------- |
|
|
210
|
+
| `treatments.corners` | `square` |
|
|
211
|
+
| `treatments.eyebrowCase` | `sentence` |
|
|
212
|
+
| `treatments.placeholders` | `fill` |
|
|
213
|
+
| `treatments.checkmarks` | `plain` |
|
|
214
|
+
|
|
215
|
+
<!-- generated:end -->
|
|
216
|
+
|
|
125
217
|
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
218
|
|
|
127
219
|
## Components
|
|
@@ -156,7 +248,12 @@ The foundation's pinned direction is the pacing of a classic wireframe marketing
|
|
|
156
248
|
## Do's and Don'ts
|
|
157
249
|
|
|
158
250
|
- **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**
|
|
160
|
-
- **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through
|
|
251
|
+
- **Do** set your brand colours (`primary`, `primaryFg`, `accent`, per mode) in `content/_site.mdx` `brand.colors` and your fonts (`display`, `body`) in `brand.fonts`; they reach every section and survive applying another design, which replaces `theme:`.
|
|
252
|
+
- **Don't** add a colour accent. The foundation's one idea is black on white; a brand pass adds colour deliberately, through `brand.colors`.
|
|
161
253
|
- **Don't** replace a black rule with a shadow or a grey fill.
|
|
162
254
|
- **Don't** hard-code the "heading toward" values above into a page. They arrive through the platform, or not at all.
|
|
255
|
+
|
|
256
|
+
## Revisions
|
|
257
|
+
|
|
258
|
+
- **2026-09-24 — tile hover is outline-only (operator ruling, /build-starter live pass, #6687).** A comparison tile (`items` in `variant: tile`) hovers by shifting its border to the accent only — no lift, no glow — matching the Positionary `/alternatives` ruling of 2026-08-29. Expressed as the bounded `tileHover: "outline"` option (Card `wash-outline`); the library default `lift` is unchanged for every other site.
|
|
259
|
+
- **2026-09-25 — the before-after section's rulings (operator, /build-starter live pass, #6687).** One layout, not two variants: a panel body is an image or rows of content under the same label bar. The label bar is the tone's fill (brand → black bar, white text) at the heading-4 role; a `neutral` panel keeps a white bar. The view selector is underline tabs with the underline under the current tab only (no full-width baseline), active black, inactive muted, black on hover. The pager is a ghost "‹ Previous" at the left edge and "Next ›" at the right edge. The catalyst column carries no icon tile — it starts at the arrow, or at an image when one is set. No back-to-all link and no tag chips on the seed pages.
|
|
@@ -22,13 +22,21 @@
|
|
|
22
22
|
|
|
23
23
|
## 2. Roster — the base rows, as the registry declares them
|
|
24
24
|
|
|
25
|
-
`saas-product` reuses `TEMPLATE_BASE_ROSTER` (`template-manifest.ts`)
|
|
25
|
+
`saas-product` reuses `TEMPLATE_BASE_ROSTER` (`template-manifest.ts`) plus the two portfolio rows every paid roster appends (`PORTFOLIO_ROWS`, #6687 — operator disposition 2026-09-24, Pro and up). The ten base routes:
|
|
26
26
|
|
|
27
27
|
```
|
|
28
28
|
/ · /how-it-works · /features · /pricing · /about
|
|
29
29
|
/faq · /contact · /sign-in · /privacy · /terms
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
The portfolio rows — before/after project comparisons; the detail row's `contentDir` installs the seeds (#6646 D1):
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
/portfolio PortfolioList · schema CollectionPage — the hub on the /alternatives stack
|
|
36
|
+
/portfolio/<slug> PortfolioItem · schema WebPage + CreativeWork — one `before-after` section per comparison
|
|
37
|
+
(seed pages sample-one · sample-two · sample-three · sample-four, `_base` layer)
|
|
38
|
+
```
|
|
39
|
+
|
|
32
40
|
Module-contributed rows arrive from `MODULE_SLICES[*].pageContributions` and are listed here so the page set reads as one:
|
|
33
41
|
|
|
34
42
|
```
|