Migrate docs from Mintlify to fumadocs - #457
Conversation
- content unchanged: 140 mdx pages keep their paths and URLs; Mintlify components (Info, CodeGroup, Steps, Card, ...) aliased to fumadocs equivalents in components/mdx.tsx - docs.json stays the navigation source of truth; lib/tree.ts converts it to the fumadocs page tree at build time - API Reference generated from the same Stainless OpenAPI spec via fumadocs-openapi (virtual pages, playground off by default) - llms.txt, llms-full.txt, per-page raw markdown (.md suffix on any page URL), and AI page actions built in - Ask AI assistant wired to Anthropic via AI SDK (needs ANTHROPIC_API_KEY at deploy time) - redirects, GA4, Inter font, and brand colors ported from docs.json Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This changes the production delivery stack for the entire documentation site rather than only moving content: 195 files are affected, with new Next.js routing, OpenAPI rendering, search, raw-markdown endpoints, and deployment/build configuration. That gives the migration a broad user-facing blast radius.
The new
POST /api/chatroute also invokes a billable Anthropic model from client-supplied message history without authentication, rate limiting, or request-size/history validation. Although its tool access is limited to public docs, this creates material cost-abuse, prompt-integrity, and operational-load risk. The existing broken-link workflow still runs the Mintlify checker and is currently failing against the migrated tree, so migration validation isn't green.I did not approve this PR because these cross-file runtime and operational changes meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
The Vercel project was imported while the default branch was still Mintlify-only (no package.json), so framework auto-detection picked "Other" and served public/ statically. Pinning it here overrides the project setting on every deploy. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This PR replaces the production delivery stack for the entire documentation site: 196 files are affected, with new Next.js routing, navigation generation, OpenAPI rendering, search, raw-markdown/OG endpoints, and build/deployment configuration. Although most documentation files are mechanical moves, the runtime and infrastructure changes have a broad user-facing blast radius.
The public
POST /api/chatroute also sends client-provided message histories to a billable Anthropic model without authentication, rate limiting, or request-size/history validation, which creates material cost-abuse and operational-load risk. The latest update addsvercel.jsonto select the Next.js framework; it doesn't reduce those existing risks and further confirms that this PR changes deployment behavior.I didn't approve because the cross-file production migration and unauthenticated model-backed endpoint meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This PR still replaces the production delivery stack for the entire documentation site: 196 files are affected, including new Next.js page/API routes, navigation generation, OpenAPI rendering, search, markdown/OG endpoints, and Vercel/build configuration. Most content changes are mechanical moves, but the runtime and deployment changes have a broad user-facing blast radius.
The new public
POST /api/chatroute also accepts client-provided message histories and invokes a billable Anthropic model without authentication, rate limiting, or request-size/history validation. The latest update changes only the default model from Sonnet to Haiku; that may reduce per-request cost but doesn't remove the cost-abuse, prompt-integrity, or operational-load exposure.I didn't approve because the cross-file production migration and unauthenticated model-backed endpoint remain Medium risk.
Sent by Cursor Automation: Assign PR reviewers
- port Kernel brand CSS from style.css (global lowercase, zero border radius, sidebar eyebrow headings, table styling, tinker-box, pricing button vars) - Card forwards img prop, CardGroup/Columns forward className - pages with url: frontmatter redirect externally instead of rendering an empty body - guard the .md/.mdx rewrites against /llms.mdx/* paths (they were double-rewriting direct raw-markdown URLs to 404s) and special-case /index.md for the home page - /api/chat requires a same-origin Origin header and caps output tokens - search index tolerates single-page failures instead of failing whole - set metadataBase so OG image URLs are absolute - ignore .env, simplify proxy.ts to Accept-header negotiation only Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Top navbar with horizontal tab bar (guides / api reference / cli / mcp) like the Mintlify site, and the Kernel logo SVGs from docs.json instead of a text title. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This PR replaces the production delivery stack for the entire documentation site: 196 files change, including new Next.js page and API routes, sitewide rendering/layout code, navigation generation, OpenAPI rendering, search, raw-markdown/OG endpoints, and Vercel/build configuration. Most MDX changes are mechanical moves, but the runtime and deployment cutover affects every docs page and has a broad user-facing blast radius.
The updated
POST /api/chatnow checksOriginand caps output at 2,048 tokens, which reduces cross-site browser abuse and per-request cost. It remains an unauthenticated, billable Anthropic proxy with no rate limiting or input/history size validation; direct clients can forge the matchingOriginheader and send high-volume or token-heavy requests. The latest layout and branding changes don't reduce the migration's sitewide deployment risk.I didn't approve because the full-stack docs migration and remaining cost/operational exposure meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This PR replaces the production delivery stack for the entire documentation site: 196 files change, including new Next.js page and API routes, sitewide rendering/layout code, navigation generation, OpenAPI rendering, search, raw-markdown/OG endpoints, and Vercel/build configuration. Most MDX changes are mechanical moves, but the runtime and deployment cutover affects every docs page and has a broad user-facing blast radius.
The public
POST /api/chatroute remains an unauthenticated proxy to a billable Anthropic model. Its origin check and output cap reduce browser-based abuse and per-request cost, but there is still no rate limiting or input/history size validation, and non-browser clients can supply a matchingOriginheader. The latest commit adds only sidebar hover/active styling, so it doesn't reduce the migration or endpoint risks.I didn't approve because the sitewide production migration and remaining cost/operational exposure meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
Brings the fumadocs site to parity with (and past) the Mintlify output: - app/sitemap.ts — sitemap.xml covering all content + API-reference pages on the canonical domain (skips external-link stubs) - app/robots.ts — robots.txt allowing indexing + pointing at the sitemap in production; disallows preview/branch deploys so they don't get indexed - per-page canonical link + og:url on content and API pages - root og:type=website, og:site_name=Kernel, twitter summary_large_image, and a site-wide fallback OG image (content pages still override) - pin metadataBase to the canonical domain so canonical/OG image URLs resolve to docs.kernel.sh rather than a per-deploy *.vercel.app host Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This remains a sitewide production-platform migration, not a documentation-only change. The actual diff touches 206 files (+4,122 / −449) and replaces Mintlify delivery with a self-hosted Next.js/Fumadocs app: new App Router pages/layouts,
next.config.mjsrewrites/redirects,proxy.ts,package.json/bun.lock,vercel.json, search, OpenAPI rendering, and agent/markdown/OG endpoints. Most MDX moves are mechanical, but the runtime and deployment cutover still affect every docs page.The public
POST /api/chatpath still invokes a billable Anthropic model from client-supplied message history. Origin matching, BotID, Vercel Firewall rate limiting, and a large input-size cap reduce some abuse paths, but the endpoint stays unauthenticated and Origin checks are forgeable by non-browser clients. Braintrust instrumentation also logs chat input metadata (including client IP) when configured, adding an operational/privacy surface. The latest SEO commit (sitemap,robots, canonical/OG metadata) does not shrink that blast radius.I did not approve because the full-site infrastructure rewrite plus the public model-backed chat route meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
Next shallow-merges metadata, so a page that sets openGraph drops the root's og:type/og:site_name/image. Spread shared siteOpenGraph into each page's openGraph so every page keeps og:type=website + og:site_name, and give API pages the site-default OG image. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This remains a sitewide production-platform migration, not a documentation-only change. The actual diff touches 206 files (+4,139 / −449) and replaces Mintlify delivery with a self-hosted Next.js/Fumadocs app: App Router pages/layouts,
next.config.mjsrewrites/redirects,proxy.ts,package.json/bun.lock,vercel.json, search, OpenAPI rendering, and agent/markdown/OG endpoints. Most MDX moves are mechanical, but the runtime and deployment cutover still affect every docs page.The public
POST /api/chatpath still invokes a billable Anthropic model from client-supplied message history. Origin matching, BotID, Vercel Firewall rate limiting, and a large input-size cap reduce some abuse paths, but the endpoint stays unauthenticated and Origin checks are forgeable by non-browser clients. Braintrust instrumentation also logs chat input metadata (including client IP) when configured, adding an operational/privacy surface.The latest updates add production SEO surface (
sitemap,robots, canonical/OG metadata) and spread shared Open Graph fields into per-page metadata. That does not shrink the migration blast radius and expands indexing/social-preview behavior for the cutover.I did not approve because these infrastructure, sitewide UX, model-backed API, and SEO cutover changes meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
The /og route only resolved content pages, so every API endpoint fell back to the generic site image. Route api-reference image slugs to apiSource and pre-generate them, so each endpoint gets its own titled OG card (matching content pages and the previous Mintlify behavior). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This remains a sitewide production-platform migration, not a documentation-only change. The actual diff touches 206 files (+4,161 / −449) and replaces Mintlify delivery with a self-hosted Next.js/Fumadocs app: App Router pages/layouts,
next.config.mjsrewrites/redirects,proxy.ts,package.json/bun.lock,vercel.json, search, OpenAPI rendering, and agent/markdown/OG endpoints. Most MDX moves are mechanical, but the runtime and deployment cutover still affect every docs page.The public
POST /api/chatpath still invokes a billable Anthropic model from client-supplied message history, with a new system prompt and server-side API key. Origin matching, BotID, Vercel Firewall rate limiting, and a large input-size cap reduce some abuse paths, but the endpoint stays unauthenticated and Origin checks are forgeable by non-browser clients. Braintrust instrumentation also logs chat input metadata (including client IP) when configured, adding an operational/privacy surface.The latest update only wires per-page OG image generation for API-reference routes (
app/og,getApiPageImage). That is a narrow SEO/preview correctness fix and does not shrink the migration blast radius.I did not approve because these infrastructure, sitewide UX, model-backed API, and SEO cutover changes meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
…points - /api/chat: wrap JSON.parse in try/catch so a malformed body returns 400 instead of an uncaught 500 - llms-full.txt + llms.mdx: external-link stub pages (frontmatter url) have no markdown body — exclude them from the corpus and redirect the per-page .md endpoint to the real resource (308), matching how the HTML app, sitemap, and Ask AI index already treat them Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This remains a sitewide production-platform migration, not a documentation-only change. The actual diff touches 206 files (+4,178 / −449) and replaces Mintlify delivery with a self-hosted Next.js/Fumadocs app: App Router pages/layouts,
next.config.mjsrewrites/redirects,proxy.ts,package.json/bun.lock,vercel.json, search, OpenAPI rendering, SEO (sitemap/robots/canonical/OG), and agent/markdown endpoints. Most MDX moves are mechanical, but the runtime and deployment cutover still affect every docs page.The public
POST /api/chatpath still invokes a billable Anthropic model from client-supplied message history, with a new system prompt and server-side API key. Origin matching, BotID, Vercel Firewall rate limiting, and a large input-size cap reduce some abuse paths, but the endpoint stays unauthenticated and Origin checks are forgeable by non-browser clients. Braintrust instrumentation also logs chat input metadata (including client IP) when configured, adding an operational/privacy surface.The latest update only hardens chat JSON parsing (400 on malformed bodies) and skips external-link stubs in
llmsendpoints. That does not shrink the migration, cost, or operational blast radius.I did not approve because the full-site infrastructure rewrite plus the unauthenticated model-backed endpoint meet the Medium-risk threshold.
Sent by Cursor Automation: Assign PR reviewers
| // where localStorage is undefined | ||
| const [input, setInput] = useState(() => | ||
| typeof window === 'undefined' ? '' : (localStorage.getItem(StorageKeyInput) ?? ''), | ||
| ); |
There was a problem hiding this comment.
Ask AI draft never restores
Medium Severity
The Ask AI input reads localStorage inside the useState initializer with a server guard, but on SSR that initializer runs with window undefined and the state is fixed to ''. React reuses that state on hydration and does not re-run the initializer on the client, so a saved draft written via onChange never appears again after refresh or navigation.
Reviewed by Cursor Bugbot for commit 4ccfdcc. Configure here.
Brings in 6 content commits from main (#465-#471). Two required manual relocation into the migrated content/docs tree: - chrome-policies: main renamed browsers/pools/policy-json.mdx -> browsers/chrome-policies.mdx and edited it; applied at content/docs/browsers/chrome-policies.mdx, dropped the old policy-json. - integrations/claude: main added an integrations/claude/ subfolder (moved claude-agent-sdk + claude-managed-agents, added overview and claude-code-and-desktop); mirrored under content/docs/integrations/claude/. style.css (Mintlify stylesheet) stays deleted — the migration replaced it with app/global.css. Changelog, proxies CA-bundle docs, and integrations overview auto-merged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Stale comment
Risk assessment: Medium
This remains a sitewide production-platform migration, not a documentation-only change. The actual diff touches 208 files (+4,178 / −453) and replaces Mintlify delivery with a Next.js/Fumadocs application.
Evidence from the diff:
- New production app stack:
package.json,next.config.mjs,vercel.json,proxy.ts,instrumentation.ts, app layouts/pages, sitemap/robots/OG routes- New user-facing API surfaces:
/api/chat(Anthropic streaming + system prompt + BotID/rate limits) and/api/search- Sitewide rendering/navigation rewrite: source loading, OpenAPI reference generation, MDX component layer, AI search UI
- Broad content move into
content/docs/plus asset relocation underpublic/Blast radius: High — affects the entire public docs site delivery path, routing/redirects, search, and a new LLM-backed chat endpoint.
Decision: Medium risk → comment only; not approving. No CODEOWNERS file found; no prior approval from this automation to revoke.
Sent by Cursor Automation: Assign PR reviewers
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using high effort and found 2 potential issues.
There are 8 total unresolved issues (including 6 from previous reviews).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 1d3f4a4. Configure here.
| destination: "/integrations/stripe-projects-browser", | ||
| permanent: false, | ||
| }, | ||
| ]; |
There was a problem hiding this comment.
Incomplete docs.json redirect port
High Severity
Some redirects from the old docs.json were missed during the next.config.mjs port. This means /integrations/claude, /integrations/claude-agent-sdk, /integrations/claude-managed-agents, and /browsers/pools/policy-json now 404. This breaks internal links, including those in changelog.mdx to /browsers/pools/policy-json (now /browsers/chrome-policies).
Reviewed by Cursor Bugbot for commit 1d3f4a4. Configure here.
Drop the direct @ai-sdk/anthropic provider (and ANTHROPIC_API_KEY) in favor of the AI Gateway: pass a bare provider/model slug to streamText, which the AI SDK routes via AI_GATEWAY_API_KEY. Default model is openai/gpt-5.6-luna at high reasoning effort; override with CHAT_MODEL. Bump maxOutputTokens 2048 -> 16000 so a reasoning pass can't truncate the reply. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
There was a problem hiding this comment.
Risk assessment: Medium
This remains a sitewide production-platform migration, not a documentation-only change. The actual diff touches 208 files (+4,176 / −453) and replaces Mintlify delivery with a Next.js/Fumadocs application.
Evidence from the diff:
- New production app stack:
package.json,bun.lock,next.config.mjs(rewrites/redirects),vercel.json,proxy.ts,instrumentation.ts, App Router layouts/pages underapp/ - User-facing runtime surface: docs rendering, OpenAPI pages, search (
app/api/search), AI chat (app/api/chat+components/ai/search.tsx), LLM markdown/OG/sitemap/robots endpoints - Latest sync: chat switched from a direct Anthropic provider to Vercel AI Gateway (
AI_GATEWAY_API_KEY/CHAT_MODEL), with highermaxOutputTokens(16000) and high reasoning effort — still a public, gated LLM endpoint with cost/abuse blast radius - Most MDX moves are mechanical, but the hosting/runtime cutover affects every docs URL
Decision: Medium risk — comment only; not approving. No CODEOWNERS file present; no prior approval to revoke.
Sent by Cursor Automation: Assign PR reviewers




Summary
Replaces Mintlify hosting with a self-hosted fumadocs (Next.js) app, deployable on Vercel.
What's preserved
/browsers/standby). Content edits were limited to removing 3 dead snippet-import lines and adding frontmatter to one untracked testing doc.docs.jsonstays the navigation source of truth —lib/tree.tsconverts its tabs/groups into the sidebar at build time, so the editing workflow doesn't change. Redirects ported tonext.config.mjs.Info,Note,Tip,Warning,Card,CardGroup,Steps,Tabs,Accordion,Frame,Update,CodeGroup(incl. tab labels from fence titles, via a small remark plugin) are aliased to fumadocs equivalents incomponents/mdx.tsx.fumadocs-openapi(virtual pages, no generated files). Interactive playground is off (one flag incomponents/api-page.tsxto enable).New (things Mintlify gated behind paid tiers)
/llms.txt+/llms-full.txt(~970KB markdown dump).md/.mdxto any page URLANTHROPIC_API_KEYset in Vercel; degrades gracefully without itKnown gaps / review notes
/api-reference/getProjectsinstead of Mintlify's generated paths) — worth eyeballing hardest in the previewbun run buildcompiles all 561 pages green,bun run lintgreen, key routes smoke-tested (content pages, API reference, llms routes, .md rewrites, redirects). No visual QA beyond that yet.Deploy
Vercel: import repo, framework Next.js,
bun install && bun run build, setANTHROPIC_API_KEY, pointdocs.kernel.shat it.🤖 Generated with Claude Code
Note
High Risk
Large platform migration plus a production
/api/chatpath that calls an external LLM gateway—misconfigured env, abuse controls, or URL/slug drift could break docs discovery or incur cost.Overview
Replaces Mintlify with a fumadocs (Next.js) app:
bun dev/bun run build+ Biome lint, content undercontent/docs/, and contributor docs updated accordingly.Navigation and URLs still come from
docs.jsonvialib/tree.ts(tabs, groups, eyebrows, external-link redirects). Mintlify MDX tags are shimmed incomponents/mdx.tsx, with a remark plugin forCodeGroup/ fence titles. API reference uses the same Stainless OpenAPI URL with custom response layout and sidebar method badges.New surface area: Orama-backed
/api/search, Ask AI (/api/chatwith origin checks, BotID, Vercel Firewall rate limits, Flexsearch tool, Braintrust tracing),llms.txt/llms-full.txt/ per-page markdown routes, OG images, sitemap/robots, GA4, and brand styling inglobal.css. Snippet components (CopyPromptButton,PricingCalculator,YouTubeVideo) are proper React client modules; MDX drops dead snippet imports.Caveats called out in the PR: API reference slugs may differ from Mintlify; Font Awesome card icons are omitted; search may not index API pages yet.
Reviewed by Cursor Bugbot for commit 6bfb91e. Bugbot is set up for automated code reviews on this repo. Configure here.