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
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.
Stale 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
Brings in #464 (browser-pools guide refresh) and #478 (chrome-policies URLAllowlist example). One manual resolution: main collapsed the browsers/pools/ subfolder (faq + overview) into a single browsers/pools.mdx; applied that at content/docs/browsers/pools.mdx and dropped the old subfolder (docs.json already redirects the old subpaths to /browsers/pools). All other content edits 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 207 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 surfaces:
/api/chat(AI Gateway streaming + system prompt + BotID/Firewall rate limits),/api/search,llms.txt/llms-full.txt/ per-page markdown routes, sitemap/robots/OG- Cross-cutting rendering/nav changes:
lib/tree.ts,lib/source.ts, OpenAPI virtual pages, MDX component shims, client UI for Ask AI and page actions- Content tree relocation into
content/docs/(mostly mechanical), plus the latest sync merging additional main-branch content (pools collapse, chrome-policies example)Hardening on
/api/chat(origin check, BotID, Firewall rate limit, input-size cap) reduces some abuse exposure versus earlier revisions, but does not remove the Medium-risk drivers: infrastructure cutover, broad docs blast radius, new billable model-backed public endpoint, and prompt/runtime behavior changes.Decision: Medium risk → comment only; not approving. No prior approval from this automation to dismiss. No CODEOWNERS file present; not assigning reviewers.
Sent by Cursor Automation: Assign PR reviewers
Brings in 11 commits from main (#479-#494): terraform integration page, durable MCP/resource contracts, viewport/kiosk updates, Aug 7 changelog, Claude directory connector, and an API-spec refresh. Two manual bits: main's new integrations/terraform.mdx placed at the migrated content/docs path (nav already references it); and main's committed specs/openapi.documented.yml dropped — the fumadocs setup fetches the spec live from Stainless (lib/openapi.ts), so a committed copy is an unused Mintlify-era artifact. The API reference already reflects the #486 spec refresh via that URL. Everything else auto-merged. 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 209 files (+4,173 / −39,695 across the compared range; GitHub reports +4,176 / −18,702) 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,source.config.ts,instrumentation.ts - Sitewide rendering & routing:
app/layout.tsx,app/(docs)/**, OpenAPI pages, OG/sitemap/robots routes - New user-facing API surfaces:
app/api/chat/route.ts(AI SDK streaming + search tools + rate limit/bot checks),app/api/search/route.ts, LLM markdown endpoints (llms.txt,llms-full.txt,llms.mdx) - Shared libraries/components: navigation/source helpers under
lib/, MDX/OpenAPI UI undercomponents/ - Content moves under
content/docs/are largely renames, but they ride along with the platform rewrite
Blast radius: high — every docs page, search, chat, and machine-readable markdown path depends on the new stack.
Action: Comment only; not approving under the Medium-or-higher rule. No prior approval from this automation 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
Full docs platform swap plus a new public AI chat endpoint (origin checks, bot/rate limits, gateway spend) — URL and API-reference slug changes need careful preview QA before cutover.
Overview
Replaces Mintlify with a self-hosted fumadocs (Next.js 16) app — Bun for install/dev/build, Biome for lint, and Vercel-oriented ignores and tooling.
Content and URLs stay largely the same: MDX still lives under
content/docs/;docs.jsonstill drives the sidebar vialib/tree.ts. Mintlify MDX tags are shimmed incomponents/mdx.tsx(callouts, cards, steps, tabs, snippets). A few pages drop dead snippet imports in favor of registered components.New site surface: catch-all doc pages, separate OpenAPI reference routes, search (
/api/search), sitemap/robots/OG images, and llms routes (/llms.txt,/llms-full.txt, per-page.mdexports). Ask AI adds a layout panel plus/api/chat(Flexsearch-backed tool, Vercel Firewall rate limits, BotID, Braintrust tracing, AI Gateway model env).API docs UX customizes fumadocs-openapi (Mintlify-style response dropdown, sidebar method badges, playground disabled by default). Brand/CSS ports Kernel styling (lowercase prose, square corners, table/tinker-box rules).
Contributor docs switch local workflow from
mintlify devtobun dev/bun run build.Reviewed by Cursor Bugbot for commit 32f2efb. Bugbot is set up for automated code reviews on this repo. Configure here.