create-ailk 0.1.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/LICENSE +201 -0
- package/README.md +39 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +80 -0
- package/dist/copy.d.ts +8 -0
- package/dist/copy.js +109 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/lib/pro-callout.d.ts +12 -0
- package/dist/lib/pro-callout.js +20 -0
- package/dist/parse-args.d.ts +13 -0
- package/dist/parse-args.js +81 -0
- package/dist/programmatic.d.ts +49 -0
- package/dist/programmatic.js +89 -0
- package/dist/substitute.d.ts +31 -0
- package/dist/substitute.js +45 -0
- package/dist/validate.d.ts +8 -0
- package/dist/validate.js +70 -0
- package/package.json +47 -0
- package/templates/.claude/.gitkeep +0 -0
- package/templates/.claude/agents/web.md +80 -0
- package/templates/.claude/rules/architecture.md +62 -0
- package/templates/.claude/rules/preserve-existing-style.md +51 -0
- package/templates/.claude/skills/README.md +43 -0
- package/templates/.claude/skills/add-schema/SKILL.md +270 -0
- package/templates/.claude/skills/add-schema/references/conflict-handling.md +200 -0
- package/templates/.claude/skills/add-schema/references/file-finding.md +123 -0
- package/templates/.claude/skills/add-schema/references/schema-types.md +131 -0
- package/templates/.claude/skills/audit-site/SKILL.md +213 -0
- package/templates/.claude/skills/audit-site/references/common-errors.md +113 -0
- package/templates/.claude/skills/audit-site/references/findings-glossary.md +138 -0
- package/templates/.claude/skills/audit-site/references/severity-levels.md +114 -0
- package/templates/.claude/skills/provision-config/SKILL.md +243 -0
- package/templates/.claude/skills/provision-config/references/env-vars-template.md +184 -0
- package/templates/.claude/skills/provision-config/references/runbook-template.md +248 -0
- package/templates/.claude/skills/provision-config/references/vercel-json-template.md +98 -0
- package/templates/.claude/skills/scaffold-auth/SKILL.md +261 -0
- package/templates/.claude/skills/scaffold-auth/references/env-vars.md +91 -0
- package/templates/.claude/skills/scaffold-auth/references/oauth-app-setup.md +171 -0
- package/templates/.claude/skills/scaffold-commerce/SKILL.md +310 -0
- package/templates/.claude/skills/scaffold-commerce/references/lookup-keys-template.md +71 -0
- package/templates/.claude/skills/scaffold-commerce/references/marketplace-brand-pages.md +83 -0
- package/templates/.claude/skills/scaffold-commerce/templates/marketplace-cta-route.tsx.tmpl +72 -0
- package/templates/.claude/skills/scaffold-page/SKILL.md +243 -0
- package/templates/.claude/skills/scaffold-page/references/page-types.md +169 -0
- package/templates/.claude/skills/scaffold-page/templates/content.mdx.tmpl +28 -0
- package/templates/.claude/skills/scaffold-page/templates/route.tsx.tmpl +28 -0
- package/templates/.claude/skills/suggest-site-pages/SKILL.md +242 -0
- package/templates/.claude/skills/suggest-site-pages/references/categories.md +287 -0
- package/templates/.env.example +205 -0
- package/templates/.gitkeep +2 -0
- package/templates/CLAUDE.md +142 -0
- package/templates/CONVENTIONS.md +222 -0
- package/templates/README.md +110 -0
- package/templates/apps/api/.env.example +40 -0
- package/templates/apps/api/CLAUDE.md +63 -0
- package/templates/apps/api/api/index.ts +144 -0
- package/templates/apps/api/jest.config.cjs +74 -0
- package/templates/apps/api/package.json +54 -0
- package/templates/apps/api/src/__tests__/factories/content-fixture.ts +138 -0
- package/templates/apps/api/src/__tests__/factories/index.ts +70 -0
- package/templates/apps/api/src/__tests__/factories/lead-fixture.ts +82 -0
- package/templates/apps/api/src/__tests__/index.test.ts +118 -0
- package/templates/apps/api/src/__tests__/server.test.ts +207 -0
- package/templates/apps/api/src/__tests__/services/enrichment-shim.test.ts +126 -0
- package/templates/apps/api/src/__tests__/setup.ts +24 -0
- package/templates/apps/api/src/cli.ts +30 -0
- package/templates/apps/api/src/config/__tests__/index.test.ts +97 -0
- package/templates/apps/api/src/config/index.ts +56 -0
- package/templates/apps/api/src/index.ts +32 -0
- package/templates/apps/api/src/lib/__mocks__/prisma-client.js +15 -0
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +45 -0
- package/templates/apps/api/src/lib/__tests__/content-adapter.test.ts +178 -0
- package/templates/apps/api/src/lib/__tests__/error-serializer.test.ts +100 -0
- package/templates/apps/api/src/lib/__tests__/errors.test.ts +94 -0
- package/templates/apps/api/src/lib/__tests__/file-fallback.test.ts +144 -0
- package/templates/apps/api/src/lib/__tests__/fixtures/HomePage/home.mdx +8 -0
- package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +227 -0
- package/templates/apps/api/src/lib/__tests__/outbound-http.test.ts +125 -0
- package/templates/apps/api/src/lib/__tests__/prisma.test.ts +165 -0
- package/templates/apps/api/src/lib/__tests__/require-paid-tier.test.ts +129 -0
- package/templates/apps/api/src/lib/__tests__/stripe.test.ts +74 -0
- package/templates/apps/api/src/lib/content-adapter.ts +86 -0
- package/templates/apps/api/src/lib/error-serializer.ts +77 -0
- package/templates/apps/api/src/lib/errors.ts +95 -0
- package/templates/apps/api/src/lib/file-fallback.ts +87 -0
- package/templates/apps/api/src/lib/lead-capture-store.ts +110 -0
- package/templates/apps/api/src/lib/locales.ts +201 -0
- package/templates/apps/api/src/lib/outbound-http.ts +122 -0
- package/templates/apps/api/src/lib/prisma.ts +21 -0
- package/templates/apps/api/src/lib/require-paid-tier.ts +53 -0
- package/templates/apps/api/src/lib/stripe.ts +30 -0
- package/templates/apps/api/src/lib/webhook-idempotency.ts +92 -0
- package/templates/apps/api/src/middleware/__tests__/adversarial/bearer-token-format.test.ts +111 -0
- package/templates/apps/api/src/middleware/__tests__/adversarial/cookie-or-bearer-precedence.test.ts +172 -0
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-bearer-skip.test.ts +119 -0
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-cookie-path.test.ts +138 -0
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-fixation.test.ts +149 -0
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-timeout.test.ts +139 -0
- package/templates/apps/api/src/middleware/__tests__/auth.bearer-path.test.ts +175 -0
- package/templates/apps/api/src/middleware/__tests__/auth.both-present-precedence.test.ts +76 -0
- package/templates/apps/api/src/middleware/__tests__/auth.cookie-path.test.ts +153 -0
- package/templates/apps/api/src/middleware/__tests__/auth.neither-present.test.ts +72 -0
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +292 -0
- package/templates/apps/api/src/middleware/auth.ts +246 -0
- package/templates/apps/api/src/middleware/rate-limit.ts +132 -0
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +129 -0
- package/templates/apps/api/src/openapi/index.ts +12 -0
- package/templates/apps/api/src/openapi/spec.ts +408 -0
- package/templates/apps/api/src/routes/auth/__tests__/auth-tokens.functional.test.ts +193 -0
- package/templates/apps/api/src/routes/auth/__tests__/auth-user.functional.test.ts +201 -0
- package/templates/apps/api/src/routes/auth/__tests__/tokens.test.ts +294 -0
- package/templates/apps/api/src/routes/auth/__tests__/user.test.ts +486 -0
- package/templates/apps/api/src/routes/auth/tokens.ts +199 -0
- package/templates/apps/api/src/routes/auth/user.ts +244 -0
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +588 -0
- package/templates/apps/api/src/routes/checkout/index.ts +13 -0
- package/templates/apps/api/src/routes/checkout/sessions.ts +185 -0
- package/templates/apps/api/src/routes/content/__tests__/create.test.ts +239 -0
- package/templates/apps/api/src/routes/content/__tests__/delete.test.ts +201 -0
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +141 -0
- package/templates/apps/api/src/routes/content/__tests__/list-pages.test.ts +122 -0
- package/templates/apps/api/src/routes/content/__tests__/list-types.test.ts +44 -0
- package/templates/apps/api/src/routes/content/__tests__/locale.test.ts +118 -0
- package/templates/apps/api/src/routes/content/__tests__/rate-limit.test.ts +51 -0
- package/templates/apps/api/src/routes/content/__tests__/update.test.ts +252 -0
- package/templates/apps/api/src/routes/content/create.ts +114 -0
- package/templates/apps/api/src/routes/content/delete.ts +81 -0
- package/templates/apps/api/src/routes/content/get-page.ts +98 -0
- package/templates/apps/api/src/routes/content/index.ts +32 -0
- package/templates/apps/api/src/routes/content/list-pages.ts +83 -0
- package/templates/apps/api/src/routes/content/list-types.ts +19 -0
- package/templates/apps/api/src/routes/content/rate-limit.ts +13 -0
- package/templates/apps/api/src/routes/content/slug.ts +9 -0
- package/templates/apps/api/src/routes/content/update.ts +111 -0
- package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +415 -0
- package/templates/apps/api/src/routes/leads/__tests__/track.test.ts +165 -0
- package/templates/apps/api/src/routes/leads/index.ts +130 -0
- package/templates/apps/api/src/routes/test/auth/__tests__/session.test.ts +296 -0
- package/templates/apps/api/src/routes/test/auth/session.ts +141 -0
- package/templates/apps/api/src/routes/webhooks/README.md +57 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +247 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +198 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +633 -0
- package/templates/apps/api/src/routes/webhooks/index.ts +41 -0
- package/templates/apps/api/src/routes/webhooks/stripe.ts +253 -0
- package/templates/apps/api/src/server.ts +157 -0
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +395 -0
- package/templates/apps/api/src/services/enrichment-shim.ts +53 -0
- package/templates/apps/api/src/services/lead-routing.ts +338 -0
- package/templates/apps/api/tsconfig.json +34 -0
- package/templates/apps/api/vercel.json +17 -0
- package/templates/apps/mcp/.env.example +52 -0
- package/templates/apps/mcp/CLAUDE.md +84 -0
- package/templates/apps/mcp/__tests__/abuse/daily-cap.test.ts +52 -0
- package/templates/apps/mcp/__tests__/abuse/email-validator.test.ts +46 -0
- package/templates/apps/mcp/__tests__/abuse/honeypot.test.ts +36 -0
- package/templates/apps/mcp/__tests__/abuse/user-agent-deny.test.ts +54 -0
- package/templates/apps/mcp/__tests__/aeo-cli-parity.test.ts +110 -0
- package/templates/apps/mcp/__tests__/audit-single-page.test.ts +213 -0
- package/templates/apps/mcp/__tests__/audit.test.ts +217 -0
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +52 -0
- package/templates/apps/mcp/__tests__/create_page.test.ts +201 -0
- package/templates/apps/mcp/__tests__/delete_page.test.ts +176 -0
- package/templates/apps/mcp/__tests__/get_business_hours.test.ts +82 -0
- package/templates/apps/mcp/__tests__/get_faq.test.ts +80 -0
- package/templates/apps/mcp/__tests__/get_locations.test.ts +65 -0
- package/templates/apps/mcp/__tests__/get_offerings.test.ts +90 -0
- package/templates/apps/mcp/__tests__/get_pricing.test.ts +80 -0
- package/templates/apps/mcp/__tests__/get_site_info.test.ts +81 -0
- package/templates/apps/mcp/__tests__/http-transport.test.ts +323 -0
- package/templates/apps/mcp/__tests__/lib/errors.test.ts +75 -0
- package/templates/apps/mcp/__tests__/lib/require-paid-tier.test.ts +75 -0
- package/templates/apps/mcp/__tests__/list_pages.test.ts +112 -0
- package/templates/apps/mcp/__tests__/locale.test.ts +135 -0
- package/templates/apps/mcp/__tests__/parity.test.ts +205 -0
- package/templates/apps/mcp/__tests__/purchase-disabled.test.ts +34 -0
- package/templates/apps/mcp/__tests__/read_content.test.ts +153 -0
- package/templates/apps/mcp/__tests__/request_callback.test.ts +163 -0
- package/templates/apps/mcp/__tests__/search_content.test.ts +153 -0
- package/templates/apps/mcp/__tests__/server.test.ts +115 -0
- package/templates/apps/mcp/__tests__/submit_lead.test.ts +165 -0
- package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +161 -0
- package/templates/apps/mcp/__tests__/tools/purchase.test.ts +227 -0
- package/templates/apps/mcp/__tests__/tools/scaffold.test.ts +237 -0
- package/templates/apps/mcp/__tests__/update_page.test.ts +195 -0
- package/templates/apps/mcp/jest.config.cjs +82 -0
- package/templates/apps/mcp/package.json +37 -0
- package/templates/apps/mcp/src/abuse/daily-cap.ts +47 -0
- package/templates/apps/mcp/src/abuse/email-validator.ts +25 -0
- package/templates/apps/mcp/src/abuse/honeypot.ts +21 -0
- package/templates/apps/mcp/src/abuse/index.ts +111 -0
- package/templates/apps/mcp/src/abuse/user-agent-deny.ts +58 -0
- package/templates/apps/mcp/src/http-transport.ts +303 -0
- package/templates/apps/mcp/src/index.ts +67 -0
- package/templates/apps/mcp/src/lib/audit-single-page.ts +194 -0
- package/templates/apps/mcp/src/lib/errors.ts +61 -0
- package/templates/apps/mcp/src/lib/locales.ts +171 -0
- package/templates/apps/mcp/src/lib/require-paid-tier.ts +44 -0
- package/templates/apps/mcp/src/lib/resolve-locale.ts +30 -0
- package/templates/apps/mcp/src/server.ts +139 -0
- package/templates/apps/mcp/src/tools/audit.ts +103 -0
- package/templates/apps/mcp/src/tools/capture_lead.ts +52 -0
- package/templates/apps/mcp/src/tools/create_page.ts +95 -0
- package/templates/apps/mcp/src/tools/delete_page.ts +73 -0
- package/templates/apps/mcp/src/tools/get_business_hours.ts +66 -0
- package/templates/apps/mcp/src/tools/get_faq.ts +69 -0
- package/templates/apps/mcp/src/tools/get_locations.ts +85 -0
- package/templates/apps/mcp/src/tools/get_offerings.ts +66 -0
- package/templates/apps/mcp/src/tools/get_pricing.ts +74 -0
- package/templates/apps/mcp/src/tools/get_site_info.ts +84 -0
- package/templates/apps/mcp/src/tools/index.ts +125 -0
- package/templates/apps/mcp/src/tools/list_pages.ts +72 -0
- package/templates/apps/mcp/src/tools/purchase.ts +89 -0
- package/templates/apps/mcp/src/tools/read_content.ts +61 -0
- package/templates/apps/mcp/src/tools/request_callback.ts +51 -0
- package/templates/apps/mcp/src/tools/scaffold.ts +119 -0
- package/templates/apps/mcp/src/tools/search_content.ts +59 -0
- package/templates/apps/mcp/src/tools/subscribe_newsletter.ts +47 -0
- package/templates/apps/mcp/src/tools/update_page.ts +91 -0
- package/templates/apps/mcp/tsconfig.json +19 -0
- package/templates/apps/web/.env.example +47 -0
- package/templates/apps/web/CLAUDE.md +81 -0
- package/templates/apps/web/__tests__/auth/adversarial/cookie-attributes.test.ts +94 -0
- package/templates/apps/web/__tests__/auth/adversarial/oauth-state-parameter.test.ts +75 -0
- package/templates/apps/web/__tests__/auth/adversarial/redirect-uri-allowlist.test.ts +82 -0
- package/templates/apps/web/__tests__/auth/env-helpers.test.ts +168 -0
- package/templates/apps/web/__tests__/authority-list-routes.test.tsx +208 -0
- package/templates/apps/web/__tests__/better-stack.test.ts +66 -0
- package/templates/apps/web/__tests__/blog-dir-resolution.test.ts +87 -0
- package/templates/apps/web/__tests__/blog-source-populated.test.ts +130 -0
- package/templates/apps/web/__tests__/data-testid-coverage.test.tsx +60 -0
- package/templates/apps/web/__tests__/google-analytics.test.tsx +104 -0
- package/templates/apps/web/__tests__/i18n/middleware.test.ts +119 -0
- package/templates/apps/web/__tests__/i18n/routing.test.ts +114 -0
- package/templates/apps/web/__tests__/i18n/translations.test.ts +191 -0
- package/templates/apps/web/__tests__/json-ld.test.ts +98 -0
- package/templates/apps/web/__tests__/knowledge-events-routes.test.tsx +580 -0
- package/templates/apps/web/__tests__/layout-stealth.test.ts +39 -0
- package/templates/apps/web/__tests__/lighthouse-fixtures/improvement-image-shrink.tsx +103 -0
- package/templates/apps/web/__tests__/lighthouse-fixtures/override-fixture.md +114 -0
- package/templates/apps/web/__tests__/lighthouse-fixtures/regression-bloat.tsx +94 -0
- package/templates/apps/web/__tests__/page.test.tsx +230 -0
- package/templates/apps/web/__tests__/products-services-phase1.test.tsx +321 -0
- package/templates/apps/web/__tests__/projects-routes.test.tsx +392 -0
- package/templates/apps/web/__tests__/resources-downloads-integrations-phase2.test.tsx +475 -0
- package/templates/apps/web/__tests__/routes/ai-plugin-json.test.ts +53 -0
- package/templates/apps/web/__tests__/routes/blog-route.test.tsx +191 -0
- package/templates/apps/web/__tests__/routes/llms-txt.test.ts +123 -0
- package/templates/apps/web/__tests__/routes/robots-txt.test.ts +52 -0
- package/templates/apps/web/__tests__/routes/sitemap-xml.test.ts +78 -0
- package/templates/apps/web/__tests__/routes/well-known-mcp.test.ts +203 -0
- package/templates/apps/web/__tests__/section-routes.test.tsx +693 -0
- package/templates/apps/web/__tests__/security-headers.test.ts +201 -0
- package/templates/apps/web/__tests__/sentry-config.test.ts +116 -0
- package/templates/apps/web/__tests__/setup.ts +82 -0
- package/templates/apps/web/__tests__/sitemap-locales.test.ts +415 -0
- package/templates/apps/web/__tests__/standalone-informational-routes.test.tsx +844 -0
- package/templates/apps/web/app/.well-known/ai-plugin.json/route.ts +81 -0
- package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +110 -0
- package/templates/apps/web/app/.well-known/mcp.json/route.ts +58 -0
- package/templates/apps/web/app/[locale]/__tests__/layout.test.tsx +120 -0
- package/templates/apps/web/app/[locale]/__tests__/page-renderer-migration.test.tsx +202 -0
- package/templates/apps/web/app/[locale]/about/page.tsx +31 -0
- package/templates/apps/web/app/[locale]/blog/[[...slug]]/page.tsx +173 -0
- package/templates/apps/web/app/[locale]/careers/[slug]/page.tsx +45 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +117 -0
- package/templates/apps/web/app/[locale]/careers/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/case-studies/[slug]/page.tsx +44 -0
- package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +113 -0
- package/templates/apps/web/app/[locale]/case-studies/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +63 -0
- package/templates/apps/web/app/[locale]/clients/page.tsx +27 -0
- package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +130 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +152 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +92 -0
- package/templates/apps/web/app/[locale]/contact/contact.actions.ts +79 -0
- package/templates/apps/web/app/[locale]/contact/error.tsx +24 -0
- package/templates/apps/web/app/[locale]/contact/page.tsx +38 -0
- package/templates/apps/web/app/[locale]/courses/[slug]/page.tsx +34 -0
- package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +119 -0
- package/templates/apps/web/app/[locale]/courses/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/dev/purchase/__tests__/actions.test.ts +160 -0
- package/templates/apps/web/app/[locale]/dev/purchase/error.tsx +25 -0
- package/templates/apps/web/app/[locale]/dev/purchase/page.tsx +117 -0
- package/templates/apps/web/app/[locale]/dev/purchase/purchase.actions.ts +58 -0
- package/templates/apps/web/app/[locale]/docs/[[...slug]]/page.tsx +118 -0
- package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +72 -0
- package/templates/apps/web/app/[locale]/downloads/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/events/[slug]/page.tsx +47 -0
- package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +130 -0
- package/templates/apps/web/app/[locale]/events/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/faq/page.tsx +36 -0
- package/templates/apps/web/app/[locale]/how-to/[slug]/page.tsx +34 -0
- package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +78 -0
- package/templates/apps/web/app/[locale]/how-to/page.tsx +40 -0
- package/templates/apps/web/app/[locale]/integrations/[slug]/page.tsx +43 -0
- package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +129 -0
- package/templates/apps/web/app/[locale]/integrations/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/launch-service/page.tsx +31 -0
- package/templates/apps/web/app/[locale]/layout.tsx +241 -0
- package/templates/apps/web/app/[locale]/page.tsx +41 -0
- package/templates/apps/web/app/[locale]/partners/[slug]/page.tsx +44 -0
- package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +113 -0
- package/templates/apps/web/app/[locale]/partners/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/products/[slug]/page.tsx +43 -0
- package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +129 -0
- package/templates/apps/web/app/[locale]/products/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/projects/[slug]/page.tsx +39 -0
- package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +138 -0
- package/templates/apps/web/app/[locale]/projects/page.tsx +30 -0
- package/templates/apps/web/app/[locale]/resources/[slug]/page.tsx +51 -0
- package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +117 -0
- package/templates/apps/web/app/[locale]/resources/page.tsx +27 -0
- package/templates/apps/web/app/[locale]/services/[slug]/page.tsx +43 -0
- package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +129 -0
- package/templates/apps/web/app/[locale]/services/page.tsx +25 -0
- package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +34 -0
- package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +81 -0
- package/templates/apps/web/app/[locale]/software/page.tsx +39 -0
- package/templates/apps/web/app/[locale]/tech-articles/[slug]/page.tsx +34 -0
- package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +82 -0
- package/templates/apps/web/app/[locale]/tech-articles/page.tsx +39 -0
- package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +63 -0
- package/templates/apps/web/app/[locale]/testimonials/page.tsx +27 -0
- package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +63 -0
- package/templates/apps/web/app/[locale]/use-cases/page.tsx +27 -0
- package/templates/apps/web/app/[locale]/whitepapers/[slug]/page.tsx +34 -0
- package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +82 -0
- package/templates/apps/web/app/[locale]/whitepapers/page.tsx +39 -0
- package/templates/apps/web/app/__tests__/error-boundaries.test.tsx +152 -0
- package/templates/apps/web/app/api/auth/[...all]/route.ts +16 -0
- package/templates/apps/web/app/error-fallback.tsx +75 -0
- package/templates/apps/web/app/error.tsx +23 -0
- package/templates/apps/web/app/layout.tsx +18 -0
- package/templates/apps/web/app/llms.txt/route.ts +101 -0
- package/templates/apps/web/app/not-found.tsx +48 -0
- package/templates/apps/web/app/og/__tests__/route.test.ts +164 -0
- package/templates/apps/web/app/og/route.tsx +135 -0
- package/templates/apps/web/app/robots.txt/route.ts +36 -0
- package/templates/apps/web/app/sitemap.xml/route.ts +146 -0
- package/templates/apps/web/auth.ts +141 -0
- package/templates/apps/web/components/ThemeToggle.tsx +60 -0
- package/templates/apps/web/components/google-analytics.tsx +34 -0
- package/templates/apps/web/content/en/blog/index.mdx +15 -0
- package/templates/apps/web/content/en/blog/launching-ailk.mdx +20 -0
- package/templates/apps/web/content/en/docs/getting-started.mdx +30 -0
- package/templates/apps/web/i18n/request.ts +36 -0
- package/templates/apps/web/jest.config.cjs +100 -0
- package/templates/apps/web/lib/__mocks__/next-mdx-remote-rsc.js +12 -0
- package/templates/apps/web/lib/__mocks__/source-server.js +31 -0
- package/templates/apps/web/lib/__tests__/og.test.ts +65 -0
- package/templates/apps/web/lib/auth-env.ts +66 -0
- package/templates/apps/web/lib/blog-list-data.ts +95 -0
- package/templates/apps/web/lib/blog-post-data.ts +79 -0
- package/templates/apps/web/lib/nav-config.ts +13 -0
- package/templates/apps/web/lib/observability/better-stack.ts +27 -0
- package/templates/apps/web/lib/og.ts +23 -0
- package/templates/apps/web/lib/prisma-for-auth.ts +34 -0
- package/templates/apps/web/lib/source.ts +34 -0
- package/templates/apps/web/messages/en.json +131 -0
- package/templates/apps/web/middleware.ts +80 -0
- package/templates/apps/web/next.config.mjs +167 -0
- package/templates/apps/web/package.json +62 -0
- package/templates/apps/web/public/.well-known/security.txt +17 -0
- package/templates/apps/web/public/android-chrome-192x192.png +0 -0
- package/templates/apps/web/public/android-chrome-512x512.png +0 -0
- package/templates/apps/web/public/apple-touch-icon.png +0 -0
- package/templates/apps/web/public/favicon-16x16.png +0 -0
- package/templates/apps/web/public/favicon-32x32.png +0 -0
- package/templates/apps/web/public/favicon.ico +0 -0
- package/templates/apps/web/public/favicon.svg +4 -0
- package/templates/apps/web/public/logo-dark.svg +21 -0
- package/templates/apps/web/public/logo-light.svg +21 -0
- package/templates/apps/web/public/logomark-dark.svg +4 -0
- package/templates/apps/web/public/logomark-light.svg +4 -0
- package/templates/apps/web/public/og-default.png +0 -0
- package/templates/apps/web/public/site.webmanifest +19 -0
- package/templates/apps/web/scripts/assert-content-bundled.ts +55 -0
- package/templates/apps/web/security-headers.config.ts +132 -0
- package/templates/apps/web/sentry.client.config.ts +27 -0
- package/templates/apps/web/sentry.edge.config.ts +15 -0
- package/templates/apps/web/sentry.server.config.ts +20 -0
- package/templates/apps/web/source.config.ts +78 -0
- package/templates/apps/web/src/components/SiteNav.tsx +21 -0
- package/templates/apps/web/src/lib/routes.ts +37 -0
- package/templates/apps/web/tsconfig.json +35 -0
- package/templates/apps/web/types/messages.d.ts +19 -0
- package/templates/content/.gitkeep +0 -0
- package/templates/content/CLAUDE.md +85 -0
- package/templates/content/_site.mdx +38 -0
- package/templates/content/ar/HomePage/home.mdx +123 -0
- package/templates/content/ar/_site.mdx +35 -0
- package/templates/content/de/_site.mdx +29 -0
- package/templates/content/en/.gitkeep +0 -0
- package/templates/content/en/AboutPage/about.mdx +19 -0
- package/templates/content/en/AboutPage/about.schema.json +82 -0
- package/templates/content/en/BookCall/book-call.mdx +19 -0
- package/templates/content/en/BookCall/book-call.schema.json +121 -0
- package/templates/content/en/BreadcrumbList/site-breadcrumbs.mdx +20 -0
- package/templates/content/en/CareersList/careers.mdx +24 -0
- package/templates/content/en/CaseStudiesList/case-studies.mdx +22 -0
- package/templates/content/en/CaseStudiesList/showcase.mdx +8 -0
- package/templates/content/en/CaseStudy/ailk-aeo-rollout.mdx +32 -0
- package/templates/content/en/CaseStudy/schema-builder-migration.mdx +41 -0
- package/templates/content/en/ClientsList/clients.mdx +38 -0
- package/templates/content/en/ContactPage/contact.mdx +19 -0
- package/templates/content/en/ContactPage/contact.schema.json +100 -0
- package/templates/content/en/ContactPoint/primary.mdx +14 -0
- package/templates/content/en/Course/aeo-fundamentals.mdx +37 -0
- package/templates/content/en/Course/schema-builder-workshop.mdx +62 -0
- package/templates/content/en/CoursesList/courses.mdx +22 -0
- package/templates/content/en/DownloadsList/downloads.mdx +22 -0
- package/templates/content/en/Event/aeo-office-hours-may-2026.mdx +39 -0
- package/templates/content/en/Event/ailk-launch-day-2026.mdx +35 -0
- package/templates/content/en/EventsList/events.mdx +26 -0
- package/templates/content/en/FAQPage/faq.mdx +420 -0
- package/templates/content/en/FAQPage/faq.schema.json +231 -0
- package/templates/content/en/GlossaryList/glossary.mdx +19 -0
- package/templates/content/en/GlossaryList/glossary.schema.json +300 -0
- package/templates/content/en/HomePage/home.mdx +312 -0
- package/templates/content/en/HomePage/home.schema.json +88 -0
- package/templates/content/en/HomePage/launch-service.mdx +475 -0
- package/templates/content/en/HomePage/launch-service.schema.json +138 -0
- package/templates/content/en/HowTo/add-mdx-content.mdx +38 -0
- package/templates/content/en/HowTo/configure-aeo-scoring.mdx +35 -0
- package/templates/content/en/HowTo/set-up-json-ld.mdx +36 -0
- package/templates/content/en/Integration/github-actions.mdx +31 -0
- package/templates/content/en/Integration/openai-api.mdx +26 -0
- package/templates/content/en/Integration/vercel.mdx +32 -0
- package/templates/content/en/IntegrationsList/integrations.mdx +22 -0
- package/templates/content/en/JobPosting/content-strategist.mdx +46 -0
- package/templates/content/en/JobPosting/developer-advocate.mdx +47 -0
- package/templates/content/en/JobPosting/senior-fullstack-engineer.mdx +57 -0
- package/templates/content/en/LandingPage/aeo-audit.mdx +19 -0
- package/templates/content/en/LandingPage/aeo-audit.schema.json +92 -0
- package/templates/content/en/LandingPage/agency-waitlist.mdx +340 -0
- package/templates/content/en/LandingPage/agency-waitlist.schema.json +152 -0
- package/templates/content/en/LandingPage/developers.mdx +19 -0
- package/templates/content/en/LandingPage/developers.schema.json +109 -0
- package/templates/content/en/LandingPage/for-agencies.mdx +390 -0
- package/templates/content/en/LandingPage/for-agencies.schema.json +107 -0
- package/templates/content/en/LandingPage/for-ai-search-agencies.mdx +417 -0
- package/templates/content/en/LandingPage/for-ai-search-agencies.schema.json +105 -0
- package/templates/content/en/LandingPage/for-businesses.mdx +19 -0
- package/templates/content/en/LandingPage/for-businesses.schema.json +96 -0
- package/templates/content/en/LandingPage/platform.mdx +369 -0
- package/templates/content/en/LandingPage/platform.schema.json +166 -0
- package/templates/content/en/LandingPage/vs-ai-website-builders.mdx +19 -0
- package/templates/content/en/LandingPage/vs-ai-website-builders.schema.json +102 -0
- package/templates/content/en/LandingPage/vs-wordpress.mdx +19 -0
- package/templates/content/en/LandingPage/vs-wordpress.schema.json +53 -0
- package/templates/content/en/NewsletterSignup/newsletter.mdx +236 -0
- package/templates/content/en/NewsletterSignup/newsletter.schema.json +91 -0
- package/templates/content/en/Organization/site-owner.mdx +16 -0
- package/templates/content/en/Partner/prisma.mdx +31 -0
- package/templates/content/en/Partner/supabase.mdx +30 -0
- package/templates/content/en/Partner/vercel.mdx +28 -0
- package/templates/content/en/PartnersList/partners.mdx +22 -0
- package/templates/content/en/Person/founder.mdx +18 -0
- package/templates/content/en/Pricing/pricing.mdx +538 -0
- package/templates/content/en/Pricing/pricing.schema.json +209 -0
- package/templates/content/en/PrivacyPage/privacy.mdx +165 -0
- package/templates/content/en/PrivacyPage/privacy.schema.json +64 -0
- package/templates/content/en/Product/ailk.mdx +19 -0
- package/templates/content/en/Product/ailk.schema.json +94 -0
- package/templates/content/en/Product/api-launch-kit.mdx +26 -0
- package/templates/content/en/Product/launch-kit.mdx +28 -0
- package/templates/content/en/ProductsList/products.mdx +26 -0
- package/templates/content/en/Project/ailk-phase-2.mdx +54 -0
- package/templates/content/en/ProjectsList/projects.mdx +25 -0
- package/templates/content/en/ResourceDetail/aeo-scoring-guide.mdx +27 -0
- package/templates/content/en/ResourceDetail/content-model-whitepaper.mdx +28 -0
- package/templates/content/en/ResourceDetail/schema-org-quick-reference.mdx +39 -0
- package/templates/content/en/ResourcesHub/resources.mdx +22 -0
- package/templates/content/en/Service/consulting.mdx +22 -0
- package/templates/content/en/Service/implementation.mdx +30 -0
- package/templates/content/en/Service/launch-service.mdx +232 -0
- package/templates/content/en/Service/launch.mdx +228 -0
- package/templates/content/en/ServicesList/services.mdx +84 -0
- package/templates/content/en/SoftwareProduct/ailk-aeo.mdx +44 -0
- package/templates/content/en/SoftwareProduct/ailk-content-adapters.mdx +47 -0
- package/templates/content/en/SoftwareProduct/ailk-schema.mdx +49 -0
- package/templates/content/en/TeamList/team.mdx +63 -0
- package/templates/content/en/TeamMember/founder.mdx +72 -0
- package/templates/content/en/TermsPage/terms.mdx +19 -0
- package/templates/content/en/TermsPage/terms.schema.json +99 -0
- package/templates/content/en/TestimonialsList/testimonials.mdx +44 -0
- package/templates/content/en/UseCasesList/use-cases.mdx +30 -0
- package/templates/content/en/Whitepaper/ax-first-product-development.mdx +27 -0
- package/templates/content/en/Whitepaper/open-core-commercial-strategy.mdx +27 -0
- package/templates/content/en/Whitepaper/structured-data-for-answer-engines.mdx +31 -0
- package/templates/content/en-XA/AboutPage/about.mdx +8 -0
- package/templates/content/en-XA/FAQPage/faq.mdx +8 -0
- package/templates/content/en-XA/HomePage/home.mdx +8 -0
- package/templates/content/es/_site.mdx +30 -0
- package/templates/content/fr/_site.mdx +30 -0
- package/templates/content/ja/_site.mdx +30 -0
- package/templates/content/pt-BR/AboutPage/about.mdx +8 -0
- package/templates/content/pt-BR/FAQPage/faq.mdx +8 -0
- package/templates/content/pt-BR/HomePage/home.mdx +23 -0
- package/templates/database/CHANGELOG.md +5 -0
- package/templates/database/README.md +234 -0
- package/templates/database/__tests__/user-cascade.test.ts +125 -0
- package/templates/database/auth/.gitkeep +0 -0
- package/templates/database/config/.gitkeep +0 -0
- package/templates/database/content/.gitkeep +0 -0
- package/templates/database/inbox/.gitkeep +0 -0
- package/templates/database/inbox/README.md +3 -0
- package/templates/database/inbox/__tests__/schema.test.ts +40 -0
- package/templates/database/inbox/schema.prisma +52 -0
- package/templates/database/jest.config.cjs +29 -0
- package/templates/database/migrations/20260508000000_add_inbox_namespace/migration.sql +328 -0
- package/templates/database/migrations/20260513000000_better_auth_migration/migration.sql +100 -0
- package/templates/database/migrations/20260515000000_add_user_billing_fields/migration.sql +28 -0
- package/templates/database/migrations/20260516000000_add_user_tier_care_plan_seat/migration.sql +25 -0
- package/templates/database/migrations/20260518000000_add_telemetry_records/migration.sql +42 -0
- package/templates/database/migrations/20260525000000_theme_wiring/migration.sql +67 -0
- package/templates/database/migrations/20260710000000_retire_commercial_tier/migration.sql +21 -0
- package/templates/database/migrations/migration_lock.toml +3 -0
- package/templates/database/ops/.gitkeep +0 -0
- package/templates/database/package.json +45 -0
- package/templates/database/prisma.config.ts +20 -0
- package/templates/database/schema.prisma +487 -0
- package/templates/database/scripts/db-generate-locked.sh +80 -0
- package/templates/database/seed-test.ts +85 -0
- package/templates/database/tsconfig.build.json +16 -0
- package/templates/database/tsconfig.json +9 -0
- package/templates/package.json +125 -0
- package/templates/pnpm-workspace.yaml +6 -0
- package/templates/project.yaml +59 -0
- package/templates/tsconfig.base.json +18 -0
- package/templates/tsconfig.json +45 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Project
|
|
3
|
+
slug: ailk-phase-2
|
|
4
|
+
title: AILK Phase 2 — Builder Port
|
|
5
|
+
description: Expanding the schema.org builder layer from 6 to 45 types, with locale-aware JSON-LD emission and a registry-vs-builder consistency guarantee.
|
|
6
|
+
publishedAt: "2026-05-07"
|
|
7
|
+
sections:
|
|
8
|
+
- id: hero-1
|
|
9
|
+
type: hero
|
|
10
|
+
data:
|
|
11
|
+
variant: centered
|
|
12
|
+
headline: AILK Phase 2 — Builder Port
|
|
13
|
+
subheadline: Expanding the schema.org builder layer from 6 to 45 types.
|
|
14
|
+
|
|
15
|
+
- id: content-block-1
|
|
16
|
+
type: content-block
|
|
17
|
+
data:
|
|
18
|
+
variant: narrow
|
|
19
|
+
headline: What we shipped
|
|
20
|
+
body: |
|
|
21
|
+
Phase 2 expanded @working-theory/schema from 6 builders and 2 registry entries to 45 builders and 45
|
|
22
|
+
registry entries. Every builder now emits inLanguage from the page's locale field (defaulting
|
|
23
|
+
to 'en'), threading the locale-aware contract through the full type surface.
|
|
24
|
+
|
|
25
|
+
- id: items-1
|
|
26
|
+
type: items
|
|
27
|
+
data:
|
|
28
|
+
headline: Technical decisions
|
|
29
|
+
columns: 2
|
|
30
|
+
items:
|
|
31
|
+
- title: Six-family architecture
|
|
32
|
+
description: Builders organized into core, identity, canonical-list, canonical-detail, editorial-list, and editorial-detail subdirectories.
|
|
33
|
+
icon: folder
|
|
34
|
+
- title: Locale-aware emission
|
|
35
|
+
description: Every builder emits inLanguage from the page locale field, defaulting to 'en' when absent.
|
|
36
|
+
icon: globe
|
|
37
|
+
- title: Identity sub-entities
|
|
38
|
+
description: BreadcrumbList, ContactPoint use dedicated input shapes — not ContentPageInput — because they're data fragments, not pages.
|
|
39
|
+
icon: layers
|
|
40
|
+
- title: Dispatcher unchanged
|
|
41
|
+
description: Public signature buildJsonLd(page) is stable. Existing callers required no updates.
|
|
42
|
+
icon: check
|
|
43
|
+
|
|
44
|
+
- id: cta-1
|
|
45
|
+
type: cta
|
|
46
|
+
data:
|
|
47
|
+
headline: View the source
|
|
48
|
+
primaryCta:
|
|
49
|
+
label: Browse @working-theory/schema on GitHub
|
|
50
|
+
href: https://github.com/working-theory-labs/ai-launch-kit/tree/main/packages/schema
|
|
51
|
+
external: true
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
<!-- MDX body is preserved for content adapters that use it, but the page renders from frontmatter sections. -->
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ProjectsList
|
|
3
|
+
slug: projects
|
|
4
|
+
title: Projects
|
|
5
|
+
description: A selection of build engagements — what we shipped, with whom, and what we learned.
|
|
6
|
+
sections:
|
|
7
|
+
- id: hero-1
|
|
8
|
+
type: hero
|
|
9
|
+
data:
|
|
10
|
+
variant: centered
|
|
11
|
+
headline: Projects
|
|
12
|
+
subheadline: Engagements where we had meaningful ownership over technical direction. Each one shaped what ended up in AILK.
|
|
13
|
+
|
|
14
|
+
- id: items-1
|
|
15
|
+
type: items
|
|
16
|
+
data:
|
|
17
|
+
headline: Selected engagements
|
|
18
|
+
columns: 3
|
|
19
|
+
items:
|
|
20
|
+
- title: AILK Phase 2 — Builder Port
|
|
21
|
+
description: Expanded the schema.org builder layer from 6 to 45 types with locale-aware JSON-LD emission.
|
|
22
|
+
icon: code
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
<!-- MDX body is preserved for content adapters that use it, but the page renders from frontmatter sections. -->
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ResourceDetail
|
|
3
|
+
slug: aeo-scoring-guide
|
|
4
|
+
title: AEO Scoring Guide
|
|
5
|
+
description: A practical guide to answer-engine optimization scoring — how the @working-theory/aeo package grades your pages and what each layer-1 rule checks.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# AEO Scoring Guide
|
|
9
|
+
|
|
10
|
+
The `@working-theory/aeo` package grades pages against a deterministic rule set. No network calls, no randomness — the same input always returns the same score.
|
|
11
|
+
|
|
12
|
+
## Layer-1 rules
|
|
13
|
+
|
|
14
|
+
Every page is evaluated against these checks:
|
|
15
|
+
|
|
16
|
+
- **Schema presence** — does the page emit a valid JSON-LD `<script>` tag?
|
|
17
|
+
- **@type accuracy** — does the `@type` match the page's content type?
|
|
18
|
+
- **inLanguage** — is the language declared on the top-level schema node?
|
|
19
|
+
- **Description completeness** — is a non-empty `description` present?
|
|
20
|
+
|
|
21
|
+
## Reading the output
|
|
22
|
+
|
|
23
|
+
The scorer returns a structured result with a numeric score (0–100) and a `findings` array. Each finding carries a `rule`, a `severity`, and a `message`. High-severity findings block a page from reaching the top citation tier.
|
|
24
|
+
|
|
25
|
+
## Integrating with your build
|
|
26
|
+
|
|
27
|
+
Add `@working-theory/aeo` to your build pipeline and pipe MDX frontmatter through `scoreContentPage()`. Track the result in CI — a regression in score triggers a non-zero exit.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ResourceDetail
|
|
3
|
+
slug: content-model-whitepaper
|
|
4
|
+
title: Content Model Design for AX-First Sites
|
|
5
|
+
description: A whitepaper covering how to structure your MDX content model so every page type maps cleanly to a schema.org builder — and why that matters for answer-engine citation.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Content Model Design for AX-First Sites
|
|
9
|
+
|
|
10
|
+
Most content models are designed for human readers. AX-first sites need a content model that works equally well for AI agents — which means structured, typed, and unambiguous.
|
|
11
|
+
|
|
12
|
+
## The core principle
|
|
13
|
+
|
|
14
|
+
Every page has a type. Every type has a schema.org equivalent. Every schema.org type has a builder in `@working-theory/schema`. This chain is load-bearing: break it at any point and your pages stop being citable by AI systems.
|
|
15
|
+
|
|
16
|
+
## Frontmatter as the contract
|
|
17
|
+
|
|
18
|
+
AILK's frontmatter convention is the bridge between author intent and machine consumption. The `type` field is not decorative — it drives the builder dispatch and determines which JSON-LD template is applied.
|
|
19
|
+
|
|
20
|
+
## Worked example: ResourceDetail
|
|
21
|
+
|
|
22
|
+
A `ResourceDetail` page maps to the `Article` type. The builder expects a `headline`, optional `author`, and a `datePublished`. Authors who fill in only `title` and `description` get a partial score; filling in the full contract gets a citation-ready page.
|
|
23
|
+
|
|
24
|
+
## Recommendations
|
|
25
|
+
|
|
26
|
+
- Lock your type vocabulary before you author content. Retrofitting types is expensive.
|
|
27
|
+
- Validate frontmatter in CI via `pnpm content:check`. Catch drift early.
|
|
28
|
+
- Use the AEO scorer to measure citation readiness on every PR.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ResourceDetail
|
|
3
|
+
slug: schema-org-quick-reference
|
|
4
|
+
title: Schema.org Quick Reference for AILK Page Types
|
|
5
|
+
description: A concise reference card mapping each AILK page type to its schema.org @type, required fields, and the builder function that emits it.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Schema.org Quick Reference for AILK Page Types
|
|
9
|
+
|
|
10
|
+
AILK ships 60 page types. This reference covers the most commonly used ones.
|
|
11
|
+
|
|
12
|
+
## Core types
|
|
13
|
+
|
|
14
|
+
| AILK type | schema.org @type | Required fields |
|
|
15
|
+
| ------------- | ---------------- | --------------------------- |
|
|
16
|
+
| `HomePage` | `WebSite` | `name`, `url` |
|
|
17
|
+
| `AboutPage` | `AboutPage` | `name`, `description` |
|
|
18
|
+
| `ContactPage` | `ContactPage` | `name` |
|
|
19
|
+
| `BlogPosting` | `BlogPosting` | `headline`, `datePublished` |
|
|
20
|
+
|
|
21
|
+
## Canonical-list types
|
|
22
|
+
|
|
23
|
+
List pages use `CollectionPage` with a `mainEntity` of type `ItemList`. The builder populates `mainEntity` automatically from the page's linked items.
|
|
24
|
+
|
|
25
|
+
## Editorial-detail types
|
|
26
|
+
|
|
27
|
+
| AILK type | schema.org @type | Notes |
|
|
28
|
+
| ---------------- | ---------------- | ---------------------------- |
|
|
29
|
+
| `ResourceDetail` | `Article` | Whitepapers, guides, reports |
|
|
30
|
+
| `CaseStudy` | `Article` | Customer success stories |
|
|
31
|
+
| `Whitepaper` | `Article` | Formal research documents |
|
|
32
|
+
|
|
33
|
+
## Integration type
|
|
34
|
+
|
|
35
|
+
`Integration` pages use `WebPage` with a `mainEntity` of `SoftwareApplication`. The `applicationCategory` field describes the integration category.
|
|
36
|
+
|
|
37
|
+
## Finding the builder
|
|
38
|
+
|
|
39
|
+
Each type maps to a builder in `packages/schema/src/builders/`. Import the builder directly or let the dispatcher select it via `pageToJsonLd()`.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: ResourcesHub
|
|
3
|
+
slug: resources
|
|
4
|
+
title: Resources
|
|
5
|
+
description: Guides, whitepapers, and reference material for teams building AX-first sites with AI Launch Kit.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Resources
|
|
9
|
+
|
|
10
|
+
Practical reference material for every stage of an AILK build — from content model design to AEO scoring and schema.org mapping.
|
|
11
|
+
|
|
12
|
+
## Guides
|
|
13
|
+
|
|
14
|
+
Hands-on guides covering specific workflows: setting up the AEO scorer, structuring your MDX frontmatter, and integrating schema builders into a CI pipeline.
|
|
15
|
+
|
|
16
|
+
## Whitepapers
|
|
17
|
+
|
|
18
|
+
Longer-form research on AX-first architecture patterns, content model design principles, and answer-engine optimization strategy.
|
|
19
|
+
|
|
20
|
+
## Quick references
|
|
21
|
+
|
|
22
|
+
Concise reference cards for the schema.org type system, AILK page type registry, and frontmatter field contracts.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Service
|
|
3
|
+
slug: consulting
|
|
4
|
+
title: Implementation consulting
|
|
5
|
+
description: Help adapting AI Launch Kit to your domain — content model, API contracts, agent tools.
|
|
6
|
+
schema:
|
|
7
|
+
serviceType: Implementation consulting
|
|
8
|
+
provider:
|
|
9
|
+
"@type": Organization
|
|
10
|
+
name: AI Launch Kit
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Implementation consulting
|
|
14
|
+
|
|
15
|
+
Most teams adopting AILK have a clear product idea but want a second pair of
|
|
16
|
+
eyes on the content model, API contracts, and agent surface before they ship.
|
|
17
|
+
|
|
18
|
+
A typical engagement covers:
|
|
19
|
+
|
|
20
|
+
- Mapping your domain to the schema.org types AILK supports
|
|
21
|
+
- Drafting the API and MCP tool surface so agents can do real work
|
|
22
|
+
- Reviewing the architecture boundaries before you cross any of them
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Service
|
|
3
|
+
slug: implementation
|
|
4
|
+
title: Build partnership
|
|
5
|
+
description: Embedded sprint-based engineering alongside your team — we own features end-to-end and hand off code written to be maintained.
|
|
6
|
+
schema:
|
|
7
|
+
serviceType: Build partnership
|
|
8
|
+
provider:
|
|
9
|
+
"@type": Organization
|
|
10
|
+
name: AI Launch Kit
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Build partnership
|
|
14
|
+
|
|
15
|
+
When a team needs more than advice, we embed. A build partnership is a defined sprint — two to four weeks — where we own specific features from design through deployment.
|
|
16
|
+
|
|
17
|
+
## How it works
|
|
18
|
+
|
|
19
|
+
We start with a scoping call to agree on what "done" looks like for each feature. Then we work in your repo, on your branch conventions, writing code your team can maintain after we leave.
|
|
20
|
+
|
|
21
|
+
Typical deliverables:
|
|
22
|
+
|
|
23
|
+
- Schema.org JSON-LD layer for your existing page types
|
|
24
|
+
- API and MCP surface wired to your content model
|
|
25
|
+
- Architecture boundary lint rules tuned to your monorepo shape
|
|
26
|
+
- Tests at every layer — unit, integration, and schema-validation
|
|
27
|
+
|
|
28
|
+
## What makes a good fit
|
|
29
|
+
|
|
30
|
+
Teams that get the most from a build partnership already have a product idea and a codebase. They're not in discovery — they're in execution, and they want a second team that can ship alongside them without the overhead of a large agency engagement.
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Service
|
|
3
|
+
slug: launch-service
|
|
4
|
+
title: A two-week website deploy, built for the agent-first internet. $2,495, fixed scope.
|
|
5
|
+
description: A productized two-week engagement on the open-source AI Launch Kit substrate. Fixed scope, fixed price, AEO-scored on launch day. Delivered by the Working Theory team.
|
|
6
|
+
schema:
|
|
7
|
+
mainEntity:
|
|
8
|
+
"@type": Service
|
|
9
|
+
name: AI Launch Kit Launch Service
|
|
10
|
+
serviceType: Website deployment service
|
|
11
|
+
description: A productized two-week engagement that deploys an AI Launch Kit site for a single SMB. Fixed scope, fixed price, AEO-scored on launch day.
|
|
12
|
+
areaServed: Global
|
|
13
|
+
provider:
|
|
14
|
+
"@type": Organization
|
|
15
|
+
name: SalesSmyth LLC
|
|
16
|
+
brand:
|
|
17
|
+
"@type": Brand
|
|
18
|
+
name: Working Theory
|
|
19
|
+
url: https://workingtheory.ai
|
|
20
|
+
offers:
|
|
21
|
+
"@type": Offer
|
|
22
|
+
name: AILK Launch Service
|
|
23
|
+
price: "2495"
|
|
24
|
+
priceCurrency: USD
|
|
25
|
+
category: service
|
|
26
|
+
url: https://ailaunchkit.ai/launch-service
|
|
27
|
+
sections:
|
|
28
|
+
- id: hero-1
|
|
29
|
+
type: hero
|
|
30
|
+
data:
|
|
31
|
+
variant: centered
|
|
32
|
+
headline: A two-week website deploy, built for the agent-first internet. $2,495, fixed scope.
|
|
33
|
+
subheadline: A productized engagement on the open-source AILK substrate. Fixed scope, fixed price, and a published two-week deploy timeline.
|
|
34
|
+
body: In two weeks, an AI Launch Kit site configured to your brand. AEO-scored on launch day. Built with the structural pieces a page needs when an agent reads it on a buyer's behalf.
|
|
35
|
+
primaryCta:
|
|
36
|
+
label: Book a 30-minute intro call
|
|
37
|
+
href: /contact
|
|
38
|
+
secondaryCta:
|
|
39
|
+
label: Read the full FAQ
|
|
40
|
+
href: /faq
|
|
41
|
+
|
|
42
|
+
- id: content-block-1
|
|
43
|
+
type: content-block
|
|
44
|
+
data:
|
|
45
|
+
variant: narrow
|
|
46
|
+
headline: The page is the unit of citation, not the site
|
|
47
|
+
body: |
|
|
48
|
+
When an agent recommends a business, it assembled that recommendation from individual
|
|
49
|
+
pages it read and trusted. The site is a container. The page is the unit of citation.
|
|
50
|
+
Most SMBs cannot afford to learn this the slow way.
|
|
51
|
+
|
|
52
|
+
The slow way is paying for a custom build, watching it ship without the structural
|
|
53
|
+
pieces an agent needs, and starting over a year later. The Launch Service exists so
|
|
54
|
+
the foundation is right the first time. A productized engagement on AILK, fixed price,
|
|
55
|
+
a two-week deploy. The buyer who is ready to commit gets a working substrate, not a
|
|
56
|
+
custom-quoted maybe.
|
|
57
|
+
|
|
58
|
+
- id: items-1
|
|
59
|
+
type: items
|
|
60
|
+
data:
|
|
61
|
+
headline: What you're already being sold, and why none of it gets you cited
|
|
62
|
+
description: Five paths sit in front of an SMB ready to commit. Each one breaks at the same place — the structural prerequisite for an agent to cite the page is not there.
|
|
63
|
+
columns: 3
|
|
64
|
+
items:
|
|
65
|
+
- title: WordPress with plugins
|
|
66
|
+
description: The plugin catalog is real, and for the audience Google was built for it ships fast. Each plugin bolts on its own schema. The entity declaration is not first-class. An agent reading the page cannot tell which brand the content belongs to without guessing.
|
|
67
|
+
icon: layers
|
|
68
|
+
- title: SaaS starter kits
|
|
69
|
+
description: Built for dashboards and auth flows, not for the public marketing surface. The schema layer is whatever a developer added on a Friday afternoon.
|
|
70
|
+
icon: package
|
|
71
|
+
- title: Closed builders
|
|
72
|
+
description: The lock-in is the product. The structural pieces an agent reads are owned by the builder, not by the brand.
|
|
73
|
+
icon: lock
|
|
74
|
+
- title: AI site builders
|
|
75
|
+
description: The output looks like a website. It does not declare the entity. It does not score itself against AEO. The buyer sees the output but not the decisions behind it.
|
|
76
|
+
icon: cpu
|
|
77
|
+
- title: Doing nothing
|
|
78
|
+
description: The old site keeps not being cited. Quietly.
|
|
79
|
+
icon: minus-circle
|
|
80
|
+
|
|
81
|
+
- id: items-2
|
|
82
|
+
type: items
|
|
83
|
+
data:
|
|
84
|
+
headline: What any foundation has to do to get a brand cited
|
|
85
|
+
description: Five structural requirements. Each one is what any foundation has to do; this list is the spec.
|
|
86
|
+
columns: 3
|
|
87
|
+
items:
|
|
88
|
+
- title: Declare the entity in typed schema
|
|
89
|
+
description: Not a plugin's interpretation. The brand and the product are typed at the page level, then resolved at the site level.
|
|
90
|
+
icon: tag
|
|
91
|
+
- title: Run an agent surface with parity to the human UI
|
|
92
|
+
description: Whatever a person can read, an agent can call. The two surfaces ship together and stay in sync in CI.
|
|
93
|
+
icon: shuffle
|
|
94
|
+
- title: Score AEO at build, not at audit
|
|
95
|
+
description: The site fails the build if entity declarations or page schema regress. The score is a gate, not a report.
|
|
96
|
+
icon: check-circle
|
|
97
|
+
- title: Deploy as a real product, not a demo
|
|
98
|
+
description: A buyer can host it, fork it, and run it without a vendor in the loop.
|
|
99
|
+
icon: rocket
|
|
100
|
+
- title: Open the source
|
|
101
|
+
description: The structural pieces are inspectable. Trust comes from being able to read what is there.
|
|
102
|
+
icon: book-open
|
|
103
|
+
|
|
104
|
+
- id: content-block-2
|
|
105
|
+
type: content-block
|
|
106
|
+
data:
|
|
107
|
+
variant: narrow
|
|
108
|
+
headline: Introducing AI Launch Kit, and the Launch Service that ships it in two weeks
|
|
109
|
+
body: |
|
|
110
|
+
AI Launch Kit is the open-source website foundation for the agent-first internet. It is
|
|
111
|
+
what AI-search agencies and developers use to ship SMB sites for agents and humans. The
|
|
112
|
+
Apache 2.0 starter ships a typed schema registry, a first-class MCP server with
|
|
113
|
+
CI-enforced parity to the human UI, an AEO scoring CLI, and an agent-assisted scaffolding
|
|
114
|
+
workflow. Built by the Working Theory Labs team, who run their own brands on the substrate.
|
|
115
|
+
|
|
116
|
+
The Launch Service is the productized engagement that ships an AILK site for a single SMB.
|
|
117
|
+
It is a two-week engagement at $2,495 for a fixed scope. The deploy includes brand
|
|
118
|
+
configuration, content migration into the typed schema, and integration with the buyer's
|
|
119
|
+
analytics and lead capture. Booking is self-serve. The Working Theory team delivers the
|
|
120
|
+
engagement. The substrate is AILK. The service is what gets it deployed to the brand it
|
|
121
|
+
belongs to.
|
|
122
|
+
|
|
123
|
+
- id: items-3
|
|
124
|
+
type: items
|
|
125
|
+
data:
|
|
126
|
+
headline: What ships with your deploy
|
|
127
|
+
description: The site that goes live at the end of the two weeks carries the full AILK substrate.
|
|
128
|
+
columns: 3
|
|
129
|
+
items:
|
|
130
|
+
- title: A typed schema registry of 60 page types
|
|
131
|
+
description: Every page declares its entity in schema an agent can read. Adding a page is adding a typed entry, not bolting on a plugin.
|
|
132
|
+
icon: database
|
|
133
|
+
- title: Peer apps with API to MCP parity, enforced in CI
|
|
134
|
+
description: Whatever the human UI can do, the agent surface can do. The CI build fails if the two drift.
|
|
135
|
+
icon: shuffle
|
|
136
|
+
- title: The ailk audit CLI, in the OSS distribution
|
|
137
|
+
description: AEO scoring runs at the command line and in CI. Enterprise AEO platforms charge $295 a month for this. The Launch Service ships it included.
|
|
138
|
+
icon: terminal
|
|
139
|
+
- title: Apache 2.0
|
|
140
|
+
description: The full source is yours. No license gates the structural pieces an agent reads.
|
|
141
|
+
icon: unlock
|
|
142
|
+
- title: Agent-assisted scaffolding
|
|
143
|
+
description: New pages are scaffolded by an agent against the typed schema, not free-typed by a developer.
|
|
144
|
+
icon: bot
|
|
145
|
+
|
|
146
|
+
- id: items-4
|
|
147
|
+
type: items
|
|
148
|
+
data:
|
|
149
|
+
headline: What this gets you
|
|
150
|
+
description: Four outcomes the buyer gets, each the payoff of one capability that ships with the deploy.
|
|
151
|
+
columns: 2
|
|
152
|
+
items:
|
|
153
|
+
- title: You ship in two weeks, not three months
|
|
154
|
+
description: A productized engagement on a foundation that already works trades the discovery work of a custom build for the configuration work of a deploy. The project goes into your brand and your content, not into rebuilding the schema layer.
|
|
155
|
+
icon: clock
|
|
156
|
+
- title: Your citation work compounds
|
|
157
|
+
description: Each page you add makes the site easier for an agent to cite, because the structural pieces are shared across pages. New content lands on a foundation that already declares the brand.
|
|
158
|
+
icon: trending-up
|
|
159
|
+
- title: Your build catches AEO regressions
|
|
160
|
+
description: When an entity declaration breaks or a schema field regresses, the build fails. You learn about the gap before the site ships, not after a quarter of missed citations.
|
|
161
|
+
icon: alert-triangle
|
|
162
|
+
- title: You own $295-a-month capability under Apache 2.0
|
|
163
|
+
description: The structural pieces platforms package behind a subscription ship in your repo. The codebase is yours.
|
|
164
|
+
icon: key
|
|
165
|
+
|
|
166
|
+
- id: content-block-3
|
|
167
|
+
type: content-block
|
|
168
|
+
data:
|
|
169
|
+
variant: narrow
|
|
170
|
+
headline: What we're not promising
|
|
171
|
+
body: |
|
|
172
|
+
The Launch Service is launching. Three gaps a buyer should hear before booking.
|
|
173
|
+
|
|
174
|
+
**No pre-launch volume proof.** First Launch Service deploys ship in the coming quarter.
|
|
175
|
+
The proof available today is the substrate, Apache 2.0 with every line inspectable, and
|
|
176
|
+
the dogfood. Sam Henry, Working Theory, and SalesSmyth all run on AILK.
|
|
177
|
+
|
|
178
|
+
**AEO scoring is Layer 1, entity and structure.** Layer 2, citation tracking across
|
|
179
|
+
models, and Layer 3, model-side recommendation evaluation, are on the roadmap. They are
|
|
180
|
+
not in the Launch Service. What ships today catches the structural failures that block
|
|
181
|
+
citation. What is coming catches the citation behavior itself.
|
|
182
|
+
|
|
183
|
+
**Agent recommendations are emerging behavior.** AILK gives a brand the structural
|
|
184
|
+
prerequisites for being cited. No foundation can guarantee what a model recommends,
|
|
185
|
+
including this one. The Launch Service trades the lottery ticket for the spec. It does
|
|
186
|
+
not promise the win.
|
|
187
|
+
|
|
188
|
+
- id: faq-1
|
|
189
|
+
type: faq
|
|
190
|
+
data:
|
|
191
|
+
headline: The questions you're about to ask
|
|
192
|
+
items:
|
|
193
|
+
- question: We're not a Next.js shop. Is this still for us?
|
|
194
|
+
answer: >
|
|
195
|
+
Yes. The Launch Service is the path for SMBs who do not ship Next.js in-house. The
|
|
196
|
+
Working Theory team delivers the engagement. The site ships on AILK, you own the
|
|
197
|
+
codebase, and the deploy includes the configuration and content work. The full
|
|
198
|
+
objection set lives at /faq.
|
|
199
|
+
- question: What does $2,495 include?
|
|
200
|
+
answer: >
|
|
201
|
+
A two-week productized engagement. The scope: brand configuration in the typed
|
|
202
|
+
schema, content migration from the existing site, analytics and lead-capture
|
|
203
|
+
integration, and an AEO score on launch day. Scope is fixed. There are no surprise
|
|
204
|
+
add-ons. The line-item detail is at /pricing.
|
|
205
|
+
- question: What happens after the two weeks? Can we maintain this ourselves?
|
|
206
|
+
answer: >
|
|
207
|
+
Yes. The codebase is Apache 2.0, owned by you. Maintain it in-house, take it to your
|
|
208
|
+
developer, or upgrade. Pro adds advanced capability at $249 per user per year, and
|
|
209
|
+
the Working Theory Platform handles managed runtime. The capability map at /platform
|
|
210
|
+
shows what is in OSS versus paid.
|
|
211
|
+
- question: Is this a fleet-management replacement or an upgrade path?
|
|
212
|
+
answer: >
|
|
213
|
+
Neither. The Launch Service is for one SMB getting a single site live. Fleet
|
|
214
|
+
management — cross-site rollup, white-label, and per-seat licensing — is planned
|
|
215
|
+
as a future Enterprise multi-tenant entitlement, not shipped yet. Entitlement
|
|
216
|
+
detail is at /pricing.
|
|
217
|
+
|
|
218
|
+
- id: cta-1
|
|
219
|
+
type: cta
|
|
220
|
+
data:
|
|
221
|
+
variant: box
|
|
222
|
+
headline: Book a 30-minute intro call
|
|
223
|
+
description: Thirty minutes. We scope your site and walk through the deploy timeline. We confirm fit before either side commits. If the Launch Service is the right path, you book the engagement at the end of the call and the two-week clock starts that week.
|
|
224
|
+
primaryCta:
|
|
225
|
+
label: Book a 30-minute intro call
|
|
226
|
+
href: /contact
|
|
227
|
+
secondaryCta:
|
|
228
|
+
label: Read the full FAQ
|
|
229
|
+
href: /faq
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
<!-- MDX body is preserved for content adapters that use it, but the page renders from frontmatter sections. -->
|