Skip to content

docs: Migrate docs site to @vercel/geistdocs package - #13320

Merged
anthonyshew merged 4 commits into
mainfrom
docs/migrate-to-geistdocs-package
Jul 10, 2026
Merged

anthonyshew merged 4 commits into
mainfrom
docs/migrate-to-geistdocs-package

Conversation

@molebox

@molebox molebox commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Description

Migrates apps/docs from locally-vendored geistdocs components to the published @vercel/geistdocs package (1.8.2), following the official migration guide. Site-specific content, routes, and product UI stay local as thin package-backed adapters.

~127 files, +2.2k/−14.4k lines (net −12.2k).

Adopted from the package

  • Docs page via createDocsPage (MobileDocsBar, page actions, built-in feedback with siteId: "turborepo")
  • Docs/home layouts, provider (search dialog, Ask AI shell, toaster), OSS-variant navbar
  • Search + Ask AI chat routes (AI SDK v6; optional GEISTDOCS_CHAT_PROXY_URL proxy mode)
  • Markdown surfaces: per-page llms.mdx, sitemap.md, new agents.md (with a new agent-readiness config in geistdocs.tsx)
  • createProxy: markdown negotiation, .md URL rewrites, new AI-agent UA rewrites, md-tracking aligned to the package event shape
  • MDX component defaults + design tokens via package styles.css
  • GitHub edit links now point at the monorepo path (apps/docs/content/docs/{path})

Kept custom (deliberate deviations)

  • Curated /llms.txt index + /llms-full.txt — the package route is a full corpus, which would change the public contract
  • HMAC-signed OG images (injected via the metadata callback), OG routes, rss/feed.xml, robots, Redis crawler sitemap, binaries/version + remote-cache APIs
  • Four-column footer (Fides "Cookie Preferences" link; the package footer is a slim bar without link sections)
  • VersionWarning banner via the package sidebarTop slot; RemoteCacheCounter moved from TOC header to page-action extras (no TOC-header hook exists)
  • PackageManagerTabs, reactflow diagram system, heading-badge rehype pipeline, shiki notation transformers
  • Blog / showcase / homepage / devtools / extra / openapi sections unchanged

Version alignment

  • next 16.2.9 → 16.2.6 (the package peer-pins next exactly)
  • fumadocs-core/ui16.2.2, fumadocs-mdx14.0.4 (package pins)
  • fumadocs-openapi10.2.7 (10.3+ peers fumadocs ^16.5, incompatible)
  • Removed ~20 dependencies owned by deleted vendored code (ai@5, @ai-sdk/react@2, dexie, jotai, streamdown, cmdk, vaul, recharts, …)

Repo-level change

  • .npmrc: added hoist-pattern[]=tailwindcss — this repo's explicit hoist list disables pnpm's default hoisting, which broke the package CSS's internal @import "tailwindcss" resolution.

Palette translation

The package remaps Tailwind's default gray/blue/red/green/… scales to Geist --ds-* tokens (much lighter at the same step). Site components written against Tailwind defaults (blog back-link/dates, version banner, devtools error banner, green file trees) were translated to the equivalent Geist steps; dark: variants dropped since Geist tokens are theme-aware.

Behavior changes to review

  • Ask AI: history no longer persisted in IndexedDB; the hand-rolled Upstash rate limiting on /api/chat is gone (package gateway route has none)
  • Navbar is the package OSS variant (Vercel OSS products dropdown; no Turborepo logo asset exists upstream yet)
  • Sidebar is the generic package renderer; shadcn radius scale shifted slightly to the package's fixed scale
  • Generated agents.md describes /llms.txt as a full-content surface, though this site keeps it as an index

Testing Instructions

cd apps/docs
fnm use 24
rm -rf .next
OG_IMAGE_SECRET=local-dev-secret pnpm dev

Verified locally (node 24): check-types (TS6), check-openapi, full next build + next start; curled /docs, /docs.md, Accept: text/markdown negotiation, agent-UA rewrite, /llms.txt (still the index), /llms-full.txt, /sitemap.md, /agents.md, search API, blog, showcase, terms, devtools, openapi; HTML greps confirm page actions, signed og:image, markdown alternates, edit-source URLs, and RemoteCacheCounter. check-links flags 2 pre-existing broken content links (zero content changes in this PR).

