ADRs
ADR-0023: Docs site architecture (Phase 1.5)
Architecture decision record 0023.
ADR-0023: Docs site architecture (Phase 1.5)
- Status: Accepted
- Date: 2026-06-12 (amended 2026-06-13 —
docs/app/layout) - Authors: IBEX Harness team
Context
- Marketing landing lives in a separate repo (marvel-scape) at
ibexharness.com. - Engineering documentation (~133 markdown files) lives in repo-root
docs/for ADRs, roadmap, and internal audits. - Public product docs must ship at
docs.ibexharness.comwith a polished, Vercel/Linear-style design (MASTER_BRIEF). - DNS
docsCNAME is managed in Cloudflare; production docs deploy to Cloudflare Pages static export (amended 2026-06-26).
Decision
1) Public docs app location
- Add
docs/app/— Fumadocs on Next.js 15 App Router. - Go services remain in
services/; shared Go libraries stay inpackages/(unchanged). Shared TypeScript libraries for the docs site also live underpackages/(e.g. futurepackages/sdk-typescript/). Do not relocate Go code intodocs/app/.
2) Two documentation corpora
| Corpus | Path | Audience |
|---|---|---|
| Engineering | docs/ | Contributors, ADRs, roadmap, CI audits |
| Public site | docs/app/content/docs/ | End users, operators, integrators |
Public pages are authored as MDX; port/adapt from engineering sources per CONTENT_SOURCES.md.
3) JavaScript toolchain
- pnpm workspaces + Turborepo at repo root.
pnpm-workspace.yamlincludesdocs/appandpackages/*(pnpm ignores Go-only dirs withoutpackage.json).- Tailwind v3 (Fumadocs UI v14 requirement).
4) Hosting
- Cloudflare Pages — pure static export (
output: export→docs/app/out/). - Pages project name:
ibex-harness-docs. - Deploy only through GitHub Actions
.github/workflows/docs-deploy.yml. - Credentials in GitHub Environment
production(CLOUDFLARE_API_TOKEN,CLOUDFLARE_ACCOUNT_ID); seeDEPLOY_CLOUDFLARE.md. - Separate from landing project
ibexdepo— never attachdocs.ibexharness.comto the landing Vercel project. NEXT_PUBLIC_SITE_URL=https://docs.ibexharness.comin production.- Search: pre-built
/search-index.json(Orama simple mode, ~272 KB);/api/searchredirects to it in production. - OG images: pre-generated at build into
public/docs/*/opengraph-image.png. - Redirects:
public/_redirects(Pages); cache headers:public/_headers. - Amendment (2026-06-22): Vercel → Cloudflare Workers + OpenNext (#129–#133).
- Amendment (2026-06-26): Workers + OpenNext → Cloudflare Pages static export. Recurring Error 1102 traced to Worker CPU limits on a fully static site; OpenNext Durable Object cache handlers were unnecessary for
force-staticpages./api/searchOrama rebuild and runtime OG generation were additional Worker CPU sinks.
5) API reference
- Phase 1.5: manual endpoint pages for implemented surfaces only.
- OpenAPI-driven pages (
fumadocs-openapi) deferred untilservices/proxypublishesopenapi.yaml(Phase 2).
6) Delivery
- Wave-based PRs (one milestone or tight pair per PR); see phase-1-5 README.
Consequences
repo-guardsmust allowdocs/app/underdocs/and root Node manifest files.- CI gains
docs-buildjob (path-filtered) anddocs-deployworkflow onmain; see D.4.2 (partial). - D.4.1 Vercel preview deploys superseded by GHA +
workflow_dispatchdeploy smoke tests. - Phase 2 entry blocked until Phase 1.5 production launch (docs-first sequencing).
References
- MASTER_BRIEF.md
- DOCS_DOMAIN_HANDOFF (landing repo)
- ADR-0020 — Go
packages/boundaries unchanged
Was this page helpful?
Edit on GitHub
Last updated on