# sonawaneganes/continuityos architecture

> Architecture diagram of the GitHub repository sonawaneganes/continuityos, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sonawaneganes/continuityos
- Repository: https://github.com/sonawaneganes/continuityos

## Overview

ContinuityOS turns project documents into evidence-linked handover claims, checks those claims for readiness gaps, and lets a team review and approve the handover. The main path is document upload, text parsing, AI claim extraction, quote verification, persistence, gap analysis, and review through the frontend API. The README also documents project creation and approval. Frontend component wiring and some route internals were not sampled, so those connections are omitted; documented HTTP endpoints and shown backend calls support the edges below.

Main entry points: [`frontend/src/api.js`](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/api.js) (API client), [`backend/app/routes/upload.py`](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/upload.py) (Project and upload routes), [`backend/app/main.py`](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/main.py) (FastAPI application), [`backend/app/routes/gaps.py`](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/gaps.py) (Gap route)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Handover workspace"]
  node_web["Workspace UI<br/>[App.jsx]"]
  node_api_client["API client<br/>[api.js]"]
  node_gap_panel["Gap panel<br/>[GapPanel.jsx]"]
  node_source_viewer["Source viewer<br/>[SourceViewer.jsx]"]
  node_label_badge["Evidence badge<br/>[LabelBadge.jsx]"]
  node_timeline["Claim timeline<br/>[Timeline.jsx]"]
  node_export["Export control<br/>[ExportButton.jsx]"]
  node_app_entry["Web entry<br/>[main.jsx]"]
end

subgraph group_api["API and workflow"]
  node_api_app["FastAPI application<br/>[main.py]"]
  node_project_upload["Project and upload routes<br/>[upload.py]"]
  node_claims_route["Claim routes<br/>[claims.py]"]
  node_gaps_route["Gap route<br/>[gaps.py]"]
  node_handover_route["Approval route<br/>[handover.py]"]
end

subgraph group_ingestion["Evidence ingestion"]
  node_parser["Document parser<br/>[parser.py]"]
  node_extractor["Claim extractor<br/>[extractor.py]"]
  node_schemas["Claim schemas<br/>[schemas.py]"]
  node_verifier["Quote verifier<br/>[verifier.py]"]
end

subgraph group_domain["Claims and readiness"]
  node_gap_checks["Readiness checks<br/>[gaps.py]"]
  node_models["Project data models<br/>[models.py]"]
  node_database[("PostgreSQL store<br/>[database.py]")]
end

node_team(("Project team"))

node_team -->|"reviews handover"| node_web
node_app_entry -->|"renders"| node_web
node_web -.->|"requests data"| node_api_client
node_gap_panel -->|"loads gaps"| node_api_client
node_source_viewer -->|"loads sources"| node_api_client
node_gap_panel -->|"displays labels"| node_label_badge
node_source_viewer -->|"displays labels"| node_label_badge
node_api_client -->|"uploads documents"| node_project_upload
node_api_client -->|"requests claims"| node_claims_route
node_api_client -->|"requests gaps"| node_gaps_route
node_api_client -->|"requests approval"| node_handover_route
node_api_app -->|"registers routes"| node_project_upload
node_api_app -->|"registers routes"| node_claims_route
node_api_app -->|"registers routes"| node_gaps_route
node_api_app -->|"registers routes"| node_handover_route
node_project_upload -->|"parses upload"| node_parser
node_project_upload -->|"extracts claims"| node_extractor
node_project_upload -->|"verifies quotes"| node_verifier
node_extractor -->|"validates claims"| node_schemas
node_project_upload -->|"saves documents and claims"| node_models
node_claims_route -->|"reads claims and sources"| node_models
node_gaps_route -->|"loads and labels claims"| node_models
node_gaps_route -->|"runs checks"| node_gap_checks
node_models -->|"uses base"| node_database
node_api_app -->|"creates tables"| node_database
node_handover_route -.->|"uses readiness checks"| node_gap_checks

