create-ailk 0.1.0 → 0.2.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 +124 -3
- package/component-catalog.md +456 -0
- package/dist/cli.js +92 -16
- package/dist/component-catalog.d.ts +11 -0
- package/dist/component-catalog.js +39 -0
- package/dist/copy.d.ts +7 -0
- package/dist/copy.js +24 -0
- package/dist/derive-architecture.d.ts +13 -0
- package/dist/derive-architecture.js +238 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.js +19 -2
- package/dist/lib/extract-module-bundle.d.ts +16 -0
- package/dist/lib/extract-module-bundle.js +184 -0
- package/dist/lib/fetch-module.d.ts +55 -0
- package/dist/lib/fetch-module.js +125 -0
- package/dist/lib/module-license-gate.d.ts +48 -0
- package/dist/lib/module-license-gate.js +67 -0
- package/dist/lib/module-tier.d.ts +35 -0
- package/dist/lib/module-tier.js +37 -0
- package/dist/module-architecture.d.ts +175 -0
- package/dist/module-architecture.js +663 -0
- package/dist/parse-args.d.ts +47 -1
- package/dist/parse-args.js +143 -2
- package/dist/programmatic.d.ts +160 -3
- package/dist/programmatic.js +196 -7
- package/dist/surfaces.d.ts +211 -0
- package/dist/surfaces.js +532 -0
- package/dist/sync-routes.d.ts +92 -0
- package/dist/sync-routes.js +350 -0
- package/package.json +12 -5
- package/templates/.claude/rules/architecture.md +6 -2
- package/templates/.claude/skills/README.md +9 -9
- package/templates/.claude/skills/add-schema/SKILL.md +14 -7
- package/templates/.claude/skills/add-schema/references/schema-types.md +109 -6
- package/templates/.claude/skills/provision-config/SKILL.md +1 -1
- package/templates/.claude/skills/scaffold-commerce/SKILL.md +498 -1
- package/templates/.claude/skills/scaffold-commerce/templates/checkout-route.template.ts +370 -0
- package/templates/.claude/skills/scaffold-commerce/templates/invoice-route.template.ts +376 -0
- package/templates/.claude/skills/scaffold-commerce/templates/payment-link-route.template.ts +471 -0
- package/templates/.claude/skills/scaffold-commerce/templates/portal-route.template.ts +365 -0
- package/templates/.claude/skills/scaffold-commerce/templates/stripe-config.template.ts +60 -0
- package/templates/.claude/skills/scaffold-commerce/templates/subscription-route.template.ts +446 -0
- package/templates/.claude/skills/suggest-site-pages/references/categories.md +4 -4
- package/templates/.env.example +126 -2
- package/templates/CLAUDE.md +11 -5
- package/templates/README.md +1 -1
- package/templates/apps/api/.env.example +38 -0
- package/templates/apps/api/CLAUDE.md +78 -1
- package/templates/apps/api/LICENSE +201 -0
- package/templates/apps/api/api/index.ts +6 -141
- package/templates/apps/api/jest.config.cjs +16 -0
- package/templates/apps/api/package.json +22 -6
- package/templates/apps/api/src/__tests__/module-exclusion.test.ts +141 -0
- package/templates/apps/api/src/__tests__/server.test.ts +46 -0
- package/templates/apps/api/src/__tests__/vercel-handler.test.ts +211 -0
- package/templates/apps/api/src/bin/abandon-sweep.ts +42 -0
- package/templates/apps/api/src/bin/deliverable-resend.ts +144 -0
- package/templates/apps/api/src/bin/deliverable-upload.ts +114 -0
- package/templates/apps/api/src/bin/followup-sweep.ts +44 -0
- package/templates/apps/api/src/bin/listing-csv-sweep.ts +46 -0
- package/templates/apps/api/src/bin/seed-presets.ts +58 -0
- package/templates/apps/api/src/bin/seed-waitlist-experiments.ts +104 -0
- package/templates/apps/api/src/bin/session-retention-sweep.ts +46 -0
- package/templates/apps/api/src/cli.ts +5 -11
- package/templates/apps/api/src/config/index.ts +35 -0
- package/templates/apps/api/src/config/modules.ts +43 -0
- package/templates/apps/api/src/lib/__mocks__/prisma-client.js +11 -0
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +241 -0
- package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +2 -2
- package/templates/apps/api/src/lib/site.ts +16 -0
- package/templates/apps/api/src/lib/stripe.ts +22 -0
- package/templates/apps/api/src/lib/tenant-db.ts +225 -0
- package/templates/apps/api/src/lib/ws-token.ts +91 -0
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-fixation.test.ts +7 -1
- package/templates/apps/api/src/middleware/__tests__/auth.cookie-path.test.ts +7 -1
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +91 -4
- package/templates/apps/api/src/middleware/auth.ts +43 -8
- package/templates/apps/api/src/middleware/rate-limit.ts +78 -3
- package/templates/apps/api/src/middleware/tenant.ts +99 -0
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +92 -0
- package/templates/apps/api/src/openapi/spec.ts +312 -3
- package/templates/apps/api/src/routes/aeo/__tests__/index.test.ts +175 -0
- package/templates/apps/api/src/routes/aeo/index.ts +107 -0
- package/templates/apps/api/src/routes/auth/__tests__/auth-tokens.functional.test.ts +5 -2
- package/templates/apps/api/src/routes/auth/__tests__/tokens.test.ts +22 -3
- package/templates/apps/api/src/routes/auth/tokens.ts +13 -1
- package/templates/apps/api/src/routes/billing/__tests__/portal.test.ts +450 -0
- package/templates/apps/api/src/routes/billing/__tests__/read.test.ts +262 -0
- package/templates/apps/api/src/routes/billing/__tests__/usage.test.ts +436 -0
- package/templates/apps/api/src/routes/billing/index.ts +36 -0
- package/templates/apps/api/src/routes/billing/portal.ts +182 -0
- package/templates/apps/api/src/routes/billing/read.ts +75 -0
- package/templates/apps/api/src/routes/billing/usage.ts +153 -0
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +99 -0
- package/templates/apps/api/src/routes/checkout/sessions.ts +20 -8
- package/templates/apps/api/src/routes/content/create.ts +1 -0
- package/templates/apps/api/src/routes/content/delete.ts +1 -0
- package/templates/apps/api/src/routes/content/index.ts +42 -6
- package/templates/apps/api/src/routes/content/update.ts +1 -0
- package/templates/apps/api/src/routes/deliverables/__tests__/index.test.ts +393 -0
- package/templates/apps/api/src/routes/deliverables/index.ts +200 -0
- package/templates/apps/api/src/routes/flow-checkouts/__tests__/index.test.ts +443 -0
- package/templates/apps/api/src/routes/flow-checkouts/index.ts +82 -0
- package/templates/apps/api/src/routes/flows/README.md +147 -0
- package/templates/apps/api/src/routes/flows/__tests__/index.test.ts +752 -0
- package/templates/apps/api/src/routes/flows/__tests__/recommender.test.ts +671 -0
- package/templates/apps/api/src/routes/flows/index.ts +202 -0
- package/templates/apps/api/src/routes/flows/recommender.ts +443 -0
- package/templates/apps/api/src/routes/leads/__tests__/index.test.ts +438 -31
- package/templates/apps/api/src/routes/leads/__tests__/track.test.ts +10 -10
- package/templates/apps/api/src/routes/leads/index.ts +43 -9
- package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +558 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/copy-edit.test.ts +815 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +869 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/me-route-precedence.test.ts +221 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +468 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +424 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +707 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +375 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +467 -0
- package/templates/apps/api/src/routes/project-listings/__tests__/tenant-isolation.test.ts +566 -0
- package/templates/apps/api/src/routes/project-listings/get.ts +70 -0
- package/templates/apps/api/src/routes/project-listings/index.ts +120 -0
- package/templates/apps/api/src/routes/project-listings/list.ts +47 -0
- package/templates/apps/api/src/routes/project-listings/me.ts +76 -0
- package/templates/apps/api/src/routes/project-listings/patch-copy.ts +222 -0
- package/templates/apps/api/src/routes/project-listings/patch-draft.ts +97 -0
- package/templates/apps/api/src/routes/project-listings/patch.ts +136 -0
- package/templates/apps/api/src/routes/project-listings/public.ts +52 -0
- package/templates/apps/api/src/routes/project-listings/respond.ts +37 -0
- package/templates/apps/api/src/routes/project-listings/resume-token.ts +22 -0
- package/templates/apps/api/src/routes/project-listings/start.ts +106 -0
- package/templates/apps/api/src/routes/project-listings/submit.ts +122 -0
- package/templates/apps/api/src/routes/schedule/__tests__/index.test.ts +490 -0
- package/templates/apps/api/src/routes/schedule/index.ts +249 -0
- package/templates/apps/api/src/routes/slack/__tests__/actions.test.ts +385 -0
- package/templates/apps/api/src/routes/slack/actions.ts +177 -0
- package/templates/apps/api/src/routes/slack/index.ts +38 -0
- package/templates/apps/api/src/routes/test/auth/__tests__/session.test.ts +16 -6
- package/templates/apps/api/src/routes/test/auth/session.ts +8 -6
- package/templates/apps/api/src/routes/waitlist-experiments/__tests__/tenant-isolation.test.ts +577 -0
- package/templates/apps/api/src/routes/waitlist-experiments/comparison.ts +78 -0
- package/templates/apps/api/src/routes/waitlist-experiments/index.ts +41 -0
- package/templates/apps/api/src/routes/waitlist-experiments/list.ts +64 -0
- package/templates/apps/api/src/routes/waitlist-experiments/respond.ts +42 -0
- package/templates/apps/api/src/routes/waitlist-experiments/signup.ts +84 -0
- package/templates/apps/api/src/routes/waitlist-experiments/signups.ts +119 -0
- package/templates/apps/api/src/routes/waitlist-signups/__tests__/index.test.ts +238 -0
- package/templates/apps/api/src/routes/waitlist-signups/index.ts +101 -0
- package/templates/apps/api/src/routes/webhooks/README.md +35 -12
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +315 -0
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +270 -0
- package/templates/apps/api/src/routes/webhooks/stripe.ts +248 -20
- package/templates/apps/api/src/routes/workspaces/__tests__/config-tenant-isolation.test.ts +356 -0
- package/templates/apps/api/src/routes/workspaces/__tests__/tenant-isolation.test.ts +671 -0
- package/templates/apps/api/src/routes/workspaces/config.ts +125 -0
- package/templates/apps/api/src/routes/workspaces/index.ts +194 -0
- package/templates/apps/api/src/routes/workspaces/sessions.ts +218 -0
- package/templates/apps/api/src/server.ts +307 -7
- package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +489 -0
- package/templates/apps/api/src/services/__tests__/aeo-score.test.ts +475 -0
- package/templates/apps/api/src/services/__tests__/answer-distributions.test.ts +132 -0
- package/templates/apps/api/src/services/__tests__/consent-migration.test.ts +65 -0
- package/templates/apps/api/src/services/__tests__/consent.test.ts +282 -0
- package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +523 -0
- package/templates/apps/api/src/services/__tests__/deliverable-resend.test.ts +359 -0
- package/templates/apps/api/src/services/__tests__/entitlements.test.ts +142 -0
- package/templates/apps/api/src/services/__tests__/flow-aggregate.test.ts +425 -0
- package/templates/apps/api/src/services/__tests__/flow-engine.test.ts +2840 -0
- package/templates/apps/api/src/services/__tests__/lead-promotion.test.ts +393 -0
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +8 -8
- package/templates/apps/api/src/services/__tests__/listing-csv-sweep.test.ts +560 -0
- package/templates/apps/api/src/services/__tests__/listing-promotion.test.ts +684 -0
- package/templates/apps/api/src/services/__tests__/playbook-compile.test.ts +406 -0
- package/templates/apps/api/src/services/__tests__/playbook-render.test.ts +290 -0
- package/templates/apps/api/src/services/__tests__/project-listing-decision.test.ts +736 -0
- package/templates/apps/api/src/services/__tests__/project-listing-flow.test.ts +475 -0
- package/templates/apps/api/src/services/__tests__/project-listing-issue.test.ts +340 -0
- package/templates/apps/api/src/services/__tests__/recommender-capture.test.ts +983 -0
- package/templates/apps/api/src/services/__tests__/slack-notify.test.ts +278 -0
- package/templates/apps/api/src/services/__tests__/tenant-context-cascade.test.ts +71 -0
- package/templates/apps/api/src/services/__tests__/tenant-context.test.ts +379 -0
- package/templates/apps/api/src/services/__tests__/usage-aggregation.test.ts +941 -0
- package/templates/apps/api/src/services/__tests__/usage-credits.test.ts +588 -0
- package/templates/apps/api/src/services/__tests__/usage-metering.test.ts +768 -0
- package/templates/apps/api/src/services/__tests__/waitlist-dashboard.test.ts +1314 -0
- package/templates/apps/api/src/services/__tests__/waitlist-experiments.test.ts +341 -0
- package/templates/apps/api/src/services/__tests__/waitlist-followup.test.ts +567 -0
- package/templates/apps/api/src/services/__tests__/waitlist-scoring.test.ts +474 -0
- package/templates/apps/api/src/services/__tests__/waitlist-signups.test.ts +354 -0
- package/templates/apps/api/src/services/abandon-email.ts +307 -0
- package/templates/apps/api/src/services/aeo-score.ts +288 -0
- package/templates/apps/api/src/services/answer-distributions.ts +138 -0
- package/templates/apps/api/src/services/consent.ts +236 -0
- package/templates/apps/api/src/services/deliverable-fulfillment.ts +523 -0
- package/templates/apps/api/src/services/entitlements.ts +102 -0
- package/templates/apps/api/src/services/flow-aggregate.ts +232 -0
- package/templates/apps/api/src/services/flow-checkouts.ts +123 -0
- package/templates/apps/api/src/services/flow-engine.ts +1296 -0
- package/templates/apps/api/src/services/lead-promotion.ts +176 -0
- package/templates/apps/api/src/services/lead-routing.ts +3 -3
- package/templates/apps/api/src/services/listing-config.ts +102 -0
- package/templates/apps/api/src/services/listing-csv-sweep.ts +455 -0
- package/templates/apps/api/src/services/listing-promotion.ts +342 -0
- package/templates/apps/api/src/services/playbook-compile.ts +398 -0
- package/templates/apps/api/src/services/playbook-render.ts +263 -0
- package/templates/apps/api/src/services/project-listing-decision.ts +510 -0
- package/templates/apps/api/src/services/project-listing-flow.ts +426 -0
- package/templates/apps/api/src/services/project-listing-issue.ts +251 -0
- package/templates/apps/api/src/services/project-listings.ts +1472 -0
- package/templates/apps/api/src/services/recommender-capture.ts +835 -0
- package/templates/apps/api/src/services/scheduling/cal-provider.ts +392 -0
- package/templates/apps/api/src/services/scheduling/index.ts +63 -0
- package/templates/apps/api/src/services/scheduling/types.ts +88 -0
- package/templates/apps/api/src/services/slack-notify.ts +240 -0
- package/templates/apps/api/src/services/tenant-context.ts +451 -0
- package/templates/apps/api/src/services/usage-aggregation.ts +516 -0
- package/templates/apps/api/src/services/usage-credits.ts +340 -0
- package/templates/apps/api/src/services/usage-metering.ts +699 -0
- package/templates/apps/api/src/services/waitlist-dashboard.ts +947 -0
- package/templates/apps/api/src/services/waitlist-experiments.ts +213 -0
- package/templates/apps/api/src/services/waitlist-followup.ts +486 -0
- package/templates/apps/api/src/services/waitlist-scoring.ts +166 -0
- package/templates/apps/api/src/services/waitlist-signups.ts +165 -0
- package/templates/apps/api/src/vercel-handler.ts +165 -0
- package/templates/apps/api/tsconfig.json +0 -12
- package/templates/apps/mcp/CLAUDE.md +19 -9
- package/templates/apps/mcp/LICENSE +201 -0
- package/templates/apps/mcp/__tests__/create_page.test.ts +1 -0
- package/templates/apps/mcp/__tests__/delete_page.test.ts +1 -0
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +105 -0
- package/templates/apps/mcp/__tests__/parity.test.ts +70 -6
- package/templates/apps/mcp/__tests__/request_callback.test.ts +4 -4
- package/templates/apps/mcp/__tests__/schedule_tools.test.ts +242 -0
- package/templates/apps/mcp/__tests__/submit_lead.test.ts +4 -4
- package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +4 -4
- package/templates/apps/mcp/__tests__/tools/purchase.test.ts +47 -0
- package/templates/apps/mcp/__tests__/update_page.test.ts +1 -0
- package/templates/apps/mcp/package.json +6 -4
- package/templates/apps/mcp/src/config/modules.ts +37 -0
- package/templates/apps/mcp/src/server.ts +109 -18
- package/templates/apps/mcp/src/tools/capture_lead.ts +1 -1
- package/templates/apps/mcp/src/tools/create_booking.ts +58 -0
- package/templates/apps/mcp/src/tools/create_page.ts +1 -0
- package/templates/apps/mcp/src/tools/delete_page.ts +1 -0
- package/templates/apps/mcp/src/tools/get_event_meta.ts +55 -0
- package/templates/apps/mcp/src/tools/get_flow.ts +61 -0
- package/templates/apps/mcp/src/tools/index.ts +25 -0
- package/templates/apps/mcp/src/tools/list_availability.ts +67 -0
- package/templates/apps/mcp/src/tools/purchase.ts +3 -0
- package/templates/apps/mcp/src/tools/submit_flow_step.ts +83 -0
- package/templates/apps/mcp/src/tools/update_page.ts +1 -0
- package/templates/apps/mcp/tsconfig.json +1 -9
- package/templates/apps/web/.env.example +44 -0
- package/templates/apps/web/CLAUDE.md +28 -0
- package/templates/apps/web/LICENSE +201 -0
- package/templates/apps/web/__tests__/__mocks__/code-highlight.jest-stub.ts +24 -0
- package/templates/apps/web/__tests__/__mocks__/next-intl-server.ts +33 -0
- package/templates/apps/web/__tests__/__mocks__/next-intl.ts +18 -0
- package/templates/apps/web/__tests__/__mocks__/server-only.ts +13 -0
- package/templates/apps/web/__tests__/__mocks__/style-mock.js +4 -0
- package/templates/apps/web/__tests__/__mocks__/vercel-analytics-server.ts +9 -0
- package/templates/apps/web/__tests__/jest-support/import-meta-transformer.cjs +90 -0
- package/templates/apps/web/__tests__/setup.ts +22 -32
- package/templates/apps/web/app/.well-known/ai-plugin.json/route.ts +6 -3
- package/templates/apps/web/app/.well-known/mcp.json/build-manifest.ts +8 -2
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/page.test.tsx +260 -0
- package/templates/apps/web/app/[locale]/(authed)/account/page.tsx +263 -0
- package/templates/apps/web/app/[locale]/(authed)/account/sign-out-button.tsx +39 -0
- package/templates/apps/web/app/[locale]/(authed)/layout.tsx +54 -0
- package/templates/apps/web/app/[locale]/(authed)/sign-in-gate.tsx +96 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/[experimentId]/page.tsx +309 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/[experimentId]/signups/[leadId]/page.tsx +149 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/comparison.test.tsx +273 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/gate.test.tsx +172 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/list.test.tsx +171 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/__tests__/signup.test.tsx +179 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ExperimentsTable.tsx +116 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ForbiddenState.tsx +24 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/OfferFunnelTable.tsx +66 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/RollupTicker.tsx +61 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/ScoreTrace.tsx +114 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/SignupsTable.tsx +139 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/WaitlistComparisonTabs.tsx +85 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/components/status-badges.tsx +67 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/format.ts +111 -0
- package/templates/apps/web/app/[locale]/(authed)/waitlist/page.tsx +179 -0
- package/templates/apps/web/app/[locale]/about/page.tsx +10 -1
- package/templates/apps/web/app/[locale]/blog/[[...slug]]/page.tsx +6 -1
- package/templates/apps/web/app/[locale]/careers/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/careers/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/careers/page.tsx +9 -1
- package/templates/apps/web/app/[locale]/case-studies/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/case-studies/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/case-studies/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/clients/__tests__/page-renderer-migration.test.tsx +11 -1
- package/templates/apps/web/app/[locale]/clients/page.tsx +9 -1
- package/templates/apps/web/app/[locale]/contact/ContactForm.tsx +21 -1
- package/templates/apps/web/app/[locale]/contact/ConversationalIntakeWrapper.tsx +188 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/ConversationalIntakeWrapper.test.tsx +242 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/contact.actions.test.ts +29 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/intake-analytics.test.ts +51 -0
- package/templates/apps/web/app/[locale]/contact/__tests__/page-renderer-migration.test.tsx +39 -15
- package/templates/apps/web/app/[locale]/contact/contact.actions.ts +21 -3
- package/templates/apps/web/app/[locale]/contact/intake-analytics.ts +49 -0
- package/templates/apps/web/app/[locale]/contact/intake-script.ts +66 -0
- package/templates/apps/web/app/[locale]/contact/page.tsx +14 -4
- package/templates/apps/web/app/[locale]/courses/[slug]/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/courses/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/courses/page.tsx +9 -1
- package/templates/apps/web/app/[locale]/docs/[[...slug]]/page.tsx +1 -0
- package/templates/apps/web/app/[locale]/downloads/__tests__/page-renderer-migration.test.tsx +11 -1
- package/templates/apps/web/app/[locale]/downloads/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/events/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/events/__tests__/page-renderer-migration.test.tsx +12 -2
- package/templates/apps/web/app/[locale]/events/page.tsx +9 -1
- package/templates/apps/web/app/[locale]/faq/page.tsx +10 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/FlowStepperClient.tsx +265 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.permalink.test.tsx +445 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/FlowStepperClient.test.tsx +341 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/checkout.actions.test.ts +287 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/flow.actions.test.ts +302 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/two-route-tool.test.tsx +128 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/checkout.actions.ts +254 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/flow.actions.ts +144 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/page.tsx +108 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/ResultsClient.tsx +532 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/ResultsEmailStep.tsx +121 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/__tests__/ResultsClient.checkout.test.tsx +457 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/__tests__/page.test.tsx +396 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/results/[payload]/page.tsx +114 -0
- package/templates/apps/web/app/[locale]/flows/[slug]/start/page.tsx +52 -0
- package/templates/apps/web/app/[locale]/how-to/[slug]/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/how-to/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/integrations/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/integrations/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/integrations/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/launch-service/page.tsx +14 -1
- package/templates/apps/web/app/[locale]/layout.tsx +127 -16
- package/templates/apps/web/app/[locale]/page.tsx +10 -1
- package/templates/apps/web/app/[locale]/partners/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/partners/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/partners/page.tsx +9 -1
- package/templates/apps/web/app/[locale]/products/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/products/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/products/page.tsx +9 -1
- package/templates/apps/web/app/[locale]/projects/[slug]/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/projects/__tests__/page-renderer-migration.test.tsx +10 -0
- package/templates/apps/web/app/[locale]/projects/apply/ListingApplicationClient.tsx +110 -0
- package/templates/apps/web/app/[locale]/projects/apply/__tests__/ListingApplicationClient.test.tsx +96 -0
- package/templates/apps/web/app/[locale]/projects/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/resources/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/resources/__tests__/page-renderer-migration.test.tsx +12 -2
- package/templates/apps/web/app/[locale]/resources/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/schedule/__tests__/page.test.tsx +117 -0
- package/templates/apps/web/app/[locale]/schedule/confirmed/__tests__/page.test.tsx +96 -0
- package/templates/apps/web/app/[locale]/schedule/confirmed/page.tsx +92 -0
- package/templates/apps/web/app/[locale]/schedule/page.tsx +82 -0
- package/templates/apps/web/app/[locale]/services/[slug]/page.tsx +9 -0
- package/templates/apps/web/app/[locale]/services/__tests__/page-renderer-migration.test.tsx +3 -3
- package/templates/apps/web/app/[locale]/services/page.tsx +9 -1
- package/templates/apps/web/app/[locale]/sign-in/__tests__/next-path.test.ts +31 -0
- package/templates/apps/web/app/[locale]/sign-in/__tests__/page.test.tsx +152 -0
- package/templates/apps/web/app/[locale]/sign-in/next-path.ts +0 -0
- package/templates/apps/web/app/[locale]/sign-in/page.tsx +83 -0
- package/templates/apps/web/app/[locale]/sign-in/sign-in-card.tsx +123 -0
- package/templates/apps/web/app/[locale]/software/[slug]/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/software/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/tech-articles/[slug]/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/tech-articles/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/[locale]/testimonials/__tests__/page-renderer-migration.test.tsx +11 -1
- package/templates/apps/web/app/[locale]/testimonials/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/thanks/[slug]/__tests__/page.test.tsx +93 -0
- package/templates/apps/web/app/[locale]/thanks/[slug]/page.tsx +48 -0
- package/templates/apps/web/app/[locale]/use-cases/__tests__/page-renderer-migration.test.tsx +11 -1
- package/templates/apps/web/app/[locale]/use-cases/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/whitepapers/[slug]/page.tsx +13 -1
- package/templates/apps/web/app/[locale]/whitepapers/__tests__/page-renderer-migration.test.tsx +1 -1
- package/templates/apps/web/app/globals.css +35 -0
- package/templates/apps/web/app/llms.txt/route.ts +2 -1
- package/templates/apps/web/app/og/route.tsx +10 -2
- package/templates/apps/web/auth.ts +8 -0
- package/templates/apps/web/components/sign-out-trigger.tsx +42 -0
- package/templates/apps/web/content/en/blog/README.txt +25 -0
- package/templates/apps/web/content/en/docs/index.mdx +28 -0
- package/templates/apps/web/jest.config.cjs +90 -27
- package/templates/apps/web/lib/__tests__/site-brand.test.ts +119 -0
- package/templates/apps/web/lib/__tests__/site-theme.test.ts +112 -0
- package/templates/apps/web/lib/__tests__/structured-data.test.tsx +499 -0
- package/templates/apps/web/lib/account-config.ts +13 -0
- package/templates/apps/web/lib/server-api.ts +85 -0
- package/templates/apps/web/lib/site-brand.tsx +121 -0
- package/templates/apps/web/lib/site-theme.ts +74 -0
- package/templates/apps/web/messages/en.json +275 -7
- package/templates/apps/web/middleware.ts +11 -3
- package/templates/apps/web/next.config.mjs +8 -2
- package/templates/apps/web/package.json +17 -7
- package/templates/apps/web/postcss.config.mjs +23 -0
- package/templates/apps/web/public/.well-known/security.txt +3 -3
- package/templates/apps/web/src/lib/routes.ts +15 -2
- package/templates/apps/web/tsconfig.json +1 -16
- package/templates/content/_site.mdx +36 -25
- package/templates/content/en/AboutPage/about.mdx +24 -14
- package/templates/content/en/ContactPage/contact.mdx +23 -14
- package/templates/content/en/FAQPage/faq.mdx +10 -392
- package/templates/content/en/HomePage/home.mdx +14 -285
- package/templates/database/CHANGELOG.md +443 -0
- package/templates/database/LICENSE +201 -0
- package/templates/database/README.md +3 -1
- package/templates/database/__tests__/flows-listing-diagnostic.test.ts +392 -0
- package/templates/database/__tests__/flows-presets.test.ts +173 -0
- package/templates/database/__tests__/prefixed-ids.db.test.ts +146 -0
- package/templates/database/__tests__/seed.test.ts +88 -0
- package/templates/database/__tests__/user-cascade.test.ts +19 -4
- package/templates/database/auth/schema.prisma +521 -0
- package/templates/database/config/schema.prisma +234 -0
- package/templates/database/content/schema.prisma +263 -0
- package/templates/database/flows/listing-diagnostic.ts +182 -0
- package/templates/database/flows/presets.ts +315 -0
- package/templates/database/inbox/__tests__/schema.test.ts +4 -0
- package/templates/database/inbox/schema.prisma +574 -3
- package/templates/database/jest.config.cjs +8 -0
- package/templates/database/migrations/20260712215647_add_multi_tenant_tenancy/migration.sql +201 -0
- package/templates/database/migrations/20260713143320_reanchor_site_config_to_workspace/migration.sql +67 -0
- package/templates/database/migrations/20260713174000_add_audit_logs/migration.sql +46 -0
- package/templates/database/migrations/20260713190000_drop_telemetry_records/migration.sql +25 -0
- package/templates/database/migrations/20260713192000_add_uuidv7_function/migration.sql +49 -0
- package/templates/database/migrations/20260713192429_prefixed_uuid_entity_ids/migration.sql +197 -0
- package/templates/database/migrations/20260713200000_add_org_billing/migration.sql +32 -0
- package/templates/database/migrations/20260714000000_add_lead_promotion_fields/migration.sql +22 -0
- package/templates/database/migrations/20260714010000_add_usage_billing_content_models/migration.sql +151 -0
- package/templates/database/migrations/20260714020000_add_usage_billing_auth_config_models/migration.sql +223 -0
- package/templates/database/migrations/20260714030000_credit_balance_non_negative/migration.sql +22 -0
- package/templates/database/migrations/20260714030000_widen_usage_billing_report_aggregates/migration.sql +32 -0
- package/templates/database/migrations/20260810233516_add_flow_engine_models/migration.sql +40 -0
- package/templates/database/migrations/20260811020000_add_flow_session_abandon_email_columns/migration.sql +4 -0
- package/templates/database/migrations/20260811030000_add_flow_session_abandon_email_index/migration.sql +2 -0
- package/templates/database/migrations/20260811040000_add_flow_session_segment/migration.sql +2 -0
- package/templates/database/migrations/20260811050000_add_deliverable_models/migration.sql +29 -0
- package/templates/database/migrations/20260812000000_add_deliverable_grant_send_columns/migration.sql +6 -0
- package/templates/database/migrations/20260902222948_add_waitlist_experiment_models/migration.sql +39 -0
- package/templates/database/migrations/20260902224500_add_waitlist_id_format_checks/migration.sql +24 -0
- package/templates/database/migrations/20260903004112_add_flow_session_flags_aeo_score/migration.sql +3 -0
- package/templates/database/migrations/20260903010000_add_playbook_instance/migration.sql +33 -0
- package/templates/database/migrations/20260904000000_add_waitlist_followup_send/migration.sql +30 -0
- package/templates/database/migrations/20260905230000_add_flow_checkout/migration.sql +47 -0
- package/templates/database/migrations/20260906000000_add_flow_checkout_idempotency/migration.sql +16 -0
- package/templates/database/migrations/20260907120000_add_project_listing/migration.sql +47 -0
- package/templates/database/migrations/20260907130000_add_project_listing_slack_columns/migration.sql +10 -0
- package/templates/database/migrations/20260907180000_add_listing_csv_send/migration.sql +26 -0
- package/templates/database/migrations/20260909120000_project_listings_platform/migration.sql +90 -0
- package/templates/database/migrations/20260909180000_listing_draft_and_fields/migration.sql +174 -0
- package/templates/database/migrations/20260910120000_listing_public_site_key/migration.sql +14 -0
- package/templates/database/migrations/20260911120000_listing_copy_edit_audit/migration.sql +25 -0
- package/templates/database/migrations/20260911140000_listing_structured_address/migration.sql +32 -0
- package/templates/database/migrations/20260911180000_consent_grants/migration.sql +71 -0
- package/templates/database/migrations/20260911200000_listing_site_answers/migration.sql +30 -0
- package/templates/database/migrations/20260912120000_listing_owner_link/migration.sql +49 -0
- package/templates/database/ops/schema.prisma +27 -0
- package/templates/database/package.json +42 -4
- package/templates/database/prisma.config.ts +1 -1
- package/templates/database/schema.prisma +19 -435
- package/templates/database/seed-test.ts +14 -4
- package/templates/database/seed.ts +148 -0
- package/templates/database/tenancy.ts +45 -0
- package/templates/database/tsconfig.flows.json +15 -0
- package/templates/database/tsconfig.json +7 -1
- package/templates/database/tsconfig.tenancy.json +14 -0
- package/templates/package.json +30 -55
- package/templates/pnpm-workspace.yaml +0 -3
- package/templates/project.yaml +1 -1
- package/templates/tsconfig.json +1 -37
- package/templates/apps/web/__tests__/auth/adversarial/cookie-attributes.test.ts +0 -94
- package/templates/apps/web/__tests__/auth/adversarial/oauth-state-parameter.test.ts +0 -75
- package/templates/apps/web/__tests__/auth/adversarial/redirect-uri-allowlist.test.ts +0 -82
- package/templates/apps/web/__tests__/auth/env-helpers.test.ts +0 -168
- package/templates/apps/web/__tests__/authority-list-routes.test.tsx +0 -208
- package/templates/apps/web/__tests__/better-stack.test.ts +0 -66
- package/templates/apps/web/__tests__/blog-dir-resolution.test.ts +0 -87
- package/templates/apps/web/__tests__/blog-source-populated.test.ts +0 -130
- package/templates/apps/web/__tests__/data-testid-coverage.test.tsx +0 -60
- package/templates/apps/web/__tests__/google-analytics.test.tsx +0 -104
- package/templates/apps/web/__tests__/i18n/middleware.test.ts +0 -119
- package/templates/apps/web/__tests__/i18n/routing.test.ts +0 -114
- package/templates/apps/web/__tests__/i18n/translations.test.ts +0 -191
- package/templates/apps/web/__tests__/json-ld.test.ts +0 -98
- package/templates/apps/web/__tests__/knowledge-events-routes.test.tsx +0 -580
- package/templates/apps/web/__tests__/layout-stealth.test.ts +0 -39
- package/templates/apps/web/__tests__/lighthouse-fixtures/improvement-image-shrink.tsx +0 -103
- package/templates/apps/web/__tests__/lighthouse-fixtures/override-fixture.md +0 -114
- package/templates/apps/web/__tests__/lighthouse-fixtures/regression-bloat.tsx +0 -94
- package/templates/apps/web/__tests__/page.test.tsx +0 -230
- package/templates/apps/web/__tests__/products-services-phase1.test.tsx +0 -321
- package/templates/apps/web/__tests__/projects-routes.test.tsx +0 -392
- package/templates/apps/web/__tests__/resources-downloads-integrations-phase2.test.tsx +0 -475
- package/templates/apps/web/__tests__/routes/ai-plugin-json.test.ts +0 -53
- package/templates/apps/web/__tests__/routes/blog-route.test.tsx +0 -191
- package/templates/apps/web/__tests__/routes/llms-txt.test.ts +0 -123
- package/templates/apps/web/__tests__/routes/robots-txt.test.ts +0 -52
- package/templates/apps/web/__tests__/routes/sitemap-xml.test.ts +0 -78
- package/templates/apps/web/__tests__/routes/well-known-mcp.test.ts +0 -203
- package/templates/apps/web/__tests__/section-routes.test.tsx +0 -693
- package/templates/apps/web/__tests__/security-headers.test.ts +0 -201
- package/templates/apps/web/__tests__/sentry-config.test.ts +0 -116
- package/templates/apps/web/__tests__/sitemap-locales.test.ts +0 -415
- package/templates/apps/web/__tests__/standalone-informational-routes.test.tsx +0 -844
- package/templates/apps/web/app/[locale]/__tests__/layout.test.tsx +0 -120
- package/templates/apps/web/app/[locale]/__tests__/page-renderer-migration.test.tsx +0 -202
- package/templates/apps/web/app/__tests__/error-boundaries.test.tsx +0 -152
- package/templates/apps/web/content/en/blog/index.mdx +0 -15
- package/templates/apps/web/content/en/blog/launching-ailk.mdx +0 -20
- package/templates/apps/web/content/en/docs/getting-started.mdx +0 -30
- package/templates/content/.gitkeep +0 -0
- package/templates/content/CLAUDE.md +0 -85
- package/templates/content/ar/HomePage/home.mdx +0 -123
- package/templates/content/ar/_site.mdx +0 -35
- package/templates/content/de/_site.mdx +0 -29
- package/templates/content/en/.gitkeep +0 -0
- package/templates/content/en/AboutPage/about.schema.json +0 -82
- package/templates/content/en/BookCall/book-call.mdx +0 -19
- package/templates/content/en/BookCall/book-call.schema.json +0 -121
- package/templates/content/en/BreadcrumbList/site-breadcrumbs.mdx +0 -20
- package/templates/content/en/CareersList/careers.mdx +0 -24
- package/templates/content/en/CaseStudiesList/case-studies.mdx +0 -22
- package/templates/content/en/CaseStudiesList/showcase.mdx +0 -8
- package/templates/content/en/CaseStudy/ailk-aeo-rollout.mdx +0 -32
- package/templates/content/en/CaseStudy/schema-builder-migration.mdx +0 -41
- package/templates/content/en/ClientsList/clients.mdx +0 -38
- package/templates/content/en/ContactPage/contact.schema.json +0 -100
- package/templates/content/en/ContactPoint/primary.mdx +0 -14
- package/templates/content/en/Course/aeo-fundamentals.mdx +0 -37
- package/templates/content/en/Course/schema-builder-workshop.mdx +0 -62
- package/templates/content/en/CoursesList/courses.mdx +0 -22
- package/templates/content/en/DownloadsList/downloads.mdx +0 -22
- package/templates/content/en/Event/aeo-office-hours-may-2026.mdx +0 -39
- package/templates/content/en/Event/ailk-launch-day-2026.mdx +0 -35
- package/templates/content/en/EventsList/events.mdx +0 -26
- package/templates/content/en/FAQPage/faq.schema.json +0 -231
- package/templates/content/en/GlossaryList/glossary.mdx +0 -19
- package/templates/content/en/GlossaryList/glossary.schema.json +0 -300
- package/templates/content/en/HomePage/home.schema.json +0 -88
- package/templates/content/en/HomePage/launch-service.mdx +0 -475
- package/templates/content/en/HomePage/launch-service.schema.json +0 -138
- package/templates/content/en/HowTo/add-mdx-content.mdx +0 -38
- package/templates/content/en/HowTo/configure-aeo-scoring.mdx +0 -35
- package/templates/content/en/HowTo/set-up-json-ld.mdx +0 -36
- package/templates/content/en/Integration/github-actions.mdx +0 -31
- package/templates/content/en/Integration/openai-api.mdx +0 -26
- package/templates/content/en/Integration/vercel.mdx +0 -32
- package/templates/content/en/IntegrationsList/integrations.mdx +0 -22
- package/templates/content/en/JobPosting/content-strategist.mdx +0 -46
- package/templates/content/en/JobPosting/developer-advocate.mdx +0 -47
- package/templates/content/en/JobPosting/senior-fullstack-engineer.mdx +0 -57
- package/templates/content/en/LandingPage/aeo-audit.mdx +0 -19
- package/templates/content/en/LandingPage/aeo-audit.schema.json +0 -92
- package/templates/content/en/LandingPage/agency-waitlist.mdx +0 -340
- package/templates/content/en/LandingPage/agency-waitlist.schema.json +0 -152
- package/templates/content/en/LandingPage/developers.mdx +0 -19
- package/templates/content/en/LandingPage/developers.schema.json +0 -109
- package/templates/content/en/LandingPage/for-agencies.mdx +0 -390
- package/templates/content/en/LandingPage/for-agencies.schema.json +0 -107
- package/templates/content/en/LandingPage/for-ai-search-agencies.mdx +0 -417
- package/templates/content/en/LandingPage/for-ai-search-agencies.schema.json +0 -105
- package/templates/content/en/LandingPage/for-businesses.mdx +0 -19
- package/templates/content/en/LandingPage/for-businesses.schema.json +0 -96
- package/templates/content/en/LandingPage/platform.mdx +0 -369
- package/templates/content/en/LandingPage/platform.schema.json +0 -166
- package/templates/content/en/LandingPage/vs-ai-website-builders.mdx +0 -19
- package/templates/content/en/LandingPage/vs-ai-website-builders.schema.json +0 -102
- package/templates/content/en/LandingPage/vs-wordpress.mdx +0 -19
- package/templates/content/en/LandingPage/vs-wordpress.schema.json +0 -53
- package/templates/content/en/NewsletterSignup/newsletter.mdx +0 -236
- package/templates/content/en/NewsletterSignup/newsletter.schema.json +0 -91
- package/templates/content/en/Organization/site-owner.mdx +0 -16
- package/templates/content/en/Partner/prisma.mdx +0 -31
- package/templates/content/en/Partner/supabase.mdx +0 -30
- package/templates/content/en/Partner/vercel.mdx +0 -28
- package/templates/content/en/PartnersList/partners.mdx +0 -22
- package/templates/content/en/Person/founder.mdx +0 -18
- package/templates/content/en/Pricing/pricing.mdx +0 -538
- package/templates/content/en/Pricing/pricing.schema.json +0 -209
- package/templates/content/en/PrivacyPage/privacy.mdx +0 -165
- package/templates/content/en/PrivacyPage/privacy.schema.json +0 -64
- package/templates/content/en/Product/ailk.mdx +0 -19
- package/templates/content/en/Product/ailk.schema.json +0 -94
- package/templates/content/en/Product/api-launch-kit.mdx +0 -26
- package/templates/content/en/Product/launch-kit.mdx +0 -28
- package/templates/content/en/ProductsList/products.mdx +0 -26
- package/templates/content/en/Project/ailk-phase-2.mdx +0 -54
- package/templates/content/en/ProjectsList/projects.mdx +0 -25
- package/templates/content/en/ResourceDetail/aeo-scoring-guide.mdx +0 -27
- package/templates/content/en/ResourceDetail/content-model-whitepaper.mdx +0 -28
- package/templates/content/en/ResourceDetail/schema-org-quick-reference.mdx +0 -39
- package/templates/content/en/ResourcesHub/resources.mdx +0 -22
- package/templates/content/en/Service/consulting.mdx +0 -22
- package/templates/content/en/Service/implementation.mdx +0 -30
- package/templates/content/en/Service/launch-service.mdx +0 -232
- package/templates/content/en/Service/launch.mdx +0 -228
- package/templates/content/en/ServicesList/services.mdx +0 -84
- package/templates/content/en/SoftwareProduct/ailk-aeo.mdx +0 -44
- package/templates/content/en/SoftwareProduct/ailk-content-adapters.mdx +0 -47
- package/templates/content/en/SoftwareProduct/ailk-schema.mdx +0 -49
- package/templates/content/en/TeamList/team.mdx +0 -63
- package/templates/content/en/TeamMember/founder.mdx +0 -72
- package/templates/content/en/TermsPage/terms.mdx +0 -19
- package/templates/content/en/TermsPage/terms.schema.json +0 -99
- package/templates/content/en/TestimonialsList/testimonials.mdx +0 -44
- package/templates/content/en/UseCasesList/use-cases.mdx +0 -30
- package/templates/content/en/Whitepaper/ax-first-product-development.mdx +0 -27
- package/templates/content/en/Whitepaper/open-core-commercial-strategy.mdx +0 -27
- package/templates/content/en/Whitepaper/structured-data-for-answer-engines.mdx +0 -31
- package/templates/content/en-XA/AboutPage/about.mdx +0 -8
- package/templates/content/en-XA/FAQPage/faq.mdx +0 -8
- package/templates/content/en-XA/HomePage/home.mdx +0 -8
- package/templates/content/es/_site.mdx +0 -30
- package/templates/content/fr/_site.mdx +0 -30
- package/templates/content/ja/_site.mdx +0 -30
- package/templates/content/pt-BR/AboutPage/about.mdx +0 -8
- package/templates/content/pt-BR/FAQPage/faq.mdx +0 -8
- package/templates/content/pt-BR/HomePage/home.mdx +0 -23
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: HowTo
|
|
3
|
-
slug: configure-aeo-scoring
|
|
4
|
-
title: How to Configure AEO Scoring
|
|
5
|
-
description: Run the deterministic AEO scorer against your site's pages and interpret the Layer 1 citation-readiness output.
|
|
6
|
-
publishedAt: "2026-05-10"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# How to Configure AEO Scoring
|
|
10
|
-
|
|
11
|
-
`@working-theory/aeo` grades pages against Layer 1 citation-readiness rules. The scorer is deterministic — the same input always returns the same score, with no network calls.
|
|
12
|
-
|
|
13
|
-
## Step 1 — Install `@working-theory/aeo`
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
pnpm add @working-theory/aeo
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Step 2 — Run the scorer
|
|
20
|
-
|
|
21
|
-
Pass a `ContentPage` (from the content adapter) to `scoreAeo`:
|
|
22
|
-
|
|
23
|
-
```ts
|
|
24
|
-
import { scoreAeo } from "@working-theory/aeo";
|
|
25
|
-
const result = scoreAeo(page);
|
|
26
|
-
console.log(result.score, result.findings);
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Step 3 — Interpret findings
|
|
30
|
-
|
|
31
|
-
Each finding has a `rule`, a `severity` (`error` | `warning` | `info`), and a `message`. Errors block the Layer 1 passing threshold; warnings are informational.
|
|
32
|
-
|
|
33
|
-
## Step 4 — Fix and re-score
|
|
34
|
-
|
|
35
|
-
Add missing frontmatter fields (most commonly `publishedAt`, `image`, or a `schema` override). Re-run the scorer until `result.passing` is `true`.
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: HowTo
|
|
3
|
-
slug: set-up-json-ld
|
|
4
|
-
title: How to Set Up JSON-LD with AI Launch Kit
|
|
5
|
-
description: A step-by-step guide to enabling structured data on your AILK site — from package install to validated schema.org output.
|
|
6
|
-
publishedAt: "2026-05-01"
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# How to Set Up JSON-LD with AI Launch Kit
|
|
10
|
-
|
|
11
|
-
Structured data tells answer engines what your pages are about. This guide walks through adding JSON-LD to every page in an AILK site.
|
|
12
|
-
|
|
13
|
-
## Step 1 — Install `@working-theory/schema`
|
|
14
|
-
|
|
15
|
-
`@working-theory/schema` ships the typed JSON-LD builders. Add it to your workspace:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
pnpm add @working-theory/schema
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Step 2 — Add a content directory
|
|
22
|
-
|
|
23
|
-
Create `content/en/<Type>/` directories for each page type you want to support. Drop an MDX file inside with the required frontmatter fields:
|
|
24
|
-
|
|
25
|
-
- `type` — the schema.org type key (e.g. `HowTo`)
|
|
26
|
-
- `slug` — the URL segment
|
|
27
|
-
- `title` — page title
|
|
28
|
-
- `description` — one-sentence description
|
|
29
|
-
|
|
30
|
-
## Step 3 — Wire the route
|
|
31
|
-
|
|
32
|
-
Create a Next.js route at `app/[locale]/<path>/[slug]/page.tsx`. Import `getMdxSource` from the content lib and `pageToJsonLd` from the JSON-LD bridge. Return a `<JsonLdScript>` alongside your `<main>` element.
|
|
33
|
-
|
|
34
|
-
## Step 4 — Verify
|
|
35
|
-
|
|
36
|
-
Run `pnpm preflight`. The type-check step validates that every MDX frontmatter field matches the content adapter's type contract. The build step confirms Next.js can prerender the route.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: Integration
|
|
3
|
-
slug: github-actions
|
|
4
|
-
title: GitHub Actions
|
|
5
|
-
description: Run pnpm preflight, content validation, and AEO scoring automatically on every pull request via GitHub Actions CI.
|
|
6
|
-
schema:
|
|
7
|
-
mainEntity:
|
|
8
|
-
"@type": SoftwareApplication
|
|
9
|
-
name: GitHub Actions
|
|
10
|
-
applicationCategory: DeveloperTools
|
|
11
|
-
operatingSystem: Web
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# GitHub Actions
|
|
15
|
-
|
|
16
|
-
AILK ships a ready-to-use CI configuration for GitHub Actions. Every pull request runs the full preflight suite: architecture lint, type-check, content validation, and AEO scoring.
|
|
17
|
-
|
|
18
|
-
## What runs in CI
|
|
19
|
-
|
|
20
|
-
- `pnpm architecture` — import boundary lint against `architecture.yaml`
|
|
21
|
-
- `pnpm content:check` — MDX frontmatter validation
|
|
22
|
-
- `pnpm --filter @working-theory/web build` — Next.js build verification
|
|
23
|
-
- `pnpm -r test` — full test suite
|
|
24
|
-
|
|
25
|
-
## Setting up
|
|
26
|
-
|
|
27
|
-
Copy `.github/workflows/ci.yml` from the AILK template into your repo. The workflow uses `pnpm` caching by default — first runs are slower, subsequent runs pick up the cache.
|
|
28
|
-
|
|
29
|
-
## AEO regression gate
|
|
30
|
-
|
|
31
|
-
Add the `@working-theory/aeo` scoring step to your workflow to catch citation-readiness regressions before they ship. The scorer exits non-zero when a page's score drops below its baseline.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: Integration
|
|
3
|
-
slug: openai-api
|
|
4
|
-
title: OpenAI API
|
|
5
|
-
description: Connect AILK-powered sites to OpenAI's API for agent-driven content generation, structured extraction, and answer-engine query routing.
|
|
6
|
-
schema:
|
|
7
|
-
mainEntity:
|
|
8
|
-
"@type": SoftwareApplication
|
|
9
|
-
name: OpenAI API
|
|
10
|
-
applicationCategory: ArtificialIntelligence
|
|
11
|
-
operatingSystem: Web
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# OpenAI API
|
|
15
|
-
|
|
16
|
-
AILK's MCP server exposes tool definitions that map directly to OpenAI function-calling conventions. Connect your OpenAI-powered agents to AILK data without writing custom adapters.
|
|
17
|
-
|
|
18
|
-
## What the integration covers
|
|
19
|
-
|
|
20
|
-
- **Structured extraction** — pass MDX body text through an OpenAI model to extract structured data; write the result back as frontmatter fields
|
|
21
|
-
- **Agent query routing** — route natural-language queries from an OpenAI agent to the correct AILK content type via the MCP tool surface
|
|
22
|
-
- **Schema generation assist** — use a model to suggest schema.org field values from unstructured page content
|
|
23
|
-
|
|
24
|
-
## Getting started
|
|
25
|
-
|
|
26
|
-
Set `OPENAI_API_KEY` in your `.env`. Import the client from `@working-theory/api-client` and call `createAgentSession()` to get a session bound to your OpenAI credentials.
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: Integration
|
|
3
|
-
slug: vercel
|
|
4
|
-
title: Vercel
|
|
5
|
-
description: Deploy AILK-powered Next.js sites to Vercel with zero configuration — environment variable mapping, preview deployment URLs, and edge-runtime compatibility.
|
|
6
|
-
schema:
|
|
7
|
-
mainEntity:
|
|
8
|
-
"@type": SoftwareApplication
|
|
9
|
-
name: Vercel
|
|
10
|
-
applicationCategory: DeveloperTools
|
|
11
|
-
operatingSystem: Web
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# Vercel
|
|
15
|
-
|
|
16
|
-
AILK's `apps/web` is a standard Next.js application and deploys to Vercel without modification. The `vercel.json` in the template configures preview URL patterns and environment variable mappings.
|
|
17
|
-
|
|
18
|
-
## Environment variables
|
|
19
|
-
|
|
20
|
-
Map these from your Vercel project settings:
|
|
21
|
-
|
|
22
|
-
- `DATABASE_URL` — your Prisma connection string
|
|
23
|
-
- `NEXTAUTH_SECRET` — a random 32-byte secret for session signing
|
|
24
|
-
- `NEXTAUTH_URL` — your production URL (or preview URL for branch deployments)
|
|
25
|
-
|
|
26
|
-
## Preview deployments
|
|
27
|
-
|
|
28
|
-
Every pull request gets a unique preview URL. AILK's `verify-preview` script can optionally run Playwright smoke tests against the preview URL before merge.
|
|
29
|
-
|
|
30
|
-
## Edge compatibility
|
|
31
|
-
|
|
32
|
-
The MCP server (`apps/mcp`) is not edge-compatible and should be deployed separately as a standard Node.js server. `apps/web` and `apps/api` are edge-compatible and run in Vercel's edge runtime.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: IntegrationsList
|
|
3
|
-
slug: integrations
|
|
4
|
-
title: Integrations
|
|
5
|
-
description: First-party integrations for AI Launch Kit — connect your AILK-powered site to the AI providers, CI platforms, and deployment targets your team already uses.
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Integrations
|
|
9
|
-
|
|
10
|
-
AILK is built to work alongside the tools your team already uses. These integrations cover the most common connection points: AI providers, CI pipelines, and deployment platforms.
|
|
11
|
-
|
|
12
|
-
## AI providers
|
|
13
|
-
|
|
14
|
-
Connect to OpenAI, Anthropic, and other model providers via the MCP tool surface. AILK's agent-compatible API routes are model-agnostic — swap providers without changing your content layer.
|
|
15
|
-
|
|
16
|
-
## CI platforms
|
|
17
|
-
|
|
18
|
-
GitHub Actions, CircleCI, and similar platforms can run AILK's preflight suite and AEO scoring gate on every pull request. The scoring gate exits non-zero on regression, keeping your citation readiness from drifting.
|
|
19
|
-
|
|
20
|
-
## Deployment targets
|
|
21
|
-
|
|
22
|
-
AILK's Next.js web app deploys to Vercel, Netlify, and self-hosted Node.js environments. The API server targets any Node.js 20+ runtime. The MCP server follows the same runtime requirement.
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: JobPosting
|
|
3
|
-
slug: content-strategist
|
|
4
|
-
title: Content Strategist
|
|
5
|
-
description: Own the AILK content pipeline — how-to guides, technical articles, whitepapers, and AEO-optimized landing pages. Remote, part-time to full-time.
|
|
6
|
-
publishedAt: "2026-05-05"
|
|
7
|
-
schema:
|
|
8
|
-
mainEntity:
|
|
9
|
-
"@type": JobPosting
|
|
10
|
-
title: Content Strategist
|
|
11
|
-
description: Own the AILK content pipeline — how-to guides, technical articles, whitepapers, and AEO-optimized landing pages.
|
|
12
|
-
datePosted: "2026-05-05"
|
|
13
|
-
employmentType: PART_TIME
|
|
14
|
-
hiringOrganization:
|
|
15
|
-
"@type": Organization
|
|
16
|
-
name: AI Launch Kit
|
|
17
|
-
jobLocation:
|
|
18
|
-
"@type": Place
|
|
19
|
-
address:
|
|
20
|
-
"@type": PostalAddress
|
|
21
|
-
addressCountry: US
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
# Content Strategist
|
|
25
|
-
|
|
26
|
-
AILK ships content alongside code. We need a strategist who understands both — someone who can write a clear how-to guide and also understand why `inLanguage` matters for AEO.
|
|
27
|
-
|
|
28
|
-
## What you will do
|
|
29
|
-
|
|
30
|
-
- Plan and produce how-to guides, technical articles, and whitepapers
|
|
31
|
-
- Optimize existing content for Layer 1 AEO citation-readiness
|
|
32
|
-
- Work with the engineering team to document new features as they ship
|
|
33
|
-
- Develop a content calendar aligned with roadmap phases
|
|
34
|
-
|
|
35
|
-
## What we are looking for
|
|
36
|
-
|
|
37
|
-
- Strong technical writing — you can explain APIs to developers clearly
|
|
38
|
-
- Curiosity about structured data, schema.org, and answer engine optimization
|
|
39
|
-
- Comfort working asynchronously with a small, distributed team
|
|
40
|
-
- Portfolio of published technical content (blog posts, docs, guides)
|
|
41
|
-
|
|
42
|
-
## What we offer
|
|
43
|
-
|
|
44
|
-
- Flexible hours — part-time to full-time based on your availability
|
|
45
|
-
- Fully remote
|
|
46
|
-
- Direct access to the product team for research and context
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: JobPosting
|
|
3
|
-
slug: developer-advocate
|
|
4
|
-
title: Developer Advocate
|
|
5
|
-
description: Help the AILK community succeed — talks, workshops, demos, and the open-source feedback loop between users and the core team.
|
|
6
|
-
publishedAt: "2026-05-10"
|
|
7
|
-
schema:
|
|
8
|
-
mainEntity:
|
|
9
|
-
"@type": JobPosting
|
|
10
|
-
title: Developer Advocate
|
|
11
|
-
description: Help the AILK community succeed — talks, workshops, demos, and the open-source feedback loop between users and the core team.
|
|
12
|
-
datePosted: "2026-05-10"
|
|
13
|
-
employmentType: FULL_TIME
|
|
14
|
-
hiringOrganization:
|
|
15
|
-
"@type": Organization
|
|
16
|
-
name: AI Launch Kit
|
|
17
|
-
jobLocation:
|
|
18
|
-
"@type": Place
|
|
19
|
-
address:
|
|
20
|
-
"@type": PostalAddress
|
|
21
|
-
addressCountry: US
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
# Developer Advocate
|
|
25
|
-
|
|
26
|
-
AILK's community is growing. We need an advocate who can represent the project externally, help developers succeed with the template, and bring real usage patterns back into the product roadmap.
|
|
27
|
-
|
|
28
|
-
## What you will do
|
|
29
|
-
|
|
30
|
-
- Give talks and run workshops on AX-first development and structured data
|
|
31
|
-
- Produce demo projects and example integrations
|
|
32
|
-
- Triage community issues and PRs with the engineering team
|
|
33
|
-
- Write blog posts and guides that show AILK solving real problems
|
|
34
|
-
- Represent AILK at developer conferences
|
|
35
|
-
|
|
36
|
-
## What we are looking for
|
|
37
|
-
|
|
38
|
-
- Experience in developer relations, developer education, or technical content
|
|
39
|
-
- Comfort on stage and in front of a camera
|
|
40
|
-
- Genuine interest in structured data, AEO, and agent-era product patterns
|
|
41
|
-
- Ability to build and ship small demo projects independently
|
|
42
|
-
|
|
43
|
-
## What we offer
|
|
44
|
-
|
|
45
|
-
- Competitive salary + conference travel budget
|
|
46
|
-
- Fully remote with flexibility to attend events
|
|
47
|
-
- Direct input into product direction from community feedback
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: JobPosting
|
|
3
|
-
slug: senior-fullstack-engineer
|
|
4
|
-
title: Senior Full-Stack Engineer
|
|
5
|
-
description: Build the AILK platform — schema builders, content adapters, and the Next.js web app. TypeScript-first, test-driven, remote-friendly.
|
|
6
|
-
publishedAt: "2026-05-01"
|
|
7
|
-
schema:
|
|
8
|
-
mainEntity:
|
|
9
|
-
"@type": JobPosting
|
|
10
|
-
title: Senior Full-Stack Engineer
|
|
11
|
-
description: Build and extend the AILK platform — schema builders, content adapters, and the Next.js web app. TypeScript-first, test-driven, remote-friendly.
|
|
12
|
-
datePosted: "2026-05-01"
|
|
13
|
-
employmentType: FULL_TIME
|
|
14
|
-
hiringOrganization:
|
|
15
|
-
"@type": Organization
|
|
16
|
-
name: AI Launch Kit
|
|
17
|
-
jobLocation:
|
|
18
|
-
"@type": Place
|
|
19
|
-
address:
|
|
20
|
-
"@type": PostalAddress
|
|
21
|
-
addressCountry: US
|
|
22
|
-
baseSalary:
|
|
23
|
-
"@type": MonetaryAmount
|
|
24
|
-
currency: USD
|
|
25
|
-
value:
|
|
26
|
-
"@type": QuantitativeValue
|
|
27
|
-
minValue: 150000
|
|
28
|
-
maxValue: 200000
|
|
29
|
-
unitText: YEAR
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
# Senior Full-Stack Engineer
|
|
33
|
-
|
|
34
|
-
We are looking for a senior engineer to join the core AILK team. You will own features end-to-end — from schema builder design to Next.js route implementation to CI green.
|
|
35
|
-
|
|
36
|
-
## What you will do
|
|
37
|
-
|
|
38
|
-
- Design and implement new schema.org builders in `@working-theory/schema`
|
|
39
|
-
- Build Next.js routes and content adapter extensions
|
|
40
|
-
- Write tests first (TDD is the default, not the exception)
|
|
41
|
-
- Review PRs and mentor junior contributors
|
|
42
|
-
- Participate in architecture decisions
|
|
43
|
-
|
|
44
|
-
## What we are looking for
|
|
45
|
-
|
|
46
|
-
- 5+ years of TypeScript in production
|
|
47
|
-
- Experience with Next.js App Router and React Server Components
|
|
48
|
-
- Familiarity with schema.org, structured data, or AEO a plus
|
|
49
|
-
- Strong testing discipline — you reach for tests before implementation
|
|
50
|
-
- Clear written communication (we are async-first)
|
|
51
|
-
|
|
52
|
-
## What we offer
|
|
53
|
-
|
|
54
|
-
- Competitive salary ($150k–$200k depending on experience)
|
|
55
|
-
- Fully remote, async-first culture
|
|
56
|
-
- Meaningful equity in a growing OSS business
|
|
57
|
-
- Access to the full AILK toolchain from day one
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: "LandingPage"
|
|
3
|
-
slug: "aeo-audit"
|
|
4
|
-
title: "Score your AEO structure before your site ships."
|
|
5
|
-
description: "See what ailk audit checks before your site ships — free, in the Apache 2.0 foundation, running the same schema and structured-data checks enterprise AEO platforms charge to run after launch."
|
|
6
|
-
sections: [{"id": "hero", "type": "hero", "data": {"badge": "Free in the Apache 2.0 foundation — runs pre-launch and in CI", "headline": "Score your AEO structure before your site ships.", "subheadline": "ailk audit runs the same schema and structured-data checks in your terminal and in CI. Free, in the Apache 2.0 foundation. Catches a missing schema or an unscored page before it costs a citation.", "primaryCta": {"label": "Clone the OSS", "href": "https://github.com/working-theory-labs/ai-launch-kit", "external": true, "variant": "default"}, "secondaryCta": {"label": "Read about the foundation", "href": "/ailk", "external": false, "variant": "ghost"}}}, {"id": "insight-bridge", "type": "content-block", "data": {"headline": "The page is the unit of citation, not the site.", "body": "When an AI system recommends a business, it read pages, attributed them to a brand, and quoted what it trusted enough to cite. A site can rank well, load fast, and still never get quoted, because the page itself didn't carry the structure a model needs to identify the brand behind it and trust the claim.\n\nThat structure is checkable. Missing schema. Ambiguous entity markup. A page that never emits JSON-LD. These are AEO problems, and AEO problems are silent — the site doesn't crash, it just doesn't get cited, and nothing tells you why.\n\nailk audit exists to make that failure loud instead of silent. It runs against the typed schema registry every AILK page ships with, checking the structural properties a model relies on to extract and attribute a claim. It reports the gaps before the site goes live, not three months after an agency notices the client stopped showing up in AI answers."}}, {"id": "what-it-measures", "type": "feature", "data": {"headline": "ailk audit checks the structural properties AI systems need to cite a page.", "description": "It runs against AILK's typed schema registry of 60 page-type entries, scoring each page for the specific things a model looks for before it trusts a claim enough to quote it.", "features": [{"title": "Schema presence and validity", "description": "Confirms each page type carries the right JSON-LD, validated per-type against the typed registry — not a generic schema stub."}, {"title": "Entity clarity", "description": "Flags a page where the brand behind the claim isn't unambiguous, the exact gap that leaves a model unable to attribute what it's reading."}, {"title": "JSON-LD emission", "description": "Verifies the page actually emits the markup at build time, not just that the frontmatter intends to."}, {"title": "FAQ and glossary structure", "description": "Checks that FAQ and glossary content is marked up so it's extractable as a direct answer, not buried in undifferentiated prose."}]}}, {"id": "audit-checks-list", "type": "items", "data": {"headline": "What a failed check actually looks like", "description": "Four failure patterns ailk audit is built to catch — the ones that cost a citation without ever throwing an error.", "columns": 2, "items": [{"title": "The missing schema", "description": "A page ships without the JSON-LD its page type requires. It renders fine for a human visitor and stays invisible to a model deciding what to cite."}, {"title": "The ambiguous entity", "description": "A page never clearly states which brand it belongs to. A model reading it can't attribute the claim, so it looks elsewhere for a source it can name."}, {"title": "The silent JSON-LD failure", "description": "The frontmatter is correct, but the build step never emits the markup. Nothing breaks visibly; the page just quietly stops being structured data."}, {"title": "The unscored page", "description": "A page gets added after the last audit runs and never gets checked. In CI, this is the exact gap the parity and schema checks catch automatically."}]}}, {"id": "vs-enterprise-aeo", "type": "comparison-table", "data": {"eyebrow": "The structural difference", "headline": "Pre-launch and free, instead of post-hoc and paid", "description": "Enterprise AEO platforms charge $295 or more a month to measure whether a site is already being cited, after the structural gap has already cost the citation. ailk audit measures the structure itself, before the site ships.", "columns": [{"key": "ailk", "name": "ailk audit", "highlighted": true}, {"key": "enterprise", "name": "Enterprise AEO platform"}], "groups": [{"groupName": "What it measures and when", "rows": [{"featureName": "Cost", "values": {"ailk": "Free, in the Apache 2.0 OSS", "enterprise": "$295+/month"}}, {"featureName": "When it runs", "values": {"ailk": "Pre-launch and in CI, on every change", "enterprise": "Post-launch, after citations are already lost"}}, {"featureName": "What it measures", "values": {"ailk": "Structural readiness — schema, entity clarity, JSON-LD emission", "enterprise": "Citation share and prompt-level visibility, after the fact"}}, {"featureName": "License", "values": {"ailk": "Apache 2.0 — complete, not gated", "enterprise": "Proprietary, subscription-gated"}}]}], "footnote": "The two aren't the same tool. Post-hoc citation tracking still has value once a site is live. ailk audit's job is making sure the structure is right before that tracking ever starts."}}, {"id": "why-free-in-oss", "type": "content-block", "data": {"headline": "Structural readiness isn't a premium feature.", "body": "AILK's OSS layer is Apache 2.0 — not source-available, not free-until-you-make-money. It isn't deliberately limited so a paid tier can earn. Paid tiers on AILK add capability. They don't gate access, and a structural AEO check is access, not capability.\n\nThat's why ailk audit ships in the free foundation and runs in CI on every change, not behind a login. A developer or an AEO-practitioner agency should be able to verify the structure is right without a subscription standing between them and the answer."}}, {"id": "page-faq", "type": "faq", "data": {"headline": "Common questions about ailk audit", "items": [{"question": "Is ailk audit different from a schema markup validator?", "answer": "Yes. A schema markup validator checks whether existing JSON-LD is syntactically correct. ailk audit checks something upstream of that: whether the right schema exists at all for a given page type, whether it's emitted at build time, and whether the entity behind the page is unambiguous. It's a structural readiness check, not a syntax check."}, {"question": "Does ailk audit replace a structured data testing tool?", "answer": "It complements one. A structured data testing tool validates a single page's markup after the fact. ailk audit runs across the whole site, pre-launch and in CI, against AILK's typed schema registry, so gaps get caught before a page ships rather than found one URL at a time afterward."}, {"question": "What does 'AEO scoring' mean in ailk audit's output?", "answer": "The score reflects structural readiness for AI-mediated discovery: schema presence, entity clarity, and JSON-LD emission per page type. It's not citation volume or ranking position. It answers whether the page is built so a model can read and attribute it, not how often the page is already being cited."}, {"question": "Can I run an AI search audit against a site I don't own?", "answer": "ailk audit is built to run against any AILK site, including this one, since it checks structure that's already public in the rendered page and its JSON-LD. Running it against a non-AILK site isn't the intended use case; the checks are built against AILK's typed schema registry, not a generic crawler."}]}}, {"id": "closing-cta", "type": "cta", "data": {"headline": "Clone the OSS and run your first audit.", "description": "ailk audit ships in the Apache 2.0 foundation. Clone the repo, scaffold a site, and run the check before you ship the first page, not after you notice you're invisible.", "primaryCta": {"label": "Clone the OSS", "href": "https://github.com/working-theory-labs/ai-launch-kit", "external": true, "variant": "default"}}}]
|
|
7
|
-
status: "Approved"
|
|
8
|
-
pageKey: "WebPage (/aeo-audit)"
|
|
9
|
-
entity: "ailaunchkit"
|
|
10
|
-
urlSlug: "aeo-audit"
|
|
11
|
-
lastUpdated: "2026-07-06"
|
|
12
|
-
pageLevelSchemaType: "LandingPage"
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
import { JsonLd } from '@/components/JsonLd'
|
|
16
|
-
|
|
17
|
-
<JsonLd data={{"@context": "https://schema.org", "@graph": [{"@type": "Product", "additionalType": "SoftwareApplication", "@id": "https://ailaunchkit.ai/#product", "name": "AI Launch Kit", "alternateName": ["AI Launch Kit by Working Theory", "AILK by Working Theory", "AILK", "@ailaunchkit", "@ailk", "@working-theory", "ai-launch-kit"], "url": "https://ailaunchkit.ai", "description": "AI Launch Kit is the open-source website foundation for the agent-first internet — Apache 2.0, agent-ready, AEO-scored, deployable in days.", "sameAs": ["https://github.com/working-theory-labs/ai-launch-kit", "https://x.com/ailaunchkit", "https://www.npmjs.com/org/ailk", "https://youtube.com/@working-theory", "https://linkedin.com/company/working-theory"], "foundingDate": "2026", "category": "Open-source website foundation", "applicationCategory": "DeveloperApplication", "operatingSystem": "Cross-platform (Node.js)", "license": "https://www.apache.org/licenses/LICENSE-2.0", "codeRepository": "https://github.com/working-theory-labs/ai-launch-kit", "manufacturer": {"@id": "https://workingtheory.ai/#organization"}, "brand": {"@id": "https://workingtheory.ai/#organization"}, "creator": {"@id": "https://samhenry.org/#person"}}, {"@type": "WebPage", "@id": "https://ailaunchkit.ai/aeo-audit#webpage", "url": "https://ailaunchkit.ai/aeo-audit", "name": "Score your AEO structure before your site ships.", "description": "See what ailk audit checks before your site ships — free, in the Apache 2.0 foundation, running the same schema and structured-data checks enterprise AEO platforms charge to run after launch.", "isPartOf": {"@id": "https://ailaunchkit.ai/#product"}, "mainEntity": {"@type": "FAQPage", "@id": "https://ailaunchkit.ai/aeo-audit#faq", "mainEntity": [{"@type": "Question", "name": "Is ailk audit different from a schema markup validator?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. A schema markup validator checks whether existing JSON-LD is syntactically correct. ailk audit checks something upstream of that: whether the right schema exists at all for a given page type, whether it's emitted at build time, and whether the entity behind the page is unambiguous. It's a structural readiness check, not a syntax check."}}, {"@type": "Question", "name": "Does ailk audit replace a structured data testing tool?", "acceptedAnswer": {"@type": "Answer", "text": "It complements one. A structured data testing tool validates a single page's markup after the fact. ailk audit runs across the whole site, pre-launch and in CI, against AILK's typed schema registry, so gaps get caught before a page ships rather than found one URL at a time afterward."}}, {"@type": "Question", "name": "What does 'AEO scoring' mean in ailk audit's output?", "acceptedAnswer": {"@type": "Answer", "text": "The score reflects structural readiness for AI-mediated discovery: schema presence, entity clarity, and JSON-LD emission per page type. It's not citation volume or ranking position. It answers whether the page is built so a model can read and attribute it, not how often the page is already being cited."}}, {"@type": "Question", "name": "Can I run an AI search audit against a site I don't own?", "acceptedAnswer": {"@type": "Answer", "text": "ailk audit is built to run against any AILK site, including this one, since it checks structure that's already public in the rendered page and its JSON-LD. Running it against a non-AILK site isn't the intended use case; the checks are built against AILK's typed schema registry, not a generic crawler."}}]}}]}} />
|
|
18
|
-
|
|
19
|
-
{/* Rendered from frontmatter `sections[]`; the MDX body is not read by the section-catalog renderer. Landed by land-section-catalog.py (#3111). */}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"@context": "https://schema.org",
|
|
3
|
-
"@graph": [
|
|
4
|
-
{
|
|
5
|
-
"@type": "Product",
|
|
6
|
-
"additionalType": "SoftwareApplication",
|
|
7
|
-
"@id": "https://ailaunchkit.ai/#product",
|
|
8
|
-
"name": "AI Launch Kit",
|
|
9
|
-
"alternateName": [
|
|
10
|
-
"AI Launch Kit by Working Theory",
|
|
11
|
-
"AILK by Working Theory",
|
|
12
|
-
"AILK",
|
|
13
|
-
"@ailaunchkit",
|
|
14
|
-
"@ailk",
|
|
15
|
-
"@working-theory",
|
|
16
|
-
"ai-launch-kit"
|
|
17
|
-
],
|
|
18
|
-
"url": "https://ailaunchkit.ai",
|
|
19
|
-
"description": "AI Launch Kit is the open-source website foundation for the agent-first internet — Apache 2.0, agent-ready, AEO-scored, deployable in days.",
|
|
20
|
-
"sameAs": [
|
|
21
|
-
"https://github.com/working-theory-labs/ai-launch-kit",
|
|
22
|
-
"https://x.com/ailaunchkit",
|
|
23
|
-
"https://www.npmjs.com/org/ailk",
|
|
24
|
-
"https://youtube.com/@working-theory",
|
|
25
|
-
"https://linkedin.com/company/working-theory"
|
|
26
|
-
],
|
|
27
|
-
"foundingDate": "2026",
|
|
28
|
-
"category": "Open-source website foundation",
|
|
29
|
-
"applicationCategory": "DeveloperApplication",
|
|
30
|
-
"operatingSystem": "Cross-platform (Node.js)",
|
|
31
|
-
"license": "https://www.apache.org/licenses/LICENSE-2.0",
|
|
32
|
-
"codeRepository": "https://github.com/working-theory-labs/ai-launch-kit",
|
|
33
|
-
"manufacturer": {
|
|
34
|
-
"@id": "https://workingtheory.ai/#organization"
|
|
35
|
-
},
|
|
36
|
-
"brand": {
|
|
37
|
-
"@id": "https://workingtheory.ai/#organization"
|
|
38
|
-
},
|
|
39
|
-
"creator": {
|
|
40
|
-
"@id": "https://samhenry.org/#person"
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"@type": "WebPage",
|
|
45
|
-
"@id": "https://ailaunchkit.ai/aeo-audit#webpage",
|
|
46
|
-
"url": "https://ailaunchkit.ai/aeo-audit",
|
|
47
|
-
"name": "Score your AEO structure before your site ships.",
|
|
48
|
-
"description": "See what ailk audit checks before your site ships — free, in the Apache 2.0 foundation, running the same schema and structured-data checks enterprise AEO platforms charge to run after launch.",
|
|
49
|
-
"isPartOf": {
|
|
50
|
-
"@id": "https://ailaunchkit.ai/#product"
|
|
51
|
-
},
|
|
52
|
-
"mainEntity": {
|
|
53
|
-
"@type": "FAQPage",
|
|
54
|
-
"@id": "https://ailaunchkit.ai/aeo-audit#faq",
|
|
55
|
-
"mainEntity": [
|
|
56
|
-
{
|
|
57
|
-
"@type": "Question",
|
|
58
|
-
"name": "Is ailk audit different from a schema markup validator?",
|
|
59
|
-
"acceptedAnswer": {
|
|
60
|
-
"@type": "Answer",
|
|
61
|
-
"text": "Yes. A schema markup validator checks whether existing JSON-LD is syntactically correct. ailk audit checks something upstream of that: whether the right schema exists at all for a given page type, whether it's emitted at build time, and whether the entity behind the page is unambiguous. It's a structural readiness check, not a syntax check."
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
"@type": "Question",
|
|
66
|
-
"name": "Does ailk audit replace a structured data testing tool?",
|
|
67
|
-
"acceptedAnswer": {
|
|
68
|
-
"@type": "Answer",
|
|
69
|
-
"text": "It complements one. A structured data testing tool validates a single page's markup after the fact. ailk audit runs across the whole site, pre-launch and in CI, against AILK's typed schema registry, so gaps get caught before a page ships rather than found one URL at a time afterward."
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
{
|
|
73
|
-
"@type": "Question",
|
|
74
|
-
"name": "What does 'AEO scoring' mean in ailk audit's output?",
|
|
75
|
-
"acceptedAnswer": {
|
|
76
|
-
"@type": "Answer",
|
|
77
|
-
"text": "The score reflects structural readiness for AI-mediated discovery: schema presence, entity clarity, and JSON-LD emission per page type. It's not citation volume or ranking position. It answers whether the page is built so a model can read and attribute it, not how often the page is already being cited."
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
"@type": "Question",
|
|
82
|
-
"name": "Can I run an AI search audit against a site I don't own?",
|
|
83
|
-
"acceptedAnswer": {
|
|
84
|
-
"@type": "Answer",
|
|
85
|
-
"text": "ailk audit is built to run against any AILK site, including this one, since it checks structure that's already public in the rendered page and its JSON-LD. Running it against a non-AILK site isn't the intended use case; the checks are built against AILK's typed schema registry, not a generic crawler."
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
}
|