Replace the locally-vendored geistdocs runtime in apps/docs with the
published @vercel/geistdocs package, keeping site-specific content,
routes, and product UI local as thin package-backed adapters.

Adopted from the package:
- Docs page via createDocsPage (MobileDocsBar, page actions, feedback)
- Docs/home layouts, provider, OSS navbar, search and Ask AI routes
- Per-page markdown (llms.mdx), sitemap.md, new agents.md, proxy with
  AI-agent rewrites and markdown negotiation
- MDX component defaults, design tokens via package styles.css

Kept custom (deliberate deviations):
- Curated /llms.txt index and /llms-full.txt (public contract)
- HMAC-signed OG images, rss/feed.xml, robots, Redis crawler sitemap
- Four-column footer (Fides cookie link), versioned-docs banner via the
  sidebarTop slot, RemoteCacheCounter via page-action extras
- PackageManagerTabs, reactflow diagram system, heading-badge pipeline

Version alignment: next 16.2.6 (exact peer pin), fumadocs-core/ui
16.2.2, fumadocs-mdx 14.0.4, fumadocs-openapi 10.2.7. Removed ~20
dependencies owned by deleted vendored code.

Site components written against Tailwind default palettes were
translated to the Geist scale (the package remaps gray/blue/red/green
etc. to --ds-* tokens, which are much lighter at the same step).

.npmrc: hoist tailwindcss so the package styles.css can resolve its
internal @import under this repo's restricted hoist-pattern list.
@molebox
molebox requested a review from a team as a code owner July 9, 2026 08:36
@molebox
molebox requested review from tknickman and removed request for a team July 9, 2026 08:36
@vercel

vercel Bot commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
examples-basic-web Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
examples-designsystem-docs Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
examples-gatsby-web Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
examples-kitchensink-blog Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
examples-nonmonorepo Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
examples-svelte-web Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
examples-tailwind-web Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
examples-vite-web Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
turbo-site Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm
turborepo-eve-agent Ready Ready Preview, Comment, Open in v0 Jul 10, 2026 12:23pm

@molebox

molebox commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Re: Navbar is the package OSS variant (Vercel OSS products dropdown; no Turborepo logo asset exists upstream yet)

I will fix this upstream, and bump the geistdocs version on this PR to pull in the Turborepo name and logo into the nav dropdown

@molebox

molebox commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Upstream PR to add the Turborepo lockup to the geistdocs OSS navbar dropdown: vercel/geistdocs#139. Once that's merged and released, this PR will bump @vercel/geistdocs to pull it in — until then the dropdown shows the default product list without Turborepo.

Pulls in vercel/geistdocs#139, which adds the Turborepo lockup to the
default OSS products dropdown in the package navbar.
@vercel
vercel Bot temporarily deployed to Preview – turborepo-eve-agent July 9, 2026 11:42 Inactive
@molebox

molebox commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

vercel/geistdocs#139 is merged and released as 1.9.0 (after fixing the release pipeline in vercel/geistdocs#141 — npm 12.0.0 broke trusted publishing). Bumped @vercel/geistdocs to ^1.9.0 in d603540: the OSS navbar dropdown now includes Turborepo with the official lockup. Verified typecheck + build; the built navbar chunk contains the turborepo.dev entry.

@anthonyshew

Copy link
Copy Markdown
Contributor

Only thing I noticed is that the Github logo link in the top right is missing.
CleanShot 2026-07-09 at 15 44 12@2x

@molebox

molebox commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Team feedback: the old header's GitHub repo link is missing from the package navbar. Upstream fix: vercel/geistdocs#144 — renders the GitHub icon in the navbar action cluster from config.github (plus a mobile-menu entry). Once released, bumping @vercel/geistdocs here picks it up with no local changes (our github config already has owner/repo).

Pulls in vercel/geistdocs#144, which renders a GitHub icon link in the
navbar action cluster (plus a mobile menu entry) from the site's github
config, restoring the header GitHub link from the pre-migration navbar.
@molebox

molebox commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

vercel/geistdocs#144 released as 1.11.0 — bumped in 2defae2. The navbar now renders the GitHub icon link (https://github.com/vercel/turborepo) next to Ask AI, plus a GitHub entry in the mobile menu, resolving the team feedback. Verified in the built output: navbar SSR contains the GitHub link, and the OSS dropdown still ships the Turborepo lockup. No local code changes needed — it derives from our existing github config.

