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,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@graph": [
|
|
4
|
+
{
|
|
5
|
+
"@type": "Product",
|
|
6
|
+
"@id": "https://ailaunchkit.ai/#product",
|
|
7
|
+
"name": "AI Launch Kit",
|
|
8
|
+
"alternateName": [
|
|
9
|
+
"AI Launch Kit by Working Theory",
|
|
10
|
+
"AILK by Working Theory",
|
|
11
|
+
"AILK",
|
|
12
|
+
"@ailaunchkit",
|
|
13
|
+
"@ailk",
|
|
14
|
+
"@working-theory",
|
|
15
|
+
"ai-launch-kit"
|
|
16
|
+
],
|
|
17
|
+
"url": "https://ailaunchkit.ai",
|
|
18
|
+
"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.",
|
|
19
|
+
"sameAs": [
|
|
20
|
+
"https://github.com/working-theory-labs/ai-launch-kit",
|
|
21
|
+
"https://x.com/ailaunchkit",
|
|
22
|
+
"https://www.npmjs.com/org/ailk",
|
|
23
|
+
"https://youtube.com/@working-theory",
|
|
24
|
+
"https://linkedin.com/company/working-theory"
|
|
25
|
+
],
|
|
26
|
+
"foundingDate": "2026",
|
|
27
|
+
"manufacturer": {
|
|
28
|
+
"@type": "Organization",
|
|
29
|
+
"@id": "https://ailaunchkit.ai/#salessmyth",
|
|
30
|
+
"name": "SalesSmyth LLC"
|
|
31
|
+
},
|
|
32
|
+
"brand": {
|
|
33
|
+
"@type": "Brand",
|
|
34
|
+
"@id": "https://workingtheory.ai/#organization",
|
|
35
|
+
"name": "Working Theory",
|
|
36
|
+
"url": "https://workingtheory.ai"
|
|
37
|
+
},
|
|
38
|
+
"creator": {
|
|
39
|
+
"@type": "Person",
|
|
40
|
+
"@id": "https://samhenry.org/#person",
|
|
41
|
+
"name": "Sam Henry"
|
|
42
|
+
},
|
|
43
|
+
"category": "Open-source website foundation",
|
|
44
|
+
"applicationCategory": "DeveloperApplication",
|
|
45
|
+
"operatingSystem": "Cross-platform (Node.js)",
|
|
46
|
+
"license": "https://www.apache.org/licenses/LICENSE-2.0",
|
|
47
|
+
"codeRepository": "https://github.com/working-theory-labs/ai-launch-kit",
|
|
48
|
+
"additionalType": "https://schema.org/SoftwareApplication"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"@type": "WebPage",
|
|
52
|
+
"@id": "https://ailaunchkit.ai/vs/ai-website-builders#webpage",
|
|
53
|
+
"url": "https://ailaunchkit.ai/vs/ai-website-builders",
|
|
54
|
+
"name": "AI-generated isn't AI-ready.",
|
|
55
|
+
"description": "Wix AI and Durable generate sites. AI Launch Kit builds AI-ready ones — schema, agent-readable surfaces, and pre-launch AEO scoring, Apache 2.0.",
|
|
56
|
+
"isPartOf": {
|
|
57
|
+
"@id": "https://ailaunchkit.ai/#product"
|
|
58
|
+
},
|
|
59
|
+
"about": {
|
|
60
|
+
"@id": "https://ailaunchkit.ai/#product"
|
|
61
|
+
},
|
|
62
|
+
"mainEntity": {
|
|
63
|
+
"@type": "FAQPage",
|
|
64
|
+
"@id": "https://ailaunchkit.ai/vs/ai-website-builders#faq",
|
|
65
|
+
"mainEntity": [
|
|
66
|
+
{
|
|
67
|
+
"@type": "Question",
|
|
68
|
+
"name": "Will my Wix AI or Durable site show up in ChatGPT answers?",
|
|
69
|
+
"acceptedAnswer": {
|
|
70
|
+
"@type": "Answer",
|
|
71
|
+
"text": "Not reliably, and not because the writing is bad. Most AI-generated sites carry little or no structured markup, so an AI system reading the page has nothing to attribute the content to. Citation depends on the model trusting the page's structure enough to quote it — a property the generation process itself doesn't produce."
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"@type": "Question",
|
|
76
|
+
"name": "Can I migrate an AI-generated site to AILK?",
|
|
77
|
+
"acceptedAnswer": {
|
|
78
|
+
"@type": "Answer",
|
|
79
|
+
"text": "Yes. Content and copy transfer directly; what changes is the foundation underneath it. AILK's Launch Service rebuilds the site on the typed schema registry and agent-readable surface, in a fixed two-week engagement. That gives the migration a defined start and end, rather than an open-ended rebuild."
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"@type": "Question",
|
|
84
|
+
"name": "Is AILK also AI-generated?",
|
|
85
|
+
"acceptedAnswer": {
|
|
86
|
+
"@type": "Answer",
|
|
87
|
+
"text": "No. AILK is a foundation you or your agency build on, with agent-assisted scaffolding handling the setup work — not a tool that generates a finished site from a prompt. The output is a codebase you own under Apache 2.0, not a hosted result you rent."
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"@type": "Question",
|
|
92
|
+
"name": "What does \"agent-ready\" actually mean?",
|
|
93
|
+
"acceptedAnswer": {
|
|
94
|
+
"@type": "Answer",
|
|
95
|
+
"text": "It means an AI agent acting on a buyer's behalf — a different kind of visitor than a search crawler — can read the page, identify the business, and query its offerings directly. It gets the same coverage a human visitor does. That requires an agent-readable surface built into the foundation, which AI-generated builders don't ship."
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
]
|
|
102
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "LandingPage"
|
|
3
|
+
slug: "vs-wordpress"
|
|
4
|
+
title: "WordPress runs 40% of the web. It wasn't built for this."
|
|
5
|
+
description: "AILK vs. WordPress: why the plugin stack agencies bolt on for AI-search readiness doesn't integrate — and what a native schema registry ships instead."
|
|
6
|
+
sections: [{"id": "hero-wordpress-comparison", "type": "hero", "data": {"badge": "Apache 2.0 · Built by Working Theory Labs", "headline": "WordPress runs 40% of the web. It wasn't built for this.", "subheadline": "The plugin stack agencies bolt on for AI search — schema, FAQ, entity, AEO — doesn't integrate, and breaks on every update.", "primaryCta": {"label": "Book a Launch Service call", "href": "/launch-service"}, "secondaryCta": {"label": "Clone the OSS", "href": "https://github.com/working-theory-labs/ai-launch-kit", "external": true, "variant": "outline"}}}, {"id": "wordpress-strengths", "type": "content-block", "data": {"headline": "What WordPress still does well", "body": "WordPress runs roughly 40% of the web, and that share is earned. Hosting is cheap. Themes are familiar. Nearly any SMB owner can log in and edit a page without calling anyone. For a decade, that was enough — WordPress was built when Google was the only entry point, and it did that job well. The platform's strength was never the problem. What changed is who else is reading the page now."}}, {"id": "plugin-stack-breakdown", "type": "content-block", "data": {"headline": "Why the plugin stack breaks down for AI search", "body": "Each plugin solves one piece of AI-search readiness in isolation. None of them agree with each other after an update. Schema plugins emit JSON-LD. FAQ plugins format structured Q&A. Entity markup — Organization and LocalBusiness structure — lives in a third plugin, built apart from the rest. AEO plugins score visibility after the fact. Each one is useful on its own. Install four on the same site and they conflict: duplicate schema blocks, clashing FAQ markup, an entity graph that names the business three different ways depending on which plugin ran last. The AEO structure of a WordPress site depends on install order, not architecture."}}, {"id": "ailk-vs-wordpress-table", "type": "comparison-table", "data": {"headline": "AILK vs. WordPress: which fits your AI-search work?", "eyebrow": "Structural comparison", "description": "Both platforms can technically add schema markup. The difference is whether the structure is native or bolted on. These five attributes are the ones that actually determine whether a model can read, trust, and cite what you publish.", "columns": [{"key": "ailk", "name": "AILK", "highlighted": true}, {"key": "wordpress", "name": "WordPress + plugins"}], "groups": [{"groupName": "Structural attributes", "rows": [{"featureName": "Typed schema registry / JSON-LD", "values": {"ailk": "Native — 60 typed page types, Zod-validated", "wordpress": "Plugin-dependent, no shared type system"}}, {"featureName": "Agent-callable surface", "values": {"ailk": "MCP server + HTTP API, CI-enforced parity to the web UI", "wordpress": "None"}}, {"featureName": "AEO structural scoring", "values": {"ailk": "ailk audit CLI — pre-launch and in CI, free", "wordpress": "Post-hoc, paid third-party tools ($295+/month)"}}, {"featureName": "License / ownership", "values": {"ailk": "Apache 2.0 — structurally complete OSS", "wordpress": "Core is GPL; plugin licensing is a patchwork"}}, {"featureName": "Deploy path", "values": {"ailk": "Agent-assisted scaffolding — days", "wordpress": "Custom build plus plugin configuration — weeks"}}]}], "footnote": "Pricing shown for third-party AEO measurement tools is representative of the category as of 2026; AILK's own tiers are detailed on /pricing."}}, {"id": "what-ailk-ships-natively", "type": "items", "data": {"headline": "What AILK ships that the plugin stack can't", "items": [{"title": "A typed schema registry, native to the foundation", "description": "Sixty page types, each with Zod validation and JSON-LD built from frontmatter. No plugin stack to install, update, or watch break. Ship a page; the structure ships with it."}, {"title": "Peer surfaces for humans and agents", "description": "Web, an MCP server, and an HTTP API sit in the same repo with CI-enforced parity. Whatever a person can do on the site, an agent can do through a typed contract."}, {"title": "AEO scoring in the OSS, not a paid add-on", "description": "The ailk audit CLI runs pre-launch and in CI, catching missing schema and ambiguous entities before the site ships — free, where third-party tools charge monthly to measure the same gaps after the fact."}, {"title": "Apache 2.0. Complete, not crippled", "description": "Not source-available, not free-until-you-scale. Paid tiers add capability on top. They never gate access — the OSS layer is structurally whole from the first clone."}, {"title": "Agent-assisted scaffolding from day one", "description": "create-ailk and the .claude/ skill bundle take a project from reference brand to deployed site in days. An agent handles setup work a plugin stack still needs a developer to do."}]}}, {"id": "objection-existing-seo-investment", "type": "objection", "data": {"items": [{"objection": "Will switching cost you the SEO work you've already done?", "response": "Some of it transfers, some doesn't. Domain authority, backlinks, and published content move with you — content is content. What doesn't move is the plugin configuration itself: the schema mappings, the FAQ formatting, the entity markup tuned inside WordPress. That gets rebuilt, not migrated, because AILK's schema registry works differently. This isn't a one-click swap. It's a rebuild on a foundation that doesn't need constant plugin maintenance afterward."}]}}, {"id": "objection-apache-2-0-catch", "type": "objection", "data": {"items": [{"objection": "Is Apache 2.0 really free, or is there a catch?", "response": "No catch. AILK's OSS layer is structurally complete — the schema registry, the MCP server, the audit CLI, and the scaffolding tools all ship in the free tier. Paid tiers (Pro, Pro Plus, Launch Service) add capability on top: managed support, lead-routing, a two-week assisted deploy. None of them gate anything already in the repo. Clone it, deploy it, never pay a dollar — that path stays open."}]}}, {"id": "faq-wordpress-comparison", "type": "faq", "data": {"headline": "Common questions about AILK vs. WordPress", "items": [{"question": "Is AILK a WordPress theme or a full replacement?", "answer": "A full replacement, not a theme. AILK is a standalone foundation — three peer apps (web, MCP, API) in one repo — deployed independently of WordPress. It doesn't run inside WordPress or extend it; it replaces the foundation entirely."}, {"question": "Can I use AILK as a headless front end for existing WordPress content?", "answer": "Yes, with custom integration work. AILK's content model is MDX-based, not WordPress-native, so pulling content through WordPress's REST API requires an adapter your developer builds — AILK doesn't ship one out of the box today."}, {"question": "Does AILK support the plugins my agency already relies on?", "answer": "No — AILK doesn't run a plugin architecture at all. The capabilities agencies install plugins for (schema, FAQ, entity markup, AEO scoring) ship natively in the foundation instead, so there's nothing to install or maintain."}, {"question": "How long does it take to move a client site off WordPress onto AILK?", "answer": "Through Launch Service, a fixed two-week engagement covers a full deploy. Content and domain authority carry over; plugin configuration gets rebuilt on AILK's native schema registry rather than migrated."}]}}, {"id": "cta-launch-service-or-clone", "type": "cta", "data": {"headline": "Ready to see it on your own site?", "description": "Launch Service deploys AILK onto your domain in two weeks, fixed scope. Or clone the Apache 2.0 repo and run the audit against your own build today — no signup required.", "primaryCta": {"label": "Book a Launch Service call", "href": "/launch-service"}, "secondaryCta": {"label": "Clone the OSS", "href": "https://github.com/working-theory-labs/ai-launch-kit", "external": true, "variant": "outline"}}}]
|
|
7
|
+
status: "Approved"
|
|
8
|
+
pageKey: "WebPage (/vs/wordpress)"
|
|
9
|
+
entity: "ailaunchkit"
|
|
10
|
+
urlSlug: "vs-wordpress"
|
|
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": "SoftwareApplication", "@id": "https://ailaunchkit.ai/#softwareapplication", "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", "manufacturer": {"@id": "https://workingtheory.ai/#organization"}, "brand": {"@id": "https://workingtheory.ai/#brand"}, "creator": {"@id": "https://samhenry.org/#person"}, "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"}, {"@type": "WebPage", "@id": "https://ailaunchkit.ai/vs/wordpress/#webpage", "url": "https://ailaunchkit.ai/vs/wordpress", "name": "WordPress runs 40% of the web. It wasn't built for this.", "description": "AILK vs. WordPress: why the plugin stack agencies bolt on for AI-search readiness doesn't integrate — and what a native schema registry ships instead.", "isPartOf": {"@id": "https://ailaunchkit.ai/#softwareapplication"}}]}} />
|
|
18
|
+
|
|
19
|
+
{/* Rendered from frontmatter `sections[]`; the MDX body is not read by the section-catalog renderer. Landed by land-section-catalog.py (#3111). */}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@graph": [
|
|
4
|
+
{
|
|
5
|
+
"@type": "SoftwareApplication",
|
|
6
|
+
"@id": "https://ailaunchkit.ai/#softwareapplication",
|
|
7
|
+
"name": "AI Launch Kit",
|
|
8
|
+
"alternateName": [
|
|
9
|
+
"AI Launch Kit by Working Theory",
|
|
10
|
+
"AILK by Working Theory",
|
|
11
|
+
"AILK",
|
|
12
|
+
"@ailaunchkit",
|
|
13
|
+
"@ailk",
|
|
14
|
+
"@working-theory",
|
|
15
|
+
"ai-launch-kit"
|
|
16
|
+
],
|
|
17
|
+
"url": "https://ailaunchkit.ai",
|
|
18
|
+
"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.",
|
|
19
|
+
"sameAs": [
|
|
20
|
+
"https://github.com/working-theory-labs/ai-launch-kit",
|
|
21
|
+
"https://x.com/ailaunchkit",
|
|
22
|
+
"https://www.npmjs.com/org/ailk",
|
|
23
|
+
"https://youtube.com/@working-theory",
|
|
24
|
+
"https://linkedin.com/company/working-theory"
|
|
25
|
+
],
|
|
26
|
+
"foundingDate": "2026",
|
|
27
|
+
"manufacturer": {
|
|
28
|
+
"@id": "https://workingtheory.ai/#organization"
|
|
29
|
+
},
|
|
30
|
+
"brand": {
|
|
31
|
+
"@id": "https://workingtheory.ai/#brand"
|
|
32
|
+
},
|
|
33
|
+
"creator": {
|
|
34
|
+
"@id": "https://samhenry.org/#person"
|
|
35
|
+
},
|
|
36
|
+
"category": "Open-source website foundation",
|
|
37
|
+
"applicationCategory": "DeveloperApplication",
|
|
38
|
+
"operatingSystem": "Cross-platform (Node.js)",
|
|
39
|
+
"license": "https://www.apache.org/licenses/LICENSE-2.0",
|
|
40
|
+
"codeRepository": "https://github.com/working-theory-labs/ai-launch-kit"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"@type": "WebPage",
|
|
44
|
+
"@id": "https://ailaunchkit.ai/vs/wordpress/#webpage",
|
|
45
|
+
"url": "https://ailaunchkit.ai/vs/wordpress",
|
|
46
|
+
"name": "WordPress runs 40% of the web. It wasn't built for this.",
|
|
47
|
+
"description": "AILK vs. WordPress: why the plugin stack agencies bolt on for AI-search readiness doesn't integrate — and what a native schema registry ships instead.",
|
|
48
|
+
"isPartOf": {
|
|
49
|
+
"@id": "https://ailaunchkit.ai/#softwareapplication"
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: "NewsletterSignup"
|
|
3
|
+
slug: "newsletter"
|
|
4
|
+
title: "Stay ahead of the AI search citation lane."
|
|
5
|
+
description: "Subscribe to AILK's citation-lane newsletter — schema and AEO shifts, ailk audit updates, and honest fleet-management progress. No generic product news."
|
|
6
|
+
sections:
|
|
7
|
+
[
|
|
8
|
+
{
|
|
9
|
+
"id": "hero",
|
|
10
|
+
"type": "hero",
|
|
11
|
+
"data":
|
|
12
|
+
{
|
|
13
|
+
"headline": "Stay ahead of the AI search citation lane.",
|
|
14
|
+
"subheadline": "Get AILK's schema shifts, audit updates, and fleet-management progress before they show up in a client pitch. One list. Not another generic product-update feed.",
|
|
15
|
+
"primaryCta":
|
|
16
|
+
{
|
|
17
|
+
"label": "Subscribe",
|
|
18
|
+
"href": "#signup-block",
|
|
19
|
+
"variant": "default",
|
|
20
|
+
},
|
|
21
|
+
"secondaryCta":
|
|
22
|
+
{
|
|
23
|
+
"label": "Browse the glossary first",
|
|
24
|
+
"href": "/glossary",
|
|
25
|
+
"variant": "ghost",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "content-promise",
|
|
31
|
+
"type": "feature",
|
|
32
|
+
"data":
|
|
33
|
+
{
|
|
34
|
+
"headline": "What this newsletter covers.",
|
|
35
|
+
"description": "This list has one job: track what's changing in AI search citation, and show how AILK's schema, audit, and agent-surface work answers it. Not release notes. Not growth-hacking tips.",
|
|
36
|
+
"features":
|
|
37
|
+
[
|
|
38
|
+
{
|
|
39
|
+
"title": "AEO and schema shifts",
|
|
40
|
+
"description": "What changes in how AI engines read structured data, and what it means for the typed schema registry.",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"title": "Audit CLI updates",
|
|
44
|
+
"description": "New checks added to `ailk audit` as citation requirements shift — before they hit a client site unannounced.",
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"title": "Fleet-management progress",
|
|
48
|
+
"description": "Honest status on the planned Enterprise multi-tenant entitlement. No hype, just where it stands.",
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"id": "what-you-get",
|
|
55
|
+
"type": "items",
|
|
56
|
+
"data":
|
|
57
|
+
{
|
|
58
|
+
"headline": "Three things you get in your inbox.",
|
|
59
|
+
"columns": 3,
|
|
60
|
+
"items":
|
|
61
|
+
[
|
|
62
|
+
{
|
|
63
|
+
"title": "Structural changes that affect citation",
|
|
64
|
+
"description": "When a schema pattern stops working, or a new one starts mattering, you hear it first — not three months after a client asks why they're invisible.",
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"title": "What ships in the OSS",
|
|
68
|
+
"description": "Every audit rule, every schema registry addition, as it lands in the repo — not buried in a changelog you'd have to search for.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"title": "Where fleet management stands",
|
|
72
|
+
"description": "Progress on the planned Enterprise multi-tenant entitlement, reported straight. No ship date until one exists.",
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"id": "signup-block",
|
|
79
|
+
"type": "newsletter",
|
|
80
|
+
"data":
|
|
81
|
+
{
|
|
82
|
+
"headline": "Subscribe",
|
|
83
|
+
"description": "One list. The citation-lane signal, not generic product news.",
|
|
84
|
+
"action": "/api/newsletter/subscribe",
|
|
85
|
+
"placeholder": "you@agency.com",
|
|
86
|
+
"submitLabel": "Subscribe",
|
|
87
|
+
"consentText": "No spam. Unsubscribe any time.",
|
|
88
|
+
"pattern": "none",
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "signup-faq",
|
|
93
|
+
"type": "faq",
|
|
94
|
+
"data":
|
|
95
|
+
{
|
|
96
|
+
"headline": "Common questions about the newsletter.",
|
|
97
|
+
"presentation": "expanded",
|
|
98
|
+
"items":
|
|
99
|
+
[
|
|
100
|
+
{
|
|
101
|
+
"question": "How often will I hear from you?",
|
|
102
|
+
"answer": "We haven't committed to a fixed cadence. You'll hear from us when there's a real schema, audit, or citation-lane update worth sending — not on a schedule padded with filler to hit a send quota.",
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"question": "What kind of updates will I actually get?",
|
|
106
|
+
"answer": "The same three threads listed above: schema and AEO shifts, new `ailk audit` checks, and honest fleet-management progress. It stays in that lane instead of drifting into release-note noise or growth tips unrelated to AI search.",
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"question": "Can I unsubscribe at any time?",
|
|
110
|
+
"answer": "Yes. Every email carries an unsubscribe link, no questions asked.",
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
"id": "sample-content-cta",
|
|
117
|
+
"type": "cta",
|
|
118
|
+
"data":
|
|
119
|
+
{
|
|
120
|
+
"headline": "See the vocabulary this list is built on.",
|
|
121
|
+
"description": "Browse the glossary the newsletter draws its updates from — AEO, GEO, agent-ready, and the rest of the citation-lane terms.",
|
|
122
|
+
"primaryCta":
|
|
123
|
+
{
|
|
124
|
+
"label": "Browse the glossary",
|
|
125
|
+
"href": "/glossary",
|
|
126
|
+
"variant": "outline",
|
|
127
|
+
},
|
|
128
|
+
"variant": "minimal",
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
]
|
|
132
|
+
status: "Approved"
|
|
133
|
+
pageKey: "NewsletterSignup"
|
|
134
|
+
entity: "ailaunchkit"
|
|
135
|
+
urlSlug: "newsletter-signup"
|
|
136
|
+
lastUpdated: "2026-07-06"
|
|
137
|
+
pageLevelSchemaType: "NewsletterSignup"
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
import { JsonLd } from "@/components/JsonLd";
|
|
141
|
+
|
|
142
|
+
<JsonLd
|
|
143
|
+
data={{
|
|
144
|
+
"@context": "https://schema.org",
|
|
145
|
+
"@graph": [
|
|
146
|
+
{
|
|
147
|
+
"@type": "Product",
|
|
148
|
+
additionalType: "https://schema.org/SoftwareApplication",
|
|
149
|
+
"@id": "https://ailaunchkit.ai/#product",
|
|
150
|
+
name: "AI Launch Kit",
|
|
151
|
+
alternateName: [
|
|
152
|
+
"AI Launch Kit by Working Theory",
|
|
153
|
+
"AILK by Working Theory",
|
|
154
|
+
"AILK",
|
|
155
|
+
"@ailaunchkit",
|
|
156
|
+
"@ailk",
|
|
157
|
+
"@working-theory",
|
|
158
|
+
"ai-launch-kit",
|
|
159
|
+
],
|
|
160
|
+
url: "https://ailaunchkit.ai",
|
|
161
|
+
description:
|
|
162
|
+
"AI Launch Kit is the open-source website foundation for the agent-first internet — Apache 2.0, agent-ready, AEO-scored, deployable in days.",
|
|
163
|
+
sameAs: [
|
|
164
|
+
"https://github.com/working-theory-labs/ai-launch-kit",
|
|
165
|
+
"https://x.com/ailaunchkit",
|
|
166
|
+
"https://www.npmjs.com/org/ailk",
|
|
167
|
+
"https://youtube.com/@working-theory",
|
|
168
|
+
"https://linkedin.com/company/working-theory",
|
|
169
|
+
],
|
|
170
|
+
foundingDate: "2026",
|
|
171
|
+
manufacturer: {
|
|
172
|
+
"@type": "Organization",
|
|
173
|
+
"@id": "https://ailaunchkit.ai/#salessmyth",
|
|
174
|
+
name: "SalesSmyth LLC",
|
|
175
|
+
},
|
|
176
|
+
brand: {
|
|
177
|
+
"@type": "Brand",
|
|
178
|
+
"@id": "https://workingtheory.ai/#organization",
|
|
179
|
+
name: "Working Theory",
|
|
180
|
+
url: "https://workingtheory.ai",
|
|
181
|
+
},
|
|
182
|
+
creator: {
|
|
183
|
+
"@id": "https://ailaunchkit.ai/#sam-henry",
|
|
184
|
+
"@type": "Person",
|
|
185
|
+
name: "Sam Henry",
|
|
186
|
+
},
|
|
187
|
+
category: "Open-source website foundation",
|
|
188
|
+
applicationCategory: "DeveloperApplication",
|
|
189
|
+
operatingSystem: "Cross-platform (Node.js)",
|
|
190
|
+
license: "https://www.apache.org/licenses/LICENSE-2.0",
|
|
191
|
+
codeRepository: "https://github.com/working-theory-labs/ai-launch-kit",
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"@type": "WebPage",
|
|
195
|
+
"@id": "https://ailaunchkit.ai/newsletter#webpage",
|
|
196
|
+
url: "https://ailaunchkit.ai/newsletter",
|
|
197
|
+
name: "Stay ahead of the AI search citation lane.",
|
|
198
|
+
description:
|
|
199
|
+
"Subscribe to AILK's citation-lane newsletter — schema and AEO shifts, ailk audit updates, and honest fleet-management progress. No generic product news.",
|
|
200
|
+
isPartOf: { "@id": "https://ailaunchkit.ai/#product" },
|
|
201
|
+
mainEntity: {
|
|
202
|
+
"@type": "FAQPage",
|
|
203
|
+
"@id": "https://ailaunchkit.ai/newsletter#faq",
|
|
204
|
+
mainEntity: [
|
|
205
|
+
{
|
|
206
|
+
"@type": "Question",
|
|
207
|
+
name: "How often will I hear from you?",
|
|
208
|
+
acceptedAnswer: {
|
|
209
|
+
"@type": "Answer",
|
|
210
|
+
text: "We haven't committed to a fixed cadence. You'll hear from us when there's a real schema, audit, or citation-lane update worth sending — not on a schedule padded with filler to hit a send quota.",
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"@type": "Question",
|
|
215
|
+
name: "What kind of updates will I actually get?",
|
|
216
|
+
acceptedAnswer: {
|
|
217
|
+
"@type": "Answer",
|
|
218
|
+
text: "The same three threads listed above: schema and AEO shifts, new `ailk audit` checks, and honest fleet-management progress. It stays in that lane instead of drifting into release-note noise or growth tips unrelated to AI search.",
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"@type": "Question",
|
|
223
|
+
name: "Can I unsubscribe at any time?",
|
|
224
|
+
acceptedAnswer: {
|
|
225
|
+
"@type": "Answer",
|
|
226
|
+
text: "Yes. Every email carries an unsubscribe link, no questions asked.",
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
}}
|
|
234
|
+
/>
|
|
235
|
+
|
|
236
|
+
{/* Rendered from frontmatter `sections[]`; the MDX body is not read by the section-catalog renderer. Landed by land-section-catalog.py (#3111). */}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://schema.org",
|
|
3
|
+
"@graph": [
|
|
4
|
+
{
|
|
5
|
+
"@type": "Product",
|
|
6
|
+
"additionalType": "https://schema.org/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
|
+
"manufacturer": {
|
|
29
|
+
"@type": "Organization",
|
|
30
|
+
"@id": "https://ailaunchkit.ai/#salessmyth",
|
|
31
|
+
"name": "SalesSmyth LLC"
|
|
32
|
+
},
|
|
33
|
+
"brand": {
|
|
34
|
+
"@type": "Brand",
|
|
35
|
+
"@id": "https://workingtheory.ai/#organization",
|
|
36
|
+
"name": "Working Theory",
|
|
37
|
+
"url": "https://workingtheory.ai"
|
|
38
|
+
},
|
|
39
|
+
"creator": {
|
|
40
|
+
"@id": "https://ailaunchkit.ai/#sam-henry",
|
|
41
|
+
"@type": "Person",
|
|
42
|
+
"name": "Sam Henry"
|
|
43
|
+
},
|
|
44
|
+
"category": "Open-source website foundation",
|
|
45
|
+
"applicationCategory": "DeveloperApplication",
|
|
46
|
+
"operatingSystem": "Cross-platform (Node.js)",
|
|
47
|
+
"license": "https://www.apache.org/licenses/LICENSE-2.0",
|
|
48
|
+
"codeRepository": "https://github.com/working-theory-labs/ai-launch-kit"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"@type": "WebPage",
|
|
52
|
+
"@id": "https://ailaunchkit.ai/newsletter#webpage",
|
|
53
|
+
"url": "https://ailaunchkit.ai/newsletter",
|
|
54
|
+
"name": "Stay ahead of the AI search citation lane.",
|
|
55
|
+
"description": "Subscribe to AILK's citation-lane newsletter — schema and AEO shifts, ailk audit updates, and honest fleet-management progress. No generic product news.",
|
|
56
|
+
"isPartOf": {
|
|
57
|
+
"@id": "https://ailaunchkit.ai/#product"
|
|
58
|
+
},
|
|
59
|
+
"mainEntity": {
|
|
60
|
+
"@type": "FAQPage",
|
|
61
|
+
"@id": "https://ailaunchkit.ai/newsletter#faq",
|
|
62
|
+
"mainEntity": [
|
|
63
|
+
{
|
|
64
|
+
"@type": "Question",
|
|
65
|
+
"name": "How often will I hear from you?",
|
|
66
|
+
"acceptedAnswer": {
|
|
67
|
+
"@type": "Answer",
|
|
68
|
+
"text": "We haven't committed to a fixed cadence. You'll hear from us when there's a real schema, audit, or citation-lane update worth sending — not on a schedule padded with filler to hit a send quota."
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"@type": "Question",
|
|
73
|
+
"name": "What kind of updates will I actually get?",
|
|
74
|
+
"acceptedAnswer": {
|
|
75
|
+
"@type": "Answer",
|
|
76
|
+
"text": "The same three threads listed above: schema and AEO shifts, new `ailk audit` checks, and honest fleet-management progress. It stays in that lane instead of drifting into release-note noise or growth tips unrelated to AI search."
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"@type": "Question",
|
|
81
|
+
"name": "Can I unsubscribe at any time?",
|
|
82
|
+
"acceptedAnswer": {
|
|
83
|
+
"@type": "Answer",
|
|
84
|
+
"text": "Yes. Every email carries an unsubscribe link, no questions asked."
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{/* Sub-object — not rendered as a standalone page; consumed by the builder embedding this object in other pages' JSON-LD output. */}
|
|
2
|
+
---
|
|
3
|
+
type: Organization
|
|
4
|
+
slug: site-owner
|
|
5
|
+
title: AI Launch Kit
|
|
6
|
+
description: The organization behind AI Launch Kit — open-source infrastructure for agent-first products.
|
|
7
|
+
schema:
|
|
8
|
+
"@type": Organization
|
|
9
|
+
name: AI Launch Kit
|
|
10
|
+
url: https://ailaunchkit.ai
|
|
11
|
+
description: Open-source template for building agent-first products with structured JSON-LD, AEO scoring, and a composable section catalog.
|
|
12
|
+
sameAs:
|
|
13
|
+
- https://github.com/working-theory-labs/ai-launch-kit
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
AI Launch Kit is an open-source organization building infrastructure for agent-first products.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Partner
|
|
3
|
+
slug: prisma
|
|
4
|
+
title: Prisma
|
|
5
|
+
description: Type-safe database access for TypeScript — AI Launch Kit ships with a Prisma schema and migration workflow built in.
|
|
6
|
+
schema:
|
|
7
|
+
mainEntity:
|
|
8
|
+
"@type": Organization
|
|
9
|
+
name: Prisma
|
|
10
|
+
url: https://www.prisma.io
|
|
11
|
+
description: Next-generation ORM for Node.js and TypeScript.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Prisma
|
|
15
|
+
|
|
16
|
+
AI Launch Kit uses Prisma as its database access layer. The `database/` directory ships a Prisma schema, migration history, and seed scripts that map directly to the platform's data model. All database access in `apps/api` goes through `@working-theory/database`, which re-exports the typed Prisma client.
|
|
17
|
+
|
|
18
|
+
## What ships out of the box
|
|
19
|
+
|
|
20
|
+
- A Prisma schema covering the core AILK data model (leads, content metadata, audit events)
|
|
21
|
+
- Migration history that runs cleanly against PostgreSQL (local and Supabase)
|
|
22
|
+
- Typed query helpers in `@working-theory/database` that prevent raw SQL in application code
|
|
23
|
+
- A seed script for local development
|
|
24
|
+
|
|
25
|
+
## Why Prisma
|
|
26
|
+
|
|
27
|
+
Prisma's generated client enforces the same type safety AILK's API layer uses. Schema changes propagate through `pnpm db:generate` and are reflected in TypeScript without manual type authoring. The migration workflow (`pnpm db:migrate`) integrates cleanly with CI.
|
|
28
|
+
|
|
29
|
+
## Integration notes
|
|
30
|
+
|
|
31
|
+
AILK's architecture boundary rules (`architecture.yaml`) prevent `apps/web` from importing `@working-theory/database` directly. Database access routes through `apps/api`, which exposes typed endpoints consumed by `@working-theory/api-client`.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Partner
|
|
3
|
+
slug: supabase
|
|
4
|
+
title: Supabase
|
|
5
|
+
description: Open-source Firebase alternative — AI Launch Kit's Prisma layer connects to Supabase PostgreSQL with a single environment variable change.
|
|
6
|
+
schema:
|
|
7
|
+
mainEntity:
|
|
8
|
+
"@type": Organization
|
|
9
|
+
name: Supabase
|
|
10
|
+
url: https://supabase.com
|
|
11
|
+
description: The open-source Firebase alternative with a Postgres database.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Supabase
|
|
15
|
+
|
|
16
|
+
AI Launch Kit's database layer is PostgreSQL-first, and Supabase is the recommended managed Postgres provider for teams who want to avoid running their own database infrastructure. The connection requires one change: set `DATABASE_URL` in your environment to the Supabase connection string.
|
|
17
|
+
|
|
18
|
+
## What the integration covers
|
|
19
|
+
|
|
20
|
+
- **Managed PostgreSQL.** Supabase provides a full PostgreSQL instance with connection pooling via PgBouncer — compatible with Prisma's connection pooling requirements.
|
|
21
|
+
- **Row-level security.** For teams using Supabase's auth layer, RLS policies can be layered on top of AILK's Prisma schema.
|
|
22
|
+
- **Local development parity.** The Supabase CLI provides a local PostgreSQL instance that mirrors the production setup. Run `supabase start` alongside `pnpm dev` for a fully local stack.
|
|
23
|
+
|
|
24
|
+
## Configuration
|
|
25
|
+
|
|
26
|
+
Point `DATABASE_URL` at your Supabase project's connection string. For production, use the PgBouncer (transaction mode) URL to stay within Supabase's connection limits.
|
|
27
|
+
|
|
28
|
+
## Migration workflow
|
|
29
|
+
|
|
30
|
+
Run `pnpm db:migrate` to apply Prisma migrations to your Supabase instance. For production migrations, apply via CI or the Supabase dashboard to maintain an audit trail.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: Partner
|
|
3
|
+
slug: vercel
|
|
4
|
+
title: Vercel
|
|
5
|
+
description: The platform for frontend teams — AI Launch Kit deploys to Vercel with zero configuration changes required.
|
|
6
|
+
schema:
|
|
7
|
+
mainEntity:
|
|
8
|
+
"@type": Organization
|
|
9
|
+
name: Vercel
|
|
10
|
+
url: https://vercel.com
|
|
11
|
+
description: The platform for frontend teams.
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Vercel
|
|
15
|
+
|
|
16
|
+
Vercel is the deployment platform of choice for AI Launch Kit projects. The `apps/web` Next.js application deploys to Vercel with zero configuration changes — environment variables map directly from `.env.example`, and the Edge Network handles global distribution automatically.
|
|
17
|
+
|
|
18
|
+
## What the integration covers
|
|
19
|
+
|
|
20
|
+
- **Zero-config deployment.** Push to `main` and Vercel picks up the Next.js build without custom configuration.
|
|
21
|
+
- **Preview deployments.** Every pull request gets a unique preview URL, enabling the `/verify-preview` observability skill to confirm deployments before merge.
|
|
22
|
+
- **Edge Network.** Static pages are served from Vercel's CDN; API routes run on serverless functions or Edge Runtime depending on your configuration.
|
|
23
|
+
|
|
24
|
+
## Getting started
|
|
25
|
+
|
|
26
|
+
1. Import your AILK repository into Vercel via the dashboard or the Vercel CLI.
|
|
27
|
+
2. Set the environment variables listed in `.env.example` under the Vercel project settings.
|
|
28
|
+
3. Deploy. The build command (`pnpm build`) and output directory are auto-detected from the Next.js configuration.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: PartnersList
|
|
3
|
+
slug: partners
|
|
4
|
+
title: Partners
|
|
5
|
+
description: Ecosystem partners who build on and extend AI Launch Kit — from hosting providers to integration specialists.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Partners
|
|
9
|
+
|
|
10
|
+
AI Launch Kit is designed to integrate cleanly with the tools your team already uses. Our partners extend the platform with hosting, deployment, observability, and domain-specific tooling.
|
|
11
|
+
|
|
12
|
+
## Technology Partners
|
|
13
|
+
|
|
14
|
+
These partners provide infrastructure and developer tooling that AILK is designed to work alongside out of the box.
|
|
15
|
+
|
|
16
|
+
## Integration Partners
|
|
17
|
+
|
|
18
|
+
These partners build connectors, adapters, and workflows that connect AILK-powered applications to third-party services and APIs.
|
|
19
|
+
|
|
20
|
+
## Become a Partner
|
|
21
|
+
|
|
22
|
+
If you are building on AI Launch Kit and want to be listed as a partner, open an issue on GitHub or reach out via the contact page. We review partnership requests quarterly.
|