create-ailk 0.3.0 → 0.5.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/component-catalog.json +11939 -0
- package/component-catalog.md +176 -64
- package/dist/cli.js +48 -10
- package/dist/derive-architecture.js +5 -2
- package/dist/lib/extract-module-bundle.d.ts +88 -1
- package/dist/lib/extract-module-bundle.js +375 -80
- package/dist/lib/fetch-guard.d.ts +28 -0
- package/dist/lib/fetch-guard.js +101 -0
- package/dist/lib/fetch-module.js +4 -0
- package/dist/lib/fetch-template.d.ts +20 -0
- package/dist/lib/fetch-template.js +133 -0
- package/dist/lib/module-license-gate.d.ts +8 -0
- package/dist/lib/module-license-gate.js +12 -4
- package/dist/module-architecture.d.ts +116 -7
- package/dist/module-architecture.js +465 -94
- package/dist/parse-args.d.ts +8 -1
- package/dist/parse-args.js +49 -2
- package/dist/programmatic.d.ts +36 -1
- package/dist/programmatic.js +216 -5
- package/dist/site-chrome.d.ts +80 -0
- package/dist/site-chrome.js +135 -0
- package/dist/surfaces.d.ts +21 -6
- package/dist/surfaces.js +140 -23
- package/dist/template-manifest.d.ts +144 -0
- package/dist/template-manifest.js +337 -0
- package/dist/template-names.d.ts +41 -0
- package/dist/template-names.js +45 -0
- package/package.json +10 -2
- package/site-templates/_base/ailk-template.json +6 -0
- package/site-templates/_base/content/en/Pricing/pricing.mdx +169 -0
- package/site-templates/_base/content/en/PrivacyPage/privacy.mdx +79 -0
- package/site-templates/_base/content/en/TermsPage/terms.mdx +80 -0
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +331 -0
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +393 -0
- package/site-templates/marketing-site/ailk-template.json +11 -0
- package/site-templates/marketing-site/content/en/blog/05-this-vc-morning-routine-will-make-you-super-annoying.mdx +36 -0
- package/site-templates/marketing-site/provenance.json +4 -0
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +288 -0
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +285 -0
- package/site-templates/marketing-site-free/ailk-template.json +9 -0
- package/site-templates/marketing-site-free/provenance.json +4 -0
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +271 -0
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +324 -0
- package/site-templates/minimalism-site/ailk-template.json +21 -0
- package/site-templates/minimalism-site/assets/avatar-placeholder-1.svg +7 -0
- package/site-templates/minimalism-site/assets/avatar-placeholder-2.svg +7 -0
- package/site-templates/minimalism-site/assets/avatar-placeholder-3.svg +7 -0
- package/site-templates/minimalism-site/assets/avatar-placeholder-4.svg +7 -0
- package/site-templates/minimalism-site/assets/avatar-placeholder-5.svg +7 -0
- package/site-templates/minimalism-site/assets/avatar-placeholder-6.svg +7 -0
- package/site-templates/minimalism-site/assets/hero-backdrop.svg +17 -0
- package/site-templates/minimalism-site/assets/logo-placeholder-1.svg +6 -0
- package/site-templates/minimalism-site/assets/logo-placeholder-2.svg +6 -0
- package/site-templates/minimalism-site/assets/logo-placeholder-3.svg +6 -0
- package/site-templates/minimalism-site/content/en/AboutPage/about.mdx +110 -0
- package/site-templates/minimalism-site/content/en/ContactPage/contact.mdx +68 -0
- package/site-templates/minimalism-site/content/en/FAQPage/faq.mdx +57 -0
- package/site-templates/minimalism-site/content/en/HomePage/home.mdx +214 -0
- package/site-templates/minimalism-site/content/en/LandingPage/referral.mdx +77 -0
- package/site-templates/minimalism-site/content/en/LandingPage/reports.mdx +73 -0
- package/site-templates/minimalism-site/content/en/ReportPage/annual-letter-2024.mdx +52 -0
- package/site-templates/minimalism-site/content/en/ReportPage/field-notes-2023.mdx +52 -0
- package/site-templates/minimalism-site/content/en/ReportPage/platform-shift-2025.mdx +52 -0
- package/site-templates/minimalism-site/content/en/ReportPage/state-of-the-market-2026.mdx +52 -0
- package/site-templates/minimalism-site/content/en/Service/first-engagement.mdx +38 -0
- package/site-templates/minimalism-site/content/en/Service/second-engagement.mdx +38 -0
- package/site-templates/minimalism-site/content/en/Service/third-engagement.mdx +38 -0
- package/site-templates/minimalism-site/content/en/ServicesList/services.mdx +73 -0
- package/site-templates/minimalism-site/flows/referral.flow.json +71 -0
- package/site-templates/minimalism-site/provenance.json +4 -0
- package/site-templates/saas-product/TEMPLATE-MANIFEST.md +61 -0
- package/site-templates/saas-product/ailk-template.json +16 -0
- package/site-templates/saas-product/provenance.json +10 -0
- package/templates/.claude/skills/README.md +16 -25
- package/templates/.env.example +32 -7
- package/templates/.github/workflows/ci.yml +48 -0
- package/templates/README.md +3 -1
- package/templates/apps/api/CLAUDE.md +4 -1
- package/templates/apps/api/eslint.config.mjs +69 -0
- package/templates/apps/api/package.json +6 -2
- package/templates/apps/api/src/__tests__/module-exclusion.test.ts +6 -2
- package/templates/apps/api/src/__tests__/review-surface-registration.test.ts +167 -0
- package/templates/apps/api/src/__tests__/workspace-module-registration.test.ts +173 -0
- package/templates/apps/api/src/config/modules.ts +1 -1
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +3 -0
- package/templates/apps/api/src/middleware/__tests__/default-tenant.test.ts +339 -0
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +108 -0
- package/templates/apps/api/src/middleware/default-tenant.ts +136 -0
- package/templates/apps/api/src/routes/leads/__tests__/list.test.ts +171 -0
- package/templates/apps/api/src/routes/leads/list.ts +104 -0
- package/templates/apps/api/src/server.ts +122 -3
- package/templates/apps/api/src/services/__tests__/lead-promotion.test.ts +408 -0
- package/templates/apps/api/src/services/__tests__/leads-inbox.test.ts +329 -0
- package/templates/apps/api/src/services/default-tenant.ts +261 -0
- package/templates/apps/api/src/services/lead-promotion.ts +161 -0
- package/templates/apps/api/src/services/leads-inbox.ts +263 -0
- package/templates/apps/api/src/services/owner-workspaces.ts +132 -0
- package/templates/apps/mcp/CLAUDE.md +1 -1
- package/templates/apps/mcp/__tests__/parity.test.ts +2 -2
- package/templates/apps/mcp/__tests__/tools/{scaffold.test.ts → create_project.test.ts} +23 -23
- package/templates/apps/mcp/eslint.config.mjs +69 -0
- package/templates/apps/mcp/package.json +6 -2
- package/templates/apps/mcp/src/server.ts +2 -2
- package/templates/apps/mcp/src/tools/{scaffold.ts → create_project.ts} +3 -3
- package/templates/apps/mcp/src/tools/index.ts +2 -2
- package/templates/apps/web/.env.example +3 -3
- package/templates/apps/web/CLAUDE.md +2 -0
- package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +4 -6
- package/templates/apps/web/app/[locale]/(authed)/layout.tsx +1 -1
- package/templates/apps/web/app/[locale]/(authed)/leads/__tests__/page.test.tsx +181 -0
- package/templates/apps/web/app/[locale]/(authed)/leads/components/LeadsTable.tsx +137 -0
- package/templates/apps/web/app/[locale]/(authed)/leads/page.tsx +111 -0
- package/templates/apps/web/app/[locale]/(authed)/sign-in-gate.tsx +1 -1
- package/templates/apps/web/app/[locale]/[slug]/__tests__/page.test.tsx +111 -0
- package/templates/apps/web/app/[locale]/[slug]/page.tsx +65 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/FlowStepperClient.tsx +1 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.permalink.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.test.tsx +6 -5
- package/templates/apps/web/app/[locale]/flows/[slug]/flow.actions.ts +1 -1
- package/templates/apps/web/app/[locale]/layout.tsx +214 -17
- package/templates/apps/web/app/[locale]/pricing/page.tsx +40 -0
- package/templates/apps/web/app/[locale]/privacy/page.tsx +40 -0
- package/templates/apps/web/app/[locale]/terms/page.tsx +40 -0
- package/templates/apps/web/components/google-analytics.tsx +18 -1
- package/templates/apps/web/eslint.config.mjs +69 -0
- package/templates/apps/web/jest.config.cjs +12 -15
- package/templates/apps/web/lib/__tests__/server-api.test.ts +61 -0
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +32 -5
- package/templates/apps/web/lib/nav-config.ts +27 -7
- package/templates/apps/web/lib/server-api.ts +29 -13
- package/templates/apps/web/lib/site-chrome.ts +29 -0
- package/templates/apps/web/lib/telemetry-scrub.ts +46 -0
- package/templates/apps/web/messages/en.json +86 -1
- package/templates/apps/web/next.config.mjs +20 -0
- package/templates/apps/web/package.json +6 -2
- package/templates/apps/web/sentry.client.config.ts +131 -0
- package/templates/apps/web/sentry.edge.config.ts +72 -0
- package/templates/apps/web/sentry.server.config.ts +72 -0
- package/templates/apps/web/src/lib/routes.ts +13 -18
- package/templates/brand_assets/README.md +24 -0
- package/templates/content/en/AboutPage/about.mdx +160 -15
- package/templates/content/en/ContactPage/contact.mdx +90 -13
- package/templates/content/en/FAQPage/faq.mdx +62 -22
- package/templates/content/en/HomePage/home.mdx +244 -20
- package/templates/content/en/LandingPage/blog.mdx +83 -0
- package/templates/content/en/LandingPage/features.mdx +103 -0
- package/templates/content/en/LandingPage/how-it-works.mdx +143 -0
- package/templates/database/CHANGELOG.md +21 -0
- package/templates/database/__tests__/seed.test.ts +1 -1
- package/templates/database/eslint.config.mjs +69 -0
- package/templates/database/package.json +7 -3
- package/templates/database/seed.ts +1 -1
- package/templates/package.json +1 -14
- package/versions.json +52 -0
- /package/templates/apps/web/{src/components → components}/SiteNav.tsx +0 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
# Template manifest — `marketing-site`
|
|
2
|
+
|
|
3
|
+
> **Approved by Sam 2026-09-15 (shape, home-beat mapping, generated-file rule).** The Pro template and flagship (#5464), its live demo at `marketing-site.ailaunchkit.ai`. It is `marketing-site-free` plus the four Pro modules' pages. Everything in the Free manifest applies unchanged; this file lists only the delta. Same generated-file rule: once approved it lives at `packages/create-ailk/site-templates/marketing-site/TEMPLATE-MANIFEST.md`, produced by the manifest generator from the roster (base + module `pageContributions`), each page's MDX `sections`, and `component-catalog.json`.
|
|
4
|
+
|
|
5
|
+
| Field | Value |
|
|
6
|
+
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
7
|
+
| Template | `marketing-site` |
|
|
8
|
+
| Level | Pro |
|
|
9
|
+
| `requires` | `[marketing, docs-blog, scheduling, signal-collectors]` (spec 5462 D12/D15, settled by Sam 2026-09-14) |
|
|
10
|
+
| Delivery | licence-checked module bundle (#5441); never in the Free tarball. Composed base → modules → template (#5618): `/pricing`, `/privacy`, `/terms` arrive from the `_base` layer it `extends`, every module sample from the docs-blog and signal-collectors bundles its `requires` names, and this tree ships one copy override (blog post 05 onto `launching-ailk.mdx`) |
|
|
11
|
+
| Sample content posture | every sample report, post and flow in the demo is **public** |
|
|
12
|
+
|
|
13
|
+
## 1. Chrome delta
|
|
14
|
+
|
|
15
|
+
| Piece | Change from Free |
|
|
16
|
+
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
17
|
+
| Nav | Product flyout gains **Blog** (real listing) and **Docs**; a **Book a call** action replaces "Get started" → `/meet`; "Get started" moves to the hero |
|
|
18
|
+
| Footer | the Blog column lists the latest 5 posts (Bond/standardissue shape); the subscribe block posts to the newsletter route; a **Reports** column when at least one public report exists |
|
|
19
|
+
| Cookie consent | same as Free; the Pro consent package (`packages/consent`, tier `tbd`) is the enforcement hook when installed |
|
|
20
|
+
| Layout knobs (#5612) | same as Free — declares no `layout` block, so every knob resolves to its default; the generated region below is the resolved table (#5618 D7 made this file generated). |
|
|
21
|
+
|
|
22
|
+
### Layout knobs (#5612)
|
|
23
|
+
|
|
24
|
+
The template's `layout` block — resolved with `resolveSiteChrome`, defaults filled.
|
|
25
|
+
|
|
26
|
+
<!-- generated:begin layout -->
|
|
27
|
+
|
|
28
|
+
| Knob | Value |
|
|
29
|
+
| -------------------- | --------- |
|
|
30
|
+
| `nav` | `full` |
|
|
31
|
+
| `footer` | `columns` |
|
|
32
|
+
| `announcementBanner` | `true` |
|
|
33
|
+
| `home` | `default` |
|
|
34
|
+
|
|
35
|
+
<!-- generated:end -->
|
|
36
|
+
|
|
37
|
+
## 2. Pages — delta over Free
|
|
38
|
+
|
|
39
|
+
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
|
+
|
|
41
|
+
### Base rows — from `_base` and the overlay (the Free eleven minus the teaser)
|
|
42
|
+
|
|
43
|
+
`/`:
|
|
44
|
+
|
|
45
|
+
<!-- generated:begin page=/ -->
|
|
46
|
+
|
|
47
|
+
| # | Section | Component | Copy (first line) |
|
|
48
|
+
| --- | ------------------------------------------------------------ | --------------- | -------------------------------------------------- |
|
|
49
|
+
| 1 | `hero` (split · checklist ×3 · 2 CTAs · closingLine) | `Hero` | How to get {outcome} without {problem} |
|
|
50
|
+
| 2 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
51
|
+
| 3 | `decision-split` (panels ×2) | `DecisionSplit` | There's a better way to {fix problem / get result} |
|
|
52
|
+
| 4 | `feature` (eyebrow "Core Features" · features ×5 · 2 CTAs) | `Feature` | Everything you need to {achieve a desired outcome} |
|
|
53
|
+
| 5 | `cta` (2 CTAs) | `CTA` | Direct integrations with your favorite tools |
|
|
54
|
+
| 6 | `stair-steps` (tiles ×3) | `StairSteps` | Get setup in {number} easy steps |
|
|
55
|
+
| 7 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
|
|
56
|
+
| 8 | `content-block` (media-right · eyebrow "Manifesto" · 2 CTAs) | `ContentBlock` | We want you to {ability they couldn't do before} |
|
|
57
|
+
| 9 | `video-section` (1 CTA · playBadge) | `VideoSection` | See {your product} in action |
|
|
58
|
+
|
|
59
|
+
<!-- generated:end -->
|
|
60
|
+
|
|
61
|
+
`/how-it-works`:
|
|
62
|
+
|
|
63
|
+
<!-- generated:begin page=/how-it-works -->
|
|
64
|
+
|
|
65
|
+
| # | Section | Component | Copy (first line) |
|
|
66
|
+
| --- | -------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
|
|
67
|
+
| 1 | `hero` (eyebrow "How it Works" · 2 CTAs) | `Hero` | Get set up in {number} easy steps |
|
|
68
|
+
| 2 | `feature` (alternating · numbered · features ×3) | `Feature` | The first thing they need to do to get the outcome they want |
|
|
69
|
+
| 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
70
|
+
| 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
|
|
71
|
+
| 5 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
|
|
72
|
+
| 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
|
|
73
|
+
|
|
74
|
+
<!-- generated:end -->
|
|
75
|
+
|
|
76
|
+
`/features`:
|
|
77
|
+
|
|
78
|
+
<!-- generated:begin page=/features -->
|
|
79
|
+
|
|
80
|
+
| # | Section | Component | Copy (first line) |
|
|
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 |
|
|
85
|
+
|
|
86
|
+
<!-- generated:end -->
|
|
87
|
+
|
|
88
|
+
`/pricing`:
|
|
89
|
+
|
|
90
|
+
<!-- generated:begin page=/pricing -->
|
|
91
|
+
|
|
92
|
+
| # | Section | Component | Copy (first line) |
|
|
93
|
+
| --- | ---------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
|
|
94
|
+
| 1 | `hero` (eyebrow "Pricing" · 2 CTAs) | `Hero` | Pays for itself in {tangible value or outcome} |
|
|
95
|
+
| 2 | `pricing` (three-tiers-with-toggle · eyebrow "Pricing" · plans ×3 · billingToggle) | `Pricing` | Pays for itself in {tangible value or outcome} |
|
|
96
|
+
| 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
97
|
+
| 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
|
|
98
|
+
| 5 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
|
|
99
|
+
| 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
|
|
100
|
+
|
|
101
|
+
<!-- generated:end -->
|
|
102
|
+
|
|
103
|
+
`/about`:
|
|
104
|
+
|
|
105
|
+
<!-- generated:begin page=/about -->
|
|
106
|
+
|
|
107
|
+
| # | Section | Component | Copy (first line) |
|
|
108
|
+
| --- | -------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
|
|
109
|
+
| 1 | `content-block` (media-right · eyebrow "Manifesto" · 2 CTAs) | `ContentBlock` | We want you to {ability they couldn't do before} |
|
|
110
|
+
| 2 | `team` (members ×5) | `Team` | Our team |
|
|
111
|
+
| 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
112
|
+
| 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
|
|
113
|
+
| 5 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
|
|
114
|
+
| 6 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | FAQs |
|
|
115
|
+
|
|
116
|
+
<!-- generated:end -->
|
|
117
|
+
|
|
118
|
+
`/faq`:
|
|
119
|
+
|
|
120
|
+
<!-- generated:begin page=/faq -->
|
|
121
|
+
|
|
122
|
+
| # | Section | Component | Copy (first line) |
|
|
123
|
+
| --- | -------------------------------------------------------------- | --------- | ---------------------------------------------------------------------- |
|
|
124
|
+
| 1 | `hero` | `Hero` | FAQs |
|
|
125
|
+
| 2 | `faq` (accordion · items ×5 · supportLink · initialOpen first) | `FAQ` | Vel odio odit voluptatum ut veritatis. Ex rerum aspernatur voluptas u… |
|
|
126
|
+
| 3 | `cta` (box · chips ×3 · 2 CTAs · closingLine) | `CTA` | Switch to {your product} in {time amount} or less |
|
|
127
|
+
|
|
128
|
+
<!-- generated:end -->
|
|
129
|
+
|
|
130
|
+
`/contact`:
|
|
131
|
+
|
|
132
|
+
<!-- generated:begin page=/contact -->
|
|
133
|
+
|
|
134
|
+
| # | Section | Component | Copy (first line) |
|
|
135
|
+
| --- | ----------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
|
|
136
|
+
| 1 | `hero` (split · eyebrow "Book a Demo" · checklist ×3) | `Hero` | Ready to {achieve a valuable outcome}? |
|
|
137
|
+
| 2 | `contact-form` (card · fields ×3) | `ContactForm` | Name · Email · Message |
|
|
138
|
+
| 3 | `logoCloud` (logos ×6) | `LogoCloud` | Don’t just take our word for it |
|
|
139
|
+
| 4 | `testimonials` (featured · items ×1) | `Testimonials` | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse … |
|
|
140
|
+
|
|
141
|
+
<!-- generated:end -->
|
|
142
|
+
|
|
143
|
+
`/sign-in`:
|
|
144
|
+
|
|
145
|
+
<!-- generated:begin page=/sign-in -->
|
|
146
|
+
|
|
147
|
+
_Code route — no content, no sections._
|
|
148
|
+
<!-- generated:end -->
|
|
149
|
+
|
|
150
|
+
`/privacy`:
|
|
151
|
+
|
|
152
|
+
<!-- generated:begin page=/privacy -->
|
|
153
|
+
|
|
154
|
+
| # | Section | Component | Copy (first line) |
|
|
155
|
+
| --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
|
|
156
|
+
| 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Privacy Policy |
|
|
157
|
+
|
|
158
|
+
<!-- generated:end -->
|
|
159
|
+
|
|
160
|
+
`/terms`:
|
|
161
|
+
|
|
162
|
+
<!-- generated:begin page=/terms -->
|
|
163
|
+
|
|
164
|
+
| # | Section | Component | Copy (first line) |
|
|
165
|
+
| --- | ------------------------------------------------------------------ | ----------------- | ----------------- |
|
|
166
|
+
| 1 | `document-chassis` (eyebrow "PLACEHOLDER — REPLACE BEFORE LAUNCH") | `DocumentChassis` | Terms of Service |
|
|
167
|
+
|
|
168
|
+
<!-- generated:end -->
|
|
169
|
+
|
|
170
|
+
### Module rows
|
|
171
|
+
|
|
172
|
+
Rows marked **replaces** take over a Free route; the rest are new. _Module_ names the slice whose `pageContributions` row supplies the route.
|
|
173
|
+
|
|
174
|
+
### `/blog` — CollectionPage · schema `Blog` · docs-blog · **replaces** the Free teaser
|
|
175
|
+
|
|
176
|
+
Reference: `screenshots/blog.png`, `copy/blog.txt`. **Copy rule (Sam, 2026-09-15): verbatim, mad-lib style exactly** — the five sample posts' titles, dates, read-times and excerpts are the reference's, lorem ipsum included; the Free manifest § 2 states the rule in full and it applies to every Pro page that has a reference.
|
|
177
|
+
|
|
178
|
+
| # | Section | Component | Reference beat | Status |
|
|
179
|
+
| --- | ----------------------------------------------------------------------------------------------------------------- | -------------- | ------------------------------------------------- | ---------- |
|
|
180
|
+
| 1 | `hero` | `Hero` | "Resources for {customer profile}" · Lorem ipsum… | ❌ content |
|
|
181
|
+
| 2 | `blog-list` (Fumadocs-backed, the 5 reference posts: date · read-time · title · excerpt · Read more) | `BlogList` | the listing | ✅ slice |
|
|
182
|
+
| 3 | `newsletter` (`consentText` "By clicking Sign Up you're confirming that you agree with our Terms and Conditions") | `Newsletter` | "Stay Up to Date with our {fequency} Newsletter" | ❌ content |
|
|
183
|
+
| 4 | `logoCloud` | `LogoCloud` | "Don't just take our word for it" | ❌ content |
|
|
184
|
+
| 5 | `testimonials` (one quote) | `Testimonials` | John Smith · CEO, Google | ❌ content |
|
|
185
|
+
|
|
186
|
+
<!-- generated:begin page=/blog -->
|
|
187
|
+
|
|
188
|
+
_Module-rendered page — its seed content carries frontmatter only, no `sections[]` (the module's own route composes it)._
|
|
189
|
+
<!-- generated:end -->
|
|
190
|
+
|
|
191
|
+
### `/blog/<slug>` — docs-blog slice · schema `BlogPosting`
|
|
192
|
+
|
|
193
|
+
Reference: `screenshots/post--10-ideas-guarantee-1000x-growth.png`, `copy/post--*.txt`. The slice renders `BlogPost` (category eyebrow, title, author, date, read-time, share, body with H2/H3, tags, author card); the sample posts carry the reference's lorem body verbatim. Below the post: `newsletter` (as above) and a `blog-list` "More Articles" (3 posts).
|
|
194
|
+
|
|
195
|
+
### `/docs`, `/docs/<slug>` — docs-blog slice · schema `DocsList` / `DocsDetail`
|
|
196
|
+
|
|
197
|
+
Not in standardissue. Fumadocs; sample tree: Getting started · Configure · Deploy — the docs-blog module's own samples (#5618 D6.2), not this tree's. Reproduce the docs shell exactly as the module ships it; no template-specific composition.
|
|
198
|
+
|
|
199
|
+
<!-- generated:begin page=/docs -->
|
|
200
|
+
|
|
201
|
+
_Module-rendered page — its seed content carries frontmatter only, no `sections[]` (the module's own route composes it)._
|
|
202
|
+
<!-- generated:end -->
|
|
203
|
+
|
|
204
|
+
### `/meet` — CommittedBookingEntryPage · schema `Event` · scheduling
|
|
205
|
+
|
|
206
|
+
Renamed from the schedule/ route by **#5563**. The route stays
|
|
207
|
+
code-composed, single-section (`booker` only) — the five-section table
|
|
208
|
+
below is this template's target composition, deferred to **#5670**
|
|
209
|
+
(`feat(scheduling): compose /meet per the Pro manifest`), blocked on its
|
|
210
|
+
own §7 Q1 (where the booking-types list comes from).
|
|
211
|
+
|
|
212
|
+
<!-- generated:begin page=/meet -->
|
|
213
|
+
|
|
214
|
+
_Code route — no content, no sections._
|
|
215
|
+
<!-- generated:end -->
|
|
216
|
+
|
|
217
|
+
Target composition (deferred to **#5670**, blocked on its own §7 Q1 —
|
|
218
|
+
where the booking-types list comes from):
|
|
219
|
+
|
|
220
|
+
| # | Section | Component |
|
|
221
|
+
| --- | --------------------------------------------------------------- | -------------- |
|
|
222
|
+
| 1 | `hero` | `Hero` |
|
|
223
|
+
| 2 | `content-block` (what to expect) | `ContentBlock` |
|
|
224
|
+
| 3 | `social-proof` | `SocialProof` |
|
|
225
|
+
| 4 | `booker` (the booking types list; each links to `/meet/<slug>`) | `Booker` |
|
|
226
|
+
| 5 | `faq` | `FAQ` |
|
|
227
|
+
|
|
228
|
+
### `/meet/<slug>` (sample: `/meet/15min`) — CommittedBookingEntryPage · scheduling
|
|
229
|
+
|
|
230
|
+
Sections: `hero` (short) · `scheduler-embed` (`SchedulerEmbed`, `provider: "cal"`).
|
|
231
|
+
|
|
232
|
+
<!-- generated:begin page=/meet/[slug] -->
|
|
233
|
+
|
|
234
|
+
_Code route — no content, no sections._
|
|
235
|
+
<!-- generated:end -->
|
|
236
|
+
|
|
237
|
+
### `/meet/confirmed` — MeetingConfirmationDeliveryPage · scheduling
|
|
238
|
+
|
|
239
|
+
Target composition (deferred to **#5670**, same as `/meet` above):
|
|
240
|
+
|
|
241
|
+
| # | Section | Component |
|
|
242
|
+
| --- | --------------------------------------------- | -------------- |
|
|
243
|
+
| 1 | `hero` | `Hero` |
|
|
244
|
+
| 2 | `content-block` (next steps, add to calendar) | `ContentBlock` |
|
|
245
|
+
| 3 | `testimonials` | `Testimonials` |
|
|
246
|
+
| 4 | `cta` | `CTA` |
|
|
247
|
+
|
|
248
|
+
<!-- generated:begin page=/meet/confirmed -->
|
|
249
|
+
|
|
250
|
+
_Code route — no content, no sections._
|
|
251
|
+
<!-- generated:end -->
|
|
252
|
+
|
|
253
|
+
### `/flows/<slug>` — InstrumentEntryPage · schema `WebPage` · signal-collectors
|
|
254
|
+
|
|
255
|
+
The signal collector's landing (sample: a 5-question fit check). Sections: `hero` · `feature` · `step-flow` (preview) · `cta` · `faq`.
|
|
256
|
+
|
|
257
|
+
<!-- generated:begin page=/flows/[slug] -->
|
|
258
|
+
|
|
259
|
+
_Code route — no content, no sections._
|
|
260
|
+
<!-- generated:end -->
|
|
261
|
+
|
|
262
|
+
### `/flows/<slug>/start` — InstrumentCapturePage · signal-collectors
|
|
263
|
+
|
|
264
|
+
Sections: `hero` (short) · `step-flow` (`StepFlow`, the capture).
|
|
265
|
+
|
|
266
|
+
<!-- generated:begin page=/flows/[slug]/start -->
|
|
267
|
+
|
|
268
|
+
_Code route — no content, no sections._
|
|
269
|
+
<!-- generated:end -->
|
|
270
|
+
|
|
271
|
+
### `/flows/<slug>/results/<payload>` — InstrumentDeliveryPage · signal-collectors
|
|
272
|
+
|
|
273
|
+
Sections: `hero` · `content-block` (the result) · `cta`. **Not** the document reader; that is `/reports`.
|
|
274
|
+
|
|
275
|
+
<!-- generated:begin page=/flows/[slug]/results/[payload] -->
|
|
276
|
+
|
|
277
|
+
_Code route — no content, no sections._
|
|
278
|
+
<!-- generated:end -->
|
|
279
|
+
|
|
280
|
+
### `/reports/<slug>` — ReportPage · schema `Report` · signal-collectors · **chrome off, full-bleed**
|
|
281
|
+
|
|
282
|
+
**#5562** adds the page type and route. Bond's reader exactly: back arrow, page controls, zoom, outline drawer, print, download, share, fullscreen. Sample: one public report (16:9 deck, ~20 pages). Sections: `report-header` (new, tiny) · `document-viewer` (`DocumentViewer`).
|
|
283
|
+
|
|
284
|
+
<!-- generated:begin page=/reports/[slug] -->
|
|
285
|
+
|
|
286
|
+
_Code route — no content, no sections._
|
|
287
|
+
<!-- generated:end -->
|
|
288
|
+
|
|
289
|
+
### `/projects`, `/projects/<slug>`, `/projects/apply` — CollectionPage / WebPage · schema `ProjectsList` / `Project` · signal-collectors
|
|
290
|
+
|
|
291
|
+
Project listings and the application flow. Sections: `hero` · `items` · `cta` (list); `hero` · `content-block` · `cta` (detail); `hero` · `step-flow` (apply).
|
|
292
|
+
|
|
293
|
+
### `/waitlist/<experimentId>` — InstrumentCapturePage · schema `Waitlist` · signal-collectors (authed)
|
|
294
|
+
|
|
295
|
+
As the slice ships it; no template composition.
|
|
296
|
+
|
|
297
|
+
### `/thanks/<slug>` — per-form confirmation · signal-collectors
|
|
298
|
+
|
|
299
|
+
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>` yet (spec 5618 § 7 finding 7), so they are not roster rows here.
|
|
300
|
+
|
|
301
|
+
## 2a. State and persistence — Pro delta
|
|
302
|
+
|
|
303
|
+
Everything in the Free manifest § 2a applies. Pro adds:
|
|
304
|
+
|
|
305
|
+
| Element | States | Persists in | Returning visitor sees | Empty / error state |
|
|
306
|
+
| --------------------------------- | ------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------ |
|
|
307
|
+
| Blog listing | list · post detail | — | list | zero posts → the `BLOG_EMPTY_SENTINEL` placeholder |
|
|
308
|
+
| Docs shell | tree open/closed per node · search | localStorage (Fumadocs) | last tree state | zero pages → Fumadocs empty state |
|
|
309
|
+
| Booker (`/meet`) | types list · type selected · slot picked · confirming · confirmed (`/meet/confirmed`) | the API booking record; the confirmation page reads `?booking=` | the confirmation page again from the invite link | no slots → the booker's honest empty state; API down → error, never a spinner |
|
|
310
|
+
| Step-flow (`/flows/<slug>`) | landing · step N of M · submitting · results (`/results/<payload>`) | the payload in the URL | results by URL | invalid payload → "this result isn't available"; abandoned flow → landing |
|
|
311
|
+
| Report viewer (`/reports/<slug>`) | page N of M · zoom · outline drawer · fullscreen · share sheet | none across visits | page 1 | public: always renders; grant: valid / expired / unknown → honest state, never bytes |
|
|
312
|
+
| Waitlist (`/waitlist/<id>`) | form · submitted · already on list | the API record | "you're on the list" | closed experiment → closed state |
|
|
313
|
+
| Project apply (`/projects/apply`) | step-flow states | API record | — | as step-flow |
|
|
314
|
+
| Thanks pages (`/thanks/<slug>`) | static | — | — | unknown slug → 404 |
|
|
315
|
+
|
|
316
|
+
## 3. Roster delta, as the registry declares it
|
|
317
|
+
|
|
318
|
+
`marketing-site` reuses `TEMPLATE_BASE_ROSTER` (the ten base rows — the Free eleven minus the `/blog` teaser, which docs-blog's own listing replaces) and adds nothing of its own; every other row arrives from `MODULE_SLICES[*].pageContributions`. The merged roster, as the registry composes it (#5618 D7 — generated, and what pins the Pro route table):
|
|
319
|
+
|
|
320
|
+
<!-- generated:begin roster -->
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
marketing-site:
|
|
324
|
+
requires: [marketing, docs-blog, scheduling, signal-collectors]
|
|
325
|
+
roster:
|
|
326
|
+
- { route: "/", content: ["content/en/HomePage/home.mdx"] }
|
|
327
|
+
- { route: "/how-it-works", content: ["content/en/LandingPage/how-it-works.mdx"] }
|
|
328
|
+
- { route: "/features", content: ["content/en/LandingPage/features.mdx"] }
|
|
329
|
+
- { route: "/pricing", content: ["content/en/Pricing/pricing.mdx"] }
|
|
330
|
+
- { route: "/about", content: ["content/en/AboutPage/about.mdx"] }
|
|
331
|
+
- { route: "/faq", content: ["content/en/FAQPage/faq.mdx"] }
|
|
332
|
+
- { route: "/contact", content: ["content/en/ContactPage/contact.mdx"] }
|
|
333
|
+
- { route: "/sign-in" }
|
|
334
|
+
- { route: "/privacy", content: ["content/en/PrivacyPage/privacy.mdx"] }
|
|
335
|
+
- { route: "/terms", content: ["content/en/TermsPage/terms.mdx"] }
|
|
336
|
+
- { route: "/blog", 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"] }
|
|
337
|
+
- { route: "/docs", content: ["apps/web/content/en/docs/getting-started.mdx", "apps/web/content/en/docs/configure.mdx", "apps/web/content/en/docs/deploy.mdx"] }
|
|
338
|
+
- { route: "/meet" }
|
|
339
|
+
- { route: "/meet/[slug]" }
|
|
340
|
+
- { route: "/meet/confirmed" }
|
|
341
|
+
- { route: "/flows/[slug]" }
|
|
342
|
+
- { route: "/flows/[slug]/start" }
|
|
343
|
+
- { route: "/flows/[slug]/results/[payload]" }
|
|
344
|
+
- { route: "/reports/[slug]" }
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
<!-- generated:end -->
|
|
348
|
+
|
|
349
|
+
The delta over Free, by module:
|
|
350
|
+
|
|
351
|
+
```
|
|
352
|
+
docs-blog: /blog (replaces the Free teaser) · /blog/<slug> · /docs · /docs/<slug>
|
|
353
|
+
scheduling: /meet · /meet/<slug> · /meet/confirmed (renamed from the schedule/ route by #5563)
|
|
354
|
+
signal-collectors: /flows/<slug> · /flows/<slug>/start · /flows/<slug>/results/<payload>
|
|
355
|
+
/projects · /projects/<slug> · /projects/apply · /waitlist/<experimentId>
|
|
356
|
+
/reports/<slug> (#5562)
|
|
357
|
+
/thanks/<slug> (per form)
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## 4. Component inventory
|
|
361
|
+
|
|
362
|
+
Every component the roster rows' seed content composes today (generated):
|
|
363
|
+
|
|
364
|
+
<!-- generated:begin inventory -->
|
|
365
|
+
|
|
366
|
+
| Tier | Used by this template |
|
|
367
|
+
| -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
368
|
+
| Shell | `MarketingShell` |
|
|
369
|
+
| Chrome | `Nav`, `Footer`, `Banner` (+ `BannerConsentIsland`, `BannerDismissIsland`) |
|
|
370
|
+
| Sections | `ContactForm`, `ContentBlock`, `CTA`, `DecisionSplit`, `DocumentChassis`, `FAQ`, `Feature`, `Hero`, `LogoCloud`, `Pricing`, `StairSteps`, `Team`, `Testimonials`, `VideoSection` |
|
|
371
|
+
|
|
372
|
+
<!-- generated:end -->
|
|
373
|
+
|
|
374
|
+
### Delta over Free, as the module slices ship it
|
|
375
|
+
|
|
376
|
+
| Tier | Added over Free |
|
|
377
|
+
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
378
|
+
| Shells | `BlogShell`, `DocsShell` (docs-blog) |
|
|
379
|
+
| Sections (slices) | `BlogList`, `BlogPost` (docs-blog); `Booker`, `SchedulerEmbed` (scheduling); `StepFlow`, `Items`, `SocialProof` (signal-collectors); `DocumentViewer`, `report-header` (#5562) |
|
|
380
|
+
|
|
381
|
+
## 5. Known gaps this manifest depends on
|
|
382
|
+
|
|
383
|
+
| Gap | Issue |
|
|
384
|
+
| ------------------------------------------------------------------- | ---------- |
|
|
385
|
+
| `/meet` rename | #5563 |
|
|
386
|
+
| `ReportPage` + `/reports/<slug>` | #5562 |
|
|
387
|
+
| Module bundles carry no LICENSE | #5552 |
|
|
388
|
+
| Strip ignores `commercial_tier` (paid dirs still under `packages/`) | #5475 |
|
|
389
|
+
| The Pro demo host `marketing-site.ailaunchkit.ai` — provisioning | #5464 body |
|
|
390
|
+
|
|
391
|
+
## 6. Sequencing with Free
|
|
392
|
+
|
|
393
|
+
The Free card owns the manifest registry file and the overlay content; this card owns `site-templates/marketing-site/**` and the module-contributed sample content only. It starts after Free's PR merges (so the eleven base rows exist) and never edits a Free file. Routes that #5563/#5562 rename or add are consumed from `main` at start; if a module route is not on `main` yet, the card ships that page's content at the module's current route and names the pending rename in its PR body rather than blocking.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "marketing-site",
|
|
3
|
+
"requires": ["marketing", "docs-blog", "scheduling", "signal-collectors"],
|
|
4
|
+
"extends": "_base",
|
|
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
|
+
"installMap": {
|
|
7
|
+
"provenance.json": ".ailk-template.json",
|
|
8
|
+
"content/en/blog/05-this-vc-morning-routine-will-make-you-super-annoying.mdx": "apps/web/content/en/blog/launching-ailk.mdx"
|
|
9
|
+
},
|
|
10
|
+
"postInstall": "Template marketing-site installed: its module samples - the Pro blog (5 posts) and docs (3 pages) from docs-blog, the projects (2 + listing), thank-you pages (contact, newsletter, apply), fit-check flow definition, waitlist experiment and 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 (its /reports/<slug> route is pending #5562; /meet, /meet/<slug> and /meet/confirmed shipped by #5563). This template adds one copy override (blog post 05) - every sample is placeholder copy to replace before you launch."
|
|
11
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "This VC Morning Routine Will Make You Super Annoying"
|
|
3
|
+
description: "Sit nobis officia nihil veritatis dolore eaque. Rem itaque earum provident eum. Est perferendis et et. Quibusdam qui placeat. Et facere sint omnis voluptatem quia modi a."
|
|
4
|
+
date: "2023-10-20"
|
|
5
|
+
oss: false
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Qui earum et eum.
|
|
9
|
+
|
|
10
|
+
At explicabo natus nisi in ut. Quia occaecati molestiae nisi a aliquid necessitatibus. Assumenda commodi voluptas et minus deleniti at voluptates. Sapiente omnis ullam consequatur ipsam eligendi. Quod fugiat amet est soluta doloribus culpa temporibus ut aperiam. Recusandae eaque enim sit placeat et veniam consequuntur sunt veniam.
|
|
11
|
+
|
|
12
|
+
### Dolorem ut eos sit natus eum natus est ut.
|
|
13
|
+
|
|
14
|
+
Saepe voluptas et quas reprehenderit qui molestias error occaecati. Reprehenderit dolor est iste aspernatur tempore labore accusantium vitae corrupti. Et et ipsam nemo et.Modi ratione ducimus tenetur. Sunt officia ut voluptates eum. Aut quas quibusdam distinctio fuga dolorum occaecati architecto deserunt eius. Ullam in voluptatem voluptatem qui sunt et quo.
|
|
15
|
+
|
|
16
|
+
Aut ullam itaque nesciunt ipsam. Id dolor assumenda. Aut quis in unde consequatur aut consectetur et quisquam.
|
|
17
|
+
|
|
18
|
+
## Rerum nobis quasi et saepe provident id odio.
|
|
19
|
+
|
|
20
|
+
Voluptas sed molestiae. Et delectus cumque necessitatibus vitae omnis ducimus quis ea id. Aut porro omnis omnis voluptatum culpa autem autem mollitia. Qui et voluptatibus exercitationem.
|
|
21
|
+
|
|
22
|
+
### Eligendi sapiente fugit asperiores illo voluptate architecto et libero vero.
|
|
23
|
+
|
|
24
|
+
Ab deleniti eum fuga ut at adipisci quo necessitatibus illum. Nostrum non quidem voluptatum. Sequi quas ad architecto autem in ea. Amet similique non libero iste corrupti sapiente ratione.Modi deserunt impedit magni non. Cumque ut officia consequuntur voluptates neque. Odio et assumenda. Enim optio est consectetur magnam deserunt incidunt vel voluptatem.
|
|
25
|
+
|
|
26
|
+
Maxime et facilis. Sed qui provident ea pariatur. Laborum culpa est sequi nihil natus. Adipisci ratione repudiandae in et laudantium dolorem. Velit sint laudantium deleniti ea voluptatem. Omnis reiciendis dolore suscipit architecto.
|
|
27
|
+
|
|
28
|
+
## Dolor error dolor.
|
|
29
|
+
|
|
30
|
+
Dignissimos quaerat neque hic. Aut id maxime aperiam dolorem commodi et deserunt. Sint adipisci ipsa illo fuga. Et beatae enim sequi. Ipsam voluptas quam neque repudiandae omnis.
|
|
31
|
+
|
|
32
|
+
### Fugit cumque tempore laudantium et cupiditate enim.
|
|
33
|
+
|
|
34
|
+
Odio consequuntur veniam. Delectus qui eum consequatur nam ipsa consequatur accusamus harum aut. Iusto culpa dignissimos magni ipsum. Perspiciatis odit qui ducimus eum quia omnis eos inventore dolorem. Velit esse praesentium dignissimos eos aperiam consectetur. Asperiores perferendis doloribus non numquam incidunt corrupti ipsa.Quod mollitia ea aut facilis. Eos ratione velit est. Necessitatibus odio modi nemo pariatur molestiae voluptates voluptatem rerum. Eligendi impedit explicabo est.
|
|
35
|
+
|
|
36
|
+
Sit co
|