@vercel
vercel Bot temporarily deployed to Preview – turborepo-eve-agent July 10, 2026 08:57 Inactive
@anthonyshew
anthonyshew merged commit 5517bb2 into main Jul 10, 2026
42 checks passed
@anthonyshew
anthonyshew deleted the docs/migrate-to-geistdocs-package branch July 10, 2026 12:34
anthonyshew pushed a commit that referenced this pull request Jul 10, 2026
## Release v2.10.5-canary.5

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/29092745941)

### Changes

- release(turborepo): 2.10.5-canary.4 (#13325) (`6626261`)
- feat: Run the Rust workspace tests through nextest via command
override (#13316) (`6711bbc`)
- feat: Engage the Remote Cache and sccache compile cache for Rust CI
(#13292) (`1ae2065`)
- ci: Pin GitHub Actions to full commit SHAs (#13143) (`ad614d6`)
- fix: Make npm prune rehoisting deterministic and complete (#13323)
(`2dac737`)
- feat: Report incremental cache reuse in the run summary (#13327)
(`9f3d24a`)
- chore: Remove planning docs (#13329) (`5cd1d02`)
- docs: Migrate docs site to @vercel/geistdocs package (#13320)
(`5517bb2`)
- ci: Update Remote Cache action (#13330) (`4a39887`)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
anthonyshew pushed a commit that referenced this pull request Jul 12, 2026
## Release v2.10.5-canary.6

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/29208587549)

### Changes

- chore: Remove planning docs (#13329) (`5cd1d02`)
- docs: Migrate docs site to @vercel/geistdocs package (#13320)
(`5517bb2`)
- ci: Update Remote Cache action (#13330) (`4a39887`)
- release(turborepo): 2.10.5-canary.5 (#13331) (`f699719`)
- ci: Remove path-based workflow scheduling (#13332) (`84f2b2c`)
- fix: Resolve EADDRINUSE in kitchen-sink api dev script (#13328)
(`5886c71`)
- ci: Disable telemetry messages in workflows (#13334) (`2218dea`)
- fix: Prevent Cargo run tasks from being cached (#13335) (`68f449b`)
- fix: Isolate Cargo cache by host platform (#13337) (`c71f5cd`)
- fix: Continue TUI text selection beyond viewport (#13338) (`9cbfd90`)
- ci: Dogfood Cargo target restoration (#13336) (`8ad90a7`)
- fix: Require current Cargo lockfiles for caching (#13339) (`3a3d381`)
- fix: Reject unsupported Cargo local packages (#13340) (`708d656`)
- fix: Allow outputs outside package roots (#13342) (`de6a0d3`)
- fix: Resolve Cargo lock dependencies by source (#13343) (`2223a33`)
- docs: Update Cargo workspace support (#13349) (`241ada8`)
- fix: Build Ghostty for baseline CPUs (#13352) (`a2a04cc`)
- fix: Preserve watch rerun semantics for task inputs (#13351)
(`6ed5eab`)
- fix: Isolate Command Overrides From Toolchain Cache I/O (#13354)
(`e76f0b4`)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
anthonyshew pushed a commit that referenced this pull request Jul 13, 2026
## Release v2.10.5

> [!CAUTION]
> Versioned docs aliasing FAILED. [View
logs](https://github.com/vercel/turborepo/actions/runs/29267191097)

### Changes

- perf: Evaluate simple include globs without wax compilation (#13285)
(`189897a`)
- chore: Dogfood native Cargo support in this repository (#13283)
(`42f067b`)
- release(turborepo): 2.10.4 (#13286) (`f2fce38`)
- ci: Remove dead sccache configuration (#13289) (`558df3f`)
- feat: Serve the Remote Cache as an sccache backend for Cargo tasks
(#13288) (`0d9803f`)
- fix: Reject output path traversal (#13290) (`733ccca`)
- fix: Disable the sccache proxy when remote cache use is off (#13291)
(`3249e22`)
- feat: Embed sccache so the Cargo compile cache needs no installation
(#13293) (`b6d0035`)
- release(turborepo): 2.10.5-canary.1 (#13294) (`e6cd498`)
- fix: Pin a flag-aware turbo canary for the eve-agent deployment
(#13295) (`e60a4bd`)
- fix: Make the sccache compile cache actually cache (#13296)
(`2ac099c`)
- release(turborepo): 2.10.5-canary.2 (#13297) (`e6e6fb6`)
- fix: Stop ambient CARGO_INCREMENTAL from suppressing compile cache
injection (#13298) (`784af75`)
- fix: Never let compile cache storage failures fail the build (#13299)
(`a6fc6c5`)
- test: Add outputs path-traversal negative-case regression tests
(#13300) (`2ff6df9`)
- release(turborepo): 2.10.5-canary.3 (#13302) (`7e44a29`)
- ci: Authenticate to Remote Cache via OIDC token exchange (#13303)
(`a86839c`)
- fix: Keep pnpm patches with version range keys during prune (#13307)
(`3c27a89`)
- test: Scrub ambient turbo configuration from integration test children
(#13306) (`b03d0d6`)
- fix: Show toolchain tasks in the TUI and never run in silence (#13308)
(`d7622b6`)
- ci: Fix change detection on push events (#13304) (`eec3d61`)
- refactor: Rename the Cargo toolchain id to rust (#13311) (`a548b02`)
- fix: Remove extraneous bun.lock entries during prune (#13317)
(`382e9f5`)
- feat: Require a user-declared name for the Cargo workspace package
(#13312) (`5f01746`)
- feat: Parse and validate the task command field (#13313) (`389ea49`)
- chore: Harden turbo-vsc to invoke turbo without a shell (#13319)
(`4a19b6e`)
- feat: Resolve and execute task command overrides (#13315) (`a549baa`)
- release(turborepo): 2.10.5-canary.4 (#13325) (`6626261`)
- feat: Run the Rust workspace tests through nextest via command
override (#13316) (`6711bbc`)
- feat: Engage the Remote Cache and sccache compile cache for Rust CI
(#13292) (`1ae2065`)
- ci: Pin GitHub Actions to full commit SHAs (#13143) (`ad614d6`)
- fix: Make npm prune rehoisting deterministic and complete (#13323)
(`2dac737`)
- feat: Report incremental cache reuse in the run summary (#13327)
(`9f3d24a`)
- chore: Remove planning docs (#13329) (`5cd1d02`)
- docs: Migrate docs site to @vercel/geistdocs package (#13320)
(`5517bb2`)
- ci: Update Remote Cache action (#13330) (`4a39887`)
- release(turborepo): 2.10.5-canary.5 (#13331) (`f699719`)
- ci: Remove path-based workflow scheduling (#13332) (`84f2b2c`)
- fix: Resolve EADDRINUSE in kitchen-sink api dev script (#13328)
(`5886c71`)
- ci: Disable telemetry messages in workflows (#13334) (`2218dea`)
- fix: Prevent Cargo run tasks from being cached (#13335) (`68f449b`)
- fix: Isolate Cargo cache by host platform (#13337) (`c71f5cd`)
- fix: Continue TUI text selection beyond viewport (#13338) (`9cbfd90`)
- ci: Dogfood Cargo target restoration (#13336) (`8ad90a7`)
- fix: Require current Cargo lockfiles for caching (#13339) (`3a3d381`)
- fix: Reject unsupported Cargo local packages (#13340) (`708d656`)
- fix: Allow outputs outside package roots (#13342) (`de6a0d3`)
- fix: Resolve Cargo lock dependencies by source (#13343) (`2223a33`)
- docs: Update Cargo workspace support (#13349) (`241ada8`)
- fix: Build Ghostty for baseline CPUs (#13352) (`a2a04cc`)
- fix: Preserve watch rerun semantics for task inputs (#13351)
(`6ed5eab`)
- fix: Isolate Command Overrides From Toolchain Cache I/O (#13354)
(`e76f0b4`)
- release(turborepo): 2.10.5-canary.6 (#13355) (`f82e2c7`)
- fix: Include patched Ghostty crate in Cargo workspace (#13357)
(`b3cd7a1`)
- ci: Shard Rust tests across runners (#13356) (`ef122d9`)
- fix: Hash Cargo build environment inputs (#13348) (`d533266`)
- fix: Synchronize Cargo prune Docker lockfile (#13350) (`ed17249`)
- chore: Update agents app Eve dependency (#13364) (`38aa7d2`)
- fix: Preserve Yarn package extension ranges when pruning (#13363)
(`6ed2fb4`)
- refactor: Add `Toolchain` output availability (#13360) (`82bcfb6`)

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

This branch was successfully deployed

1 active deployment
Preview – turborepo-eve-agent 84465be3 Deployed Jul 10, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants