feat(docs): migrate the documentation site from VitePress to Docus - #55
Conversation
Rebuild apps/docs on Docus (Nuxt 4 + Nuxt UI + @nuxt/content) with a custom theme that restates the dashboard/marketing brand tokens on Nuxt UI's semantic variables: the green accent and green-tinted neutrals from the apps' --az-* palette, dark-first color mode, square corners, the 32px accent-tinted grid canvas, and the theme-aware brand SVGs from apps/marketing/public. The canonical docs/*.md files stay the single source: a content:file:beforeParse hook re-implements VitePress's "<!--@include: path#region-->" directives, and a missing file or region fails a production build so include drift cannot ship (@nuxt/content alone would downgrade the parse failure to a warning and drop the page). Content moves to the numbered content/ tree Docus derives navigation from; numeric prefixes are stripped from routes, so every existing /guide/... and /reference/... URL is preserved. VitePress containers become MDC callouts, page H1s move into frontmatter titles, and the landing page is rebuilt with u-page-hero and u-page-feature. Wiring follows apps/marketing: turbo outputs .output/**, the base-path env becomes NUXT_APP_BASE_URL, vercel.json switches to the nuxtjs framework, knip gets a Nuxt-shaped entry, and @nuxt/content uses Node's built-in sqlite instead of better-sqlite3 so no native build step is required. Verified with a standalone build: prerender succeeds, all 15 includes resolve, callouts and the landing page render, and a misspelled region fails the build. pnpm-lock.yaml is not updated here because this environment's egress policy blocks pkg.pr.new (the pinned @lunariajs/core tarball packages/i18n already depends on); run `aube install` once where that host is reachable to record the docus subtree in the lockfile. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012SK7GND614AB6qpZ51aPFx
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Documentation tooling migration from VitePress to Docus with no runtime application impact. Changes are mechanical file reorganization and config translation for an isolated docs site. You can add or adjust custom eligibility rules. Learn more. |
The branch was cut from 19b59dc, two commits behind main, so the migration ran against a stale snapshot of apps/docs. Merging restores what #52 and #54 added — the Vercel deployment section, the config/env.ts rename, and the KV driver notes — into the new content/ tree, which git follows through the guide/ -> content/1.guide/ renames. Two conflicts resolved by hand: - .gitignore: keep main's `.vercel/` entry, drop the `.vitepress` lines this branch removes. - The `::: warning Upstream version mismatch` block main added to the deployment page is VitePress container syntax, converted to the MDC `::warning` callout the rest of the tree now uses. Verified by rebuilding the docs app: prerender succeeds, the restored Vercel section and its callout render, and all 15 @include directives still resolve. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012SK7GND614AB6qpZ51aPFx
Picks up #56. The one conflict is the build-time-capture callout on the environment-variables page, where main edited text inside a block this branch had already converted to MDC; main's wording wins, in the MDC form. The two `BETTER_AUTH_*` containers main added on the same page are converted the same way, so the page carries no VitePress syntax. Verified by rebuilding the docs app: prerender succeeds, both restored callouts render, and all @include directives still resolve. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012SK7GND614AB6qpZ51aPFx
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
|
Warning Review the following alerts detected in dependencies. According to your organization's Security Policy, it is recommended to resolve "Warn" alerts. Learn more about Socket for GitHub.
|
The merge kept main's `apps/docs` importer, which still resolved VitePress and had no entry for Docus. Regenerate the lockfile so it matches `apps/docs/package.json`.
…e vueuse `aube run dev` crashed apps/mail-preview with a Vite dependency-optimizer error: `@vueuse/core@14.4.0` importing `createRef`/`pxValue`/`toArray` from `@vueuse/shared@10.11.1`. Both versions were on disk — vaul-vue was the only consumer still pinned to the 10.11.1 line while Maizzle and everything else had moved to 14.4.0 — and the optimizer's symlink resolution picked the wrong pairing. vaul-vue's own declared range (`@vueuse/core: >=10.0.0`) already allows 14.4.0, so this repoints its lockfile entry there and drops the now-orphaned 10.11.1 packages, rather than adding a workspace-wide override: a real `--no-frozen-lockfile` reinstall independently collapses a pre-existing `unhead@3.3.1`/`3.3.2` split that apps/marketing's `nuxt-schema-org` needs, breaking its typecheck — unrelated to this fix and out of scope here. Verified: check:repo, lint:ci, typecheck, test (25/25), and build all green (apps/docs excluded from the build check — its OOM under this sandbox's memory limit predates this change, from the Docus migration in #55).
Rebuild apps/docs on Docus (Nuxt 4 + Nuxt UI + @nuxt/content) with a custom theme that restates the dashboard/marketing brand tokens on Nuxt UI's semantic variables: the green accent and green-tinted neutrals from the apps' --az-* palette, dark-first color mode, square corners, the 32px accent-tinted grid canvas, and the theme-aware brand SVGs from apps/marketing/public.
The canonical docs/*.md files stay the single source: a content:file:beforeParse hook re-implements VitePress's "" directives, and a missing file or region fails a production build so include drift cannot ship (@nuxt/content alone would downgrade the parse failure to a warning and drop the page).
Content moves to the numbered content/ tree Docus derives navigation from; numeric prefixes are stripped from routes, so every existing /guide/... and /reference/... URL is preserved. VitePress containers become MDC callouts, page H1s move into frontmatter titles, and the landing page is rebuilt with u-page-hero and u-page-feature.
Wiring follows apps/marketing: turbo outputs .output/**, the base-path env becomes NUXT_APP_BASE_URL, vercel.json switches to the nuxtjs framework, knip gets a Nuxt-shaped entry, and @nuxt/content uses Node's built-in sqlite instead of better-sqlite3 so no native build step is required.
Verified with a standalone build: prerender succeeds, all 15 includes resolve, callouts and the landing page render, and a misspelled region fails the build. pnpm-lock.yaml is not updated here because this environment's egress policy blocks pkg.pr.new (the pinned @lunariajs/core tarball packages/i18n already depends on); run
aube installonce where that host is reachable to record the docus subtree in the lockfile.Claude-Session: https://claude.ai/code/session_012SK7GND614AB6qpZ51aPFx
Summary
Why
Verification
aube run check:repoaube run lint:ciaube run typecheckaube testaube run buildSafety and compatibility
observemode as read-only, or explained the policy change above.Agent context
Reviewer notes
Note
Migrate
apps/docsfrom VitePress to Docus (Nuxt)DOCS_BASEbecomesNUXT_APP_BASE_URLand build outputs move from.vitepress/distto.output.nuxt.config.tsto resolve VitePress-style<!--@include: path#region-->directives at content-parse time, with recursive include support and strict abort on production build failures..navigation.ymlmetadata, and::warning/::tipadmonition syntax replacing VitePress:::blocks.@includehook innuxt.config.tsaborts the production build if any include path fails to resolve; canonical docs underdocs/*.mdare now build inputs via turbo.jsonc so missing changes there can fail the docs build.Macroscope summarized fdc6e18.