Skip to main content
Version: 1.3.4

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

PropertyValue
GroupCLH
LanguageTypeScript, Python (doc-gen scripts)
FrameworkDocusaurus 3.10.1
Port8000
API PrefixN/A (static documentation site)
AuthKeycloak (keycloak-js 22.0.5)
SearchAlgolia + Local Search
CI/CDBitbucket 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/web and keycloak-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 in sidebars.js and per-version versioned_sidebars/ JSON files.
  • OpenAPI Docs Plugindocusaurus-plugin-openapi-docs@5.0.2 ingests OpenAPI specification files and renders interactive API reference pages. docusaurus-theme-openapi-docs@5.0.2 provides the corresponding UI theme.
  • Custom Doc-Gen Pipeline (custom_doc_gen/) — Python-based toolchain comprising createmdfileFromjson.py (generates Markdown from JSON), createmdfromAPIendpoints.py (generates API endpoint docs), audit_dump_script.py (processes audit data), and config.py (pipeline configuration). Source JSON files reside in custom_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.

MethodPathDescriptionAuth Required
N/AN/ANo 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-doc does not expose its own API endpoints, it documents the APIs of other CLH microservices. The docs/Api Documentation/ directory and the docusaurus-plugin-openapi-docs plugin render interactive OpenAPI explorer pages for those downstream services. The custom_doc_gen/createmdfromAPIendpoints.py script generates the Markdown source for those API reference pages from JSON definitions stored in custom_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

ServicePurposeIntegration Point
Keycloak (v22.0.x)OIDC-based user authentication and session managementkeycloak-js@^22.0.5, @react-keycloak/web@^3.4.0, keycloak-connect@^22.0.4
Algolia SearchCloud-hosted full-text search indexing and query API@docusaurus/theme-search-algolia@3.10.1

Node/NPM Packages

PackageRoleVersion
@docusaurus/coreCore Docusaurus SSG framework3.10.1
@docusaurus/preset-classicClassic theme preset (docs, blog, pages)3.10.1
docusaurus-plugin-openapi-docsOpenAPI spec ingestion and page generation5.0.2
docusaurus-theme-openapi-docsUI theme for OpenAPI explorer pages5.0.2
@docusaurus/theme-live-codeblockInteractive live code playground3.10.1
@docusaurus/theme-search-algoliaAlgolia search integration theme3.10.1
@cmfcmf/docusaurus-search-localOffline local search fallback^2.0.1
@docusaurus/plugin-sitemapXML sitemap generation3.10.1
@react-keycloak/webReact context wrapper for Keycloak^3.4.0
keycloak-jsKeycloak JavaScript adapter (browser)^22.0.5
keycloak-connectKeycloak Node.js adapter^22.0.4
react / react-domUI rendering framework^18.2.0
@mdx-js/reactMDX rendering support^3.0.0
cheerioHTML parsing (used in doc-gen scripts)^1.0.0-rc.12
prism-react-rendererSyntax 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., serve or nginx).
  • 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 the build/ 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

TechnologyRoleVersion
ReactUI framework for Docusaurus pages and components^18.2.0
TypeScriptStatic typing for React components and configuration^4.7.4
DocusaurusStatic site generation framework3.10.1
MDX (@mdx-js/react)Markdown with embedded JSX for rich documentation^3.0.0
docusaurus-plugin-openapi-docsOpenAPI spec ingestion and interactive API page rendering5.0.2
docusaurus-theme-openapi-docsUI theme for OpenAPI explorer5.0.2
keycloak-jsBrowser-side Keycloak OIDC adapter^22.0.5
@react-keycloak/webReact context provider for Keycloak session management^3.4.0
keycloak-connectNode.js server-side Keycloak adapter^22.0.4
Algolia SearchCloud-hosted full-text search(via @docusaurus/theme-search-algolia 3.10.1)
@cmfcmf/docusaurus-search-localOffline local search index^2.0.1
@docusaurus/theme-live-codeblockInteractive code playground3.10.1
@docusaurus/plugin-sitemapXML sitemap generation for SEO3.10.1
PythonCustom doc-gen pipeline scripting(runtime version unspecified)
cheerioHTML parsing in doc-gen scripts^1.0.0-rc.12
prism-react-rendererSyntax highlighting for code blocks^1.3.5
DockerContainerization, exposes port 8000(base image unspecified)
Bitbucket PipelinesCI/CD automationN/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.js is 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.