# prajakta8083/driftguard-transaction-ml-monitoring architecture

> Architecture diagram of the GitHub repository prajakta8083/driftguard-transaction-ml-monitoring, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/prajakta8083/driftguard-transaction-ml-monitoring
- Repository: https://github.com/prajakta8083/driftguard-transaction-ml-monitoring

## Overview

DriftGuard is a fraud-scoring API and analyst dashboard. Analysts submit transactions for scoring, inspect stored history and explanations, review flagged cases, and submit confirmed outcomes; those labels feed performance monitoring, while recent features feed drift checks and inform manual retraining decisions. The graph includes the API orchestration, persisted state, model/feature layers, and documented dashboard capabilities. Edges reflect shown imports/calls or README statements; links for unsampled frontend pages and some backend internals are limited to explicit documentation or indexed references.

Main entry points: [`frontend/src/api.js`](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/api.js) (API client), [`frontend/src/App.jsx`](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/App.jsx) (Dashboard routes), [`backend/app/main.py`](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/main.py) (API application), [`backend/app/routers/transactions.py`](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/transactions.py) (Transaction scoring)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dashboard["Analyst dashboard"]
  node_appui["Dashboard routes<br/>[App.jsx]"]
  node_liveui["Live scoring<br/>[LiveScoring.jsx]"]
  node_historyui["Prediction history"]
  node_reviewui["Review queue<br/>[ReviewQueue.jsx]"]
  node_healthui["Model health<br/>[ModelHealth.jsx]"]
  node_driftui["Drift dashboard<br/>[DriftDashboard.jsx]"]
  node_explainui["Explainability<br/>[Explainability.jsx]"]
  node_reportui["Model report<br/>[ModelReport.jsx]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_api["Scoring API"]
  node_api_entry["API application<br/>[main.py]"]
  node_transaction_api["Transaction scoring<br/>[transactions.py]"]
  node_prediction_api["Prediction history<br/>[predictions.py]"]
  node_feedback_api["Feedback intake<br/>[feedback.py]"]
  node_schemas["API schemas<br/>[schemas.py]"]
end

subgraph group_monitoring["Monitoring and review"]
  node_monitor_api["Monitoring endpoints<br/>[monitoring.py]"]
  node_scheduler["Monitoring scheduler<br/>[scheduler.py]"]
end

subgraph group_ml["Model lifecycle"]
  node_model_api["Model endpoints<br/>[model.py]"]
  node_feature_contract["Feature contract"]
  node_model_loader["Model bundle<br/>[model_loader.py]"]
  node_drift_calc["PSI drift analysis<br/>[drift.py]"]
  node_retrain["Retraining pipeline<br/>[retrain.py]"]
end

subgraph group_state["Persistent state"]
  node_orm["Domain records<br/>[models.py]"]
  node_database[("Application database<br/>[database.py]")]
end

node_analyst(("Analyst"))
node_training_data["Training data"]
node_fraud_model["Fraud model"]

node_analyst -->|"uses dashboard"| node_appui
node_appui -->|"routes to"| node_liveui
node_appui -->|"routes to"| node_historyui
node_appui -->|"routes to"| node_reviewui
node_appui -->|"routes to"| node_healthui
node_appui -->|"routes to"| node_driftui
node_appui -->|"routes to"| node_explainui
node_appui -->|"routes to"| node_reportui
node_liveui -->|"requests"| node_api_client
node_historyui -->|"requests"| node_api_client
node_reviewui -->|"requests"| node_api_client
node_healthui -->|"requests"| node_api_client
node_driftui -->|"requests"| node_api_client
node_explainui -->|"requests"| node_api_client
node_reportui -->|"requests"| node_api_client
node_api_client -->|"submits score"| node_transaction_api
node_api_client -->|"fetches history"| node_prediction_api
node_api_client -->|"posts feedback"| node_feedback_api
node_api_client -->|"fetches monitoring"| node_monitor_api
node_api_client -->|"fetches model data"| node_model_api
node_api_entry -->|"mounts router"| node_transaction_api
node_api_entry -->|"mounts router"| node_prediction_api
node_api_entry -->|"mounts router"| node_feedback_api
node_api_entry -->|"mounts router"| node_monitor_api
node_api_entry -->|"mounts router"| node_model_api
node_api_entry -->|"loads bundle"| node_model_loader
node_api_entry -->|"starts scheduler"| node_scheduler
node_transaction_api -->|"validates inputs"| node_schemas
node_transaction_api -->|"builds features"| node_feature_contract
node_transaction_api -->|"scores with"| node_model_loader
node_transaction_api -->|"persists results"| node_database
node_prediction_api -->|"reads records"| node_database
node_feedback_api -->|"stores labels"| node_database
node_monitor_api -->|"reads and writes"| node_database
node_monitor_api -->|"computes drift"| node_drift_calc
node_monitor_api -->|"uses feature order"| node_feature_contract
node_model_api -->|"reads and updates"| node_database
node_model_api -->|"checks signals"| node_monitor_api
node_model_api -->|"triggers training"| node_retrain
node_model_api -->|"serves model data"| node_model_loader
node_scheduler -->|"stores snapshots"| node_database
node_scheduler -->|"checks drift"| node_drift_calc
node_scheduler -->|"uses feature order"| node_feature_contract
node_database -->|"maps records"| node_orm
node_retrain -.->|"trains from"| node_training_data
node_retrain -.->|"produces version"| node_fraud_model
node_transaction_api -.->|"returns score"| node_fraud_model

click node_appui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/App.jsx"
click node_liveui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/LiveScoring.jsx"
click node_historyui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/PredictionHistory.jsx"
click node_reviewui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/ReviewQueue.jsx"
click node_healthui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/ModelHealth.jsx"
click node_driftui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/DriftDashboard.jsx"
click node_explainui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/Explainability.jsx"
click node_reportui "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/ModelReport.jsx"
click node_api_client "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/api.js"
click node_api_entry "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/main.py"
click node_transaction_api "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/transactions.py"
click node_prediction_api "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/predictions.py"
click node_feedback_api "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/feedback.py"
click node_monitor_api "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/monitoring.py"
click node_model_api "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/model.py"
click node_scheduler "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/scheduler.py"
click node_feature_contract "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/feature_contract.py"
click node_model_loader "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/model_loader.py"
click node_drift_calc "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/drift.py"
click node_retrain "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/retrain.py"
click node_schemas "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/schemas.py"
click node_orm "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/models.py"
click node_database "https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/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_appui,node_liveui,node_historyui,node_reviewui,node_healthui,node_driftui,node_explainui,node_reportui,node_api_client toneBlue
class node_api_entry,node_transaction_api,node_prediction_api,node_feedback_api,node_schemas toneAmber
class node_monitor_api,node_scheduler toneMint
class node_model_api,node_feature_contract,node_model_loader,node_drift_calc,node_retrain toneRose
class node_orm,node_database,node_analyst,node_training_data,node_fraud_model toneIndigo
```

## Components

### Analyst dashboard

- [Dashboard routes](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Live scoring](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/LiveScoring.jsx): `frontend/src/pages/LiveScoring.jsx`
- [Prediction history](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/PredictionHistory.jsx): `frontend/src/pages/PredictionHistory.jsx`
- [Review queue](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/ReviewQueue.jsx): `frontend/src/pages/ReviewQueue.jsx`
- [Model health](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/ModelHealth.jsx): `frontend/src/pages/ModelHealth.jsx`
- [Drift dashboard](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/DriftDashboard.jsx): `frontend/src/pages/DriftDashboard.jsx`
- [Explainability](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/Explainability.jsx): `frontend/src/pages/Explainability.jsx`
- [Model report](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/pages/ModelReport.jsx): `frontend/src/pages/ModelReport.jsx`
- [API client](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/frontend/src/api.js): `frontend/src/api.js`

### Scoring API

- [API application](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/main.py): `backend/app/main.py`
- [Transaction scoring](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/transactions.py): `backend/app/routers/transactions.py`
- [Prediction history](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/predictions.py): `backend/app/routers/predictions.py`
- [Feedback intake](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/feedback.py): `backend/app/routers/feedback.py`
- [API schemas](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/schemas.py): `backend/app/schemas.py`

### Monitoring and review

- [Monitoring endpoints](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/monitoring.py): `backend/app/routers/monitoring.py`
- [Monitoring scheduler](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/scheduler.py): `backend/app/scheduler.py`

### Model lifecycle

- [Model endpoints](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/routers/model.py): `backend/app/routers/model.py`
- [Feature contract](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/feature_contract.py): `backend/app/ml/feature_contract.py`
- [Model bundle](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/model_loader.py): `backend/app/ml/model_loader.py`
- [PSI drift analysis](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/drift.py): `backend/app/ml/drift.py`
- [Retraining pipeline](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/ml/retrain.py): `backend/app/ml/retrain.py`

### Persistent state

- [Domain records](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/models.py): `backend/app/models.py`
- [Application database](https://github.com/prajakta8083/driftguard-transaction-ml-monitoring/blob/main/backend/app/database.py): `backend/app/database.py`

### Other components

- **Analyst**
- **Training data**
- **Fraud model**

## Connections

- Analyst → Dashboard routes: uses dashboard (evidence: `frontend/src/App.jsx`)
- Dashboard routes → Live scoring: routes to (evidence: `frontend/src/App.jsx`)
- Dashboard routes → Prediction history: routes to (evidence: `frontend/src/App.jsx`)
- Dashboard routes → Review queue: routes to (evidence: `frontend/src/App.jsx`)
- Dashboard routes → Model health: routes to (evidence: `frontend/src/App.jsx`)
- Dashboard routes → Drift dashboard: routes to (evidence: `frontend/src/App.jsx`)
- Dashboard routes → Explainability: routes to (evidence: `frontend/src/App.jsx`)
- Dashboard routes → Model report: routes to (evidence: `frontend/src/App.jsx`)
- Live scoring → API client: requests (evidence: `frontend/src/pages/LiveScoring.jsx`)
- Prediction history → API client: requests (evidence: `frontend/src/pages/PredictionHistory.jsx`)
- Review queue → API client: requests (evidence: `frontend/src/pages/ReviewQueue.jsx`)
- Model health → API client: requests (evidence: `frontend/src/pages/ModelHealth.jsx`)
- Drift dashboard → API client: requests (evidence: `frontend/src/pages/DriftDashboard.jsx`)
- Explainability → API client: requests (evidence: `frontend/src/pages/Explainability.jsx`)
- Model report → API client: requests (evidence: `frontend/src/pages/ModelReport.jsx`)
- API client → Transaction scoring: submits score (evidence: `frontend/src/api.js`)
- API client → Prediction history: fetches history (evidence: `frontend/src/api.js`)
- API client → Feedback intake: posts feedback (evidence: `frontend/src/api.js`)
- API client → Monitoring endpoints: fetches monitoring (evidence: `frontend/src/api.js`)
- API client → Model endpoints: fetches model data (evidence: `frontend/src/api.js`)
- API application → Transaction scoring: mounts router (evidence: `backend/app/main.py`)
- API application → Prediction history: mounts router (evidence: `backend/app/main.py`)
- API application → Feedback intake: mounts router (evidence: `backend/app/main.py`)
- API application → Monitoring endpoints: mounts router (evidence: `backend/app/main.py`)
- API application → Model endpoints: mounts router (evidence: `backend/app/main.py`)
- API application → Model bundle: loads bundle (evidence: `backend/app/main.py`)
- API application → Monitoring scheduler: starts scheduler (evidence: `backend/app/main.py`)
- Transaction scoring → API schemas: validates inputs (evidence: `backend/app/routers/transactions.py`)
- Transaction scoring → Feature contract: builds features (evidence: `backend/app/routers/transactions.py`)
- Transaction scoring → Model bundle: scores with (evidence: `backend/app/routers/transactions.py`)
- Transaction scoring → Application database: persists results (evidence: `backend/app/routers/transactions.py`)
- Prediction history → Application database: reads records (evidence: `backend/app/routers/predictions.py`)
- Feedback intake → Application database: stores labels (evidence: `backend/app/routers/feedback.py`)
- Monitoring endpoints → Application database: reads and writes (evidence: `backend/app/routers/monitoring.py`)
- Monitoring endpoints → PSI drift analysis: computes drift (evidence: `backend/app/routers/monitoring.py`)
- Monitoring endpoints → Feature contract: uses feature order (evidence: `backend/app/routers/monitoring.py`)
- Model endpoints → Application database: reads and updates (evidence: `backend/app/routers/model.py`)
- Model endpoints → Monitoring endpoints: checks signals (evidence: `backend/app/routers/model.py`)
- Model endpoints → Retraining pipeline: triggers training (evidence: `backend/app/routers/model.py`)
- Model endpoints → Model bundle: serves model data (evidence: `backend/app/routers/model.py`)
- Monitoring scheduler → Application database: stores snapshots (evidence: `backend/app/scheduler.py`)
- Monitoring scheduler → PSI drift analysis: checks drift (evidence: `backend/app/scheduler.py`)
- Monitoring scheduler → Feature contract: uses feature order (evidence: `backend/app/scheduler.py`)
- Application database → Domain records: maps records (evidence: `backend/app/models.py`)
- Retraining pipeline → Training data: trains from (evidence: `backend/app/ml/retrain.py`)
- Retraining pipeline → Fraud model: produces version (evidence: `backend/app/ml/retrain.py`)
- Transaction scoring → Fraud model: returns score (evidence: `backend/app/routers/transactions.py`)
