Source for caprover.com, containing two independently built applications:
marketing-site/: Next.js marketing sitedocs-site/: Docusaurus 3 documentation sitecontent/: English source content and translations, grouped by localescripts/: composition and production smoke checks
The production build uses Docusaurus as the base, then overlays the marketing
site's index.html, _next/, and homepage-assets/ output.
Requires Node.js 22.13 or newer.
cd marketing-site
npm ci
npm run devRun checks:
npm run lint
npm run format:check
npm testThe documentation site requires Node.js 20 or newer. Use Node.js 22 to match the production workflow.
cd docs-site
npm ci
npm startThe canonical 48-page documentation is maintained in content/en/docs-next/
and published at /docs/*, using docs-site/sidebars.js. The source directory
keeps its historical name to keep this routing cutover small.
The Spanish and Chinese translations of the 48 current pages live in
content/es-ES/docs-next/ and content/zh-CN/docs-next/. Docusaurus
publishes them under /es-ES/docs/* and /zh-CN/docs/*.
The original translations remain in content/<locale>/docs/ and are
published at /<locale>/docs-legacy/* using sidebars-legacy.js.
Archived pages are excluded from search indexing and the sitemap. See cutover route policy.
Site commands validate the locale content and generate Docusaurus i18n inputs before every build.
Docusaurus internationalization is configured by content/locales.json. English
is the source language. English documentation is served from /docs/*. Spanish and Chinese
translations of current content are published under /es-ES/docs/* and
/zh-CN/docs/*. The older translations remain available under
/es-ES/docs-legacy/* and /zh-CN/docs-legacy/*.
Compatibility redirects preserve historical /docs/<locale>/*.html URLs.
Each locale is complete and self-contained under content/<locale>/:
docs-next/contains the current documentation Markdown, translated in each locale.docs/contains the archived documentation Markdown.marketing.jsoncontains the flat Next.js marketing-site message catalog.docs-ui.jsoncontains Docusaurus navigation, sidebar, document-title, and interface strings.- Add a locale to
content/locales.jsonafter all three surfaces are complete.
Spanish and Simplified Chinese remain enabled. The Docusaurus language menu switches between translated current pages, preserving the route across locales.
On an unprefixed page view, the combined static site uses a saved language-menu choice or selects a supported locale from the browser's preferences. The generated translation files are committed as static Markdown. Review new technical content in every enabled locale to maintain parity.
Follow the repository-wide authoring and translation rules in
content/README.md.
From the repository root:
(cd docs-site && npm ci && npm run clean-build)
(cd marketing-site && npm ci && npm run lint && npm run format:check && npm test)
node scripts/compose-site.mjs
node scripts/smoke-combined-site.mjsThe deployable artifact is written to build/combined-site/.
Pushes to master run .github/workflows/website-publish.yml, build both applications, compose and smoke-test the artifact, then publish it to GitHub Pages. Do not publish either framework's output directly.