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
|
@@ -2,16 +2,49 @@
|
|
|
2
2
|
"template": "simple-service",
|
|
3
3
|
"requires": ["marketing", "scheduling", "commerce"],
|
|
4
4
|
"categories": ["landscaping"],
|
|
5
|
-
"
|
|
5
|
+
"shape": "local-business-service",
|
|
6
|
+
"design": "standard",
|
|
7
|
+
"generatedHash": "4aa55fe994472262e9e8f47566729699f3d9eff95267ecf9d8a7da5dcea5602a",
|
|
6
8
|
"layout": {
|
|
7
9
|
"nav": "full",
|
|
8
10
|
"footer": "columns",
|
|
9
|
-
"announcementBanner":
|
|
11
|
+
"announcementBanner": false,
|
|
10
12
|
"home": "default"
|
|
11
13
|
},
|
|
14
|
+
"theme": {
|
|
15
|
+
"corners": "square",
|
|
16
|
+
"eyebrowCase": "sentence",
|
|
17
|
+
"placeholders": "fill",
|
|
18
|
+
"checkmarks": "plain",
|
|
19
|
+
"colors": {
|
|
20
|
+
"light": {
|
|
21
|
+
"bg": "#ffffff",
|
|
22
|
+
"bgMuted": "#ffffff",
|
|
23
|
+
"surface": "#ffffff",
|
|
24
|
+
"border": "#000000",
|
|
25
|
+
"text": "#000000",
|
|
26
|
+
"textMuted": "#333333",
|
|
27
|
+
"primary": "#000000",
|
|
28
|
+
"primaryFg": "#ffffff",
|
|
29
|
+
"accent": "#000000"
|
|
30
|
+
},
|
|
31
|
+
"dark": {
|
|
32
|
+
"bg": "#000000",
|
|
33
|
+
"bgMuted": "#000000",
|
|
34
|
+
"surface": "#000000",
|
|
35
|
+
"border": "#ffffff",
|
|
36
|
+
"text": "#ffffff",
|
|
37
|
+
"textMuted": "#cccccc",
|
|
38
|
+
"primary": "#ffffff",
|
|
39
|
+
"primaryFg": "#000000",
|
|
40
|
+
"accent": "#ffffff"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
12
44
|
"rows": [
|
|
13
45
|
{
|
|
14
46
|
"route": "/",
|
|
47
|
+
"kind": "page",
|
|
15
48
|
"pageType": "HomePage",
|
|
16
49
|
"schema": "HomePage",
|
|
17
50
|
"shell": "MarketingShell",
|
|
@@ -23,7 +56,10 @@
|
|
|
23
56
|
},
|
|
24
57
|
{
|
|
25
58
|
"type": "items",
|
|
26
|
-
"component": "Items"
|
|
59
|
+
"component": "Items",
|
|
60
|
+
"options": {
|
|
61
|
+
"columns": 3
|
|
62
|
+
}
|
|
27
63
|
},
|
|
28
64
|
{
|
|
29
65
|
"type": "cta",
|
|
@@ -33,6 +69,7 @@
|
|
|
33
69
|
},
|
|
34
70
|
{
|
|
35
71
|
"route": "/services",
|
|
72
|
+
"kind": "page",
|
|
36
73
|
"pageType": "ServicesList",
|
|
37
74
|
"schema": "ServicesList",
|
|
38
75
|
"shell": "MarketingShell",
|
|
@@ -44,7 +81,10 @@
|
|
|
44
81
|
},
|
|
45
82
|
{
|
|
46
83
|
"type": "items",
|
|
47
|
-
"component": "Items"
|
|
84
|
+
"component": "Items",
|
|
85
|
+
"options": {
|
|
86
|
+
"columns": 3
|
|
87
|
+
}
|
|
48
88
|
},
|
|
49
89
|
{
|
|
50
90
|
"type": "cta",
|
|
@@ -54,14 +94,22 @@
|
|
|
54
94
|
},
|
|
55
95
|
{
|
|
56
96
|
"route": "/services/[slug]",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
97
|
+
"kind": "page",
|
|
98
|
+
"contentDir": "content/en/Service",
|
|
99
|
+
"seeds": [
|
|
100
|
+
"content/en/Service/landscape-design.mdx",
|
|
101
|
+
"content/en/Service/lawn-maintenance.mdx",
|
|
102
|
+
"content/en/Service/seasonal-cleanup.mdx"
|
|
103
|
+
],
|
|
104
|
+
"pageType": "Service",
|
|
105
|
+
"schema": "Service",
|
|
59
106
|
"shell": "MarketingShell",
|
|
60
107
|
"chrome": "on",
|
|
61
108
|
"sections": []
|
|
62
109
|
},
|
|
63
110
|
{
|
|
64
111
|
"route": "/about",
|
|
112
|
+
"kind": "page",
|
|
65
113
|
"pageType": "AboutPage",
|
|
66
114
|
"schema": "AboutPage",
|
|
67
115
|
"shell": "MarketingShell",
|
|
@@ -79,6 +127,7 @@
|
|
|
79
127
|
},
|
|
80
128
|
{
|
|
81
129
|
"route": "/contact",
|
|
130
|
+
"kind": "page",
|
|
82
131
|
"pageType": "ContactPage",
|
|
83
132
|
"schema": "ContactPage",
|
|
84
133
|
"shell": "MarketingShell",
|
|
@@ -88,10 +137,6 @@
|
|
|
88
137
|
"type": "hero",
|
|
89
138
|
"component": "Hero"
|
|
90
139
|
},
|
|
91
|
-
{
|
|
92
|
-
"type": "contact-form",
|
|
93
|
-
"component": "ContactForm"
|
|
94
|
-
},
|
|
95
140
|
{
|
|
96
141
|
"type": "cta",
|
|
97
142
|
"component": "CTA"
|
|
@@ -100,6 +145,7 @@
|
|
|
100
145
|
},
|
|
101
146
|
{
|
|
102
147
|
"route": "/faq",
|
|
148
|
+
"kind": "page",
|
|
103
149
|
"pageType": "FAQPage",
|
|
104
150
|
"schema": "FAQPage",
|
|
105
151
|
"shell": "MarketingShell",
|
|
@@ -116,46 +162,86 @@
|
|
|
116
162
|
]
|
|
117
163
|
},
|
|
118
164
|
{
|
|
119
|
-
"route": "/
|
|
120
|
-
"
|
|
121
|
-
"
|
|
165
|
+
"route": "/glossary",
|
|
166
|
+
"kind": "page",
|
|
167
|
+
"pageType": "GlossaryList",
|
|
168
|
+
"schema": "GlossaryList",
|
|
122
169
|
"shell": "MarketingShell",
|
|
123
170
|
"chrome": "on",
|
|
124
171
|
"sections": [
|
|
125
172
|
{
|
|
126
|
-
"type": "
|
|
127
|
-
"component": "
|
|
173
|
+
"type": "hero",
|
|
174
|
+
"component": "Hero"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"type": "glossary-index",
|
|
178
|
+
"component": "GlossaryIndex"
|
|
128
179
|
}
|
|
129
180
|
]
|
|
130
181
|
},
|
|
131
182
|
{
|
|
132
|
-
"route": "/
|
|
133
|
-
"
|
|
134
|
-
"
|
|
183
|
+
"route": "/newsletter",
|
|
184
|
+
"kind": "page",
|
|
185
|
+
"pageType": "NewsletterSignup",
|
|
186
|
+
"schema": "NewsletterSignup",
|
|
135
187
|
"shell": "MarketingShell",
|
|
136
188
|
"chrome": "on",
|
|
137
189
|
"sections": [
|
|
138
190
|
{
|
|
139
|
-
"type": "
|
|
140
|
-
"component": "
|
|
191
|
+
"type": "hero",
|
|
192
|
+
"component": "Hero"
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"type": "newsletter",
|
|
196
|
+
"component": "Newsletter"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"type": "faq",
|
|
200
|
+
"component": "FAQ"
|
|
141
201
|
}
|
|
142
202
|
]
|
|
143
203
|
},
|
|
144
204
|
{
|
|
145
|
-
"route": "/
|
|
146
|
-
"
|
|
147
|
-
"
|
|
205
|
+
"route": "/book-a-call",
|
|
206
|
+
"kind": "page",
|
|
207
|
+
"pageType": "BookCall",
|
|
208
|
+
"schema": "BookCall",
|
|
209
|
+
"shell": "MarketingShell",
|
|
210
|
+
"chrome": "on",
|
|
211
|
+
"sections": [
|
|
212
|
+
{
|
|
213
|
+
"type": "hero",
|
|
214
|
+
"component": "Hero"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"type": "items",
|
|
218
|
+
"component": "Items",
|
|
219
|
+
"options": {
|
|
220
|
+
"columns": 3
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
]
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"route": "/purchase-policy",
|
|
227
|
+
"kind": "page",
|
|
228
|
+
"pageType": "PurchasePolicyPage",
|
|
229
|
+
"schema": "PurchasePolicyPage",
|
|
148
230
|
"shell": "MarketingShell",
|
|
149
231
|
"chrome": "on",
|
|
150
232
|
"sections": [
|
|
151
233
|
{
|
|
152
234
|
"type": "document-chassis",
|
|
153
|
-
"component": "DocumentChassis"
|
|
235
|
+
"component": "DocumentChassis",
|
|
236
|
+
"options": {
|
|
237
|
+
"layout": "article"
|
|
238
|
+
}
|
|
154
239
|
}
|
|
155
240
|
]
|
|
156
241
|
},
|
|
157
242
|
{
|
|
158
243
|
"route": "/privacy",
|
|
244
|
+
"kind": "page",
|
|
159
245
|
"pageType": "PrivacyPage",
|
|
160
246
|
"schema": "PrivacyPage",
|
|
161
247
|
"shell": "MarketingShell",
|
|
@@ -163,12 +249,16 @@
|
|
|
163
249
|
"sections": [
|
|
164
250
|
{
|
|
165
251
|
"type": "document-chassis",
|
|
166
|
-
"component": "DocumentChassis"
|
|
252
|
+
"component": "DocumentChassis",
|
|
253
|
+
"options": {
|
|
254
|
+
"layout": "article"
|
|
255
|
+
}
|
|
167
256
|
}
|
|
168
257
|
]
|
|
169
258
|
},
|
|
170
259
|
{
|
|
171
260
|
"route": "/terms",
|
|
261
|
+
"kind": "page",
|
|
172
262
|
"pageType": "TermsPage",
|
|
173
263
|
"schema": "TermsPage",
|
|
174
264
|
"shell": "MarketingShell",
|
|
@@ -176,12 +266,16 @@
|
|
|
176
266
|
"sections": [
|
|
177
267
|
{
|
|
178
268
|
"type": "document-chassis",
|
|
179
|
-
"component": "DocumentChassis"
|
|
269
|
+
"component": "DocumentChassis",
|
|
270
|
+
"options": {
|
|
271
|
+
"layout": "article"
|
|
272
|
+
}
|
|
180
273
|
}
|
|
181
274
|
]
|
|
182
275
|
},
|
|
183
276
|
{
|
|
184
277
|
"route": "/account",
|
|
278
|
+
"kind": "route",
|
|
185
279
|
"pageType": null,
|
|
186
280
|
"schema": null,
|
|
187
281
|
"shell": "MarketingShell",
|
|
@@ -190,6 +284,7 @@
|
|
|
190
284
|
},
|
|
191
285
|
{
|
|
192
286
|
"route": "/purchase/success",
|
|
287
|
+
"kind": "route",
|
|
193
288
|
"pageType": null,
|
|
194
289
|
"schema": null,
|
|
195
290
|
"shell": "MarketingShell",
|
|
@@ -198,6 +293,16 @@
|
|
|
198
293
|
},
|
|
199
294
|
{
|
|
200
295
|
"route": "/purchase/cancel",
|
|
296
|
+
"kind": "route",
|
|
297
|
+
"pageType": null,
|
|
298
|
+
"schema": null,
|
|
299
|
+
"shell": "MarketingShell",
|
|
300
|
+
"chrome": "on",
|
|
301
|
+
"sections": []
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"route": "/thanks/[slug]",
|
|
305
|
+
"kind": "route",
|
|
201
306
|
"pageType": null,
|
|
202
307
|
"schema": null,
|
|
203
308
|
"shell": "MarketingShell",
|
|
@@ -206,6 +311,7 @@
|
|
|
206
311
|
},
|
|
207
312
|
{
|
|
208
313
|
"route": "/meet",
|
|
314
|
+
"kind": "route",
|
|
209
315
|
"pageType": null,
|
|
210
316
|
"schema": null,
|
|
211
317
|
"shell": "MarketingShell",
|
|
@@ -214,6 +320,7 @@
|
|
|
214
320
|
},
|
|
215
321
|
{
|
|
216
322
|
"route": "/meet/[slug]",
|
|
323
|
+
"kind": "route",
|
|
217
324
|
"pageType": null,
|
|
218
325
|
"schema": null,
|
|
219
326
|
"shell": "MarketingShell",
|
|
@@ -222,6 +329,7 @@
|
|
|
222
329
|
},
|
|
223
330
|
{
|
|
224
331
|
"route": "/meet/confirmed",
|
|
332
|
+
"kind": "route",
|
|
225
333
|
"pageType": null,
|
|
226
334
|
"schema": null,
|
|
227
335
|
"shell": "MarketingShell",
|
|
@@ -230,6 +338,7 @@
|
|
|
230
338
|
},
|
|
231
339
|
{
|
|
232
340
|
"route": "/appointments",
|
|
341
|
+
"kind": "route",
|
|
233
342
|
"pageType": null,
|
|
234
343
|
"schema": null,
|
|
235
344
|
"shell": "MarketingShell",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Template manifest — `simple-service`
|
|
2
2
|
|
|
3
|
-
> The T1 lawn-care template (#6087, Epic #5778) — the first site shape that composes `scheduling` and `commerce`: three priced services, a booker, a checkout return pair and
|
|
3
|
+
> The T1 lawn-care template (#6087, Epic #5778) — the first site shape that composes `scheduling` and `commerce`: three priced services, a booker, a checkout return pair and a purchase policy (cancellation and refunds, #6646). Generated file: the regions between `<!-- generated:begin <id> -->` and `<!-- generated:end -->` are produced by `scripts/build-template-manifest.mjs --template simple-service` 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
4
|
|
|
5
5
|
| Field | Value |
|
|
6
6
|
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -25,11 +25,44 @@ The template's `layout` block — resolved with `resolveSiteChrome`, defaults fi
|
|
|
25
25
|
| -------------------- | --------- |
|
|
26
26
|
| `nav` | `full` |
|
|
27
27
|
| `footer` | `columns` |
|
|
28
|
-
| `announcementBanner` | `
|
|
28
|
+
| `announcementBanner` | `false` |
|
|
29
29
|
| `home` | `default` |
|
|
30
30
|
|
|
31
31
|
<!-- generated:end -->
|
|
32
32
|
|
|
33
|
+
### Theme (locked)
|
|
34
|
+
|
|
35
|
+
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).
|
|
36
|
+
|
|
37
|
+
<!-- generated:begin theme -->
|
|
38
|
+
|
|
39
|
+
| Setting | Value |
|
|
40
|
+
| ------------------------ | ---------- |
|
|
41
|
+
| `corners` | `square` |
|
|
42
|
+
| `eyebrowCase` | `sentence` |
|
|
43
|
+
| `placeholders` | `fill` |
|
|
44
|
+
| `checkmarks` | `plain` |
|
|
45
|
+
| `colors.light.bg` | `#ffffff` |
|
|
46
|
+
| `colors.light.bgMuted` | `#ffffff` |
|
|
47
|
+
| `colors.light.surface` | `#ffffff` |
|
|
48
|
+
| `colors.light.border` | `#000000` |
|
|
49
|
+
| `colors.light.text` | `#000000` |
|
|
50
|
+
| `colors.light.textMuted` | `#333333` |
|
|
51
|
+
| `colors.light.primary` | `#000000` |
|
|
52
|
+
| `colors.light.primaryFg` | `#ffffff` |
|
|
53
|
+
| `colors.light.accent` | `#000000` |
|
|
54
|
+
| `colors.dark.bg` | `#000000` |
|
|
55
|
+
| `colors.dark.bgMuted` | `#000000` |
|
|
56
|
+
| `colors.dark.surface` | `#000000` |
|
|
57
|
+
| `colors.dark.border` | `#ffffff` |
|
|
58
|
+
| `colors.dark.text` | `#ffffff` |
|
|
59
|
+
| `colors.dark.textMuted` | `#cccccc` |
|
|
60
|
+
| `colors.dark.primary` | `#ffffff` |
|
|
61
|
+
| `colors.dark.primaryFg` | `#000000` |
|
|
62
|
+
| `colors.dark.accent` | `#ffffff` |
|
|
63
|
+
|
|
64
|
+
<!-- generated:end -->
|
|
65
|
+
|
|
33
66
|
## 2. The money path
|
|
34
67
|
|
|
35
68
|
The whole point of this template is the first roster that takes a booking **and** the payment for it:
|
|
@@ -40,7 +73,7 @@ The whole point of this template is the first roster that takes a booking **and*
|
|
|
40
73
|
| Booking | `/meet`, `/meet/<slug>`, `/meet/confirmed` — the `scheduling` module's own contributed rows; `/appointments` is the site owner's own list (#6086). |
|
|
41
74
|
| Payment | a provider-hosted page on the seller's own Stripe account. Nothing on this site renders a card form. |
|
|
42
75
|
| Return | `/purchase/success` and `/purchase/cancel` — base tree under #6084 D12's shape-2 disposition, gated at request time on the `commerce` licence claim. |
|
|
43
|
-
| Policies | `/
|
|
76
|
+
| Policies | `/purchase-policy` (#6646) — cancellation and refunds sections, this template's service-shape override of the overlay's product-shape seed. |
|
|
44
77
|
|
|
45
78
|
## 3. Pages
|
|
46
79
|
|
|
@@ -53,7 +86,7 @@ One `page=<route>` region per roster row, generated from the seed file the compo
|
|
|
53
86
|
| # | Section | Component | Copy (first line) |
|
|
54
87
|
| --- | ---------------------------------------------------------- | --------- | ---------------------------------------------- |
|
|
55
88
|
| 1 | `hero` (centered · eyebrow "{Your service area}" · 2 CTAs) | `Hero` | {Lawn care that turns up when it says it will} |
|
|
56
|
-
| 2 | `items` (items ×3)
|
|
89
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | What we do |
|
|
57
90
|
| 3 | `cta` (minimal · 2 CTAs) | `CTA` | Ready for a tidier yard? |
|
|
58
91
|
|
|
59
92
|
<!-- generated:end -->
|
|
@@ -65,7 +98,7 @@ One `page=<route>` region per roster row, generated from the seed file the compo
|
|
|
65
98
|
| # | Section | Component | Copy (first line) |
|
|
66
99
|
| --- | -------------------------------------- | --------- | ------------------------ |
|
|
67
100
|
| 1 | `hero` (centered · eyebrow "Services") | `Hero` | Three jobs, three prices |
|
|
68
|
-
| 2 | `items` (items ×3)
|
|
101
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | What we do |
|
|
69
102
|
| 3 | `cta` (minimal · 1 CTA) | `CTA` | Not sure which one? |
|
|
70
103
|
|
|
71
104
|
<!-- generated:end -->
|
|
@@ -74,7 +107,7 @@ One `page=<route>` region per roster row, generated from the seed file the compo
|
|
|
74
107
|
|
|
75
108
|
<!-- generated:begin page=/services/[slug] -->
|
|
76
109
|
|
|
77
|
-
|
|
110
|
+
_Detail route over `content/en/Service/` — 3 seed pages: `landscape-design.mdx`, `lawn-maintenance.mdx`, `seasonal-cleanup.mdx`._
|
|
78
111
|
<!-- generated:end -->
|
|
79
112
|
|
|
80
113
|
`/about`:
|
|
@@ -92,11 +125,10 @@ _Code route — no content, no sections._
|
|
|
92
125
|
|
|
93
126
|
<!-- generated:begin page=/contact -->
|
|
94
127
|
|
|
95
|
-
| # | Section | Component
|
|
96
|
-
| --- | ------------------------------------- |
|
|
97
|
-
| 1 | `hero` (centered · eyebrow "Contact") | `Hero`
|
|
98
|
-
| 2 | `
|
|
99
|
-
| 3 | `cta` (minimal · 1 CTA) | `CTA` | Would a visit be faster? |
|
|
128
|
+
| # | Section | Component | Copy (first line) |
|
|
129
|
+
| --- | ------------------------------------- | --------- | ------------------------ |
|
|
130
|
+
| 1 | `hero` (centered · eyebrow "Contact") | `Hero` | Tell us about the yard |
|
|
131
|
+
| 2 | `cta` (minimal · 1 CTA) | `CTA` | Would a visit be faster? |
|
|
100
132
|
|
|
101
133
|
<!-- generated:end -->
|
|
102
134
|
|
|
@@ -111,33 +143,45 @@ _Code route — no content, no sections._
|
|
|
111
143
|
|
|
112
144
|
<!-- generated:end -->
|
|
113
145
|
|
|
114
|
-
`/
|
|
146
|
+
`/glossary`, `/newsletter` (base-layer seeds every starter carries, #6658 D5):
|
|
115
147
|
|
|
116
|
-
<!-- generated:begin page=/
|
|
148
|
+
<!-- generated:begin page=/glossary -->
|
|
117
149
|
|
|
118
|
-
| # | Section
|
|
119
|
-
| --- |
|
|
120
|
-
| 1 | `
|
|
150
|
+
| # | Section | Component | Copy (first line) |
|
|
151
|
+
| --- | ----------------------------------- | --------------- | -------------------------------------------- |
|
|
152
|
+
| 1 | `hero` (eyebrow "Glossary" · 1 CTA) | `Hero` | {Glossary: the terms your customers look up} |
|
|
153
|
+
| 2 | `glossary-index` (columns) | `GlossaryIndex` | {Terms, A to Z} |
|
|
121
154
|
|
|
122
155
|
<!-- generated:end -->
|
|
123
156
|
|
|
124
|
-
|
|
157
|
+
<!-- generated:begin page=/newsletter -->
|
|
158
|
+
|
|
159
|
+
| # | Section | Component | Copy (first line) |
|
|
160
|
+
| --- | ------------------------------------- | ------------ | ------------------------------------------------ |
|
|
161
|
+
| 1 | `hero` (eyebrow "Newsletter" · 1 CTA) | `Hero` | {Newsletter: what subscribers get and how often} |
|
|
162
|
+
| 2 | `newsletter` | `Newsletter` | Subscribe |
|
|
163
|
+
| 3 | `faq` (expanded · items ×3) | `FAQ` | FAQs |
|
|
164
|
+
|
|
165
|
+
<!-- generated:end -->
|
|
125
166
|
|
|
126
|
-
|
|
167
|
+
`/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`):
|
|
127
168
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
|
169
|
+
<!-- generated:begin page=/book-a-call -->
|
|
170
|
+
|
|
171
|
+
| # | Section | Component | Copy (first line) |
|
|
172
|
+
| --- | -------------------------------------- | --------- | ------------------------------------------ |
|
|
173
|
+
| 1 | `hero` (eyebrow "Book a call" · 1 CTA) | `Hero` | {Book a call: what a visitor gets from it} |
|
|
174
|
+
| 2 | `items` (columns=3 · items ×3) | `Items` | What happens on the call? |
|
|
131
175
|
|
|
132
176
|
<!-- generated:end -->
|
|
133
177
|
|
|
134
|
-
`/
|
|
178
|
+
`/purchase-policy`:
|
|
135
179
|
|
|
136
|
-
<!-- generated:begin page=/
|
|
180
|
+
<!-- generated:begin page=/purchase-policy -->
|
|
137
181
|
|
|
138
|
-
| # | Section
|
|
139
|
-
| --- |
|
|
140
|
-
| 1 | `document-chassis` | `DocumentChassis` |
|
|
182
|
+
| # | Section | Component | Copy (first line) |
|
|
183
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
184
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Purchase Policy |
|
|
141
185
|
|
|
142
186
|
<!-- generated:end -->
|
|
143
187
|
|
|
@@ -145,9 +189,9 @@ _Code route — no content, no sections._
|
|
|
145
189
|
|
|
146
190
|
<!-- generated:begin page=/privacy -->
|
|
147
191
|
|
|
148
|
-
| # | Section
|
|
149
|
-
| --- |
|
|
150
|
-
| 1 | `document-chassis` (
|
|
192
|
+
| # | Section | Component | Copy (first line) |
|
|
193
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
194
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Privacy Policy |
|
|
151
195
|
|
|
152
196
|
<!-- generated:end -->
|
|
153
197
|
|
|
@@ -155,9 +199,9 @@ _Code route — no content, no sections._
|
|
|
155
199
|
|
|
156
200
|
<!-- generated:begin page=/terms -->
|
|
157
201
|
|
|
158
|
-
| # | Section
|
|
159
|
-
| --- |
|
|
160
|
-
| 1 | `document-chassis` (
|
|
202
|
+
| # | Section | Component | Copy (first line) |
|
|
203
|
+
| --- | ----------------------------------- | ----------------- | ----------------- |
|
|
204
|
+
| 1 | `document-chassis` (layout=article) | `DocumentChassis` | Terms of Service |
|
|
161
205
|
|
|
162
206
|
<!-- generated:end -->
|
|
163
207
|
|
|
@@ -182,6 +226,13 @@ _Code route — no content, no sections._
|
|
|
182
226
|
_Code route — no content, no sections._
|
|
183
227
|
<!-- generated:end -->
|
|
184
228
|
|
|
229
|
+
`/thanks/[slug]`:
|
|
230
|
+
|
|
231
|
+
<!-- generated:begin page=/thanks/[slug] -->
|
|
232
|
+
|
|
233
|
+
_Code route — no content, no sections._
|
|
234
|
+
<!-- generated:end -->
|
|
235
|
+
|
|
185
236
|
`/meet`:
|
|
186
237
|
|
|
187
238
|
<!-- generated:begin page=/meet -->
|
|
@@ -212,7 +263,7 @@ _Code route — no content, no sections._
|
|
|
212
263
|
|
|
213
264
|
## 4. Roster, as the registry declares it
|
|
214
265
|
|
|
215
|
-
`simple-service` is the second declared template that does not reuse `TEMPLATE_BASE_ROSTER`: a lawn-care site sells three named services from `/services`, not from a pricing table, so `/how-it-works`, `/
|
|
266
|
+
`simple-service` is the second declared template that does not reuse `TEMPLATE_BASE_ROSTER`: a lawn-care site sells three named services from `/services`, not from a pricing table, so `/how-it-works`, the product page (`/software/product`) and `/pricing` 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:
|
|
216
267
|
|
|
217
268
|
<!-- generated:begin roster -->
|
|
218
269
|
|
|
@@ -220,25 +271,29 @@ _Code route — no content, no sections._
|
|
|
220
271
|
simple-service:
|
|
221
272
|
requires: [marketing, scheduling, commerce]
|
|
222
273
|
categories: [landscaping]
|
|
274
|
+
shape: local-business-service
|
|
275
|
+
design: standard
|
|
223
276
|
roster:
|
|
224
|
-
- { route: "/", content: ["content/en/HomePage/home.mdx"] }
|
|
225
|
-
- { route: "/services", content: ["content/en/ServicesList/services.mdx"] }
|
|
226
|
-
- { route: "/services/[slug]" }
|
|
227
|
-
- { route: "/about", content: ["content/en/AboutPage/about.mdx"] }
|
|
228
|
-
- { route: "/contact", content: ["content/en/ContactPage/contact.mdx"] }
|
|
229
|
-
- { route: "/faq", content: ["content/en/FAQPage/faq.mdx"] }
|
|
230
|
-
- { route: "/
|
|
231
|
-
- { route: "/
|
|
232
|
-
- { route: "/
|
|
233
|
-
- { route: "/
|
|
234
|
-
- { route: "/
|
|
235
|
-
- { route: "/
|
|
236
|
-
- { route: "/
|
|
237
|
-
- { route: "/purchase/
|
|
238
|
-
- { route: "/
|
|
239
|
-
- { route: "/
|
|
240
|
-
- { route: "/meet
|
|
241
|
-
- { route: "/
|
|
277
|
+
- { route: "/", kind: page, content: ["content/en/HomePage/home.mdx"] }
|
|
278
|
+
- { route: "/services", kind: page, content: ["content/en/ServicesList/services.mdx"] }
|
|
279
|
+
- { route: "/services/[slug]", kind: page, contentDir: "content/en/Service" }
|
|
280
|
+
- { route: "/about", kind: page, content: ["content/en/AboutPage/about.mdx"] }
|
|
281
|
+
- { route: "/contact", kind: page, content: ["content/en/ContactPage/contact.mdx"] }
|
|
282
|
+
- { route: "/faq", kind: page, content: ["content/en/FAQPage/faq.mdx"] }
|
|
283
|
+
- { route: "/glossary", kind: page, content: ["content/en/GlossaryList/glossary.mdx"] }
|
|
284
|
+
- { route: "/newsletter", kind: page, content: ["content/en/NewsletterSignup/newsletter.mdx"] }
|
|
285
|
+
- { route: "/book-a-call", kind: page, content: ["content/en/BookCall/book-call.mdx"] }
|
|
286
|
+
- { route: "/purchase-policy", kind: page, content: ["content/en/PurchasePolicyPage/purchase-policy.mdx"] }
|
|
287
|
+
- { route: "/privacy", kind: page, content: ["content/en/PrivacyPage/privacy.mdx"] }
|
|
288
|
+
- { route: "/terms", kind: page, content: ["content/en/TermsPage/terms.mdx"] }
|
|
289
|
+
- { route: "/account", kind: route }
|
|
290
|
+
- { route: "/purchase/success", kind: route }
|
|
291
|
+
- { route: "/purchase/cancel", kind: route }
|
|
292
|
+
- { route: "/thanks/[slug]", kind: route }
|
|
293
|
+
- { route: "/meet", kind: route }
|
|
294
|
+
- { route: "/meet/[slug]", kind: route }
|
|
295
|
+
- { route: "/meet/confirmed", kind: route }
|
|
296
|
+
- { route: "/appointments", kind: route }
|
|
242
297
|
```
|
|
243
298
|
|
|
244
299
|
<!-- generated:end -->
|
|
@@ -247,14 +302,14 @@ By source:
|
|
|
247
302
|
|
|
248
303
|
```
|
|
249
304
|
template: / · /services · /services/<slug> · /about · /contact · /faq
|
|
250
|
-
/
|
|
251
|
-
/purchase/success · /purchase/cancel
|
|
305
|
+
/purchase-policy · /privacy · /terms · /account
|
|
306
|
+
/purchase/success · /purchase/cancel · /thanks/<slug>
|
|
252
307
|
scheduling: /meet · /meet/<slug> · /meet/confirmed · /appointments
|
|
253
308
|
```
|
|
254
309
|
|
|
255
310
|
**Why the two `/purchase/*` rows are the TEMPLATE's and not the `commerce` module's.** #6084 landed the checkout return pair under the operator's shape-2 disposition (#6084 D12): `CORE_ROUTE_DIRS` carries `[locale]/purchase`, and neither `GATEABLE_SURFACES` nor `MODULE_SURFACES.commerce` gained an entry, so `MODULE_SLICES.commerce` contributes **no** `pageContributions` at all. Nothing else claims the two routes, so declaring them here trips no both-claimants refusal — and the issue's AC-1 requires the merged roster to carry them. The four scheduling rows, by contrast, **are** the module's, and declaring one here would make `mergeRoster` refuse this template outright.
|
|
256
311
|
|
|
257
|
-
`/account` and
|
|
312
|
+
`/account` and `/purchase-policy` carry no `GATEABLE_SURFACES` entry and need none: `(authed)` ships unconditionally, and `/purchase-policy` has no gateable surface at all, so it is always copied. The six module-less surfaces this roster enables are `book-a-call`, `glossary`, `newsletter`, `privacy`, `services` and `terms`.
|
|
258
313
|
|
|
259
314
|
## 5. Component inventory
|
|
260
315
|
|
|
@@ -262,11 +317,11 @@ Every component the roster rows' seed content composes today (generated):
|
|
|
262
317
|
|
|
263
318
|
<!-- generated:begin inventory -->
|
|
264
319
|
|
|
265
|
-
| Tier | Used by this template
|
|
266
|
-
| -------- |
|
|
267
|
-
| Shell | `MarketingShell`
|
|
268
|
-
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`)
|
|
269
|
-
| Sections | `
|
|
320
|
+
| Tier | Used by this template |
|
|
321
|
+
| -------- | ----------------------------------------------------------------------------------------------- |
|
|
322
|
+
| Shell | `MarketingShell` |
|
|
323
|
+
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
|
|
324
|
+
| Sections | `ContentBlock`, `CTA`, `DocumentChassis`, `FAQ`, `GlossaryIndex`, `Hero`, `Items`, `Newsletter` |
|
|
270
325
|
|
|
271
326
|
<!-- generated:end -->
|
|
272
327
|
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
"name": "simple-service",
|
|
3
3
|
"requires": ["marketing", "scheduling", "commerce"],
|
|
4
4
|
"extends": "_base",
|
|
5
|
-
"$comment": "The T1 lawn-care template (#6087, Epic #5778) — the first site shape that composes scheduling and commerce. Composed base -> modules -> template: /
|
|
5
|
+
"$comment": "The T1 lawn-care template (#6087, Epic #5778) — the first site shape that composes scheduling and commerce. Composed base -> modules -> template: /privacy and /terms arrive with the _base layer this extends (its unrostered /pricing seed does not install, #6646), and /purchase-policy is this tree's own service-shape override of the overlay's product-shape seed (#6646 — cancellation and refunds sections); /meet, /meet/<slug>, /meet/confirmed and /appointments with the scheduling bundle; /purchase/success and /purchase/cancel are BASE TREE (#6084 D12 shape 2 — CORE_ROUTE_DIRS carries [locale]/purchase and the commerce licence claim, not the scaffold, decides whether they serve); the Free about/contact/faq compositions with the overlay, which this template's own /about, /contact and /faq files then override; the overlay's other seeds (/use-cases, the /software/product page, the /blog teaser) are unrostered here and do not install (#6646). This tree holds ONLY its own compositions and its placeholder copy. It declares no layout block — the default marketing-site chrome is what this template renders with, and the code registry (TEMPLATE_MANIFESTS) is authoritative for a template create-ailk ships, so a duplicate block here would be a second authority for one fact. installMap: bundle-relative source -> scaffold-relative destination; the stager reads only installMap/postInstall/patches. Unmapped content/en/** lands at the scaffold root's content/, exactly as marketing-site-free's does.",
|
|
6
6
|
"installMap": {
|
|
7
|
-
"provenance.json": ".ailk-template.json"
|
|
7
|
+
"provenance.json": ".ailk-template.json",
|
|
8
|
+
"TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json"
|
|
8
9
|
},
|
|
9
|
-
"postInstall": "Template simple-service installed. This is the lawn-care shape: three priced services at /services (content/en/Service/), a booker at /meet from the scheduling module, the site owner's own list at /appointments, and the checkout return pair at /purchase/success and /purchase/cancel. /privacy and /
|
|
10
|
+
"postInstall": "Template simple-service installed. This is the lawn-care shape: three priced services at /services (content/en/Service/), a booker at /meet from the scheduling module, the site owner's own list at /appointments, and the checkout return pair at /purchase/success and /purchase/cancel. /privacy, /terms, /glossary and /newsletter came with the base layer, and /book-a-call is this template's own override of the base seed, its call to action opening the /meet booker. This template adds the home page, /services and its three detail pages, /about, /contact, /faq and /purchase-policy (cancellation and refunds). THE THREE PRICES ARE PLACEHOLDERS AND THEY ARE PUBLISHED: each service page's top-level price and priceCurrency become a schema.org Offer in that page's JSON-LD, which is what an agent reading your site quotes back to a buyer — replace all three, and the provider name with them, before you launch. Taking money needs the commerce licence claim and your own Stripe account: without the claim the return pages 404 by design. EVERY line of copy on this site is a placeholder too — replace it before you launch."
|
|
10
11
|
}
|