create-ailk 0.5.0 → 0.6.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 +55 -8
- package/component-catalog.json +336 -27
- package/component-catalog.md +25 -12
- package/dist/lib/api-boot-assertion.d.ts +46 -0
- package/dist/lib/api-boot-assertion.js +70 -0
- package/dist/lib/import-graph.d.ts +29 -0
- package/dist/lib/import-graph.js +140 -0
- package/dist/module-architecture.d.ts +1 -0
- package/dist/module-architecture.js +253 -127
- package/dist/surfaces.js +105 -7
- package/dist/template-manifest.d.ts +33 -0
- package/dist/template-manifest.js +99 -16
- package/dist/template-names.d.ts +1 -1
- package/dist/template-names.js +1 -0
- package/package.json +3 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +22 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +9 -2
- package/site-templates/marketing-site/ailk-template.json +1 -1
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.json +2 -2
- package/site-templates/marketing-site-free/TEMPLATE-MANIFEST.md +1 -0
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.json +10 -2
- package/site-templates/minimalism-site/TEMPLATE-MANIFEST.md +47 -35
- package/site-templates/minimalism-site/ailk-template.json +2 -1
- package/site-templates/minimalism-site/assets/wordmark-placeholder.svg +28 -0
- package/site-templates/minimalism-site/content/en/HomePage/home.mdx +49 -19
- package/site-templates/simple-service/TEMPLATE-MANIFEST.json +240 -0
- package/site-templates/simple-service/TEMPLATE-MANIFEST.md +278 -0
- package/site-templates/simple-service/ailk-template.json +10 -0
- package/site-templates/simple-service/content/en/AboutPage/about.mdx +38 -0
- package/site-templates/simple-service/content/en/ContactPage/contact.mdx +67 -0
- package/site-templates/simple-service/content/en/FAQPage/faq.mdx +56 -0
- package/site-templates/simple-service/content/en/HomePage/home.mdx +85 -0
- package/site-templates/simple-service/content/en/Service/landscape-design.mdx +40 -0
- package/site-templates/simple-service/content/en/Service/lawn-maintenance.mdx +40 -0
- package/site-templates/simple-service/content/en/Service/seasonal-cleanup.mdx +40 -0
- package/site-templates/simple-service/content/en/ServicesList/services.mdx +72 -0
- package/site-templates/simple-service/provenance.json +4 -0
- package/templates/.env.example +72 -7
- package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-31.552Z-fallback-1789916251590-037e9005.json +8 -0
- package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.840Z-fallback-1789916253842-b52659e9.json +12 -0
- package/templates/apps/api/.ailk/inbox/2026-09-20T14-57-33.844Z-fallback-1789916253845-6b266f8c.json +12 -0
- package/templates/apps/api/.env.example +13 -0
- package/templates/apps/api/CLAUDE.md +26 -2
- package/templates/apps/api/jest.config.cjs +3 -0
- package/templates/apps/api/package.json +1 -0
- package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +407 -0
- package/templates/apps/api/src/__tests__/module-exclusion.test.ts +83 -7
- package/templates/apps/api/src/__tests__/server.test.ts +471 -0
- package/templates/apps/api/src/__tests__/vercel-handler.test.ts +45 -0
- package/templates/apps/api/src/__tests__/workspace-module-registration.test.ts +2 -0
- package/templates/apps/api/src/config/index.ts +62 -0
- package/templates/apps/api/src/config/modules.ts +7 -3
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +238 -2
- package/templates/apps/api/src/lib/__tests__/auth-email-budget.test.ts +143 -0
- package/templates/apps/api/src/lib/__tests__/content-adapter.test.ts +23 -0
- package/templates/apps/api/src/lib/__tests__/deliverable-asset-store.test.ts +125 -0
- package/templates/apps/api/src/lib/__tests__/error-serializer.test.ts +20 -0
- package/templates/apps/api/src/lib/__tests__/require-commerce-claim.test.ts +317 -0
- package/templates/apps/api/src/lib/__tests__/site.test.ts +238 -0
- package/templates/apps/api/src/lib/__tests__/stripe.test.ts +75 -0
- package/templates/apps/api/src/lib/auth-email-budget.ts +160 -0
- package/templates/apps/api/src/lib/content-adapter.ts +57 -31
- package/templates/apps/api/src/lib/deliverable-asset-store.ts +76 -0
- package/templates/apps/api/src/lib/error-serializer.ts +23 -3
- package/templates/apps/api/src/lib/outbound-http.ts +7 -2
- package/templates/apps/api/src/lib/require-commerce-claim.ts +250 -0
- package/templates/apps/api/src/lib/site.ts +208 -9
- package/templates/apps/api/src/lib/stripe.ts +66 -0
- package/templates/apps/api/src/middleware/__tests__/default-tenant.test.ts +182 -0
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +42 -0
- package/templates/apps/api/src/middleware/rate-limit.ts +7 -1
- package/templates/apps/api/src/openapi/spec.ts +543 -2
- package/templates/apps/api/src/routes/auth/__tests__/auth-user.functional.test.ts +48 -0
- package/templates/apps/api/src/routes/auth/__tests__/transactional-email.test.ts +309 -0
- package/templates/apps/api/src/routes/auth/__tests__/user.test.ts +123 -0
- package/templates/apps/api/src/routes/auth/transactional-email.ts +273 -0
- package/templates/apps/api/src/routes/auth/user.ts +61 -0
- package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +434 -0
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +888 -0
- package/templates/apps/api/src/routes/checkout/index.ts +34 -0
- package/templates/apps/api/src/routes/checkout/session.ts +139 -0
- package/templates/apps/api/src/routes/checkout/sessions.ts +197 -0
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +554 -0
- package/templates/apps/api/src/routes/content/__tests__/list-pages.test.ts +108 -0
- package/templates/apps/api/src/routes/content/__tests__/search.test.ts +450 -0
- package/templates/apps/api/src/routes/content/get-page.ts +94 -12
- package/templates/apps/api/src/routes/content/index.ts +13 -73
- package/templates/apps/api/src/routes/content/list-pages.ts +15 -3
- package/templates/apps/api/src/routes/content/rate-limit.ts +15 -6
- package/templates/apps/api/src/routes/content/search.ts +129 -0
- package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +447 -31
- package/templates/apps/api/src/routes/leads/index.ts +100 -13
- package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +51 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +351 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/founder-identity.test.ts +51 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +5 -2
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +4 -1
- package/templates/apps/api/src/routes/project-listings/__tests__/resume-email.test.ts +58 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +107 -6
- package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +87 -2
- package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +51 -0
- package/templates/apps/api/src/routes/project-listings/start.ts +5 -1
- package/templates/apps/api/src/routes/requests/__tests__/confirm.test.ts +686 -0
- package/templates/apps/api/src/routes/requests/confirm.ts +601 -0
- package/templates/apps/api/src/routes/requests/index.ts +54 -0
- package/templates/apps/api/src/routes/webhooks/README.md +265 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-dunning.test.ts +749 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +330 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +262 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +285 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +213 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-request-paid.test.ts +301 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +648 -0
- package/templates/apps/api/src/routes/webhooks/index.ts +89 -0
- package/templates/apps/api/src/routes/webhooks/stripe.ts +1399 -0
- package/templates/apps/api/src/server.ts +439 -49
- package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +39 -0
- package/templates/apps/api/src/services/__tests__/aeo-score.test.ts +217 -40
- package/templates/apps/api/src/services/__tests__/audit-log.test.ts +620 -0
- package/templates/apps/api/src/services/__tests__/consent.test.ts +2 -0
- package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +300 -5
- package/templates/apps/api/src/services/__tests__/deliverable-resend.test.ts +20 -0
- package/templates/apps/api/src/services/__tests__/dunning-policy.test.ts +368 -0
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +160 -0
- package/templates/apps/api/src/services/__tests__/listing-config.test.ts +166 -0
- package/templates/apps/api/src/services/__tests__/project-listings.fence.test.ts +154 -0
- package/templates/apps/api/src/services/__tests__/public-site-resolver.test.ts +137 -0
- package/templates/apps/api/src/services/__tests__/request-confirm.test.ts +444 -0
- package/templates/apps/api/src/services/__tests__/revalidation.test.ts +238 -0
- package/templates/apps/api/src/services/__tests__/verified-email.test.ts +78 -0
- package/templates/apps/api/src/services/abandon-email.ts +8 -2
- package/templates/apps/api/src/services/aeo-score.ts +49 -12
- package/templates/apps/api/src/services/audit-log.ts +668 -0
- package/templates/apps/api/src/services/consent.ts +18 -0
- package/templates/apps/api/src/services/default-tenant.ts +70 -31
- package/templates/apps/api/src/services/deliverable-fulfillment.ts +141 -13
- package/templates/apps/api/src/services/dunning-policy.ts +294 -0
- package/templates/apps/api/src/services/entitlements.ts +80 -0
- package/templates/apps/api/src/services/lead-promotion.ts +13 -14
- package/templates/apps/api/src/services/lead-routing.ts +161 -2
- package/templates/apps/api/src/services/leads-inbox.ts +23 -2
- package/templates/apps/api/src/services/listing-config.ts +27 -9
- package/templates/apps/api/src/services/project-listings.ts +201 -6
- package/templates/apps/api/src/services/public-site-resolver.ts +106 -0
- package/templates/apps/api/src/services/request-confirm.ts +646 -0
- package/templates/apps/api/src/services/revalidation.ts +173 -0
- package/templates/apps/api/src/services/verified-email.ts +71 -0
- package/templates/apps/api/src/vercel-handler.ts +75 -35
- package/templates/apps/mcp/.env.example +17 -0
- package/templates/apps/mcp/CLAUDE.md +57 -24
- package/templates/apps/mcp/__tests__/aeo-cli-parity.test.ts +6 -0
- package/templates/apps/mcp/__tests__/audit.test.ts +137 -8
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +79 -36
- package/templates/apps/mcp/__tests__/get_offerings.test.ts +111 -2
- package/templates/apps/mcp/__tests__/get_pricing.test.ts +82 -2
- package/templates/apps/mcp/__tests__/http-transport.test.ts +541 -2
- package/templates/apps/mcp/__tests__/index.test.ts +39 -0
- package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +143 -0
- package/templates/apps/mcp/__tests__/lib/commerce-claim.test.ts +111 -0
- package/templates/apps/mcp/__tests__/lib/content-adapter-parity.test.ts +65 -0
- package/templates/apps/mcp/__tests__/lib/content-adapter.test.ts +188 -0
- package/templates/apps/mcp/__tests__/lib/fail-closed-tools.test.ts +165 -0
- package/templates/apps/mcp/__tests__/lib/public-workspace.test.ts +124 -0
- package/templates/apps/mcp/__tests__/list_pages.test.ts +116 -0
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +7 -1
- package/templates/apps/mcp/__tests__/parity.test.ts +10 -7
- package/templates/apps/mcp/__tests__/purchase-disabled.test.ts +89 -22
- package/templates/apps/mcp/__tests__/read_content.test.ts +322 -1
- package/templates/apps/mcp/__tests__/search_content.test.ts +105 -2
- package/templates/apps/mcp/__tests__/server.test.ts +67 -14
- package/templates/apps/mcp/__tests__/start_purchase.test.ts +252 -0
- package/templates/apps/mcp/__tests__/tools/purchase.test.ts +300 -123
- package/templates/apps/mcp/jest.config.cjs +13 -0
- package/templates/apps/mcp/package.json +2 -0
- package/templates/apps/mcp/src/abuse/index.ts +159 -24
- package/templates/apps/mcp/src/config/modules.ts +10 -5
- package/templates/apps/mcp/src/http-transport.ts +102 -29
- package/templates/apps/mcp/src/index.ts +73 -11
- package/templates/apps/mcp/src/lib/audit-single-page.ts +90 -3
- package/templates/apps/mcp/src/lib/commerce-claim.ts +94 -0
- package/templates/apps/mcp/src/lib/content-adapter.ts +113 -0
- package/templates/apps/mcp/src/lib/empty-content-adapter.ts +139 -0
- package/templates/apps/mcp/src/lib/prisma.ts +39 -0
- package/templates/apps/mcp/src/lib/public-workspace.ts +133 -0
- package/templates/apps/mcp/src/lib/stripe-tax-signal.ts +59 -0
- package/templates/apps/mcp/src/server.ts +59 -35
- package/templates/apps/mcp/src/tools/audit.ts +26 -2
- package/templates/apps/mcp/src/tools/get_business_hours.ts +4 -3
- package/templates/apps/mcp/src/tools/get_faq.ts +4 -3
- package/templates/apps/mcp/src/tools/get_locations.ts +5 -3
- package/templates/apps/mcp/src/tools/get_offerings.ts +16 -4
- package/templates/apps/mcp/src/tools/get_pricing.ts +25 -6
- package/templates/apps/mcp/src/tools/get_site_info.ts +4 -3
- package/templates/apps/mcp/src/tools/index.ts +6 -4
- package/templates/apps/mcp/src/tools/list_pages.ts +4 -3
- package/templates/apps/mcp/src/tools/purchase.ts +128 -45
- package/templates/apps/mcp/src/tools/read_content.ts +20 -6
- package/templates/apps/mcp/src/tools/search_content.ts +11 -4
- package/templates/apps/web/.env.example +71 -5
- package/templates/apps/web/CLAUDE.md +44 -0
- package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +18 -2
- package/templates/apps/web/app/.well-known/mcp.json/route.ts +11 -3
- package/templates/apps/web/app/[locale]/(auth)/__tests__/auth-pages.test.tsx +282 -0
- package/templates/apps/web/app/[locale]/(auth)/__tests__/password-reset.test.tsx +515 -0
- package/templates/apps/web/app/[locale]/(auth)/forgot-password/forgot-password-card.tsx +89 -0
- package/templates/apps/web/app/[locale]/(auth)/forgot-password/page.tsx +109 -0
- package/templates/apps/web/app/[locale]/(auth)/layout.tsx +92 -0
- package/templates/apps/web/app/[locale]/(auth)/reset-password/page.tsx +135 -0
- package/templates/apps/web/app/[locale]/(auth)/reset-password/reset-password-card.tsx +109 -0
- package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/__tests__/page.test.tsx +48 -2
- package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/page.tsx +20 -6
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +125 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-up/page.tsx +96 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +101 -0
- package/templates/apps/web/app/[locale]/(auth)/use-auth-card-flow.ts +102 -0
- package/templates/apps/web/app/[locale]/(auth)/verify-email/page.tsx +87 -0
- package/templates/apps/web/app/[locale]/(authed)/__tests__/gate.test.tsx +20 -10
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/page.test.tsx +84 -0
- package/templates/apps/web/app/[locale]/(authed)/account/actions.ts +58 -0
- package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +63 -8
- package/templates/apps/web/app/[locale]/(authed)/layout.tsx +18 -1
- package/templates/apps/web/app/[locale]/cancellation/page.tsx +44 -0
- package/templates/apps/web/app/[locale]/layout.tsx +133 -87
- package/templates/apps/web/app/[locale]/purchase/__tests__/cancel.test.tsx +162 -0
- package/templates/apps/web/app/[locale]/purchase/__tests__/module-scope.test.ts +68 -0
- package/templates/apps/web/app/[locale]/purchase/__tests__/success.test.tsx +361 -0
- package/templates/apps/web/app/[locale]/purchase/cancel/page.tsx +115 -0
- package/templates/apps/web/app/[locale]/purchase/success/page.tsx +307 -0
- package/templates/apps/web/app/[locale]/returns/page.tsx +44 -0
- package/templates/apps/web/app/[locale]/shipping/page.tsx +44 -0
- package/templates/apps/web/app/api/revalidate/__tests__/route.test.ts +670 -0
- package/templates/apps/web/app/api/revalidate/route.ts +194 -0
- package/templates/apps/web/auth.ts +407 -8
- package/templates/apps/web/jest.config.cjs +8 -4
- package/templates/apps/web/lib/__tests__/auth-email.test.ts +214 -0
- package/templates/apps/web/lib/__tests__/auth-routes.test.ts +74 -0
- package/templates/apps/web/lib/__tests__/meeting-slugs.test.ts +72 -0
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +18 -1
- package/templates/apps/web/lib/auth-email.ts +318 -0
- package/templates/apps/web/lib/auth-env.ts +85 -0
- package/templates/apps/web/lib/auth-routes.ts +55 -0
- package/templates/apps/web/lib/meeting-slugs.ts +53 -0
- package/templates/apps/web/lib/telemetry-scrub.ts +5 -1
- package/templates/apps/web/messages/en.json +187 -0
- package/templates/apps/web/package.json +2 -1
- package/templates/apps/web/src/lib/commerce-claim.ts +33 -0
- package/templates/apps/web/src/lib/commerce-sections.ts +61 -0
- package/templates/content/en/CancellationPolicyPage/cancellation.mdx +108 -0
- package/templates/content/en/ReturnsPolicyPage/returns.mdx +108 -0
- package/templates/content/en/ShippingPolicyPage/shipping.mdx +108 -0
- package/templates/database/CHANGELOG.md +142 -0
- package/templates/database/README.md +10 -3
- package/templates/database/__tests__/appointment.db.test.ts +106 -0
- package/templates/database/__tests__/artifact-content-store.db.test.ts +316 -0
- package/templates/database/__tests__/composite-fence.db.test.ts +206 -0
- package/templates/database/__tests__/fence-fan-out.db.test.ts +711 -0
- package/templates/database/__tests__/fixtures/appointment-create-probe.ts +79 -0
- package/templates/database/__tests__/fixtures/project-listing-consent-probe.ts +100 -0
- package/templates/database/__tests__/flow-workspace-key.db.test.ts +263 -0
- package/templates/database/__tests__/prefixed-ids.db.test.ts +85 -9
- package/templates/database/__tests__/project-listing-consent-at.db.test.ts +111 -0
- package/templates/database/__tests__/tenancy.test.ts +141 -0
- package/templates/database/config/schema.prisma +79 -2
- package/templates/database/content/schema.prisma +87 -11
- package/templates/database/inbox/schema.prisma +452 -9
- package/templates/database/jest.config.cjs +5 -3
- package/templates/database/migrations/20260915120000_project_listing_solution/migration.sql +15 -0
- package/templates/database/migrations/20260916120000_artifact_content_store/migration.sql +158 -0
- package/templates/database/migrations/20260917120000_callback_request_confirm/migration.sql +40 -0
- package/templates/database/migrations/20260918120000_add_appointment/migration.sql +67 -0
- package/templates/database/migrations/20260918120000_asset_metadata_columns/migration.sql +70 -0
- package/templates/database/migrations/20260919120000_flow_workspace_key/migration.sql +181 -0
- package/templates/database/migrations/20260919130000_flow_definition_admin_columns/migration.sql +172 -0
- package/templates/database/migrations/20260919130000_workspace_meetings/migration.sql +41 -0
- package/templates/database/migrations/20260919140000_inbox_workspace_key/migration.sql +185 -0
- package/templates/database/migrations/20260920120000_lead_handled_at/migration.sql +70 -0
- package/templates/database/migrations/20260920130000_lead_workspace_source_index/migration.sql +57 -0
- package/templates/database/migrations/20260921120000_deliverable_grant_workspace_key/migration.sql +68 -0
- package/templates/database/migrations/20260922120000_tenancy_fence/migration.sql +1067 -0
- package/templates/database/migrations/20260923120000_listing_capturing_magnet/migration.sql +210 -0
- package/templates/database/package.json +1 -1
- package/templates/database/tenancy.ts +86 -1
- package/templates/database/tsconfig.json +1 -0
- package/versions.json +34 -34
- package/templates/apps/api/src/routes/content/__tests__/create.test.ts +0 -253
- package/templates/apps/api/src/routes/content/__tests__/delete.test.ts +0 -215
- package/templates/apps/api/src/routes/content/__tests__/update.test.ts +0 -266
- package/templates/apps/api/src/routes/content/create.ts +0 -115
- package/templates/apps/api/src/routes/content/delete.ts +0 -82
- package/templates/apps/api/src/routes/content/update.ts +0 -112
- package/templates/apps/mcp/__tests__/create_page.test.ts +0 -202
- package/templates/apps/mcp/__tests__/delete_page.test.ts +0 -177
- package/templates/apps/mcp/__tests__/update_page.test.ts +0 -196
- package/templates/apps/mcp/src/tools/create_page.ts +0 -96
- package/templates/apps/mcp/src/tools/delete_page.ts +0 -74
- package/templates/apps/mcp/src/tools/update_page.ts +0 -92
- package/templates/apps/web/app/[locale]/sign-in/sign-in-card.tsx +0 -123
- /package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/__tests__/next-path.test.ts +0 -0
- /package/templates/apps/web/app/[locale]/{sign-in → (auth)/sign-in}/next-path.ts +0 -0
|
@@ -42,29 +42,33 @@ The template's `layout` block — resolved with `resolveSiteChrome`, defaults fi
|
|
|
42
42
|
|
|
43
43
|
`layout.home: "deck"` makes every direct section child of `home.mdx` one full-viewport snap target, in order. The mark is hidden on slide 1 (the deck-hero landing state) and revealed from slide 2 on.
|
|
44
44
|
|
|
45
|
-
| # | Slide | Section
|
|
46
|
-
| --- | ----------------- |
|
|
47
|
-
| 1 | Landing | `hero`
|
|
48
|
-
| 2 | Tagline | `content-block`
|
|
49
|
-
| 3 | Our community | `logoCloud`
|
|
50
|
-
| 4 | Reports headline | `content-block`
|
|
51
|
-
| 5 | Special reports | `reports-list` (`list`)
|
|
52
|
-
| 6 | Favorites | `reports-list` (`list`)
|
|
53
|
-
| 7 | Services headline | `content-block`
|
|
54
|
-
| 8 | Partners | `team` (`with-large-images`, `hoverReveal`) | light
|
|
55
|
-
| 9 | Closing | `cta` (`minimal`)
|
|
56
|
-
|
|
57
|
-
###
|
|
58
|
-
|
|
59
|
-
Sam's site principle for this template — _every slide's action sits at the bottom, centered, at 44px or larger; grids are
|
|
60
|
-
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
| `hero
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
66
|
-
| `
|
|
67
|
-
| `
|
|
45
|
+
| # | Slide | Section | Ground | Action |
|
|
46
|
+
| --- | ----------------- | -------------------------------------------------------------- | ------------------------ | --------------------------------------------------------------------------------------------------------- |
|
|
47
|
+
| 1 | Landing | `hero` (`backdrop`) | gradient band + backdrop | `{Primary CTA} →` → `/reports`, centered; 44px scroll cue. _No mark — but see the Nav-wiring note below._ |
|
|
48
|
+
| 2 | Tagline | `content-block` (`align: center`, `fill: viewport`) | light | — (_the mark reveals here once #5697 lands_) |
|
|
49
|
+
| 3 | Our community | `logoCloud` (`actions`) | light | `Refer someone →` → `/referral`, bottom-centered at 44px |
|
|
50
|
+
| 4 | Reports headline | `content-block` (`align: center`, `fill: viewport`) | light | — |
|
|
51
|
+
| 5 | Special reports | `reports-list` (`list`, `tone: on-dark`) | dark (`gradient-dark`) | four dated titles → `/reports/<slug>` |
|
|
52
|
+
| 6 | Favorites | `reports-list` (`list`, `tone: on-dark`) | dark (`gradient-dark`) | year-only titles → `/reports/<slug>` |
|
|
53
|
+
| 7 | Services headline | `content-block` (`align: center`, `fill: viewport`) | light | `Hire me →` → `/meet` |
|
|
54
|
+
| 8 | Partners | `team` (`with-large-images`, `hoverReveal`, `phoneColumns: 2`) | light | `About us →` → `/about`, bottom-centered at 44px |
|
|
55
|
+
| 9 | Closing | `cta` (`minimal`) | light | `Contact me →` → `/contact`, centered |
|
|
56
|
+
|
|
57
|
+
### How the deck honours the site principle
|
|
58
|
+
|
|
59
|
+
Sam's site principle for this template — _every slide's action sits at the bottom, centered, at 44px or larger; grids are 2-up on a phone_ — is held by bounded section props, never by a `className` override or hand-rolled markup in a template (`.claude/rules/frontend.md` § Chrome Composes Blocks). #5691 landed the seven the deck was missing and this tree sets all seven; the composition of every slide is unchanged from the table above.
|
|
60
|
+
|
|
61
|
+
| Prop | Owner | Slides that set it | What it does here |
|
|
62
|
+
| ------------------------------------------- | ---------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
63
|
+
| `hero.backdrop` | `packages/ui/src/sections/Hero.tsx` | 1 | paints `assets/hero-backdrop.svg` (installed at `/hero-backdrop.svg`) full-bleed behind the copy. A distinct slot from `image`, which counts as a stacked reveal — so the 44px scroll cue survives it. |
|
|
64
|
+
| `content-block.align` | `.../ContentBlock.tsx` | 2, 4, 7 | centers the headline cluster, the body and the CTA row, through `SectionHeader`'s own `align` prop |
|
|
65
|
+
| `content-block.fill` | `.../ContentBlock.tsx` | 2, 4, 7 | the copy centers in the middle of the full-viewport snap panel instead of sitting at its top |
|
|
66
|
+
| `logoCloud.actions` | `.../LogoCloud.tsx` | 3 | one bottom-centered action at the 44px floor beneath the strip (the #5622 `stair-steps` footer placement) |
|
|
67
|
+
| `team.actions` | `.../Team.tsx` | 8 | the same row beneath the member wall |
|
|
68
|
+
| `'gradient-dark'` on `SectionSurfaceSchema` | `packages/validation/…/page-sections.ts` | 5, 6 | the dark ground `tone: "on-dark"` (#5562, shipped **for** this template) was always meant to sit on. `SectionFrameBand` has carried the band itself since 2026-08-29. |
|
|
69
|
+
| `CardGrid.phoneColumns` | `packages/ui/src/panels/CardGrid.tsx` | 8 | the six-tile wall is two-up at 390 rather than overflowing the snap panel one tile at a time |
|
|
70
|
+
|
|
71
|
+
Two notes on the last row. `CardGrid`'s 1-up-below-`md` ramp stays the system-wide default — the recorded #2803 fix, since an `sm` step made every phone 2-up-cramped — and `phoneColumns: 2` is the opt-in Sam disposed on 2026-09-16 for this deck and the client decks built from it; nothing else in the repo sets it. And slide 8 is the only deck slide that reaches `CardGrid` at all: slide 3's logo strip is a reflowing flex row with no column count, and `reports-list`'s `list` variant has no grid — so one knob on one slide satisfies the whole principle.
|
|
68
72
|
|
|
69
73
|
### The Nav wiring — #5697, and not this template's to fix
|
|
70
74
|
|
|
@@ -80,17 +84,17 @@ One `page=<route>` region per roster row, generated from the seed file the compo
|
|
|
80
84
|
|
|
81
85
|
<!-- generated:begin page=/ -->
|
|
82
86
|
|
|
83
|
-
| # | Section
|
|
84
|
-
| --- |
|
|
85
|
-
| 1 | `hero` (centered · 1 CTA)
|
|
86
|
-
| 2 | `content-block` (narrow)
|
|
87
|
-
| 3 | `logoCloud` (logos ×3) | `LogoCloud` | Our community |
|
|
88
|
-
| 4 | `content-block` (narrow)
|
|
89
|
-
| 5 | `reports-list` (list)
|
|
90
|
-
| 6 | `reports-list` (list)
|
|
91
|
-
| 7 | `content-block` (narrow · 1 CTA)
|
|
92
|
-
| 8 | `team` (with-large-images · members ×6) | `Team` | Partners |
|
|
93
|
-
| 9 | `cta` (minimal · 1 CTA)
|
|
87
|
+
| # | Section | Component | Copy (first line) |
|
|
88
|
+
| --- | ----------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
|
|
89
|
+
| 1 | `hero` (centered · 1 CTA) | `Hero` | Your Company |
|
|
90
|
+
| 2 | `content-block` (narrow) | `ContentBlock` | A working partnership with the teams building {what your market needs… |
|
|
91
|
+
| 3 | `logoCloud` (logos ×3 · 1 CTA) | `LogoCloud` | Our community |
|
|
92
|
+
| 4 | `content-block` (narrow) | `ContentBlock` | Research on {your field}, and on where the next decade of it is going |
|
|
93
|
+
| 5 | `reports-list` (list) | `ReportsList` | Special reports |
|
|
94
|
+
| 6 | `reports-list` (list) | `ReportsList` | Favorites |
|
|
95
|
+
| 7 | `content-block` (narrow · 1 CTA) | `ContentBlock` | Trusted work for the people who carry {the outcome you deliver} |
|
|
96
|
+
| 8 | `team` (with-large-images · members ×6 · 1 CTA) | `Team` | Partners |
|
|
97
|
+
| 9 | `cta` (minimal · 1 CTA) | `CTA` | Your Company |
|
|
94
98
|
|
|
95
99
|
<!-- generated:end -->
|
|
96
100
|
|
|
@@ -213,6 +217,13 @@ _Code route — no content, no sections._
|
|
|
213
217
|
_Code route — no content, no sections._
|
|
214
218
|
<!-- generated:end -->
|
|
215
219
|
|
|
220
|
+
`/appointments`:
|
|
221
|
+
|
|
222
|
+
<!-- generated:begin page=/appointments -->
|
|
223
|
+
|
|
224
|
+
_Code route — no content, no sections._
|
|
225
|
+
<!-- generated:end -->
|
|
226
|
+
|
|
216
227
|
`/flows/[slug]`:
|
|
217
228
|
|
|
218
229
|
<!-- generated:begin page=/flows/[slug] -->
|
|
@@ -250,6 +261,7 @@ _Code route — no content, no sections._
|
|
|
250
261
|
```
|
|
251
262
|
minimalism-site:
|
|
252
263
|
requires: [marketing, scheduling, signal-collectors]
|
|
264
|
+
categories: [real-estate, technology, legal]
|
|
253
265
|
roster:
|
|
254
266
|
- { route: "/", content: ["content/en/HomePage/home.mdx"] }
|
|
255
267
|
- { route: "/reports", content: ["content/en/LandingPage/reports.mdx"] }
|
|
@@ -264,6 +276,7 @@ minimalism-site:
|
|
|
264
276
|
- { route: "/meet" }
|
|
265
277
|
- { route: "/meet/[slug]" }
|
|
266
278
|
- { route: "/meet/confirmed" }
|
|
279
|
+
- { route: "/appointments" }
|
|
267
280
|
- { route: "/flows/[slug]" }
|
|
268
281
|
- { route: "/flows/[slug]/start" }
|
|
269
282
|
- { route: "/flows/[slug]/results/[payload]" }
|
|
@@ -318,7 +331,6 @@ Every component the roster rows' seed content composes today (generated):
|
|
|
318
331
|
|
|
319
332
|
| Gap | Issue |
|
|
320
333
|
| ------------------------------------------------------------------- | ---------- |
|
|
321
|
-
| The six bounded section props the deck's slides need | #5691 |
|
|
322
334
|
| The deck's Nav wiring (`sticky` + `deckMorph` under `home: "deck"`) | #5697 |
|
|
323
335
|
| `/about` rename as one routes-map row | #5572 |
|
|
324
336
|
| The Pro demo host `minimalism-site.ailaunchkit.ai` — provisioning | #5589 body |
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"installMap": {
|
|
7
7
|
"provenance.json": ".ailk-template.json",
|
|
8
8
|
"assets/hero-backdrop.svg": "apps/web/public/hero-backdrop.svg",
|
|
9
|
+
"assets/wordmark-placeholder.svg": "apps/web/public/wordmark-placeholder.svg",
|
|
9
10
|
"assets/logo-placeholder-1.svg": "apps/web/public/logo-placeholder-1.svg",
|
|
10
11
|
"assets/logo-placeholder-2.svg": "apps/web/public/logo-placeholder-2.svg",
|
|
11
12
|
"assets/logo-placeholder-3.svg": "apps/web/public/logo-placeholder-3.svg",
|
|
@@ -17,5 +18,5 @@
|
|
|
17
18
|
"assets/avatar-placeholder-6.svg": "apps/web/public/avatar-placeholder-6.svg",
|
|
18
19
|
"flows/referral.flow.json": "database/flows/referral.flow.json"
|
|
19
20
|
},
|
|
20
|
-
"postInstall": "Template minimalism-site installed. The home page is a NINE-SLIDE SCROLL-SNAP DECK (content/en/HomePage/home.mdx): one full-viewport panel per section, the brand mark hidden on slide 1 and revealed from slide 2 on, no nav items, and the footer bottom bar carrying Privacy, Terms, FAQ, the social row, the theme toggle and the locale switcher. Its module pages arrived with their bundles: the booker at /meet from scheduling, the report reader at /reports/<slug> and the flow routes from signal-collectors; /privacy and /terms came with the base layer. This template adds the deck, /reports, /about, /services (+ three samples), /contact, /faq, /referral, four sample reports and the referral flow at /flows/referral/start. RENAMING /about: many sites want /partners, /team, /family or /company instead. That is a route rename in YOUR scaffold, never a content move - keep content/en/AboutPage/ (AboutPage is a schema type, not a URL), rename the route directory (git mv 'apps/web/app/[locale]/about' 'apps/web/app/[locale]/partners'), and update the one footer label that names it (messages/<locale>.json). Once the routes map ships in the scaffold it is one row: the /about row's route plus a legacyRoutes entry so the old path 301s. EVERY line of copy, all four sample reports, the three logo placeholders, the six portrait placeholders and the hero backdrop are placeholders - replace them before you launch."
|
|
21
|
+
"postInstall": "Template minimalism-site installed. The home page is a NINE-SLIDE SCROLL-SNAP DECK (content/en/HomePage/home.mdx): one full-viewport panel per section, the brand mark hidden on slide 1 and revealed from slide 2 on, no nav items, and the footer bottom bar carrying Privacy, Terms, FAQ, the social row, the theme toggle and the locale switcher. Its module pages arrived with their bundles: the booker at /meet from scheduling, the report reader at /reports/<slug> and the flow routes from signal-collectors; /privacy and /terms came with the base layer. This template adds the deck, /reports, /about, /services (+ three samples), /contact, /faq, /referral, four sample reports and the referral flow at /flows/referral/start. RENAMING /about: many sites want /partners, /team, /family or /company instead. That is a route rename in YOUR scaffold, never a content move - keep content/en/AboutPage/ (AboutPage is a schema type, not a URL), rename the route directory (git mv 'apps/web/app/[locale]/about' 'apps/web/app/[locale]/partners'), and update the one footer label that names it (messages/<locale>.json). Once the routes map ships in the scaffold it is one row: the /about row's route plus a legacyRoutes entry so the old path 301s. EVERY line of copy, all four sample reports, the three logo placeholders, the six portrait placeholders, the wordmark lockup on slide 1 and the hero backdrop are placeholders - replace them before you launch."
|
|
21
22
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-14 -14 1043 128" width="1043" height="128" role="img" aria-label="Placeholder wordmark">
|
|
2
|
+
<title>Placeholder wordmark</title>
|
|
3
|
+
<desc>Monoline "Your Company" wordmark, drawn as paths so it needs no font. Replace with your own logo lockup before you launch.</desc>
|
|
4
|
+
<g fill="none" stroke="#6b6b73" stroke-width="10" stroke-linecap="round" stroke-linejoin="round">
|
|
5
|
+
<!-- Y -->
|
|
6
|
+
<path d="M0 0 L35 55 L70 0 M35 55 L35 100" />
|
|
7
|
+
<!-- O -->
|
|
8
|
+
<ellipse cx="125" cy="50" rx="35" ry="50" />
|
|
9
|
+
<!-- U -->
|
|
10
|
+
<path d="M180 0 L180 65 A35 35 0 0 0 250 65 L250 0" />
|
|
11
|
+
<!-- R -->
|
|
12
|
+
<path d="M270 100 L270 0 L315 0 A27.5 27.5 0 0 1 315 55 L270 55 M312 55 L340 100" />
|
|
13
|
+
<!-- C -->
|
|
14
|
+
<path d="M462.5 11.7 A35 50 0 1 0 462.5 88.3" />
|
|
15
|
+
<!-- O -->
|
|
16
|
+
<ellipse cx="530" cy="50" rx="35" ry="50" />
|
|
17
|
+
<!-- M -->
|
|
18
|
+
<path d="M585 100 L585 0 L620 55 L655 0 L655 100" />
|
|
19
|
+
<!-- P -->
|
|
20
|
+
<path d="M675 100 L675 0 L717 0 A29 29 0 0 1 717 58 L675 58" />
|
|
21
|
+
<!-- A -->
|
|
22
|
+
<path d="M765 100 L800 0 L835 100 M779 72 L821 72" />
|
|
23
|
+
<!-- N -->
|
|
24
|
+
<path d="M855 100 L855 0 L925 100 L925 0" />
|
|
25
|
+
<!-- Y -->
|
|
26
|
+
<path d="M945 0 L980 55 L1015 0 M980 55 L980 100" />
|
|
27
|
+
</g>
|
|
28
|
+
</svg>
|
|
@@ -13,7 +13,15 @@ sections:
|
|
|
13
13
|
"variant": "centered",
|
|
14
14
|
"fill": "viewport",
|
|
15
15
|
"surface": "gradient-brand",
|
|
16
|
+
"backdrop": { "src": "/hero-backdrop.svg", "alt": "" },
|
|
16
17
|
"headline": "Your Company",
|
|
18
|
+
"lockup":
|
|
19
|
+
{
|
|
20
|
+
"src": "/wordmark-placeholder.svg",
|
|
21
|
+
"alt": "",
|
|
22
|
+
"width": 1043,
|
|
23
|
+
"height": 128,
|
|
24
|
+
},
|
|
17
25
|
"primaryCta": { "label": "{Primary CTA} →", "href": "/reports" },
|
|
18
26
|
"ctaSize": "xl",
|
|
19
27
|
"scrollCue": { "label": "Scroll" },
|
|
@@ -25,6 +33,8 @@ sections:
|
|
|
25
33
|
"data":
|
|
26
34
|
{
|
|
27
35
|
"variant": "narrow",
|
|
36
|
+
"align": "center",
|
|
37
|
+
"fill": "viewport",
|
|
28
38
|
"headline": "A working partnership with the teams building {what your market needs next}",
|
|
29
39
|
"body": "{One line on who you work with, and what they get from you that they cannot get elsewhere.}",
|
|
30
40
|
},
|
|
@@ -43,6 +53,14 @@ sections:
|
|
|
43
53
|
{ "name": "{logo}", "src": "/logo-placeholder-2.svg" },
|
|
44
54
|
{ "name": "{logo}", "src": "/logo-placeholder-3.svg" },
|
|
45
55
|
],
|
|
56
|
+
"actions":
|
|
57
|
+
[
|
|
58
|
+
{
|
|
59
|
+
"kind": "button",
|
|
60
|
+
"label": "Refer someone →",
|
|
61
|
+
"href": "/referral",
|
|
62
|
+
},
|
|
63
|
+
],
|
|
46
64
|
},
|
|
47
65
|
},
|
|
48
66
|
{
|
|
@@ -51,6 +69,8 @@ sections:
|
|
|
51
69
|
"data":
|
|
52
70
|
{
|
|
53
71
|
"variant": "narrow",
|
|
72
|
+
"align": "center",
|
|
73
|
+
"fill": "viewport",
|
|
54
74
|
"headline": "Research on {your field}, and on where the next decade of it is going",
|
|
55
75
|
"body": "{One line on what a reader walks away with. Keep it to a single sentence.}",
|
|
56
76
|
},
|
|
@@ -62,7 +82,8 @@ sections:
|
|
|
62
82
|
{
|
|
63
83
|
"headline": "Special reports",
|
|
64
84
|
"variant": "list",
|
|
65
|
-
"tone": "on-
|
|
85
|
+
"tone": "on-dark",
|
|
86
|
+
"surface": "gradient-dark",
|
|
66
87
|
"reports":
|
|
67
88
|
[
|
|
68
89
|
{
|
|
@@ -95,7 +116,8 @@ sections:
|
|
|
95
116
|
{
|
|
96
117
|
"headline": "Favorites",
|
|
97
118
|
"variant": "list",
|
|
98
|
-
"tone": "on-
|
|
119
|
+
"tone": "on-dark",
|
|
120
|
+
"surface": "gradient-dark",
|
|
99
121
|
"reports":
|
|
100
122
|
[
|
|
101
123
|
{ "slug": "state-of-the-market-2026", "title": "2026" },
|
|
@@ -111,6 +133,8 @@ sections:
|
|
|
111
133
|
"data":
|
|
112
134
|
{
|
|
113
135
|
"variant": "narrow",
|
|
136
|
+
"align": "center",
|
|
137
|
+
"fill": "viewport",
|
|
114
138
|
"headline": "Trusted work for the people who carry {the outcome you deliver}",
|
|
115
139
|
"body": "{One line on how an engagement starts and what the first month looks like.}",
|
|
116
140
|
"cta": { "label": "Hire me →", "href": "/meet" },
|
|
@@ -125,6 +149,9 @@ sections:
|
|
|
125
149
|
"variant": "with-large-images",
|
|
126
150
|
"hoverReveal": true,
|
|
127
151
|
"largePhotos": true,
|
|
152
|
+
"phoneColumns": 2,
|
|
153
|
+
"actions":
|
|
154
|
+
[{ "kind": "button", "label": "About us →", "href": "/about" }],
|
|
128
155
|
"members":
|
|
129
156
|
[
|
|
130
157
|
{
|
|
@@ -192,23 +219,26 @@ the reference's own words. Replace all of it before you launch — including
|
|
|
192
219
|
the four sample reports, the three logo placeholders and the six portrait
|
|
193
220
|
placeholders.
|
|
194
221
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
nothing is recomposed:
|
|
222
|
+
Every slide now carries the full composition the template intends — #5691
|
|
223
|
+
landed the seven bounded section props the deck was waiting on, and this file
|
|
224
|
+
sets all seven without recomposing a single slide:
|
|
199
225
|
|
|
200
|
-
- slide 1 `landing` —
|
|
201
|
-
(
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
226
|
+
- slide 1 `landing` — `backdrop` paints `assets/hero-backdrop.svg`
|
|
227
|
+
(installed at `/hero-backdrop.svg`) full-bleed behind the copy. It is a
|
|
228
|
+
distinct slot from the hero's `image`, which counts as a stacked reveal,
|
|
229
|
+
so the 44px `scrollCue` survives it.
|
|
230
|
+
- slide 3 `community` and slide 8 `partners` — `actions` puts one
|
|
231
|
+
bottom-centered action at the 44px floor on each ("Refer someone →" →
|
|
232
|
+
/referral; "About us →" → /about).
|
|
233
|
+
- slides 2 `tagline`, 4 `reports-headline` and 7 `services-headline` —
|
|
234
|
+
`align: "center"` + `fill: "viewport"` centre the copy in the middle of
|
|
235
|
+
the snap panel instead of pinning it to the top.
|
|
236
|
+
- slides 5 `special-reports` and 6 `favorites` — `surface:
|
|
237
|
+
"gradient-dark"` is the dark ground `tone: "on-dark"` (#5562, shipped
|
|
238
|
+
for this template) was always meant to sit on.
|
|
239
|
+
- slide 8 `partners` — `phoneColumns: 2` puts the six-tile wall two-up at
|
|
240
|
+
390 instead of overflowing the snap panel one tile at a time. Slide 8 is
|
|
241
|
+
the only slide that renders through `CardGrid`: slide 3's logo strip is
|
|
242
|
+
a reflowing flex row, and `reports-list`'s `list` variant has no grid.
|
|
213
243
|
|
|
214
244
|
\*/}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
{
|
|
2
|
+
"template": "simple-service",
|
|
3
|
+
"requires": ["marketing", "scheduling", "commerce"],
|
|
4
|
+
"categories": ["landscaping"],
|
|
5
|
+
"generatedHash": "f0dce515363186cee7ec9d1b1fd91d0ca11e039db31e843d1235d451dd49e736",
|
|
6
|
+
"layout": {
|
|
7
|
+
"nav": "full",
|
|
8
|
+
"footer": "columns",
|
|
9
|
+
"announcementBanner": true,
|
|
10
|
+
"home": "default"
|
|
11
|
+
},
|
|
12
|
+
"rows": [
|
|
13
|
+
{
|
|
14
|
+
"route": "/",
|
|
15
|
+
"pageType": "HomePage",
|
|
16
|
+
"schema": "HomePage",
|
|
17
|
+
"shell": "MarketingShell",
|
|
18
|
+
"chrome": "on",
|
|
19
|
+
"sections": [
|
|
20
|
+
{
|
|
21
|
+
"type": "hero",
|
|
22
|
+
"component": "Hero"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"type": "items",
|
|
26
|
+
"component": "Items"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"type": "cta",
|
|
30
|
+
"component": "CTA"
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"route": "/services",
|
|
36
|
+
"pageType": "ServicesList",
|
|
37
|
+
"schema": "ServicesList",
|
|
38
|
+
"shell": "MarketingShell",
|
|
39
|
+
"chrome": "on",
|
|
40
|
+
"sections": [
|
|
41
|
+
{
|
|
42
|
+
"type": "hero",
|
|
43
|
+
"component": "Hero"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"type": "items",
|
|
47
|
+
"component": "Items"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"type": "cta",
|
|
51
|
+
"component": "CTA"
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"route": "/services/[slug]",
|
|
57
|
+
"pageType": null,
|
|
58
|
+
"schema": null,
|
|
59
|
+
"shell": "MarketingShell",
|
|
60
|
+
"chrome": "on",
|
|
61
|
+
"sections": []
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"route": "/about",
|
|
65
|
+
"pageType": "AboutPage",
|
|
66
|
+
"schema": "AboutPage",
|
|
67
|
+
"shell": "MarketingShell",
|
|
68
|
+
"chrome": "on",
|
|
69
|
+
"sections": [
|
|
70
|
+
{
|
|
71
|
+
"type": "content-block",
|
|
72
|
+
"component": "ContentBlock"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"type": "cta",
|
|
76
|
+
"component": "CTA"
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"route": "/contact",
|
|
82
|
+
"pageType": "ContactPage",
|
|
83
|
+
"schema": "ContactPage",
|
|
84
|
+
"shell": "MarketingShell",
|
|
85
|
+
"chrome": "on",
|
|
86
|
+
"sections": [
|
|
87
|
+
{
|
|
88
|
+
"type": "hero",
|
|
89
|
+
"component": "Hero"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"type": "contact-form",
|
|
93
|
+
"component": "ContactForm"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
"type": "cta",
|
|
97
|
+
"component": "CTA"
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"route": "/faq",
|
|
103
|
+
"pageType": "FAQPage",
|
|
104
|
+
"schema": "FAQPage",
|
|
105
|
+
"shell": "MarketingShell",
|
|
106
|
+
"chrome": "on",
|
|
107
|
+
"sections": [
|
|
108
|
+
{
|
|
109
|
+
"type": "faq",
|
|
110
|
+
"component": "FAQ"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"type": "cta",
|
|
114
|
+
"component": "CTA"
|
|
115
|
+
}
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"route": "/returns",
|
|
120
|
+
"pageType": "ReturnsPolicyPage",
|
|
121
|
+
"schema": "ReturnsPolicyPage",
|
|
122
|
+
"shell": "MarketingShell",
|
|
123
|
+
"chrome": "on",
|
|
124
|
+
"sections": [
|
|
125
|
+
{
|
|
126
|
+
"type": "document-chassis",
|
|
127
|
+
"component": "DocumentChassis"
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"route": "/cancellation",
|
|
133
|
+
"pageType": "CancellationPolicyPage",
|
|
134
|
+
"schema": "CancellationPolicyPage",
|
|
135
|
+
"shell": "MarketingShell",
|
|
136
|
+
"chrome": "on",
|
|
137
|
+
"sections": [
|
|
138
|
+
{
|
|
139
|
+
"type": "document-chassis",
|
|
140
|
+
"component": "DocumentChassis"
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"route": "/shipping",
|
|
146
|
+
"pageType": "ShippingPolicyPage",
|
|
147
|
+
"schema": "ShippingPolicyPage",
|
|
148
|
+
"shell": "MarketingShell",
|
|
149
|
+
"chrome": "on",
|
|
150
|
+
"sections": [
|
|
151
|
+
{
|
|
152
|
+
"type": "document-chassis",
|
|
153
|
+
"component": "DocumentChassis"
|
|
154
|
+
}
|
|
155
|
+
]
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"route": "/privacy",
|
|
159
|
+
"pageType": "PrivacyPage",
|
|
160
|
+
"schema": "PrivacyPage",
|
|
161
|
+
"shell": "MarketingShell",
|
|
162
|
+
"chrome": "on",
|
|
163
|
+
"sections": [
|
|
164
|
+
{
|
|
165
|
+
"type": "document-chassis",
|
|
166
|
+
"component": "DocumentChassis"
|
|
167
|
+
}
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"route": "/terms",
|
|
172
|
+
"pageType": "TermsPage",
|
|
173
|
+
"schema": "TermsPage",
|
|
174
|
+
"shell": "MarketingShell",
|
|
175
|
+
"chrome": "on",
|
|
176
|
+
"sections": [
|
|
177
|
+
{
|
|
178
|
+
"type": "document-chassis",
|
|
179
|
+
"component": "DocumentChassis"
|
|
180
|
+
}
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"route": "/account",
|
|
185
|
+
"pageType": null,
|
|
186
|
+
"schema": null,
|
|
187
|
+
"shell": "MarketingShell",
|
|
188
|
+
"chrome": "on",
|
|
189
|
+
"sections": []
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"route": "/purchase/success",
|
|
193
|
+
"pageType": null,
|
|
194
|
+
"schema": null,
|
|
195
|
+
"shell": "MarketingShell",
|
|
196
|
+
"chrome": "on",
|
|
197
|
+
"sections": []
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"route": "/purchase/cancel",
|
|
201
|
+
"pageType": null,
|
|
202
|
+
"schema": null,
|
|
203
|
+
"shell": "MarketingShell",
|
|
204
|
+
"chrome": "on",
|
|
205
|
+
"sections": []
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
"route": "/meet",
|
|
209
|
+
"pageType": null,
|
|
210
|
+
"schema": null,
|
|
211
|
+
"shell": "MarketingShell",
|
|
212
|
+
"chrome": "on",
|
|
213
|
+
"sections": []
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"route": "/meet/[slug]",
|
|
217
|
+
"pageType": null,
|
|
218
|
+
"schema": null,
|
|
219
|
+
"shell": "MarketingShell",
|
|
220
|
+
"chrome": "on",
|
|
221
|
+
"sections": []
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"route": "/meet/confirmed",
|
|
225
|
+
"pageType": null,
|
|
226
|
+
"schema": null,
|
|
227
|
+
"shell": "MarketingShell",
|
|
228
|
+
"chrome": "on",
|
|
229
|
+
"sections": []
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"route": "/appointments",
|
|
233
|
+
"pageType": null,
|
|
234
|
+
"schema": null,
|
|
235
|
+
"shell": "MarketingShell",
|
|
236
|
+
"chrome": "on",
|
|
237
|
+
"sections": []
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
}
|