click node_web "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/App.jsx"
click node_api_client "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/api.js"
click node_gap_panel "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/GapPanel.jsx"
click node_source_viewer "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/SourceViewer.jsx"
click node_label_badge "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/LabelBadge.jsx"
click node_timeline "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/Timeline.jsx"
click node_export "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/ExportButton.jsx"
click node_app_entry "https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/main.jsx"
click node_api_app "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/main.py"
click node_project_upload "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/upload.py"
click node_claims_route "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/claims.py"
click node_gaps_route "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/gaps.py"
click node_handover_route "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/handover.py"
click node_parser "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/parser.py"
click node_extractor "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/extractor.py"
click node_schemas "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/schemas.py"
click node_verifier "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/verifier.py"
click node_gap_checks "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/gaps.py"
click node_models "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/models.py"
click node_database "https://github.com/sonawaneganes/continuityos/blob/main/backend/app/database.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_web,node_api_client,node_gap_panel,node_source_viewer,node_label_badge,node_timeline,node_export,node_app_entry toneBlue
class node_api_app,node_project_upload,node_claims_route,node_gaps_route,node_handover_route toneAmber
class node_parser,node_extractor,node_schemas,node_verifier toneMint
class node_gap_checks,node_models,node_database toneRose
class node_team toneIndigo
```

## Components

### Handover workspace

- [Workspace UI](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [API client](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/api.js): `frontend/src/api.js`
- [Gap panel](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/GapPanel.jsx): `frontend/src/components/GapPanel.jsx`
- [Source viewer](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/SourceViewer.jsx): `frontend/src/components/SourceViewer.jsx`
- [Evidence badge](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/LabelBadge.jsx): `frontend/src/components/LabelBadge.jsx`
- [Claim timeline](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/Timeline.jsx): `frontend/src/components/Timeline.jsx`
- [Export control](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/components/ExportButton.jsx): `frontend/src/components/ExportButton.jsx`
- [Web entry](https://github.com/sonawaneganes/continuityos/blob/main/frontend/src/main.jsx): `frontend/src/main.jsx`

### API and workflow

- [FastAPI application](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/main.py): `backend/app/main.py`
- [Project and upload routes](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/upload.py): `backend/app/routes/upload.py`
- [Claim routes](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/claims.py): `backend/app/routes/claims.py`
- [Gap route](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/gaps.py): `backend/app/routes/gaps.py`
- [Approval route](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/routes/handover.py): `backend/app/routes/handover.py`

### Evidence ingestion

- [Document parser](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/parser.py): `backend/app/services/parser.py`
- [Claim extractor](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/extractor.py): `backend/app/services/extractor.py`
- [Claim schemas](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/schemas.py): `backend/app/services/schemas.py`
- [Quote verifier](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/verifier.py): `backend/app/services/verifier.py`

### Claims and readiness

- [Readiness checks](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/services/gaps.py): `backend/app/services/gaps.py`
- [Project data models](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/models.py): `backend/app/models.py`
- [PostgreSQL store](https://github.com/sonawaneganes/continuityos/blob/main/backend/app/database.py): `backend/app/database.py`

### Other components

- **Project team**

## Connections

- Project team → Workspace UI: reviews handover (evidence: `README.md`)
- Web entry → Workspace UI: renders (evidence: `frontend/src/main.jsx`)
- Workspace UI → API client: requests data
- Gap panel → API client: loads gaps (evidence: `frontend/src/components/GapPanel.jsx`)
- Source viewer → API client: loads sources (evidence: `frontend/src/components/SourceViewer.jsx`)
- Gap panel → Evidence badge: displays labels (evidence: `frontend/src/components/GapPanel.jsx`)
- Source viewer → Evidence badge: displays labels (evidence: `frontend/src/components/SourceViewer.jsx`)
- API client → Project and upload routes: uploads documents (evidence: `frontend/src/api.js`)
- API client → Claim routes: requests claims (evidence: `frontend/src/api.js`)
- API client → Gap route: requests gaps (evidence: `frontend/src/api.js`)
- API client → Approval route: requests approval (evidence: `frontend/src/api.js`)
- FastAPI application → Project and upload routes: registers routes (evidence: `backend/app/main.py`)
- FastAPI application → Claim routes: registers routes (evidence: `backend/app/main.py`)
- FastAPI application → Gap route: registers routes (evidence: `backend/app/main.py`)
- FastAPI application → Approval route: registers routes (evidence: `backend/app/main.py`)
- Project and upload routes → Document parser: parses upload (evidence: `backend/app/routes/upload.py`)
- Project and upload routes → Claim extractor: extracts claims (evidence: `backend/app/routes/upload.py`)
- Project and upload routes → Quote verifier: verifies quotes (evidence: `backend/app/routes/upload.py`)
- Claim extractor → Claim schemas: validates claims (evidence: `backend/app/services/extractor.py`)
- Project and upload routes → Project data models: saves documents and claims (evidence: `backend/app/routes/upload.py`)
- Claim routes → Project data models: reads claims and sources (evidence: `backend/app/routes/claims.py`)
- Gap route → Project data models: loads and labels claims (evidence: `backend/app/routes/gaps.py`)
- Gap route → Readiness checks: runs checks (evidence: `backend/app/routes/gaps.py`)
- Project data models → PostgreSQL store: uses base (evidence: `backend/app/models.py`)
- FastAPI application → PostgreSQL store: creates tables (evidence: `backend/app/main.py`)
- Approval route → Readiness checks: uses readiness checks (evidence: `backend/app/routes/handover.py`)
