create-ailk 0.6.1 → 0.7.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 +43 -4
- package/component-catalog.json +146 -21
- package/component-catalog.md +9 -6
- package/dist/add-module-core.d.ts +22 -0
- package/dist/add-module-core.js +50 -0
- package/dist/add-module.d.ts +89 -0
- package/dist/add-module.js +334 -0
- package/dist/category-profile.d.ts +126 -0
- package/dist/category-profile.js +262 -0
- package/dist/cli.js +73 -11
- package/dist/index.d.ts +4 -2
- package/dist/index.js +6 -1
- package/dist/lib/extract-module-bundle.d.ts +56 -1
- package/dist/lib/extract-module-bundle.js +165 -13
- package/dist/lib/license-key-files.d.ts +15 -0
- package/dist/lib/license-key-files.js +102 -0
- package/dist/lib/pro-callout.d.ts +16 -10
- package/dist/lib/pro-callout.js +26 -3
- package/dist/license-set.d.ts +34 -0
- package/dist/license-set.js +194 -0
- package/dist/module-architecture.d.ts +20 -0
- package/dist/module-architecture.js +77 -19
- package/dist/modules/commerce/0.6.1.tar.gz +0 -0
- package/dist/modules/docs-blog/0.6.1.tar.gz +0 -0
- package/dist/modules/marketing-site/0.6.1.tar.gz +0 -0
- package/dist/modules/minimalism-site/0.6.1.tar.gz +0 -0
- package/dist/modules/multi-tenant/0.6.1.tar.gz +0 -0
- package/dist/modules/saas-product/0.6.1.tar.gz +0 -0
- package/dist/modules/scheduling/0.6.1.tar.gz +0 -0
- package/dist/modules/signal-collectors/0.6.1.tar.gz +0 -0
- package/dist/modules/simple-service/0.6.1.tar.gz +0 -0
- package/dist/modules/workspace/0.6.1.tar.gz +0 -0
- package/dist/parse-args.d.ts +7 -0
- package/dist/parse-args.js +23 -1
- package/dist/programmatic.d.ts +46 -0
- package/dist/programmatic.js +130 -9
- package/dist/site-chrome.d.ts +18 -7
- package/dist/site-chrome.js +32 -14
- package/dist/site-roster.d.ts +127 -0
- package/dist/site-roster.js +494 -0
- package/dist/surfaces.d.ts +20 -7
- package/dist/surfaces.js +149 -28
- package/dist/sync-routes.d.ts +9 -0
- package/dist/sync-routes.js +2 -2
- package/dist/template-manifest.d.ts +58 -2
- package/dist/template-manifest.js +196 -69
- package/package.json +6 -4
- package/site-templates/_base/content/en/BookCall/book-call.mdx +53 -0
- package/site-templates/_base/content/en/GlossaryList/glossary.mdx +66 -0
- package/site-templates/_base/content/en/NewsletterSignup/newsletter.mdx +68 -0
- package/site-templates/_base/content/en/Pricing/pricing.mdx +71 -62
- package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +2 -3
- package/site-templates/_base/content/en/TermsPage/terms.mdx +2 -3
- package/site-templates/_base/content/en/UseCase/first-use-case.mdx +23 -0
- package/site-templates/_base/content/en/UseCase/second-use-case.mdx +23 -0
- package/site-templates/_base/content/en/UseCase/third-use-case.mdx +23 -0
- package/site-templates/designs/minimalism/DESIGN.md +162 -0
- package/site-templates/designs/standard/DESIGN.md +162 -0
- package/site-templates/marketing-site/DESIGN.md +55 -41
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +312 -57
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +209 -90
- package/site-templates/marketing-site/ailk-template.json +1 -0
- package/site-templates/marketing-site-free/DESIGN.md +55 -41
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +260 -66
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +294 -114
- package/site-templates/marketing-site-free/ailk-template.json +3 -2
- package/site-templates/minimalism-site/DESIGN.md +54 -40
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +246 -19
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +185 -51
- package/site-templates/minimalism-site/ailk-template.json +3 -2
- package/site-templates/minimalism-site/content/en/BookCall/book-call.mdx +53 -0
- package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +3 -37
- package/site-templates/minimalism-site/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
- package/site-templates/saas-product/DESIGN.md +55 -41
- package/site-templates/simple-service/DESIGN.md +55 -41
- package/site-templates/simple-service/TEMPLATE-MANIFEST.json +135 -26
- package/site-templates/simple-service/TEMPLATE-MANIFEST.md +114 -59
- package/site-templates/simple-service/ailk-template.json +4 -3
- package/site-templates/simple-service/content/en/BookCall/book-call.mdx +53 -0
- package/site-templates/simple-service/content/en/ContactPage/contact.mdx +1 -36
- package/site-templates/simple-service/content/en/PurchasePolicyPage/purchase-policy.mdx +124 -0
- package/templates/.claude/settings.json +15 -0
- package/templates/.claude/skills/README.md +8 -8
- package/templates/.claude/skills/{scaffold-auth → add-auth}/SKILL.md +7 -7
- package/templates/.claude/skills/{scaffold-auth → add-auth}/references/env-vars.md +2 -2
- package/templates/.claude/skills/{scaffold-auth → add-auth}/references/oauth-app-setup.md +3 -3
- package/templates/.claude/skills/{scaffold-page → add-page}/SKILL.md +76 -62
- package/templates/.claude/skills/add-page/references/page-types.md +111 -0
- package/templates/.claude/skills/{scaffold-page → add-page}/templates/content.mdx.tmpl +4 -4
- package/templates/.claude/skills/{scaffold-page → add-page}/templates/route.tsx.tmpl +1 -1
- package/templates/.claude/skills/{audit-site → check-site}/SKILL.md +16 -17
- package/templates/.claude/skills/{audit-site → check-site}/references/common-errors.md +3 -3
- package/templates/.claude/skills/{audit-site → check-site}/references/findings-glossary.md +16 -14
- package/templates/.claude/skills/{audit-site → check-site}/references/severity-levels.md +1 -1
- package/templates/.claude/skills/fill-page/SKILL.md +180 -0
- package/templates/.claude/skills/fill-page/profiles/plumbing.yaml +80 -0
- package/templates/.claude/skills/fill-page/references/section-sources.md +41 -0
- package/templates/.claude/skills/{provision-config → setup-deploy}/SKILL.md +8 -8
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/env-vars-template.md +2 -2
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/runbook-template.md +8 -8
- package/templates/.claude/skills/{provision-config → setup-deploy}/references/vercel-json-template.md +1 -1
- package/templates/.claude/skills/upgrade-plan/SKILL.md +117 -0
- package/templates/.claude/skills/upgrade-plan/references/options.md +24 -0
- package/templates/.claude/skills/upgrade-plan/scripts/upgrade-plan.ts +527 -0
- package/templates/.github/workflows/ci.yml +5 -0
- package/templates/CLAUDE.md +8 -2
- package/templates/DESIGN.md +52 -45
- package/templates/README.md +108 -46
- package/templates/apps/api/.env.example +2 -1
- package/templates/apps/api/package.json +1 -1
- package/templates/apps/api/src/config/__tests__/index.test.ts +37 -2
- package/templates/apps/api/src/config/index.ts +19 -6
- package/templates/apps/api/src/lib/license-key-store.ts +45 -0
- package/templates/apps/api/src/lib/site.ts +5 -3
- package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +97 -0
- package/templates/apps/api/src/middleware/auth.ts +9 -0
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +127 -5
- package/templates/apps/api/src/routes/content/get-page.ts +86 -2
- package/templates/apps/api/src/server.ts +6 -0
- package/templates/apps/mcp/__tests__/audit-single-page.test.ts +75 -1
- package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +57 -9
- package/templates/apps/mcp/package.json +2 -1
- package/templates/apps/mcp/src/index.ts +7 -0
- package/templates/apps/mcp/src/lib/audit-single-page.ts +36 -10
- package/templates/apps/mcp/src/lib/license-key-store.ts +45 -0
- package/templates/apps/web/__tests__/setup.ts +18 -0
- package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +10 -2
- package/templates/apps/web/app/[locale]/(auth)/layout.tsx +2 -2
- package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +10 -4
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +22 -14
- package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +26 -18
- package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +12 -4
- package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +35 -4
- package/templates/apps/web/app/[locale]/[slug]/page.tsx +49 -9
- package/templates/apps/web/app/[locale]/book-a-call/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +94 -33
- package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +53 -23
- package/templates/apps/web/app/[locale]/contact/__tests__/ContactForm.test.tsx +96 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +84 -2
- package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +5 -6
- package/templates/apps/web/app/[locale]/contact/page.tsx +25 -7
- package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/glossary/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/how-to/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/layout.tsx +113 -51
- package/templates/apps/web/app/[locale]/newsletter/page.tsx +50 -0
- package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/{shipping → purchase-policy}/page.tsx +15 -10
- package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +4 -5
- package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +14 -1
- package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/software/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/tech-articles/page.tsx +25 -15
- package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/use-cases/[slug]/page.tsx +48 -0
- package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +3 -4
- package/templates/apps/web/app/[locale]/use-cases/page.tsx +15 -2
- package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/whitepapers/page.tsx +25 -15
- package/templates/apps/web/app/error-fallback.tsx +17 -45
- package/templates/apps/web/app/not-found.tsx +14 -38
- package/templates/apps/web/app/og/route.tsx +6 -0
- package/templates/apps/web/eslint.config.mjs +3 -0
- package/templates/apps/web/instrumentation.ts +14 -0
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +38 -0
- package/templates/apps/web/lib/license-key-store.ts +52 -0
- package/templates/apps/web/lib/nav-config.ts +64 -12
- package/templates/apps/web/lib/prisma-for-auth.ts +9 -6
- package/templates/apps/web/lib/site-brand.tsx +1 -1
- package/templates/apps/web/lib/site-chrome.ts +3 -3
- package/templates/apps/web/lib/site-identity.ts +134 -0
- package/templates/apps/web/lib/site-theme.ts +11 -0
- package/templates/apps/web/messages/en.json +52 -37
- package/templates/apps/web/public/android-chrome-192x192.png +0 -0
- package/templates/apps/web/public/android-chrome-512x512.png +0 -0
- package/templates/apps/web/public/apple-touch-icon.png +0 -0
- package/templates/apps/web/public/favicon-16x16.png +0 -0
- package/templates/apps/web/public/favicon-32x32.png +0 -0
- package/templates/apps/web/public/favicon.ico +0 -0
- package/templates/apps/web/public/favicon.svg +3 -3
- package/templates/apps/web/public/logomark.svg +6 -3
- package/templates/apps/web/public/logos/ai-launch-kit-light.svg +4 -0
- package/templates/apps/web/public/logos/ai-launch-kit.svg +4 -0
- package/templates/apps/web/public/logos/atomic-agent-light.svg +4 -0
- package/templates/apps/web/public/logos/atomic-agent.svg +4 -0
- package/templates/apps/web/public/logos/salessmyth-light.svg +4 -0
- package/templates/apps/web/public/logos/salessmyth.svg +4 -0
- package/templates/apps/web/public/site.webmanifest +4 -4
- package/templates/apps/web/public/wordmark-light.svg +4 -0
- package/templates/apps/web/public/wordmark.svg +3 -3
- package/templates/apps/web/security-headers.config.ts +5 -1
- package/templates/content/_site.mdx +23 -0
- package/templates/content/en/AboutPage/about.mdx +150 -144
- package/templates/content/en/BlogList/blog.mdx +105 -0
- package/templates/content/en/ContactPage/contact.mdx +44 -85
- package/templates/content/en/FAQPage/faq.mdx +86 -57
- package/templates/content/en/HomePage/home.mdx +276 -217
- package/templates/content/en/PurchasePolicyPage/purchase-policy.mdx +182 -0
- package/templates/content/en/SoftwareProduct/product.mdx +175 -0
- package/templates/content/en/UseCasesList/use-cases.mdx +170 -0
- package/templates/database/CHANGELOG.md +7 -0
- package/templates/database/package.json +1 -1
- package/templates/package.json +3 -1
- package/templates/tools/lint-architecture.ts +315 -0
- package/templates/tools/tsconfig.json +14 -0
- package/versions.json +33 -33
- package/templates/.claude/skills/add-schema/SKILL.md +0 -277
- package/templates/.claude/skills/add-schema/references/conflict-handling.md +0 -200
- package/templates/.claude/skills/add-schema/references/file-finding.md +0 -123
- package/templates/.claude/skills/add-schema/references/schema-types.md +0 -234
- package/templates/.claude/skills/scaffold-page/references/page-types.md +0 -169
- package/templates/.claude/skills/suggest-site-pages/SKILL.md +0 -242
- package/templates/.claude/skills/suggest-site-pages/references/categories.md +0 -287
- package/templates/apps/web/app/[locale]/cancellation/page.tsx +0 -44
- package/templates/apps/web/app/[locale]/returns/page.tsx +0 -44
- package/templates/content/en/CancellationPolicyPage/cancellation.mdx +0 -108
- package/templates/content/en/LandingPage/blog.mdx +0 -83
- package/templates/content/en/LandingPage/features.mdx +0 -103
- package/templates/content/en/LandingPage/how-it-works.mdx +0 -143
- package/templates/content/en/ReturnsPolicyPage/returns.mdx +0 -108
- package/templates/content/en/ShippingPolicyPage/shipping.mdx +0 -108
|
@@ -29,74 +29,116 @@ The template's `layout` block — resolved with `resolveSiteChrome`, defaults fi
|
|
|
29
29
|
| -------------------- | --------- |
|
|
30
30
|
| `nav` | `full` |
|
|
31
31
|
| `footer` | `columns` |
|
|
32
|
-
| `announcementBanner` | `
|
|
32
|
+
| `announcementBanner` | `false` |
|
|
33
33
|
| `home` | `default` |
|
|
34
34
|
|
|
35
35
|
<!-- generated:end -->
|
|
36
36
|
|
|
37
|
+
### Theme (locked)
|
|
38
|
+
|
|
39
|
+
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).
|
|
40
|
+
|
|
41
|
+
<!-- generated:begin theme -->
|
|
42
|
+
|
|
43
|
+
| Setting | Value |
|
|
44
|
+
| ------------------------ | ---------- |
|
|
45
|
+
| `corners` | `square` |
|
|
46
|
+
| `eyebrowCase` | `sentence` |
|
|
47
|
+
| `placeholders` | `fill` |
|
|
48
|
+
| `checkmarks` | `plain` |
|
|
49
|
+
| `colors.light.bg` | `#ffffff` |
|
|
50
|
+
| `colors.light.bgMuted` | `#ffffff` |
|
|
51
|
+
| `colors.light.surface` | `#ffffff` |
|
|
52
|
+
| `colors.light.border` | `#000000` |
|
|
53
|
+
| `colors.light.text` | `#000000` |
|
|
54
|
+
| `colors.light.textMuted` | `#333333` |
|
|
55
|
+
| `colors.light.primary` | `#000000` |
|
|
56
|
+
| `colors.light.primaryFg` | `#ffffff` |
|
|
57
|
+
| `colors.light.accent` | `#000000` |
|
|
58
|
+
| `colors.dark.bg` | `#000000` |
|
|
59
|
+
| `colors.dark.bgMuted` | `#000000` |
|
|
60
|
+
| `colors.dark.surface` | `#000000` |
|
|
61
|
+
| `colors.dark.border` | `#ffffff` |
|
|
62
|
+
| `colors.dark.text` | `#ffffff` |
|
|
63
|
+
| `colors.dark.textMuted` | `#cccccc` |
|
|
64
|
+
| `colors.dark.primary` | `#ffffff` |
|
|
65
|
+
| `colors.dark.primaryFg` | `#000000` |
|
|
66
|
+
| `colors.dark.accent` | `#ffffff` |
|
|
67
|
+
|
|
68
|
+
<!-- generated:end -->
|
|
69
|
+
|
|
37
70
|
## 2. Pages — delta over Free
|
|
38
71
|
|
|
39
72
|
The base rows come first, exactly as the base layer and the always-copied overlay deliver them (#5618 D1/D7); the module rows follow. Each `page=<route>` region is generated from the seed file the composed layer stack lands for that route — the template's own tree, then its required modules' content, then `_base`, then the overlay.
|
|
40
73
|
|
|
41
|
-
### Base rows — from `_base` and the overlay (the Free
|
|
74
|
+
### Base rows — from `_base` and the overlay (the Free roster minus the teaser)
|
|
42
75
|
|
|
43
76
|
`/`:
|
|
44
77
|
|
|
45
78
|
<!-- generated:begin page=/ -->
|
|
46
79
|
|
|
47
|
-
| # | Section
|
|
48
|
-
| --- |
|
|
49
|
-
| 1 | `hero` (
|
|
50
|
-
| 2 | `logoCloud` (logos ×
|
|
51
|
-
| 3 | `decision-split` (panels ×2)
|
|
52
|
-
| 4 | `feature` (eyebrow "Core Features" · features ×5 · 2 CTAs)
|
|
53
|
-
| 5 | `cta` (2 CTAs)
|
|
54
|
-
| 6 | `
|
|
55
|
-
| 7 | `
|
|
56
|
-
| 8 | `
|
|
57
|
-
| 9 | `
|
|
80
|
+
| # | Section | Component | Copy (first line) |
|
|
81
|
+
| --- | ---------------------------------------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------- |
|
|
82
|
+
| 1 | `hero` (illustration · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `Hero` | {How to get outcome without problem} |
|
|
83
|
+
| 2 | `logoCloud` (layout=inline · logos ×3) | `LogoCloud` | Don’t just take our word for it |
|
|
84
|
+
| 3 | `decision-split` (imagerySlot=true · eyebrow "Comparison" · panels ×2) | `DecisionSplit` | {There's a better way to fix problem / get result} |
|
|
85
|
+
| 4 | `feature` (itemStyle=plain · actionsPosition=below · eyebrow "Core Features" · features ×5 · 2 CTAs) | `Feature` | {Everything you need to achieve a desired outcome} |
|
|
86
|
+
| 5 | `cta` (minimal · eyebrow "Integrations" · 2 CTAs) | `CTA` | Direct integrations with your favorite tools |
|
|
87
|
+
| 6 | `media-band` (imagerySlot=true) | `MediaBand` | |
|
|
88
|
+
| 7 | `feature` (itemStyle=plain · actionsPosition=below · imagerySlot=true · eyebrow "How It Works" · features ×3 · 2 CTAs) | `Feature` | {Get set up in number easy steps} |
|
|
89
|
+
| 8 | `cta` (box · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
90
|
+
| 9 | `content-block` (media-right · imagerySlot=true · eyebrow "Manifesto" · 2 CTAs) | `ContentBlock` | {We want you to ability they couldn't do before} |
|
|
91
|
+
| 10 | `content-block` (eyebrow "{Your Product} Demo" · 2 CTAs) | `ContentBlock` | {See your product in action} |
|
|
58
92
|
|
|
59
93
|
<!-- generated:end -->
|
|
60
94
|
|
|
61
|
-
`/
|
|
95
|
+
`/use-cases` (a UseCasesList page composing sections — operator ruling 2026-09-23; a list of the three use cases since #6658 D4):
|
|
62
96
|
|
|
63
|
-
<!-- generated:begin page=/
|
|
97
|
+
<!-- generated:begin page=/use-cases -->
|
|
64
98
|
|
|
65
|
-
| # | Section
|
|
66
|
-
| --- |
|
|
67
|
-
| 1 | `hero` (eyebrow "
|
|
68
|
-
| 2 | `
|
|
69
|
-
| 3 | `logoCloud` (logos ×6)
|
|
70
|
-
| 4 | `testimonials` (
|
|
71
|
-
| 5 | `cta` (box ·
|
|
72
|
-
| 6 | `faq` (accordion · items ×5 ·
|
|
99
|
+
| # | Section | Component | Copy (first line) |
|
|
100
|
+
| --- | -------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
|
|
101
|
+
| 1 | `hero` (eyebrow "Use cases" · 2 CTAs) | `Hero` | {Use cases: who your product is for} |
|
|
102
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | {The jobs customers hire your product to do} |
|
|
103
|
+
| 3 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
104
|
+
| 4 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
105
|
+
| 5 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
106
|
+
| 6 | `faq` (accordion · items ×5 · 1 CTA · initialOpen first) | `FAQ` | FAQs |
|
|
73
107
|
|
|
74
108
|
<!-- generated:end -->
|
|
75
109
|
|
|
76
|
-
`/
|
|
110
|
+
`/use-cases/[slug]` (#6658 D4):
|
|
111
|
+
|
|
112
|
+
<!-- generated:begin page=/use-cases/[slug] -->
|
|
113
|
+
|
|
114
|
+
_Detail route over `content/en/UseCase/` — 3 seed pages: `first-use-case.mdx`, `second-use-case.mdx`, `third-use-case.mdx`._
|
|
115
|
+
<!-- generated:end -->
|
|
116
|
+
|
|
117
|
+
`/software` (code route — the product listing, core since #6658):
|
|
118
|
+
|
|
119
|
+
<!-- generated:begin page=/software -->
|
|
120
|
+
|
|
121
|
+
_Code route — no content, no sections._
|
|
122
|
+
<!-- generated:end -->
|
|
77
123
|
|
|
78
|
-
|
|
124
|
+
`/software/[slug]` (the product's own page, `/software/product` — #6658 D3):
|
|
79
125
|
|
|
80
|
-
|
|
81
|
-
| --- | ------------------------------------------------- | --------- | ------------------------------------------------- |
|
|
82
|
-
| 1 | `feature` (eyebrow "Core Features" · features ×5) | `Feature` | Medium length section heading goes here |
|
|
83
|
-
| 2 | `cta` (2 CTAs) | `CTA` | Direct integrations with your favorite tools |
|
|
84
|
-
| 3 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
|
|
126
|
+
<!-- generated:begin page=/software/[slug] -->
|
|
85
127
|
|
|
128
|
+
_Detail route over `content/en/SoftwareProduct/` — 1 seed page: `product.mdx`._
|
|
86
129
|
<!-- generated:end -->
|
|
87
130
|
|
|
88
131
|
`/pricing`:
|
|
89
132
|
|
|
90
133
|
<!-- generated:begin page=/pricing -->
|
|
91
134
|
|
|
92
|
-
| # | Section
|
|
93
|
-
| --- |
|
|
94
|
-
| 1 | `
|
|
95
|
-
| 2 | `
|
|
96
|
-
| 3 | `
|
|
97
|
-
| 4 | `
|
|
98
|
-
| 5 | `
|
|
99
|
-
| 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
|
|
135
|
+
| # | Section | Component | Copy (first line) |
|
|
136
|
+
| --- | -------------------------------------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
|
|
137
|
+
| 1 | `pricing` (three-tiers-with-toggle · cardLayout=centered · eyebrow "Pricing" · plans ×3 · billingToggle) | `Pricing` | {Pays for itself in tangible value or outcome} |
|
|
138
|
+
| 2 | `logoCloud` (layout=inline · logos ×3) | `LogoCloud` | Don’t just take our word for it |
|
|
139
|
+
| 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
140
|
+
| 4 | `cta` (box · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
141
|
+
| 5 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | FAQs |
|
|
100
142
|
|
|
101
143
|
<!-- generated:end -->
|
|
102
144
|
|
|
@@ -104,14 +146,13 @@ The base rows come first, exactly as the base layer and the always-copied overla
|
|
|
104
146
|
|
|
105
147
|
<!-- generated:begin page=/about -->
|
|
106
148
|
|
|
107
|
-
| # | Section
|
|
108
|
-
| --- |
|
|
109
|
-
| 1 | `content-block` (media-right · eyebrow "
|
|
110
|
-
| 2 | `team` (members ×5)
|
|
111
|
-
| 3 | `
|
|
112
|
-
| 4 | `
|
|
113
|
-
| 5 | `
|
|
114
|
-
| 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
|
|
149
|
+
| # | Section | Component | Copy (first line) |
|
|
150
|
+
| --- | --------------------------------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
|
|
151
|
+
| 1 | `content-block` (media-right · imagerySlot=true · eyebrow "About" · 2 CTAs) | `ContentBlock` | {We want you to ability they couldn't do before} |
|
|
152
|
+
| 2 | `team` (with-side-images · eyebrow "Tagline" · members ×5) | `Team` | Our team |
|
|
153
|
+
| 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
154
|
+
| 4 | `cta` (box · imagerySlot=true · checklist ×3 · 2 CTAs · closingLine) | `CTA` | {Switch to your product in time amount or less} |
|
|
155
|
+
| 5 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | FAQs |
|
|
115
156
|
|
|
116
157
|
<!-- generated:end -->
|
|
117
158
|
|
|
@@ -119,11 +160,11 @@ The base rows come first, exactly as the base layer and the always-copied overla
|
|
|
119
160
|
|
|
120
161
|
<!-- generated:begin page=/faq -->
|
|
121
162
|
|
|
122
|
-
| # | Section
|
|
123
|
-
| --- |
|
|
124
|
-
| 1 | `hero`
|
|
125
|
-
| 2 | `faq` (accordion · items ×5 ·
|
|
126
|
-
| 3 | `
|
|
163
|
+
| # | Section | Component | Copy (first line) |
|
|
164
|
+
| --- | ------------------------------------------------------- | --------- | ---------------------------------------- |
|
|
165
|
+
| 1 | `hero` (gapBelow=tight · eyebrow "FAQ") | `Hero` | FAQs |
|
|
166
|
+
| 2 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A question your customers actually ask} |
|
|
167
|
+
| 3 | `faq` (accordion · items ×5 · 1 CTA · initialOpen none) | `FAQ` | {A second group of questions} |
|
|
127
168
|
|
|
128
169
|
<!-- generated:end -->
|
|
129
170
|
|
|
@@ -131,12 +172,41 @@ The base rows come first, exactly as the base layer and the always-copied overla
|
|
|
131
172
|
|
|
132
173
|
<!-- generated:begin page=/contact -->
|
|
133
174
|
|
|
134
|
-
| # | Section | Component | Copy (first line)
|
|
135
|
-
| --- | ----------------------------------------------------- | -------------- |
|
|
136
|
-
| 1 | `hero` (split · eyebrow "Book a Demo" · checklist ×3) | `Hero` | Ready to
|
|
137
|
-
| 2 | `
|
|
138
|
-
| 3 | `
|
|
139
|
-
|
|
175
|
+
| # | Section | Component | Copy (first line) |
|
|
176
|
+
| --- | ----------------------------------------------------- | -------------- | ----------------------------------------------------------------- |
|
|
177
|
+
| 1 | `hero` (split · eyebrow "Book a Demo" · checklist ×3) | `Hero` | {Ready to achieve a valuable outcome?} |
|
|
178
|
+
| 2 | `logoCloud` (layout=inline · logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
179
|
+
| 3 | `testimonials` (quote · items ×1) | `Testimonials` | {A customer quote, in their own words, about the result they got} |
|
|
180
|
+
|
|
181
|
+
<!-- generated:end -->
|
|
182
|
+
|
|
183
|
+
`/glossary`, `/newsletter`, `/book-a-call` (#6658 D5 — every starter carries them):
|
|
184
|
+
|
|
185
|
+
<!-- generated:begin page=/glossary -->
|
|
186
|
+
|
|
187
|
+
| # | Section | Component | Copy (first line) |
|
|
188
|
+
| --- | ----------------------------------- | --------------- | -------------------------------------------- |
|
|
189
|
+
| 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
|
|
190
|
+
| 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
|
|
191
|
+
|
|
192
|
+
<!-- generated:end -->
|
|
193
|
+
|
|
194
|
+
<!-- generated:begin page=/newsletter -->
|
|
195
|
+
|
|
196
|
+
| # | Section | Component | Copy (first line) |
|
|
197
|
+
| --- | ------------------------------------- | ------------ | ------------------------------------------------ |
|
|
198
|
+
| 1 | `hero` (eyebrow "Newsletter" · 1 CTA) | `Hero` | {Newsletter: what subscribers get and how often} |
|
|
199
|
+
| 2 | `newsletter` | `Newsletter` | Subscribe |
|
|
200
|
+
| 3 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
|
|
201
|
+
|
|
202
|
+
<!-- generated:end -->
|
|
203
|
+
|
|
204
|
+
<!-- generated:begin page=/book-a-call -->
|
|
205
|
+
|
|
206
|
+
| # | Section | Component | Copy (first line) |
|
|
207
|
+
| --- | -------------------------------------- | --------- | ------------------------------------------ |
|
|
208
|
+
| 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
|
|
209
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
|
|
140
210
|
|
|
141
211
|
<!-- generated:end -->
|
|
142
212
|
|
|
@@ -147,13 +217,20 @@ The base rows come first, exactly as the base layer and the always-copied overla
|
|
|
147
217
|
_Code route — no content, no sections._
|
|
148
218
|
<!-- generated:end -->
|
|
149
219
|
|
|
220
|
+
`/sign-up`:
|
|
221
|
+
|
|
222
|
+
<!-- generated:begin page=/sign-up -->
|
|
223
|
+
|
|
224
|
+
_Code route — no content, no sections._
|
|
225
|
+
<!-- generated:end -->
|
|
226
|
+
|
|
150
227
|
`/privacy`:
|
|
151
228
|
|
|
152
229
|
<!-- generated:begin page=/privacy -->
|
|
153
230
|
|
|
154
|
-
| # | Section
|
|
155
|
-
| --- |
|
|
156
|
-
| 1 | `document-chassis` (
|
|
231
|
+
| # | Section | Component | Copy (first line) |
|
|
232
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
233
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
|
|
157
234
|
|
|
158
235
|
<!-- generated:end -->
|
|
159
236
|
|
|
@@ -161,9 +238,19 @@ _Code route — no content, no sections._
|
|
|
161
238
|
|
|
162
239
|
<!-- generated:begin page=/terms -->
|
|
163
240
|
|
|
164
|
-
| # | Section
|
|
165
|
-
| --- |
|
|
166
|
-
| 1 | `document-chassis` (
|
|
241
|
+
| # | Section | Component | Copy (first line) |
|
|
242
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
243
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
|
|
244
|
+
|
|
245
|
+
<!-- generated:end -->
|
|
246
|
+
|
|
247
|
+
`/purchase-policy`:
|
|
248
|
+
|
|
249
|
+
<!-- generated:begin page=/purchase-policy -->
|
|
250
|
+
|
|
251
|
+
| # | Section | Component | Copy (first line) |
|
|
252
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
253
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
|
|
167
254
|
|
|
168
255
|
<!-- generated:end -->
|
|
169
256
|
|
|
@@ -295,7 +382,22 @@ _Code route — no content, no sections._
|
|
|
295
382
|
|
|
296
383
|
### `/projects`, `/projects/<slug>`, `/projects/apply` — CollectionPage / WebPage · schema `ProjectsList` / `Project` · signal-collectors
|
|
297
384
|
|
|
298
|
-
Project listings and the application flow. Sections: `hero` · `items` · `cta` (list); `hero` · `content-block` · `cta` (detail); `hero` · `step-flow` (apply).
|
|
385
|
+
Project listings and the application flow. Sections: `hero` · `items` · `cta` (list); `hero` · `content-block` · `cta` (detail); `hero` · `step-flow` (apply). The listing and the two sample projects are roster rows (#6646): the signal-collectors bundle lands them, and this template names them, so the roster lists every page the scaffold installs.
|
|
386
|
+
|
|
387
|
+
<!-- generated:begin page=/projects -->
|
|
388
|
+
|
|
389
|
+
| # | Section | Component | Copy (first line) |
|
|
390
|
+
| --- | ------------------------------ | --------- | -------------------------- |
|
|
391
|
+
| 1 | `hero` (centered) | `Hero` | Projects |
|
|
392
|
+
| 2 | `items` (columns=2 · items ×2) | `Items` | Selected engagements |
|
|
393
|
+
| 3 | `cta` (2 CTAs) | `CTA` | Have a project like these? |
|
|
394
|
+
|
|
395
|
+
<!-- generated:end -->
|
|
396
|
+
|
|
397
|
+
<!-- generated:begin page=/projects/[slug] -->
|
|
398
|
+
|
|
399
|
+
_Detail route over `content/en/Project/` — 2 seed pages: `fit-check-funnel.mdx`, `launch-site-in-fourteen-days.mdx`._
|
|
400
|
+
<!-- generated:end -->
|
|
299
401
|
|
|
300
402
|
### `/waitlist/<experimentId>` — InstrumentCapturePage · schema `Waitlist` · signal-collectors (authed)
|
|
301
403
|
|
|
@@ -303,7 +405,12 @@ As the slice ships it; no template composition.
|
|
|
303
405
|
|
|
304
406
|
### `/thanks/<slug>` — per-form confirmation · signal-collectors
|
|
305
407
|
|
|
306
|
-
Authored per form (#3960): `contact` (if the Pro contact form redirects), `newsletter`, `apply`. Sections: `hero` · `cta`. The three sample pages, like the two projects and the listing above, ride the signal-collectors bundle's `installMap` (#5618 D6.3)
|
|
408
|
+
Authored per form (#3960): `contact` (if the Pro contact form redirects), `newsletter`, `apply`. Sections: `hero` · `cta`. The three sample pages, like the two projects and the listing above, ride the signal-collectors bundle's `installMap` (#5618 D6.3). No `pageContributions` row declares `/projects*` or `/thanks/<slug>`, so this template's own roster declares them (#6646): `/thanks/[slug]` names its seed directory as `contentDir`.
|
|
409
|
+
|
|
410
|
+
<!-- generated:begin page=/thanks/[slug] -->
|
|
411
|
+
|
|
412
|
+
_Detail route over `content/en/ThankYouPage/` — 3 seed pages: `apply.mdx`, `contact.mdx`, `newsletter.mdx`._
|
|
413
|
+
<!-- generated:end -->
|
|
307
414
|
|
|
308
415
|
## 2a. State and persistence — Pro delta
|
|
309
416
|
|
|
@@ -330,27 +437,39 @@ Everything in the Free manifest § 2a applies. Pro adds:
|
|
|
330
437
|
marketing-site:
|
|
331
438
|
requires: [marketing, docs-blog, scheduling, signal-collectors]
|
|
332
439
|
categories: [accounting, legal, hvac, roofing, plumbing, electrical, landscaping, auto-repair, real-estate, technology, medical-specialty]
|
|
440
|
+
shape: organization-product
|
|
441
|
+
design: standard
|
|
333
442
|
roster:
|
|
334
|
-
- { route: "/", content: ["content/en/HomePage/home.mdx"] }
|
|
335
|
-
- { route: "/
|
|
336
|
-
- { route: "/
|
|
337
|
-
- { route: "/
|
|
338
|
-
- { route: "/
|
|
339
|
-
- { route: "/
|
|
340
|
-
- { route: "/
|
|
341
|
-
- { route: "/
|
|
342
|
-
- { route: "/
|
|
343
|
-
- { route: "/
|
|
344
|
-
- { route: "/
|
|
345
|
-
- { route: "/
|
|
346
|
-
- { route: "/
|
|
347
|
-
- { route: "/
|
|
348
|
-
- { route: "/
|
|
349
|
-
- { route: "/
|
|
350
|
-
- { route: "/
|
|
351
|
-
- { route: "/
|
|
352
|
-
- { route: "/
|
|
353
|
-
- { route: "/
|
|
443
|
+
- { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
|
|
444
|
+
- { route: "/software", kind: route }
|
|
445
|
+
- { route: "/software/[slug]", kind: page, contentDir: "content/en/SoftwareProduct" }
|
|
446
|
+
- { route: "/use-cases", kind: page, content: ["content/en/UseCasesList/use-cases.mdx"] }
|
|
447
|
+
- { route: "/use-cases/[slug]", kind: page, contentDir: "content/en/UseCase" }
|
|
448
|
+
- { route: "/pricing", kind: page, content: ["content/en/Pricing/pricing.mdx"] }
|
|
449
|
+
- { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
|
|
450
|
+
- { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
|
|
451
|
+
- { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
|
|
452
|
+
- { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
|
|
453
|
+
- { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
|
|
454
|
+
- { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
|
|
455
|
+
- { route: "/sign-in", kind: route }
|
|
456
|
+
- { route: "/sign-up", kind: route }
|
|
457
|
+
- { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
|
|
458
|
+
- { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
|
|
459
|
+
- { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
|
|
460
|
+
- { route: "/projects", kind: page, content: ["content/en/ProjectsList/projects.mdx"] }
|
|
461
|
+
- { route: "/projects/[slug]", kind: page, contentDir: "content/en/Project" }
|
|
462
|
+
- { route: "/thanks/[slug]", kind: page, contentDir: "content/en/ThankYouPage" }
|
|
463
|
+
- { route: "/blog", kind: page, content: ["apps/web/content/en/blog/index.mdx", "apps/web/content/en/blog/01-8-things-that-prove-coding-skills-are-directly-linked-to-successfully-assembling-ikea-furniture.mdx", "apps/web/content/en/blog/02-5-ways-to-guarantee-your-startup-goes-nowhere-fast.mdx", "apps/web/content/en/blog/03-10-ideas-that-will-guarantee-1000x-growth.mdx", "apps/web/content/en/blog/04-7-keys-to-saas-success-the-elite-doesnt-want-you-to-know.mdx", "apps/web/content/en/blog/launching-ailk.mdx"] }
|
|
464
|
+
- { route: "/docs", kind: page, content: ["apps/web/content/en/docs/getting-started.mdx", "apps/web/content/en/docs/configure.mdx", "apps/web/content/en/docs/deploy.mdx"] }
|
|
465
|
+
- { route: "/meet", kind: route }
|
|
466
|
+
- { route: "/meet/[slug]", kind: route }
|
|
467
|
+
- { route: "/meet/confirmed", kind: route }
|
|
468
|
+
- { route: "/appointments", kind: route }
|
|
469
|
+
- { route: "/flows/[slug]", kind: route }
|
|
470
|
+
- { route: "/flows/[slug]/start", kind: route }
|
|
471
|
+
- { route: "/flows/[slug]/results/[payload]", kind: route }
|
|
472
|
+
- { route: "/reports/[slug]", kind: route }
|
|
354
473
|
```
|
|
355
474
|
|
|
356
475
|
<!-- generated:end -->
|
|
@@ -372,11 +491,11 @@ Every component the roster rows' seed content composes today (generated):
|
|
|
372
491
|
|
|
373
492
|
<!-- generated:begin inventory -->
|
|
374
493
|
|
|
375
|
-
| Tier | Used by this template
|
|
376
|
-
| -------- |
|
|
377
|
-
| Shell | `MarketingShell`
|
|
378
|
-
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`)
|
|
379
|
-
| Sections | `
|
|
494
|
+
| Tier | Used by this template |
|
|
495
|
+
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
496
|
+
| Shell | `MarketingShell` |
|
|
497
|
+
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
|
|
498
|
+
| Sections | `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `MediaBand`, `Newsletter`, `Pricing`, `Team`, `Testimonials` |
|
|
380
499
|
|
|
381
500
|
<!-- generated:end -->
|
|
382
501
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"$comment": "Pro template (#5464). installMap: bundle-relative source -> scaffold-relative destination; the stager reads only installMap/postInstall/patches. After #5618 D6 this tree holds compositions and copy overrides only: the base pages (/pricing, /privacy, /terms) arrive from the _base layer it extends, and every module sample (the blog listing and posts 01-04, the three docs pages, the projects, thank-you, flow, waitlist and report samples) ships in the docs-blog and signal-collectors bundles its requires names. Its one content file, post 05, is deliberately mapped ONTO apps/web/content/en/blog/launching-ailk.mdx (D6.2a): the template lands last and can overwrite but never remove the module's own seed post, so this is Rule B's copy-override clause with a real instance (a template-owned replacement of a seed row is a docs-blog gap on #5467, spec 5618 s7 finding 9). Unmapped content/en/** would land at the scaffold root's content/, exactly as marketing-site-free's does; today nothing is unmapped.",
|
|
6
6
|
"installMap": {
|
|
7
7
|
"provenance.json": ".ailk-template.json",
|
|
8
|
+
"TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json",
|
|
8
9
|
"content/en/blog/05-this-vc-morning-routine-will-make-you-super-annoying.mdx": "apps/web/content/en/blog/launching-ailk.mdx"
|
|
9
10
|
},
|
|
10
11
|
"postInstall": "Template marketing-site installed: its module samples - the Pro blog (5 posts) and docs (3 pages) from docs-blog, the booking pages at /meet, /meet/<slug> and /meet/confirmed from scheduling, the projects (2 + listing), thank-you pages (contact, newsletter, apply), fit-check flow definition, waitlist experiment, the report reader at /reports/<slug> and its sample report PDF under apps/web/public/reports/ from signal-collectors - arrived with those module bundles, and /pricing, /privacy and /terms with the base layer. This template adds one copy override (blog post 05) - every sample is placeholder copy to replace before you launch."
|