lor-external-doc - Architecture Documentation
1. Project Overview
lor-external-doc is the external-facing developer documentation portal for the CLH (Customer Lifecycle Hub) domain. Built on Docusaurus 3, it serves as the single authoritative source of truth for API references, architectural guides, and versioned documentation consumed by internal developers, integration partners, and technical stakeholders across the CLH platform. The portal aggregates documentation from multiple CLH microservices and presents them in a structured, searchable, and versioned format.
The portal is not a backend API service — it is a statically-generated and server-rendered documentation site that runs on port 8000. It integrates Keycloak-based authentication to gate access to sensitive documentation, and it renders OpenAPI specifications inline using the docusaurus-plugin-openapi-docs plugin. Versioned documentation snapshots (versions 1.2.6 through 1.3.3) are maintained alongside the current docs/ tree, ensuring consumers can reference historical API contracts.
A custom documentation generation pipeline (custom_doc_gen/) supplements the Docusaurus content layer by programmatically generating Markdown files from JSON API definitions and audit dump scripts. This pipeline bridges the gap between live service metadata and the static documentation site, keeping API documentation synchronized with actual service implementations across the CLH ecosystem.
Quick Reference
| Property | Value |
|---|---|
| Group | CLH |
| Language | TypeScript, Python (doc-gen scripts) |
| Framework | Docusaurus 3.10.1 |
| Port | 8000 |
| API Prefix | N/A (static documentation site) |
| Auth | Keycloak (keycloak-js 22.0.5) |
| Search | Algolia + Local Search |
| CI/CD | Bitbucket Pipelines |
2. High-Level Architecture
lor-external-doc follows a static-site-generation (SSG) architecture powered by Docusaurus. The site is built from Markdown/MDX source files, versioned documentation snapshots, and OpenAPI specification files. At build time, the custom doc-gen pipeline (custom_doc_gen/) pre-processes JSON API definitions and audit data into Markdown, which is then consumed by Docusaurus during the static build. The resulting output is a fully pre-rendered HTML/CSS/JS bundle served from a containerized Node.js process on port 8000.
Authentication is handled client-side via @react-keycloak/web and keycloak-js, which intercept page loads and redirect unauthenticated users to the Keycloak identity provider. Once authenticated, the React runtime hydrates the static pages and enables interactive features such as the live code block playground and inline OpenAPI explorer.
%%{init: {'theme': 'neutral'}}%%
flowchart TB
User["👤 Developer / Consumer"]:::client
subgraph "lor-external-doc (Port 8000)"
DocSite["Docusaurus Site\n(React + TypeScript)"]:::app
KeycloakClient["Keycloak Client\n(@react-keycloak/web)"]:::app
OpenAPIPlugin["OpenAPI Docs Plugin\n(docusaurus-plugin-openapi-docs)"]:::app
SearchAlgolia["Algolia Search\n(@docusaurus/theme-search-algolia)"]:::external
SearchLocal["Local Search\n(@cmfcmf/docusaurus-search-local)"]:::app
LiveCode["Live Code Block\n(@docusaurus/theme-live-codeblock)"]:::app
end
subgraph "Build Pipeline"
DocGen["custom_doc_gen/\n(Python Scripts)"]:::app
SourceJSON["source_json_api/\n(API JSON Definitions)"]:::db
MDOutput["Generated Markdown\n(docs/)"]:::db
end
Keycloak[("Keycloak\nIdentity Provider")]:::external
User -->|"HTTPS request"| DocSite
DocSite -->|"auth check"| KeycloakClient
KeycloakClient -->|"OIDC redirect"| Keycloak
Keycloak -->|"JWT token"| KeycloakClient
SourceJSON -->|"JSON input"| DocGen
DocGen -->|"generates .md files"| MDOutput
MDOutput -->|"consumed at build"| DocSite
DocSite --> OpenAPIPlugin
DocSite --> SearchAlgolia
DocSite --> SearchLocal
DocSite --> LiveCode
classDef client fill:#2C3E50,stroke:#1A252F,color:#FFFFFF
classDef app fill:#4A90D9,stroke:#2C5F8A,color:#FFFFFF
classDef db fill:#27AE60,stroke:#1E8449,color:#FFFFFF
classDef external fill:#F39C12,stroke:#D68910,color:#FFFFFF
The diagram illustrates the two distinct phases of the portal: the build-time pipeline where Python scripts transform JSON API definitions into Markdown, and the runtime phase where the Docusaurus React application serves pre-rendered content to authenticated users. Keycloak guards access at the browser level, while Algolia and local search provide dual-mode content discovery.
3. System Context Diagram
lor-external-doc sits at the boundary between the CLH internal microservice ecosystem and external developer consumers. It pulls documentation artifacts from CLH services (via the custom doc-gen pipeline) and presents them through a Keycloak-authenticated web interface. Algolia provides cloud-hosted search indexing as an external third-party dependency. The portal itself does not call any CLH runtime APIs directly — it is a documentation aggregation layer, not a data-plane participant.
%%{init: {'theme': 'neutral'}}%%
flowchart LR
subgraph "Consumers"
DevUser["👤 Internal Developer"]:::client
PartnerUser["👤 Integration Partner"]:::client
end
subgraph "CLH Domain"
LorExtDoc["lor-external-doc\n(Documentation Portal)"]:::app
CLHServices[/"CLH Microservices\n(API Source Data)"/]:::app
DocGenPipeline["custom_doc_gen\nPipeline"]:::app
end
subgraph "Identity"
KeycloakIDP[("Keycloak\nIdentity Provider")]:::external
end
subgraph "Third-Party"
AlgoliaSearch{{"Algolia\nSearch API"}}:::external
end
subgraph "CI/CD"
BitbucketPipelines["Bitbucket Pipelines"]:::infra
end
DevUser -->|"HTTPS / Browser"| LorExtDoc
PartnerUser -->|"HTTPS / Browser"| LorExtDoc
LorExtDoc -->|"OIDC auth flow"| KeycloakIDP
KeycloakIDP -->|"JWT"| LorExtDoc
CLHServices -->|"JSON API specs"| DocGenPipeline
DocGenPipeline -->|"Markdown artifacts"| LorExtDoc
LorExtDoc -->|"search queries"| AlgoliaSearch
AlgoliaSearch -->|"search results"| LorExtDoc
BitbucketPipelines -->|"build & deploy"| LorExtDoc
classDef client fill:#2C3E50,stroke:#1A252F,color:#FFFFFF
classDef app fill:#4A90D9,stroke:#2C5F8A,color:#FFFFFF
classDef external fill:#F39C12,stroke:#D68910,color:#FFFFFF
classDef infra fill:#16A085,stroke:#0E6655,color:#FFFFFF
The system context diagram shows that lor-external-doc is a consumer-facing portal with no direct runtime dependency on CLH microservices. The CLH service data enters the portal exclusively through the offline doc-gen pipeline at build time. Keycloak is the only runtime external dependency for authentication, and Algolia is the only third-party service called from the browser at runtime.
4. Component Breakdown
The portal is composed of five distinct layers: the Docusaurus core framework, the React UI component layer, the authentication wrapper, the documentation content layer (including versioned docs), and the custom doc-gen toolchain. Each layer has a well-defined responsibility and interacts with adjacent layers through clearly defined interfaces.
- Docusaurus Core (
docusaurus.config.js) — Central configuration hub. Registers all plugins (docusaurus-plugin-openapi-docs,@docusaurus/plugin-sitemap), themes (preset-classic,theme-live-codeblock,theme-search-algolia,docusaurus-theme-openapi-docs), and site-wide metadata. - React UI Layer (
src/) — Contains custom React components (src/components/), global CSS overrides (src/css/), and custom page definitions (src/pages/). Built with React 18 and TypeScript. - Keycloak Auth Wrapper — Implemented via
@react-keycloak/webandkeycloak-js 22.0.5. Wraps the application root to enforce authentication before rendering protected documentation content. - Content Layer (
docs/,versioned_docs/) — Markdown and MDX source files organized into the current documentation tree and five versioned snapshots (1.2.6, 1.3.0, 1.3.1, 1.3.2, 1.3.3). Sidebar navigation is defined insidebars.jsand per-versionversioned_sidebars/JSON files. - OpenAPI Docs Plugin —
docusaurus-plugin-openapi-docs@5.0.2ingests OpenAPI specification files and renders interactive API reference pages.docusaurus-theme-openapi-docs@5.0.2provides the corresponding UI theme. - Custom Doc-Gen Pipeline (
custom_doc_gen/) — Python-based toolchain comprisingcreatemdfileFromjson.py(generates Markdown from JSON),createmdfromAPIendpoints.py(generates API endpoint docs),audit_dump_script.py(processes audit data), andconfig.py(pipeline configuration). Source JSON files reside incustom_doc_gen/source_json_api/.
%%{init: {'theme': 'neutral'}}%%
flowchart TB
subgraph "Runtime: Browser"
KeycloakWrapper["Keycloak Auth Wrapper\n(@react-keycloak/web)"]:::app
DocusaurusCore["Docusaurus Core\n(docusaurus.config.js)"]:::app
ReactUI["React UI Layer\n(src/components, src/pages)"]:::app
OpenAPITheme["OpenAPI Theme\n(docusaurus-theme-openapi-docs)"]:::app
LiveCodeBlock["Live Code Block\n(@docusaurus/theme-live-codeblock)"]:::app
SearchTheme["Search\n(Algolia + Local)"]:::app
end
subgraph "Content Layer"
CurrentDocs[("docs/\n(Current)")]:::db
VersionedDocs[("versioned_docs/\nv1.2.6 – v1.3.3")]:::db
Sidebars[("sidebars.js +\nversioned_sidebars/")]:::db
end
subgraph "Build-Time: Doc-Gen Pipeline"
ConfigPy["config.py"]:::pipeline
SourceJSON[("source_json_api/\nJSON Definitions")]:::db
CreateMDFromJSON["createmdfileFromjson.py"]:::pipeline
CreateMDFromAPI["createmdfromAPIendpoints.py"]:::pipeline
AuditDump["audit_dump_script.py"]:::pipeline
end
SourceJSON --> CreateMDFromJSON
SourceJSON --> CreateMDFromAPI
ConfigPy --> CreateMDFromJSON
ConfigPy --> CreateMDFromAPI
ConfigPy --> AuditDump
CreateMDFromJSON -->|"writes .md"| CurrentDocs
CreateMDFromAPI -->|"writes .md"| CurrentDocs
AuditDump -->|"writes .md"| CurrentDocs
CurrentDocs --> DocusaurusCore
VersionedDocs --> DocusaurusCore
Sidebars --> DocusaurusCore
DocusaurusCore --> KeycloakWrapper
KeycloakWrapper --> ReactUI
ReactUI --> OpenAPITheme
ReactUI --> LiveCodeBlock
ReactUI --> SearchTheme
classDef app fill:#4A90D9,stroke:#2C5F8A,color:#FFFFFF
classDef db fill:#27AE60,stroke:#1E8449,color:#FFFFFF
classDef pipeline fill:#8E44AD,stroke:#6C3483,color:#FFFFFF
The diagram shows the clean separation between the build-time doc-gen pipeline and the runtime Docusaurus application. The Python pipeline writes Markdown artifacts into the docs/ directory, which Docusaurus then consumes during the static build. At runtime, the Keycloak wrapper gates access before the React UI renders any content.
5. Data Flow & Interactions
The two primary data flows in lor-external-doc are the documentation build flow (offline, triggered by CI/CD) and the user authentication and page-load flow (online, triggered by browser requests). These flows are independent and operate at different lifecycle stages of the portal.
%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
autonumber
participant Dev as Developer (Browser)
participant Portal as lor-external-doc (Port 8000)
participant KC as Keycloak IDP
participant Algolia as Algolia Search
Note over Dev,Algolia: Runtime: Page Load & Auth Flow
Dev->>Portal: GET / (initial page request)
Portal-->>Dev: Serve pre-rendered HTML + React bundle
Dev->>Portal: React hydrates, Keycloak client initializes
Portal->>KC: Check session / redirect to OIDC login
KC-->>Dev: Render login page
Dev->>KC: Submit credentials
KC-->>Portal: Return JWT access token (OIDC callback)
Portal-->>Dev: Render authenticated documentation content
Note over Dev,Algolia: Runtime: Search Flow
Dev->>Portal: Type search query
Portal->>Algolia: Search API request (query string)
Algolia-->>Portal: Return ranked search results
Portal-->>Dev: Display search results overlay
Note over Dev,Algolia: Build-Time: Doc-Gen Flow
participant CI as Bitbucket Pipelines
participant DocGen as custom_doc_gen (Python)
participant Src as source_json_api/
CI->>DocGen: Trigger doc-gen scripts
DocGen->>Src: Read JSON API definitions
Src-->>DocGen: Return structured JSON
DocGen->>Portal: Write generated .md files to docs/
CI->>Portal: Run `docusaurus build`
Portal-->>CI: Static build artifact (HTML/CSS/JS)
CI->>Portal: Deploy container image (port 8000)
The sequence diagram captures both the runtime and build-time flows. At runtime, the Keycloak OIDC flow is the critical path for all users — no documentation content is rendered until a valid JWT is obtained. The Algolia search flow is a secondary runtime interaction that operates independently of authentication state. The build-time flow is entirely offline: the Python doc-gen scripts populate the docs/ directory before Docusaurus performs its static build, ensuring all generated content is baked into the deployment artifact.
6. API Documentation
lor-external-doc is a documentation portal, not a backend API service. It exposes no REST, GraphQL, or RPC endpoints of its own. There is no OpenAPI specification URL (openapi_url is empty) and no API prefix is defined. The service serves static HTML pages and client-side JavaScript over HTTP on port 8000.
| Method | Path | Description | Auth Required |
|---|---|---|---|
| N/A | N/A | No API endpoints are exposed by this service. The portal serves pre-rendered documentation pages via HTTP on port 8000. All content is static or client-side rendered. | N/A |
Note: While
lor-external-docdoes not expose its own API endpoints, it documents the APIs of other CLH microservices. Thedocs/Api Documentation/directory and thedocusaurus-plugin-openapi-docsplugin render interactive OpenAPI explorer pages for those downstream services. Thecustom_doc_gen/createmdfromAPIendpoints.pyscript generates the Markdown source for those API reference pages from JSON definitions stored incustom_doc_gen/source_json_api/.
No Swagger/OpenAPI URL is available for this service itself. No curl examples are applicable.
7. Dependencies and Service Interactions
Internal Kadal Services
No direct runtime connections to internal Kadal microservices (Auth Service, Event Bus, Audit Service, Metering Service, or Notification Service) are evidenced in the facts JSON. There are no environment variable references to AUTH_URL, EVENT_BUS_URL, AUDIT_SERVICE_URL, or equivalent. The portal interacts with CLH services exclusively at build time through the offline doc-gen pipeline, not via live API calls.
AWS Services
No AWS service integrations are evidenced in the facts JSON. No S3, SQS, CloudWatch, Secrets Manager, or other AWS SDK references are present.
Third-Party Services
| Service | Purpose | Integration Point |
|---|---|---|
| Keycloak (v22.0.x) | OIDC-based user authentication and session management | keycloak-js@^22.0.5, @react-keycloak/web@^3.4.0, keycloak-connect@^22.0.4 |
| Algolia Search | Cloud-hosted full-text search indexing and query API | @docusaurus/theme-search-algolia@3.10.1 |
Node/NPM Packages
| Package | Role | Version |
|---|---|---|
@docusaurus/core | Core Docusaurus SSG framework | 3.10.1 |
@docusaurus/preset-classic | Classic theme preset (docs, blog, pages) | 3.10.1 |
docusaurus-plugin-openapi-docs | OpenAPI spec ingestion and page generation | 5.0.2 |
docusaurus-theme-openapi-docs | UI theme for OpenAPI explorer pages | 5.0.2 |
@docusaurus/theme-live-codeblock | Interactive live code playground | 3.10.1 |
@docusaurus/theme-search-algolia | Algolia search integration theme | 3.10.1 |
@cmfcmf/docusaurus-search-local | Offline local search fallback | ^2.0.1 |
@docusaurus/plugin-sitemap | XML sitemap generation | 3.10.1 |
@react-keycloak/web | React context wrapper for Keycloak | ^3.4.0 |
keycloak-js | Keycloak JavaScript adapter (browser) | ^22.0.5 |
keycloak-connect | Keycloak Node.js adapter | ^22.0.4 |
react / react-dom | UI rendering framework | ^18.2.0 |
@mdx-js/react | MDX rendering support | ^3.0.0 |
cheerio | HTML parsing (used in doc-gen scripts) | ^1.0.0-rc.12 |
prism-react-renderer | Syntax highlighting for code blocks | ^1.3.5 |
%%{init: {'theme': 'neutral'}}%%
flowchart LR
LorExtDoc["lor-external-doc\n(Port 8000)"]:::current
subgraph "Third-Party Services"
Keycloak[("Keycloak\nIdentity Provider")]:::thirdparty
Algolia{{"Algolia\nSearch API"}}:::thirdparty
end
subgraph "Build-Time Toolchain"
DocusaurusCore["@docusaurus/core\n3.10.1"]:::internal
OpenAPIPlugin["docusaurus-plugin-openapi-docs\n5.0.2"]:::internal
SitemapPlugin["@docusaurus/plugin-sitemap\n3.10.1"]:::internal
LocalSearch["@cmfcmf/docusaurus-search-local\n^2.0.1"]:::internal
LiveCodeBlock["@docusaurus/theme-live-codeblock\n3.10.1"]:::internal
MDX["@mdx-js/react\n^3.0.0"]:::internal
end
subgraph "Auth Libraries"
ReactKeycloak["@react-keycloak/web\n^3.4.0"]:::internal
KeycloakJS["keycloak-js\n^22.0.5"]:::internal
KeycloakConnect["keycloak-connect\n^22.0.4"]:::internal
end
LorExtDoc -->|"OIDC auth flow"| Keycloak
LorExtDoc -->|"search queries"| Algolia
LorExtDoc -->|"uses"| DocusaurusCore
LorExtDoc -->|"renders OpenAPI specs"| OpenAPIPlugin
LorExtDoc -->|"generates sitemap"| SitemapPlugin
LorExtDoc -->|"offline search"| LocalSearch
LorExtDoc -->|"code playground"| LiveCodeBlock
LorExtDoc -->|"MDX rendering"| MDX
LorExtDoc -->|"auth context"| ReactKeycloak
ReactKeycloak -->|"wraps"| KeycloakJS
LorExtDoc -->|"server-side auth"| KeycloakConnect
classDef current fill:#27AE60,stroke:#1E8449,color:#FFFFFF
classDef internal fill:#4A90D9,stroke:#2C5F8A,color:#FFFFFF
classDef thirdparty fill:#8E44AD,stroke:#6C3483,color:#FFFFFF
8. Infrastructure & Deployment
Environments
The repository includes a bitbucket-pipelines.yml CI/CD configuration, indicating automated build and deployment pipelines. Specific environment URLs (dev, staging, production) are not defined in the extracted facts. The service runs on port 8000 in all environments as defined in the Docker configuration.
Container & Orchestration
- Docker: The service is containerized and exposes port 8000. The base image is not specified in the extracted facts (
unknown). The container serves the Docusaurus production build, likely via a Node.js HTTP server or a static file server (e.g.,serveornginx). - Kubernetes: No Kubernetes namespace, deployment name, replica counts, HPA configuration, or resource limits are defined in the extracted facts. Kubernetes deployment details are not available from the current codebase scan.
- Build Process: The Docusaurus build (
docusaurus build) produces a static artifact in thebuild/directory. The custom doc-gen Python scripts must be executed prior to the Docusaurus build step to ensure generated Markdown is included in the output.
Cloud Resources
No cloud-specific infrastructure resources (S3 buckets, RDS instances, ElastiCache, SQS queues, CloudWatch log groups, CDN distributions) are evidenced in the extracted facts JSON.
Deployment Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart TB
subgraph "CI/CD: Bitbucket Pipelines"
Pipeline["Bitbucket Pipeline\n(bitbucket-pipelines.yml)"]:::infra
DocGenStep["Step 1: Run custom_doc_gen\n(Python scripts)"]:::infra
BuildStep["Step 2: docusaurus build\n(npm run build)"]:::infra
DockerBuild["Step 3: Docker image build\n(port 8000)"]:::infra
Deploy["Step 4: Deploy container"]:::infra
end
subgraph "Production Environment"
Container["lor-external-doc\nContainer (port 8000)"]:::prod
StaticBuild[("Static Build Artifact\n(HTML/CSS/JS)")]:::prod
end
subgraph "External Runtime Dependencies"
Keycloak[("Keycloak IDP\n(OIDC)")]:::external
Algolia{{"Algolia\nSearch"}}:::external
end
subgraph "Build-Time Inputs"
SourceJSON[("source_json_api/\nJSON Definitions")]:::staging
VersionedDocs[("versioned_docs/\nv1.2.6 – v1.3.3")]:::staging
end
SourceJSON -->|"input to"| DocGenStep
VersionedDocs -->|"input to"| BuildStep
Pipeline --> DocGenStep
DocGenStep -->|"generates .md"| BuildStep
BuildStep -->|"produces artifact"| DockerBuild
DockerBuild --> Deploy
Deploy --> Container
Container --> StaticBuild
Container -->|"OIDC auth"| Keycloak
Container -->|"search API"| Algolia
classDef prod fill:#27AE60,stroke:#1E8449,color:#FFFFFF
classDef staging fill:#F39C12,stroke:#D68910,color:#FFFFFF
classDef infra fill:#4A90D9,stroke:#2C5F8A,color:#FFFFFF
classDef external fill:#8E44AD,stroke:#6C3483,color:#FFFFFF
The deployment pipeline follows a four-step sequence: the Python doc-gen scripts run first to populate the docs/ directory, followed by the Docusaurus static build, Docker image construction, and container deployment. Since no Kubernetes HPA or resource limit configuration is present in the facts, scaling strategy details are not available. The two runtime external dependencies — Keycloak and Algolia — must be reachable from the deployed container's network environment.
9. Technology Stack
| Technology | Role | Version |
|---|---|---|
| React | UI framework for Docusaurus pages and components | ^18.2.0 |
| TypeScript | Static typing for React components and configuration | ^4.7.4 |
| Docusaurus | Static site generation framework | 3.10.1 |
MDX (@mdx-js/react) | Markdown with embedded JSX for rich documentation | ^3.0.0 |
| docusaurus-plugin-openapi-docs | OpenAPI spec ingestion and interactive API page rendering | 5.0.2 |
| docusaurus-theme-openapi-docs | UI theme for OpenAPI explorer | 5.0.2 |
| keycloak-js | Browser-side Keycloak OIDC adapter | ^22.0.5 |
| @react-keycloak/web | React context provider for Keycloak session management | ^3.4.0 |
| keycloak-connect | Node.js server-side Keycloak adapter | ^22.0.4 |
| Algolia Search | Cloud-hosted full-text search | (via @docusaurus/theme-search-algolia 3.10.1) |
| @cmfcmf/docusaurus-search-local | Offline local search index | ^2.0.1 |
| @docusaurus/theme-live-codeblock | Interactive code playground | 3.10.1 |
| @docusaurus/plugin-sitemap | XML sitemap generation for SEO | 3.10.1 |
| Python | Custom doc-gen pipeline scripting | (runtime version unspecified) |
| cheerio | HTML parsing in doc-gen scripts | ^1.0.0-rc.12 |
| prism-react-renderer | Syntax highlighting for code blocks | ^1.3.5 |
| Docker | Containerization, exposes port 8000 | (base image unspecified) |
| Bitbucket Pipelines | CI/CD automation | N/A |
10. Directory Structure Highlights
lor-external-doc/
├── custom_doc_gen/ # Build-time Python doc-gen pipeline
│ ├── source_json_api/ # Input: JSON API definitions from CLH services
│ ├── audit_dump_script.py # Processes audit data into Markdown
│ ├── config.py # Pipeline configuration (paths, settings)
│ ├── createmdfileFromjson.py # Generates Markdown docs from JSON definitions
│ └── createmdfromAPIendpoints.py # Generates API endpoint reference pages
│
├── docs/ # Current (HEAD) documentation source
│ ├── Api Documentation/ # Generated and hand-authored API reference pages
│ └── Architecture.md # Architecture documentation (this file's target)
│
├── src/ # Custom React source code
│ ├── components/ # Reusable React components (custom UI elements)
│ ├── css/ # Global CSS overrides and custom styles
│ └── pages/ # Custom Docusaurus page definitions
│
├── static/ # Static assets served as-is
│ └── img/ # Images, logos, and icons
│
├── versioned_docs/ # Archived documentation snapshots
│ ├── version-1.2.6/ # Docs snapshot for release 1.2.6
│ ├── version-1.3.0/ # Docs snapshot for release 1.3.0
│ ├── version-1.3.1/ # Docs snapshot for release 1.3.1
│ ├── version-1.3.2/ # Docs snapshot for release 1.3.2
│ └── version-1.3.3/ # Docs snapshot for release 1.3.3
│
├── versioned_sidebars/ # Per-version sidebar navigation JSON configs
│
├── docusaurus.config.js # Central Docusaurus configuration (plugins, themes, nav)
├── sidebars.js # Sidebar navigation for current docs
├── versions.json # Registry of all maintained documentation versions
├── babel.config.js # Babel transpilation configuration
├── tsconfig.json # TypeScript compiler configuration
├── bitbucket-pipelines.yml # CI/CD pipeline definition
└── package.json # NPM dependencies and build scripts
Key structural observations:
custom_doc_gen/is the most operationally critical directory — it must be executed before any Docusaurus build to ensure generated content is present.versioned_docs/maintains five historical snapshots, enabling consumers to reference API contracts from previous releases without the current docs being affected.docusaurus.config.jsis the single configuration entry point for all plugins, themes, search providers, and site metadata — changes here affect the entire portal.src/pages/contains any custom landing pages or non-documentation pages that extend beyond the standard Docusaurus docs/blog structure.