# akblaster967-afk/drishtiai architecture

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

- Interactive diagram: https://gitdiagram.com/akblaster967-afk/drishtiai
- Repository: https://github.com/akblaster967-afk/drishtiai

## Overview

DrishtiAI is a full-stack identity-document screening prototype. Users authenticate, submit documents for OCR and analysis, and review evidence and risk outcomes; optional workflows include face comparison and document storage. The FastAPI application coordinates analysis and persistence, while a separate AI-screening route exposes image-forensics screening. The README documents the principal capabilities, but several connections among unsampled services and frontend screens are not visible in the excerpts, so those links are omitted rather than inferred.

Main entry points: [`backend/app/main.py`](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/main.py) (FastAPI application), [`src/App.jsx`](https://github.com/akblaster967-afk/drishtiai/blob/main/src/App.jsx) (App routing), [`backend/app/services/ai_fake_screener.py`](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ai_fake_screener.py) (AI content screening), [`backend/app/services/ocr.py`](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ocr.py) (OCR processing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["User interface"]
  node_app_routes["App routing<br/>[App.jsx]"]
  node_login["Authentication<br/>[Login.jsx]"]
  node_workspace["Screening workspace"]
  node_results["Analysis results<br/>[AnalysisResult.jsx]"]
  node_portal["User portal<br/>[UserPortal.jsx]"]
  node_audit["Audit logs<br/>[AuditLogs.jsx]"]
end

subgraph group_api["API and persistence"]
  node_api["FastAPI application<br/>[main.py]"]
  node_ai_routes["AI screening routes"]
  node_db[("SQLite persistence<br/>[database.py]")]
end

subgraph group_extraction["Document extraction"]
  node_ocr["OCR processing<br/>[ocr.py]"]
  node_pdf["PDF image handling<br/>[pdf_images.py]"]
  node_fields["Field extraction<br/>[field_extractor.py]"]
  node_universal["Universal extraction"]
  node_specific["Document extraction"]
  node_aadhaar["Aadhaar extraction"]
end

subgraph group_analysis["Screening analysis"]
  node_consistency["Consistency checks"]
  node_cross_consistency["Cross-document checks"]
  node_verification["Document verification"]
  node_risk["Risk assessment<br/>[risk_engine.py]"]
  node_quality["Quality analysis"]
  node_indicators["Suspicious indicators"]
end

subgraph group_optional["Optional screening"]
  node_face["Face comparison<br/>[face_matcher.py]"]
  node_fake["AI content screening"]
  node_provenance["C2PA credentials<br/>[c2pa_checker.py]"]
  node_deep_learning["Image detector"]
  node_ela["ELA forensics<br/>[forensics_ela.py]"]
  node_exif["EXIF analysis<br/>[exif_checker.py]"]
  node_ocr_forensics["OCR forensics<br/>[ocr_forensics.py]"]
end

node_user(("User"))

node_user -->|"uses"| node_app_routes
node_app_routes -->|"routes to"| node_login
node_app_routes -->|"routes to"| node_workspace
node_app_routes -->|"routes to"| node_results
node_app_routes -->|"routes to"| node_portal
node_app_routes -->|"routes to"| node_audit
node_workspace -.->|"submits screening"| node_api
node_api -->|"uses persistence"| node_db
node_api -->|"invokes"| node_ocr
node_api -->|"invokes"| node_fields
node_api -->|"invokes"| node_consistency
node_api -->|"invokes"| node_verification
node_api -->|"invokes"| node_quality
node_api -->|"invokes"| node_indicators
node_api -->|"invokes"| node_risk
node_api -->|"invokes"| node_face
node_api -->|"registers"| node_ai_routes
node_api -->|"invokes"| node_cross_consistency
node_api -->|"invokes"| node_specific
node_ocr -->|"uses"| node_pdf
node_ocr -->|"uses"| node_fields
node_ocr -->|"uses"| node_universal
node_ocr -->|"uses"| node_aadhaar
node_specific -->|"uses"| node_pdf
node_specific -->|"uses"| node_fields
node_specific -->|"uses"| node_aadhaar
node_specific -->|"uses"| node_ocr
node_ai_routes -->|"calls"| node_fake
node_fake -->|"uses"| node_provenance
node_fake -->|"uses"| node_deep_learning
node_fake -->|"uses"| node_ela
node_fake -->|"uses"| node_exif
node_fake -->|"uses"| node_ocr_forensics
node_results -->|"links back"| node_workspace

click node_app_routes "https://github.com/akblaster967-afk/drishtiai/blob/main/src/App.jsx"
click node_login "https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/Login.jsx"
click node_workspace "https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/ForensicDeepDive.jsx"
click node_results "https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/AnalysisResult.jsx"
click node_portal "https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/UserPortal.jsx"
click node_audit "https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/AuditLogs.jsx"
click node_api "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/main.py"
click node_ai_routes "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/ai_screening_routes.py"
click node_db "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/database.py"
click node_ocr "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ocr.py"
click node_pdf "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/pdf_images.py"
click node_fields "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/field_extractor.py"
click node_universal "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/universal_field_extractor.py"
click node_specific "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/document_specific_extractor.py"
click node_aadhaar "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/aadhaar_extractor.py"
click node_consistency "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/document_consistency.py"
click node_cross_consistency "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/cross_document_consistency.py"
click node_verification "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/document_verification_engine.py"
click node_risk "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/risk_engine.py"
click node_quality "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/quality_analyzer.py"
click node_indicators "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/indicator_analyzer.py"
click node_face "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/face_matcher.py"
click node_fake "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ai_fake_screener.py"
click node_provenance "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/c2pa_checker.py"
click node_deep_learning "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/deep_learning_detector.py"
click node_ela "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/forensics_ela.py"
click node_exif "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/exif_checker.py"
click node_ocr_forensics "https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ocr_forensics.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_app_routes,node_login,node_workspace,node_results,node_portal,node_audit,node_user toneBlue
class node_api,node_ai_routes,node_db toneAmber
class node_ocr,node_pdf,node_fields,node_universal,node_specific,node_aadhaar toneMint
class node_consistency,node_cross_consistency,node_verification,node_risk,node_quality,node_indicators toneRose
class node_face,node_fake,node_provenance,node_deep_learning,node_ela,node_exif,node_ocr_forensics toneIndigo
```

## Components

### User interface

- [App routing](https://github.com/akblaster967-afk/drishtiai/blob/main/src/App.jsx): `src/App.jsx`
- [Authentication](https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/Login.jsx): `src/Pages/Login.jsx`
- [Screening workspace](https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/ForensicDeepDive.jsx): `src/Pages/ForensicDeepDive.jsx`
- [Analysis results](https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/AnalysisResult.jsx): `src/Pages/AnalysisResult.jsx`
- [User portal](https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/UserPortal.jsx): `src/Pages/UserPortal.jsx`
- [Audit logs](https://github.com/akblaster967-afk/drishtiai/blob/main/src/Pages/AuditLogs.jsx): `src/Pages/AuditLogs.jsx`

### API and persistence

- [FastAPI application](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/main.py): `backend/app/main.py`
- [AI screening routes](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/ai_screening_routes.py): `backend/app/ai_screening_routes.py`
- [SQLite persistence](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/database.py): `backend/app/database.py`

### Document extraction

- [OCR processing](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ocr.py): `backend/app/services/ocr.py`
- [PDF image handling](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/pdf_images.py): `backend/app/services/pdf_images.py`
- [Field extraction](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/field_extractor.py): `backend/app/services/field_extractor.py`
- [Universal extraction](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/universal_field_extractor.py): `backend/app/services/universal_field_extractor.py`
- [Document extraction](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/document_specific_extractor.py): `backend/app/services/document_specific_extractor.py`
- [Aadhaar extraction](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/aadhaar_extractor.py): `backend/app/services/aadhaar_extractor.py`

### Screening analysis

- [Consistency checks](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/document_consistency.py): `backend/app/services/document_consistency.py`
- [Cross-document checks](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/cross_document_consistency.py): `backend/app/services/cross_document_consistency.py`
- [Document verification](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/document_verification_engine.py): `backend/app/services/document_verification_engine.py`
- [Risk assessment](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/risk_engine.py): `backend/app/services/risk_engine.py`
- [Quality analysis](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/quality_analyzer.py): `backend/app/services/quality_analyzer.py`
- [Suspicious indicators](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/indicator_analyzer.py): `backend/app/services/indicator_analyzer.py`

### Optional screening

- [Face comparison](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/face_matcher.py): `backend/app/services/face_matcher.py`
- [AI content screening](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ai_fake_screener.py): `backend/app/services/ai_fake_screener.py`
- [C2PA credentials](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/c2pa_checker.py): `backend/app/services/c2pa_checker.py`
- [Image detector](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/deep_learning_detector.py): `backend/app/services/deep_learning_detector.py`
- [ELA forensics](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/forensics_ela.py): `backend/app/services/forensics_ela.py`
- [EXIF analysis](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/exif_checker.py): `backend/app/services/exif_checker.py`
- [OCR forensics](https://github.com/akblaster967-afk/drishtiai/blob/main/backend/app/services/ocr_forensics.py): `backend/app/services/ocr_forensics.py`

### Other components

- **User**

## Connections

- User → App routing: uses (evidence: `src/App.jsx`)
- App routing → Authentication: routes to (evidence: `src/App.jsx`)
- App routing → Screening workspace: routes to (evidence: `src/App.jsx`)
- App routing → Analysis results: routes to (evidence: `src/App.jsx`)
- App routing → User portal: routes to (evidence: `src/App.jsx`)
- App routing → Audit logs: routes to (evidence: `src/App.jsx`)
- Screening workspace → FastAPI application: submits screening
- FastAPI application → SQLite persistence: uses persistence (evidence: `backend/app/main.py`)
- FastAPI application → OCR processing: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Field extraction: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Consistency checks: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Document verification: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Quality analysis: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Suspicious indicators: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Risk assessment: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Face comparison: invokes (evidence: `backend/app/main.py`)
- FastAPI application → AI screening routes: registers (evidence: `backend/app/main.py`)
- FastAPI application → Cross-document checks: invokes (evidence: `backend/app/main.py`)
- FastAPI application → Document extraction: invokes (evidence: `backend/app/main.py`)
- OCR processing → PDF image handling: uses (evidence: `backend/app/services/ocr.py`)
- OCR processing → Field extraction: uses (evidence: `backend/app/services/ocr.py`)
- OCR processing → Universal extraction: uses (evidence: `backend/app/services/ocr.py`)
- OCR processing → Aadhaar extraction: uses (evidence: `backend/app/services/ocr.py`)
- Document extraction → PDF image handling: uses (evidence: `backend/app/services/document_specific_extractor.py`)
- Document extraction → Field extraction: uses (evidence: `backend/app/services/document_specific_extractor.py`)
- Document extraction → Aadhaar extraction: uses (evidence: `backend/app/services/document_specific_extractor.py`)
- Document extraction → OCR processing: uses (evidence: `backend/app/services/document_specific_extractor.py`)
- AI screening routes → AI content screening: calls (evidence: `backend/app/ai_screening_routes.py`)
- AI content screening → C2PA credentials: uses (evidence: `backend/app/services/ai_fake_screener.py`)
- AI content screening → Image detector: uses (evidence: `backend/app/services/ai_fake_screener.py`)
- AI content screening → ELA forensics: uses (evidence: `backend/app/services/ai_fake_screener.py`)
- AI content screening → EXIF analysis: uses (evidence: `backend/app/services/ai_fake_screener.py`)
- AI content screening → OCR forensics: uses (evidence: `backend/app/services/ai_fake_screener.py`)
- Analysis results → Screening workspace: links back (evidence: `src/Pages/AnalysisResult.jsx`)
