create-ailk 0.13.0 → 0.15.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 +12 -4
- package/component-catalog.json +250 -36
- package/component-catalog.md +10 -6
- package/dist/add-module.d.ts +7 -0
- package/dist/add-module.js +34 -2
- package/dist/add-route.js +18 -2
- package/dist/apply-design.d.ts +32 -2
- package/dist/apply-design.js +155 -22
- package/dist/cli.js +24 -3
- package/dist/derive-architecture.d.ts +15 -2
- package/dist/derive-architecture.js +34 -6
- package/dist/design-compile.d.ts +70 -2
- package/dist/design-compile.js +97 -1
- package/dist/design-home.d.ts +74 -0
- package/dist/design-home.js +256 -0
- package/dist/design-package.d.ts +39 -2
- package/dist/design-package.js +224 -9
- package/dist/design-presets.d.ts +17 -1
- package/dist/design-presets.js +17 -5
- package/dist/design-scaffold.d.ts +6 -25
- package/dist/design-scaffold.js +26 -74
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/lib/chrome-readers.d.ts +21 -0
- package/dist/lib/chrome-readers.js +100 -0
- package/dist/lib/design-checks.d.ts +12 -1
- package/dist/lib/design-checks.js +38 -2
- package/dist/lib/extract-module-bundle.d.ts +11 -0
- package/dist/lib/extract-module-bundle.js +36 -6
- package/dist/lib/license-key-files.d.ts +6 -1
- package/dist/lib/license-key-files.js +9 -4
- package/dist/lib/module-license-gate.d.ts +9 -0
- package/dist/lib/module-license-gate.js +18 -0
- package/dist/module-architecture.d.ts +9 -0
- package/dist/module-architecture.js +6 -0
- package/dist/parse-args.d.ts +22 -0
- package/dist/parse-args.js +73 -0
- package/dist/programmatic.d.ts +20 -0
- package/dist/programmatic.js +180 -35
- package/dist/site-chrome.d.ts +42 -0
- package/dist/site-chrome.js +140 -2
- package/dist/site-fonts.d.ts +21 -0
- package/dist/site-fonts.js +54 -0
- package/dist/site-manifest.d.ts +12 -5
- package/dist/site-manifest.js +25 -11
- package/dist/site-roster.d.ts +16 -0
- package/dist/site-roster.js +81 -0
- package/dist/starter-grid.js +15 -0
- package/dist/surfaces.js +12 -0
- package/dist/sync-routes.js +11 -2
- package/dist/team-profiles.d.ts +29 -0
- package/dist/team-profiles.js +43 -0
- package/dist/topology.d.ts +131 -0
- package/dist/topology.js +533 -0
- package/package.json +3 -3
- package/release-scope.json +1 -1
- package/site-templates/_base/content/en/TeamList/team.mdx +68 -0
- package/site-templates/_base/content/en/TeamMember/first-member.mdx +22 -0
- package/site-templates/_base/content/en/TeamMember/second-member.mdx +22 -0
- package/site-templates/_base/content/en/TeamMember/third-member.mdx +22 -0
- package/site-templates/designs/minimalism/DESIGN.md +166 -36
- package/site-templates/designs/minimalism/home/local-business-service.mdx +119 -0
- package/site-templates/designs/minimalism/home/organization-product.mdx +132 -0
- package/site-templates/designs/minimalism/home/organization-service.mdx +131 -0
- package/site-templates/designs/minimalism/home/person-service.mdx +101 -0
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +34 -1
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +20 -0
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +34 -1
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +22 -1
- package/site-templates/marketing-site-free/ailk-template.json +1 -1
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.json +34 -1
- package/site-templates/shapes/local-business-service/TEMPLATE-MANIFEST.md +26 -7
- package/site-templates/shapes/local-business-service/ailk-template.json +1 -1
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.json +34 -1
- package/site-templates/shapes/organization-service/TEMPLATE-MANIFEST.md +26 -7
- package/site-templates/shapes/organization-service/ailk-template.json +1 -1
- package/templates/README.md +2 -0
- package/templates/apps/api/CLAUDE.md +6 -1
- package/templates/apps/api/package.json +1 -0
- package/templates/apps/api/src/__tests__/factories/agent-caller.ts +5 -1
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +10 -0
- package/templates/apps/api/src/lib/__tests__/agent-store.test.ts +114 -1
- package/templates/apps/api/src/lib/__tests__/site.test.ts +54 -0
- package/templates/apps/api/src/lib/agent-store.ts +95 -3
- package/templates/apps/api/src/lib/site.ts +37 -0
- package/templates/apps/api/src/lib/spoke-store.ts +18 -2
- package/templates/apps/api/src/middleware/__tests__/auth.bearer-path.test.ts +4 -0
- package/templates/apps/api/src/middleware/__tests__/default-tenant.test.ts +22 -0
- package/templates/apps/api/src/middleware/auth.ts +3 -0
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +23 -0
- package/templates/apps/api/src/openapi/spec.ts +38 -2
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +50 -2
- package/templates/apps/api/src/routes/checkout/sessions.ts +7 -0
- package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +275 -0
- package/templates/apps/api/src/routes/leads/index.ts +69 -6
- package/templates/apps/api/src/routes/webhooks/README.md +39 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-site-filter.test.ts +366 -0
- package/templates/apps/api/src/routes/webhooks/stripe.ts +61 -1
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +199 -0
- package/templates/apps/api/src/services/default-tenant.ts +41 -7
- package/templates/apps/api/src/services/lead-routing.ts +148 -29
- package/templates/apps/api/src/services/public-site-resolver.ts +48 -0
- package/templates/apps/mcp/__tests__/index.test.ts +5 -5
- package/templates/apps/mcp/package.json +1 -1
- package/templates/apps/mcp/src/index.ts +6 -4
- package/templates/apps/mcp/src/lib/content-adapter.ts +2 -2
- package/templates/apps/mcp/src/lib/topology.generated.ts +24 -0
- package/templates/apps/web/CLAUDE.md +12 -0
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/settings.test.tsx +10 -0
- package/templates/apps/web/app/[locale]/(authed)/account/settings/__tests__/theme-modes.test.ts +42 -0
- package/templates/apps/web/app/[locale]/(authed)/account/settings/theme-modes.ts +8 -0
- package/templates/apps/web/app/[locale]/[slug]/[detail]/__tests__/page.test.tsx +3 -0
- package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +3 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +2 -2
- package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +2 -2
- package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +14 -1
- package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +66 -14
- package/templates/apps/web/app/[locale]/contact/__tests__/site-contact-lines.test.ts +163 -0
- package/templates/apps/web/app/[locale]/contact/site-contact-lines.ts +68 -0
- package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +4 -4
- package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +15 -3
- package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +17 -6
- package/templates/apps/web/app/[locale]/for/__tests__/page-renderer-migration.test.tsx +14 -1
- package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +2 -2
- package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +4 -6
- package/templates/apps/web/app/[locale]/layout.tsx +212 -57
- package/templates/apps/web/app/[locale]/newsletter/__tests__/page.test.tsx +3 -0
- package/templates/apps/web/app/[locale]/page.tsx +37 -0
- package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +2 -2
- package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +4 -6
- package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +5 -2
- package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +15 -2
- package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +43 -6
- package/templates/apps/web/app/[locale]/services/page.tsx +14 -2
- package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +2 -2
- package/templates/apps/web/app/[locale]/team/[slug]/page.tsx +45 -0
- package/templates/apps/web/app/[locale]/team/__tests__/team-routes.test.tsx +155 -0
- package/templates/apps/web/app/[locale]/team/page.tsx +49 -0
- package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +2 -2
- package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +14 -1
- package/templates/apps/web/app/[locale]/thanks/[slug]/__tests__/page.test.tsx +3 -0
- package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +2 -2
- package/templates/apps/web/app/not-found.tsx +47 -0
- package/templates/apps/web/app/openapi.json/__tests__/route.test.ts +89 -1
- package/templates/apps/web/app/openapi.json/route.ts +69 -1
- package/templates/apps/web/instrumentation.ts +7 -4
- package/templates/apps/web/lib/__tests__/closing-footer-path.test.ts +96 -0
- package/templates/apps/web/lib/__tests__/profile-back-link.test.ts +95 -0
- package/templates/apps/web/lib/__tests__/relay.test.ts +290 -0
- package/templates/apps/web/lib/__tests__/site-brand.test.ts +52 -0
- package/templates/apps/web/lib/__tests__/site-theme-head.test.ts +70 -0
- package/templates/apps/web/lib/__tests__/site-theme.test.ts +64 -1
- package/templates/apps/web/lib/closing-footer-path.ts +50 -0
- package/templates/apps/web/lib/profile-back-link.ts +51 -0
- package/templates/apps/web/lib/relay.ts +206 -2
- package/templates/apps/web/lib/site-brand.tsx +22 -1
- package/templates/apps/web/lib/site-chrome.ts +15 -0
- package/templates/apps/web/lib/site-fonts.ts +15 -0
- package/templates/apps/web/lib/site-logo.tsx +39 -1
- package/templates/apps/web/lib/site-theme-head.ts +33 -0
- package/templates/apps/web/lib/site-theme.ts +13 -1
- package/templates/apps/web/lib/topology.generated.ts +23 -0
- package/templates/apps/web/messages/en.json +7 -1
- package/templates/apps/web/package.json +1 -1
- package/templates/database/CHANGELOG.md +32 -0
- package/templates/database/__tests__/agents.db.test.ts +65 -0
- package/templates/database/__tests__/lead-idempotency-key.db.test.ts +92 -0
- package/templates/database/auth/schema.prisma +23 -0
- package/templates/database/inbox/schema.prisma +13 -0
- package/templates/database/jest.config.cjs +7 -11
- package/templates/database/migrations/20261008120000_user_last_workspace/migration.sql +35 -0
- package/templates/database/migrations/20261008130000_lead_idempotency_key/migration.sql +20 -0
- package/templates/database/migrations/20261009120000_agent_grants/migration.sql +33 -0
- package/templates/database/package.json +1 -1
- package/versions.json +35 -34
- package/site-templates/designs/minimalism/sample/README.md +0 -48
- package/site-templates/designs/minimalism/sample/content/en/HomePage/home.mdx +0 -244
- package/site-templates/designs/minimalism/sample/public/avatar-placeholder-1.svg +0 -7
- package/site-templates/designs/minimalism/sample/public/avatar-placeholder-2.svg +0 -7
- package/site-templates/designs/minimalism/sample/public/avatar-placeholder-3.svg +0 -7
- package/site-templates/designs/minimalism/sample/public/avatar-placeholder-4.svg +0 -7
- package/site-templates/designs/minimalism/sample/public/avatar-placeholder-5.svg +0 -7
- package/site-templates/designs/minimalism/sample/public/avatar-placeholder-6.svg +0 -7
- package/site-templates/designs/minimalism/sample/public/hero-backdrop.svg +0 -17
- package/site-templates/designs/minimalism/sample/public/logo-placeholder-1.svg +0 -6
- package/site-templates/designs/minimalism/sample/public/logo-placeholder-2.svg +0 -6
- package/site-templates/designs/minimalism/sample/public/logo-placeholder-3.svg +0 -6
- package/site-templates/designs/minimalism/sample/public/wordmark-placeholder.svg +0 -28
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "HomePage"
|
|
3
|
+
slug: "home"
|
|
4
|
+
title: "Your Company"
|
|
5
|
+
description: "The minimalism design's home arc for the organization-service shape — landing, who we are, how we work, what we offer, why us. Every line is a placeholder; replace it before you launch."
|
|
6
|
+
sections:
|
|
7
|
+
[
|
|
8
|
+
{
|
|
9
|
+
"id": "landing",
|
|
10
|
+
"type": "hero",
|
|
11
|
+
"data":
|
|
12
|
+
{
|
|
13
|
+
"surface": "none",
|
|
14
|
+
"headline": "{Your Company}",
|
|
15
|
+
"primaryCta": { "label": "{One action}", "href": "/contact" },
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "who-we-are",
|
|
20
|
+
"type": "content-block",
|
|
21
|
+
"data": { "surface": "none", "headline": "{Who you are, in one line}" },
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "how-we-work",
|
|
25
|
+
"type": "content-block",
|
|
26
|
+
"data":
|
|
27
|
+
{
|
|
28
|
+
"surface": "none",
|
|
29
|
+
"headline": "{How you work with a client, in one line}",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "what-we-offer",
|
|
34
|
+
"type": "items",
|
|
35
|
+
"data":
|
|
36
|
+
{
|
|
37
|
+
"surface": "solid-dark",
|
|
38
|
+
"headline": "{What we offer}",
|
|
39
|
+
"items":
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"title": "{First engagement}",
|
|
43
|
+
"description": "{One line on what it is}",
|
|
44
|
+
"link":
|
|
45
|
+
{
|
|
46
|
+
"label": "{Read more}",
|
|
47
|
+
"href": "/services/first-engagement",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"title": "{Second engagement}",
|
|
52
|
+
"description": "{One line on what it is}",
|
|
53
|
+
"link":
|
|
54
|
+
{
|
|
55
|
+
"label": "{Read more}",
|
|
56
|
+
"href": "/services/second-engagement",
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"title": "{Third engagement}",
|
|
61
|
+
"description": "{One line on what it is}",
|
|
62
|
+
"link":
|
|
63
|
+
{
|
|
64
|
+
"label": "{Read more}",
|
|
65
|
+
"href": "/services/third-engagement",
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "why-us",
|
|
73
|
+
"type": "content-block",
|
|
74
|
+
"data":
|
|
75
|
+
{
|
|
76
|
+
"surface": "none",
|
|
77
|
+
"headline": "{Why a client should choose you, in one line}",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "people",
|
|
82
|
+
"type": "team",
|
|
83
|
+
"data":
|
|
84
|
+
{
|
|
85
|
+
"surface": "none",
|
|
86
|
+
"headline": "{The people behind the work}",
|
|
87
|
+
"members":
|
|
88
|
+
[
|
|
89
|
+
{
|
|
90
|
+
"name": "{First team member's name}",
|
|
91
|
+
"role": "{Their title}",
|
|
92
|
+
"links":
|
|
93
|
+
[
|
|
94
|
+
{
|
|
95
|
+
"type": "page",
|
|
96
|
+
"url": "/team/first-member",
|
|
97
|
+
"label": "{View profile}",
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "{Second team member's name}",
|
|
103
|
+
"role": "{Their title}",
|
|
104
|
+
"links":
|
|
105
|
+
[
|
|
106
|
+
{
|
|
107
|
+
"type": "page",
|
|
108
|
+
"url": "/team/second-member",
|
|
109
|
+
"label": "{View profile}",
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "{Third team member's name}",
|
|
115
|
+
"role": "{Their title}",
|
|
116
|
+
"links":
|
|
117
|
+
[
|
|
118
|
+
{
|
|
119
|
+
"type": "page",
|
|
120
|
+
"url": "/team/third-member",
|
|
121
|
+
"label": "{View profile}",
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
]
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
Placeholder copy. The minimalism design seeded this home: every headline and line on it is a placeholder — replace them before you launch.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "HomePage"
|
|
3
|
+
slug: "home"
|
|
4
|
+
title: "Your Name"
|
|
5
|
+
description: "The minimalism design's home arc for the person-service shape — landing, who we are, how we work, what we offer, why us, the person. Every line is a placeholder; replace it before you launch."
|
|
6
|
+
sections:
|
|
7
|
+
[
|
|
8
|
+
{
|
|
9
|
+
"id": "landing",
|
|
10
|
+
"type": "hero",
|
|
11
|
+
"data":
|
|
12
|
+
{
|
|
13
|
+
"surface": "none",
|
|
14
|
+
"headline": "{Your Name}",
|
|
15
|
+
"primaryCta": { "label": "{One action}", "href": "/contact" },
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "who-we-are",
|
|
20
|
+
"type": "content-block",
|
|
21
|
+
"data": { "surface": "none", "headline": "{Who you are, in one line}" },
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "how-we-work",
|
|
25
|
+
"type": "content-block",
|
|
26
|
+
"data":
|
|
27
|
+
{
|
|
28
|
+
"surface": "none",
|
|
29
|
+
"headline": "{How you work with a client, in one line}",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "what-we-offer",
|
|
34
|
+
"type": "items",
|
|
35
|
+
"data":
|
|
36
|
+
{
|
|
37
|
+
"surface": "solid-dark",
|
|
38
|
+
"headline": "{What I offer}",
|
|
39
|
+
"items":
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"title": "{First engagement}",
|
|
43
|
+
"description": "{One line on what it is}",
|
|
44
|
+
"link":
|
|
45
|
+
{
|
|
46
|
+
"label": "{Read more}",
|
|
47
|
+
"href": "/services/first-engagement",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"title": "{Second engagement}",
|
|
52
|
+
"description": "{One line on what it is}",
|
|
53
|
+
"link":
|
|
54
|
+
{
|
|
55
|
+
"label": "{Read more}",
|
|
56
|
+
"href": "/services/second-engagement",
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"title": "{Third engagement}",
|
|
61
|
+
"description": "{One line on what it is}",
|
|
62
|
+
"link":
|
|
63
|
+
{
|
|
64
|
+
"label": "{Read more}",
|
|
65
|
+
"href": "/services/third-engagement",
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"id": "why-us",
|
|
73
|
+
"type": "content-block",
|
|
74
|
+
"data":
|
|
75
|
+
{
|
|
76
|
+
"surface": "none",
|
|
77
|
+
"headline": "{Why a client should choose you, in one line}",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "people",
|
|
82
|
+
"type": "team",
|
|
83
|
+
"data":
|
|
84
|
+
{
|
|
85
|
+
"surface": "none",
|
|
86
|
+
"headline": "{Who you will work with}",
|
|
87
|
+
"members":
|
|
88
|
+
[
|
|
89
|
+
{
|
|
90
|
+
"name": "{Your Name}",
|
|
91
|
+
"role": "{What you do}",
|
|
92
|
+
"links":
|
|
93
|
+
[{ "type": "page", "url": "/about", "label": "{About you}" }],
|
|
94
|
+
},
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
]
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
Placeholder copy. The minimalism design seeded this home: every headline and line on it is a placeholder — replace them before you launch.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
],
|
|
18
18
|
"shape": "organization-product",
|
|
19
19
|
"design": "standard",
|
|
20
|
-
"generatedHash": "
|
|
20
|
+
"generatedHash": "971a929b8fe9feb35845c69fc7af93fb01ff9b1e408b8a6abedb5fd5ddbdf26f",
|
|
21
21
|
"layout": {
|
|
22
22
|
"nav": "full",
|
|
23
23
|
"footer": "columns",
|
|
@@ -602,6 +602,39 @@
|
|
|
602
602
|
"chrome": "on",
|
|
603
603
|
"sections": []
|
|
604
604
|
},
|
|
605
|
+
{
|
|
606
|
+
"route": "/team",
|
|
607
|
+
"kind": "page",
|
|
608
|
+
"pageType": "TeamList",
|
|
609
|
+
"schema": "TeamList",
|
|
610
|
+
"shell": "MarketingShell",
|
|
611
|
+
"chrome": "on",
|
|
612
|
+
"sections": [
|
|
613
|
+
{
|
|
614
|
+
"type": "hero",
|
|
615
|
+
"component": "Hero"
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"type": "team",
|
|
619
|
+
"component": "Team"
|
|
620
|
+
}
|
|
621
|
+
]
|
|
622
|
+
},
|
|
623
|
+
{
|
|
624
|
+
"route": "/team/[slug]",
|
|
625
|
+
"kind": "page",
|
|
626
|
+
"contentDir": "content/en/TeamMember",
|
|
627
|
+
"seeds": [
|
|
628
|
+
"content/en/TeamMember/first-member.mdx",
|
|
629
|
+
"content/en/TeamMember/second-member.mdx",
|
|
630
|
+
"content/en/TeamMember/third-member.mdx"
|
|
631
|
+
],
|
|
632
|
+
"pageType": "TeamMember",
|
|
633
|
+
"schema": "TeamMember",
|
|
634
|
+
"shell": "MarketingShell",
|
|
635
|
+
"chrome": "on",
|
|
636
|
+
"sections": []
|
|
637
|
+
},
|
|
605
638
|
{
|
|
606
639
|
"route": "/blog",
|
|
607
640
|
"kind": "page",
|
|
@@ -450,6 +450,24 @@ Spec 6892 D3 — a signal-collectors module sample: the referral magnet, whose C
|
|
|
450
450
|
_Detail route over `content/en/PortfolioItem/` — 4 seed pages: `sample-four.mdx`, `sample-one.mdx`, `sample-three.mdx`, `sample-two.mdx`._
|
|
451
451
|
<!-- generated:end -->
|
|
452
452
|
|
|
453
|
+
`/team`:
|
|
454
|
+
|
|
455
|
+
<!-- generated:begin page=/team -->
|
|
456
|
+
|
|
457
|
+
| # | Section | Component | Copy (first line) |
|
|
458
|
+
| --- | --------------------------------------- | --------- | ----------------------------- |
|
|
459
|
+
| 1 | `hero` (default · eyebrow "{Team}") | `Hero` | {The people behind the work.} |
|
|
460
|
+
| 2 | `team` (with-large-images · members ×3) | `Team` | {First team member's name} |
|
|
461
|
+
|
|
462
|
+
<!-- generated:end -->
|
|
463
|
+
|
|
464
|
+
`/team/[slug]`:
|
|
465
|
+
|
|
466
|
+
<!-- generated:begin page=/team/[slug] -->
|
|
467
|
+
|
|
468
|
+
_Detail route over `content/en/TeamMember/` — 3 seed pages: `first-member.mdx`, `second-member.mdx`, `third-member.mdx`._
|
|
469
|
+
<!-- generated:end -->
|
|
470
|
+
|
|
453
471
|
## 2a. State and persistence — Pro delta
|
|
454
472
|
|
|
455
473
|
Everything in the Free manifest § 2a applies. Pro adds:
|
|
@@ -501,6 +519,8 @@ marketing-site:
|
|
|
501
519
|
- { route: "/referral", kind: page, content: ["content/en/LandingPage/referral.mdx"] }
|
|
502
520
|
- { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
|
|
503
521
|
- { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
|
|
522
|
+
- { route: "/team", kind: page, content: ["content/en/TeamList/team.mdx"] }
|
|
523
|
+
- { route: "/team/[slug]", kind: page, contentDir: "content/en/TeamMember" }
|
|
504
524
|
- { 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"] }
|
|
505
525
|
- { 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"] }
|
|
506
526
|
- { route: "/meet", kind: route }
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"categories": ["accounting", "legal", "technology"],
|
|
5
5
|
"shape": "organization-product",
|
|
6
6
|
"design": "standard",
|
|
7
|
-
"generatedHash": "
|
|
7
|
+
"generatedHash": "518cd610a8b86cf4d520c8691a52dc5a0f53a07bf5b44a8515ef4fb1ec84aa92",
|
|
8
8
|
"layout": {
|
|
9
9
|
"nav": "full",
|
|
10
10
|
"footer": "columns",
|
|
@@ -579,6 +579,39 @@
|
|
|
579
579
|
"shell": "MarketingShell",
|
|
580
580
|
"chrome": "on",
|
|
581
581
|
"sections": []
|
|
582
|
+
},
|
|
583
|
+
{
|
|
584
|
+
"route": "/team",
|
|
585
|
+
"kind": "page",
|
|
586
|
+
"pageType": "TeamList",
|
|
587
|
+
"schema": "TeamList",
|
|
588
|
+
"shell": "MarketingShell",
|
|
589
|
+
"chrome": "on",
|
|
590
|
+
"sections": [
|
|
591
|
+
{
|
|
592
|
+
"type": "hero",
|
|
593
|
+
"component": "Hero"
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"type": "team",
|
|
597
|
+
"component": "Team"
|
|
598
|
+
}
|
|
599
|
+
]
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
"route": "/team/[slug]",
|
|
603
|
+
"kind": "page",
|
|
604
|
+
"contentDir": "content/en/TeamMember",
|
|
605
|
+
"seeds": [
|
|
606
|
+
"content/en/TeamMember/first-member.mdx",
|
|
607
|
+
"content/en/TeamMember/second-member.mdx",
|
|
608
|
+
"content/en/TeamMember/third-member.mdx"
|
|
609
|
+
],
|
|
610
|
+
"pageType": "TeamMember",
|
|
611
|
+
"schema": "TeamMember",
|
|
612
|
+
"shell": "MarketingShell",
|
|
613
|
+
"chrome": "on",
|
|
614
|
+
"sections": []
|
|
582
615
|
}
|
|
583
616
|
]
|
|
584
617
|
}
|
|
@@ -355,6 +355,24 @@ One `before-after` comparison per page, seeded from `site-templates/_base/conten
|
|
|
355
355
|
_Detail route over `content/en/PortfolioItem/` — 4 seed pages: `sample-four.mdx`, `sample-one.mdx`, `sample-three.mdx`, `sample-two.mdx`._
|
|
356
356
|
<!-- generated:end -->
|
|
357
357
|
|
|
358
|
+
`/team`:
|
|
359
|
+
|
|
360
|
+
<!-- generated:begin page=/team -->
|
|
361
|
+
|
|
362
|
+
| # | Section | Component | Copy (first line) |
|
|
363
|
+
| --- | --------------------------------------- | --------- | ----------------------------- |
|
|
364
|
+
| 1 | `hero` (default · eyebrow "{Team}") | `Hero` | {The people behind the work.} |
|
|
365
|
+
| 2 | `team` (with-large-images · members ×3) | `Team` | {First team member's name} |
|
|
366
|
+
|
|
367
|
+
<!-- generated:end -->
|
|
368
|
+
|
|
369
|
+
`/team/[slug]`:
|
|
370
|
+
|
|
371
|
+
<!-- generated:begin page=/team/[slug] -->
|
|
372
|
+
|
|
373
|
+
_Detail route over `content/en/TeamMember/` — 3 seed pages: `first-member.mdx`, `second-member.mdx`, `third-member.mdx`._
|
|
374
|
+
<!-- generated:end -->
|
|
375
|
+
|
|
358
376
|
### `/thanks/<slug>` — per-form confirmation (InstrumentDeliveryPage) · chrome on
|
|
359
377
|
|
|
360
378
|
Not a hub page by design (#3960). Free ships none because the contact form confirms inline. Listed so nobody re-files it.
|
|
@@ -424,11 +442,13 @@ marketing-site-free:
|
|
|
424
442
|
- { route: "/meet/[slug]", kind: page, content: ["content/en/BookCall/book-a-call.mdx", "content/en/BookCall/onsite-estimate.mdx", "content/en/BookCall/start-project.mdx", "content/en/BookCall/onsite-service.mdx"] }
|
|
425
443
|
- { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
|
|
426
444
|
- { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
|
|
445
|
+
- { route: "/team", kind: page, content: ["content/en/TeamList/team.mdx"] }
|
|
446
|
+
- { route: "/team/[slug]", kind: page, contentDir: "content/en/TeamMember" }
|
|
427
447
|
```
|
|
428
448
|
|
|
429
449
|
<!-- generated:end -->
|
|
430
450
|
|
|
431
|
-
All twenty rows are declared on the registry — the `organization-product` shape roster in `src/starter-grid.ts`: `TEMPLATE_BASE_ROSTER` + the `/blog` teaser row + the two portfolio rows (#5469 D3/D4, re-derived by #6658, portfolio added by #6753), so the template is one declared page set whichever mechanism scaffolds each: the always-copied overlay for the core pages, `site-templates/_base/content/**` for the module-less ones and the three use cases. The scaffold carries this roster as `.ailk-site-manifest.json` at its root (#6658 D7); this Markdown stays in the template.
|
|
451
|
+
All twenty-three rows are declared on the registry — the `organization-product` shape roster in `src/starter-grid.ts`: `TEMPLATE_BASE_ROSTER` + the `/blog` teaser row + the two portfolio rows + the two team rows (#5469 D3/D4, re-derived by #6658, portfolio added by #6753, team by #7744), so the template is one declared page set whichever mechanism scaffolds each: the always-copied overlay for the core pages, `site-templates/_base/content/**` for the module-less ones and the three use cases. The scaffold carries this roster as `.ailk-site-manifest.json` at its root (#6658 D7); this Markdown stays in the template.
|
|
432
452
|
|
|
433
453
|
### 3a. Deviations from the standard roster (recorded, #6658)
|
|
434
454
|
|
|
@@ -464,6 +484,7 @@ reversed (`docs/decisions/starter-roster-page-set.md` D4, D7).
|
|
|
464
484
|
| `BlogList` (the `/blog` teaser) | the standard's `convert` goal carries no blog (`blog_enabled: false`); the Free teaser stays by operator ruling 2026-09-24, and where the docs-blog module is present its own `BlogList` serves `/blog` instead |
|
|
465
485
|
| `/software`, `/sign-in`, `/sign-up` | code routes (`kind: route`): the product listing and the two auth pages carry no page type of their own |
|
|
466
486
|
| `PortfolioList`, `PortfolioItem` (`/portfolio`, `/portfolio/[slug]`) | portfolio belongs to the shape, Free included (roadmap § 4, operator 2026-09-25, reversing #6687's "Pro and up"; #6753). `pnpm starter:check` R3.2 counts two more missing anchor captures for these routes — the pre-existing, non-CI anchor gap, now 14 |
|
|
487
|
+
| `TeamList`, `TeamMember` (`/team`, `/team/[slug]`) | team profile pages belong to the organization shapes (checklist D1, #7744). `pnpm starter:check` R3.2 counts two more missing anchor captures for these routes — the pre-existing, non-CI anchor gap, now 16 |
|
|
467
488
|
|
|
468
489
|
### 3b. Site entity (operator-disposed 2026-09-24)
|
|
469
490
|
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
"provenance.json": ".ailk-template.json",
|
|
7
7
|
"TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json"
|
|
8
8
|
},
|
|
9
|
-
"postInstall": "Template marketing-site-free installed. Its /pricing, /privacy, /terms, /glossary, /newsletter and three /
|
|
9
|
+
"postInstall": "Template marketing-site-free installed. Its /pricing, /privacy, /terms, /glossary, /newsletter, three /for/<slug>, /team and three /team/<slug> seed pages came with the base layer it extends (content/en/); /meet and its four /meet/<slug> pages came with the always-copied overlay - replace the placeholder copy before you launch."
|
|
10
10
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
],
|
|
12
12
|
"shape": "local-business-service",
|
|
13
13
|
"design": "standard",
|
|
14
|
-
"generatedHash": "
|
|
14
|
+
"generatedHash": "2884b9e5535e253b067f60bef990f66a97651c366f0484fa1699c0cd54cd4f75",
|
|
15
15
|
"layout": {
|
|
16
16
|
"nav": "full",
|
|
17
17
|
"footer": "columns",
|
|
@@ -473,6 +473,39 @@
|
|
|
473
473
|
"shell": "MarketingShell",
|
|
474
474
|
"chrome": "on",
|
|
475
475
|
"sections": []
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"route": "/team",
|
|
479
|
+
"kind": "page",
|
|
480
|
+
"pageType": "TeamList",
|
|
481
|
+
"schema": "TeamList",
|
|
482
|
+
"shell": "MarketingShell",
|
|
483
|
+
"chrome": "on",
|
|
484
|
+
"sections": [
|
|
485
|
+
{
|
|
486
|
+
"type": "hero",
|
|
487
|
+
"component": "Hero"
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
"type": "team",
|
|
491
|
+
"component": "Team"
|
|
492
|
+
}
|
|
493
|
+
]
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
"route": "/team/[slug]",
|
|
497
|
+
"kind": "page",
|
|
498
|
+
"contentDir": "content/en/TeamMember",
|
|
499
|
+
"seeds": [
|
|
500
|
+
"content/en/TeamMember/first-member.mdx",
|
|
501
|
+
"content/en/TeamMember/second-member.mdx",
|
|
502
|
+
"content/en/TeamMember/third-member.mdx"
|
|
503
|
+
],
|
|
504
|
+
"pageType": "TeamMember",
|
|
505
|
+
"schema": "TeamMember",
|
|
506
|
+
"shell": "MarketingShell",
|
|
507
|
+
"chrome": "on",
|
|
508
|
+
"sections": []
|
|
476
509
|
}
|
|
477
510
|
]
|
|
478
511
|
}
|
|
@@ -264,6 +264,24 @@ _Code route — no content, no sections._
|
|
|
264
264
|
_Detail route over `content/en/PortfolioItem/` — 4 seed pages: `sample-four.mdx`, `sample-one.mdx`, `sample-three.mdx`, `sample-two.mdx`._
|
|
265
265
|
<!-- generated:end -->
|
|
266
266
|
|
|
267
|
+
`/team`:
|
|
268
|
+
|
|
269
|
+
<!-- generated:begin page=/team -->
|
|
270
|
+
|
|
271
|
+
| # | Section | Component | Copy (first line) |
|
|
272
|
+
| --- | --------------------------------------- | --------- | ----------------------------- |
|
|
273
|
+
| 1 | `hero` (default · eyebrow "{Team}") | `Hero` | {The people behind the work.} |
|
|
274
|
+
| 2 | `team` (with-large-images · members ×3) | `Team` | {First team member's name} |
|
|
275
|
+
|
|
276
|
+
<!-- generated:end -->
|
|
277
|
+
|
|
278
|
+
`/team/[slug]`:
|
|
279
|
+
|
|
280
|
+
<!-- generated:begin page=/team/[slug] -->
|
|
281
|
+
|
|
282
|
+
_Detail route over `content/en/TeamMember/` — 3 seed pages: `first-member.mdx`, `second-member.mdx`, `third-member.mdx`._
|
|
283
|
+
<!-- generated:end -->
|
|
284
|
+
|
|
267
285
|
### 3a. Differences from the standard `local-business-service` derivation
|
|
268
286
|
|
|
269
287
|
The standard page set for this shape (`derive-roster.py --shape local-business-service --primary-goal generate-leads --registry packages/schema/src/registry/entries.ts`, harness commit `7bdaf148e1b0e639cd90a80008955e55cc4aa2b5`) is 36 rows, `mainEntity: LocalBusiness`. This starter's roster is that set minus the standard rows the table below drops, plus the rows the table after it adds, each with a reason.
|
|
@@ -272,7 +290,6 @@ The standard page set for this shape (`derive-roster.py --shape local-business-s
|
|
|
272
290
|
|
|
273
291
|
| Standard row | Reason |
|
|
274
292
|
| -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
|
275
|
-
| `TeamList` · `TeamMember` | a placeholder starter has no team to list; `/about` carries the people |
|
|
276
293
|
| `CareersList` · `JobPosting` | a placeholder starter has no open roles |
|
|
277
294
|
| `PartnersList` · `Partner` | a placeholder starter has no partners to list |
|
|
278
295
|
| `ProjectsList` · `Project` | the portfolio pair (`/portfolio`) is the proof of past work; `/projects` is the signal-collectors sample listing |
|
|
@@ -291,7 +308,7 @@ The standard page set for this shape (`derive-roster.py --shape local-business-s
|
|
|
291
308
|
| `BlogList` | every Free scaffold's nav links `/blog` unconditionally (`renderNavConfig`, operator ruling 2026-09-23); the Free teaser serves it, as on organization-product (§ 1.8) |
|
|
292
309
|
| `LandingPage` | the Free `/meet` meeting-types hub is a LandingPage seed, the same generic `[slug]` route serves it through (#6897 D3); the four `/meet/[slug]` BookCall detail seeds ride the `BookCall` type already in the standard roster |
|
|
293
310
|
|
|
294
|
-
`|S − D| =
|
|
311
|
+
`|S − D| = 15` and `|R| = 20`.
|
|
295
312
|
|
|
296
313
|
`/sign-in` and `/sign-up` are also rostered (#6797) — code routes (`kind: route`) with no page type, so they sit outside this set equation: the locale layout's header links both, and the roster of record lists every page the scaffold serves.
|
|
297
314
|
|
|
@@ -328,6 +345,8 @@ local-business-service:
|
|
|
328
345
|
- { route: "/meet/[slug]", kind: page, content: ["content/en/BookCall/book-a-call.mdx", "content/en/BookCall/onsite-estimate.mdx", "content/en/BookCall/start-project.mdx", "content/en/BookCall/onsite-service.mdx"] }
|
|
329
346
|
- { route: "/portfolio", kind: page, content: ["content/en/PortfolioList/portfolio.mdx"] }
|
|
330
347
|
- { route: "/portfolio/[slug]", kind: page, contentDir: "content/en/PortfolioItem" }
|
|
348
|
+
- { route: "/team", kind: page, content: ["content/en/TeamList/team.mdx"] }
|
|
349
|
+
- { route: "/team/[slug]", kind: page, contentDir: "content/en/TeamMember" }
|
|
331
350
|
```
|
|
332
351
|
|
|
333
352
|
<!-- generated:end -->
|
|
@@ -347,10 +366,10 @@ Every row is module-less: `requires` is `[marketing]` alone, so `mergeRoster` co
|
|
|
347
366
|
|
|
348
367
|
<!-- generated:begin inventory -->
|
|
349
368
|
|
|
350
|
-
| Tier | Used by this template
|
|
351
|
-
| -------- |
|
|
352
|
-
| Shell | `MarketingShell`
|
|
353
|
-
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`)
|
|
354
|
-
| Sections | `BlogList`, `ContentBlock`, `CTA`, `DocumentChassis`, `FAQ`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `Testimonials` |
|
|
369
|
+
| Tier | Used by this template |
|
|
370
|
+
| -------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
|
371
|
+
| Shell | `MarketingShell` |
|
|
372
|
+
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
|
|
373
|
+
| Sections | `BlogList`, `ContentBlock`, `CTA`, `DocumentChassis`, `FAQ`, `GlossaryIndex`, `Hero`, `Items`, `LogoCloud`, `Team`, `Testimonials` |
|
|
355
374
|
|
|
356
375
|
<!-- generated:end -->
|
|
@@ -6,5 +6,5 @@
|
|
|
6
6
|
"provenance.json": ".ailk-template.json",
|
|
7
7
|
"TEMPLATE-MANIFEST.json": ".ailk-site-manifest.json"
|
|
8
8
|
},
|
|
9
|
-
"postInstall": "Starter local-business-service installed. Its /faq, /contact, /blog, /meet and its four /meet/<slug> seed pages came with the always-copied overlay; /glossary, /newsletter, /privacy and /
|
|
9
|
+
"postInstall": "Starter local-business-service installed. Its /faq, /contact, /blog, /meet and its four /meet/<slug> seed pages came with the always-copied overlay; /glossary, /newsletter, /privacy, /terms, /team and its three /team/<slug> profiles with the base layer it extends (content/en/). This tree's own /, /about, /services (+ three jobs), /purchase-policy and /portfolio pages are its own compositions. Every line of copy is a placeholder \u2014 replace it before you launch."
|
|
10
10
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"categories": ["accounting", "legal", "real-estate"],
|
|
5
5
|
"shape": "organization-service",
|
|
6
6
|
"design": "standard",
|
|
7
|
-
"generatedHash": "
|
|
7
|
+
"generatedHash": "dc5f942d7fbe9eaeb85606cb73145354af9ca9e780b450824a00973771a41960",
|
|
8
8
|
"layout": {
|
|
9
9
|
"nav": "full",
|
|
10
10
|
"footer": "columns",
|
|
@@ -466,6 +466,39 @@
|
|
|
466
466
|
"shell": "MarketingShell",
|
|
467
467
|
"chrome": "on",
|
|
468
468
|
"sections": []
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
"route": "/team",
|
|
472
|
+
"kind": "page",
|
|
473
|
+
"pageType": "TeamList",
|
|
474
|
+
"schema": "TeamList",
|
|
475
|
+
"shell": "MarketingShell",
|
|
476
|
+
"chrome": "on",
|
|
477
|
+
"sections": [
|
|
478
|
+
{
|
|
479
|
+
"type": "hero",
|
|
480
|
+
"component": "Hero"
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
"type": "team",
|
|
484
|
+
"component": "Team"
|
|
485
|
+
}
|
|
486
|
+
]
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
"route": "/team/[slug]",
|
|
490
|
+
"kind": "page",
|
|
491
|
+
"contentDir": "content/en/TeamMember",
|
|
492
|
+
"seeds": [
|
|
493
|
+
"content/en/TeamMember/first-member.mdx",
|
|
494
|
+
"content/en/TeamMember/second-member.mdx",
|
|
495
|
+
"content/en/TeamMember/third-member.mdx"
|
|
496
|
+
],
|
|
497
|
+
"pageType": "TeamMember",
|
|
498
|
+
"schema": "TeamMember",
|
|
499
|
+
"shell": "MarketingShell",
|
|
500
|
+
"chrome": "on",
|
|
501
|
+
"sections": []
|
|
469
502
|
}
|
|
470
503
|
]
|
|
471
504
|
}
|