Skip to content

feat(docs): migrate the documentation site from VitePress to Docus - #55

Merged
kodiakhq[bot] merged 5 commits into
mainfrom
claude/docus-docs-custom-theme-k4bf9e
Aug 20, 2026
Merged

feat(docs): migrate the documentation site from VitePress to Docus#55
kodiakhq[bot] merged 5 commits into
mainfrom
claude/docus-docs-custom-theme-k4bf9e

Conversation

@RedStar071

@RedStar071 RedStar071 commented Aug 19, 2026

Copy link
Copy Markdown
Member

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 install once 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:repo
  • aube run lint:ci
  • aube run typecheck
  • aube test
  • aube run build

Safety and compatibility

  • I added or updated deterministic tests for changed behavior.
  • I preserved observe mode as read-only, or explained the policy change above.
  • Runtime commands and target-repository writes remain inside the runner boundary.
  • I did not expose secrets, tokens, personal data, or untrusted output in logs.
  • I updated documentation and Agent Skills when workflows or boundaries changed.

Agent context

  • Agent/tools used:
  • What the agent did, and what you changed or verified yourself:

Reviewer notes

Note

Migrate apps/docs from VitePress to Docus (Nuxt)

  • Replaces VitePress with Docus/Nuxt across nuxt.config.ts, package.json, vercel.json, and turbo.jsonc; env var DOCS_BASE becomes NUXT_APP_BASE_URL and build outputs move from .vitepress/dist to .output.
  • Adds a custom content hook in nuxt.config.ts to resolve VitePress-style <!--@include: path#region--> directives at content-parse time, with recursive include support and strict abort on production build failures.
  • Migrates all guide/reference pages to the Docus content tree with frontmatter titles, .navigation.yml metadata, and ::warning/::tip admonition syntax replacing VitePress ::: blocks.
  • Adds a new Docus landing page (content/index.md), brand theme CSS (app/app.css), and app config (app/app.config.ts) with Nuxt UI color tokens.
  • Risk: the custom @include hook in nuxt.config.ts aborts the production build if any include path fails to resolve; canonical docs under docs/*.md are now build inputs via turbo.jsonc so missing changes there can fail the docs build.

Macroscope summarized fdc6e18.

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
@vercel

vercel Bot commented Aug 19, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
agent-zero-dashboard Ready Ready Preview Aug 20, 2026 12:35pm
agent-zero-docs Ready Ready Preview Aug 20, 2026 12:35pm
agent-zero-marketing Ready Ready Preview Aug 20, 2026 12:35pm

macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 19, 2026
@macroscopeapp

macroscopeapp Bot commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at fdc6e18

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
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 20, 2026
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
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Aug 20, 2026
@socket-security

socket-security Bot commented Aug 20, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addeddocus@​5.12.3831001009980
Addedbetter-sqlite3@​12.11.110010010093100

View full report

@socket-security

socket-security Bot commented Aug 20, 2026

Copy link
Copy Markdown

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.

Action Severity Alert  (click "▶" to expand/collapse)
Warn High
Obfuscated code: npm @tanstack/table-core is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/docus@5.12.3npm/@tanstack/table-core@8.21.3

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/@tanstack/table-core@8.21.3. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm better-sqlite3 is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/better-sqlite3@12.11.1

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/better-sqlite3@12.11.1. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

Warn High
Obfuscated code: npm embla-carousel is 90.0% likely obfuscated

Confidence: 0.90

Location: Package overview

From: pnpm-lock.yamlnpm/docus@5.12.3npm/embla-carousel@8.6.0

ℹ Read more on: This package | This alert | What is obfuscated code?

Next steps: Take a moment to review the security alert above. Review the linked package source code to understand the potential risk. Ensure the package is not malicious before proceeding. If you're unsure how to proceed, reach out to your security team or ask the Socket team for help at support@socket.dev.

Suggestion: Packages should not obfuscate their code. Consider not using packages with obfuscated code.

Mark the package as acceptable risk. To ignore this alert only in this pull request, reply with the comment @SocketSecurity ignore npm/embla-carousel@8.6.0. You can also ignore all packages with @SocketSecurity ignore-all. To ignore an alert for all future pull requests, use Socket's Dashboard to change the triage state of this alert.

View full report

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`.
@kodiakhq
kodiakhq Bot merged commit 10b78bb into main Aug 20, 2026
17 of 19 checks passed
@kodiakhq
kodiakhq Bot deleted the claude/docus-docs-custom-theme-k4bf9e branch August 20, 2026 12:24
RedStar071 added a commit that referenced this pull request Aug 20, 2026
…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).
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