# khushiidalal/janmitra architecture

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

- Interactive diagram: https://gitdiagram.com/khushiidalal/janmitra
- Repository: https://github.com/khushiidalal/janmitra

## Overview

JanMitra is a law-enforcement case and evidence management portal. Personnel register and authenticate, create and track cases, attach documents for OCR-assisted review, and inspect audit and security activity. The graph follows documented UI/API and API/data boundaries, with sampled route evidence for key flows. Several feature routes and OCR internals were not sampled, so their detailed call relationships are omitted; README-documented capabilities are retained at subsystem level.

Main entry points: [`src/app/api/auth`](https://github.com/khushiidalal/janmitra/tree/main/src/app/api/auth) (Authentication API), [`src/app/api/cases`](https://github.com/khushiidalal/janmitra/tree/main/src/app/api/cases) (Case endpoints), [`src/app/api/documents`](https://github.com/khushiidalal/janmitra/tree/main/src/app/api/documents) (Document endpoints), [`src/lib/db.ts`](https://github.com/khushiidalal/janmitra/blob/main/src/lib/db.ts) (DB connector)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Officer portal"]
  node_portal_ui["Portal pages"]
  node_registration_ui["Registration flow"]
  node_login_ui["Login and 2FA"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_security_card["Security alerts"]
end

subgraph group_identity["Identity and access"]
  node_auth_api["Authentication API"]
  node_auth_service["Auth and RBAC<br/>[auth.ts]"]
  node_user_model["User and sessions<br/>[User.ts]"]
  node_otp_api["OTP verification"]
  node_mailer["Email delivery<br/>[mailer.ts]"]
end

subgraph group_casework["Case and evidence"]
  node_case_ui["Case workflow"]
  node_case_api["Case endpoints"]
  node_case_ids["Case identifiers<br/>[caseId.ts]"]
  node_case_model["Case records<br/>[Case.ts]"]
  node_document_ui["Document vault<br/>[page.tsx]"]
  node_document_api["Document endpoints"]
  node_ocr_api["OCR endpoints<br/>[route.ts]"]
  node_ocr_service["OCR processing<br/>[ocr.ts]"]
  node_document_model["Document records<br/>[Document.ts]"]
  node_storage["File storage and hashes<br/>[storage.ts]"]
  node_draft_api["Draft autosave<br/>[route.ts]"]
  node_draft_model["Draft records<br/>[Draft.ts]"]
end

subgraph group_oversight["Audit and monitoring"]
  node_audit_ui["Audit trail<br/>[page.tsx]"]
  node_audit_api["Audit endpoints<br/>[route.ts]"]
  node_security_service["Security events<br/>[security.ts]"]
  node_audit_model["Audit records<br/>[Audit.ts]"]
end

subgraph group_platform["Data and services"]
  node_api_client["API client<br/>[api.ts]"]
  node_database[("MongoDB")]
  node_db_connector["DB connector<br/>[db.ts]"]
end

node_personnel(("Personnel"))
node_otp_provider{{"Email and SMS providers"}}
node_ocr_engines{{"OCR engines"}}

node_personnel -->|"uses"| node_portal_ui
node_personnel -->|"registers through"| node_registration_ui
node_personnel -->|"signs in through"| node_login_ui
node_portal_ui -->|"requests data"| node_api_client
node_registration_ui -->|"submits registration"| node_auth_api
node_login_ui -->|"submits credentials"| node_auth_api
node_security_card -->|"polls alerts"| node_api_client
node_auth_api -->|"uses auth helpers"| node_auth_service
node_auth_api -->|"reads and updates"| node_user_model
node_auth_api -->|"records login events"| node_security_service
node_auth_api -->|"sends verification"| node_mailer
node_otp_api -->|"sends email OTP"| node_mailer
node_otp_api -.->|"delivers OTP"| node_otp_provider
node_case_ui -->|"manages cases"| node_case_api
node_case_api -->|"authenticates user"| node_auth_service
node_case_api -->|"generates identifiers"| node_case_ids
node_case_api -->|"queries and creates"| node_case_model
node_document_ui -->|"uploads and retrieves"| node_document_api
node_document_api -->|"stores uploaded files"| node_storage
node_document_api -->|"creates document records"| node_document_model
node_document_api -->|"finds parent case"| node_case_model
node_ocr_api -.->|"processes documents"| node_ocr_service
node_ocr_api -.->|"extracts text"| node_ocr_engines
node_audit_ui -->|"filters audit records"| node_audit_api
node_audit_api -->|"authenticates user"| node_auth_service
node_audit_api -->|"queries records"| node_audit_model
node_security_service -->|"writes security events"| node_audit_model
node_draft_api -->|"reads and writes drafts"| node_draft_model
node_auth_api -->|"connects database"| node_db_connector
node_case_api -->|"connects database"| node_db_connector
node_document_api -->|"connects database"| node_db_connector
node_audit_api -->|"connects database"| node_db_connector
node_db_connector -->|"connects to"| node_database

click node_portal_ui "https://github.com/khushiidalal/janmitra/tree/main/src/app/(dashboard)"
click node_registration_ui "https://github.com/khushiidalal/janmitra/tree/main/src/app/register"
click node_login_ui "https://github.com/khushiidalal/janmitra/tree/main/src/app/2fa-login"
click node_dashboard "https://github.com/khushiidalal/janmitra/blob/main/src/app/(dashboard)/dashboard/page.tsx"
click node_security_card "https://github.com/khushiidalal/janmitra/blob/main/src/components/dashboard/SecurityAlertsCard.tsx"
click node_api_client "https://github.com/khushiidalal/janmitra/blob/main/src/lib/api.ts"
click node_auth_api "https://github.com/khushiidalal/janmitra/tree/main/src/app/api/auth"
click node_auth_service "https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/auth.ts"
click node_user_model "https://github.com/khushiidalal/janmitra/blob/main/src/models/User.ts"
click node_otp_api "https://github.com/khushiidalal/janmitra/tree/main/src/app/api/otp"
click node_case_ui "https://github.com/khushiidalal/janmitra/tree/main/src/app/(dashboard)/cases"
click node_case_api "https://github.com/khushiidalal/janmitra/tree/main/src/app/api/cases"
click node_case_ids "https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/caseId.ts"
click node_case_model "https://github.com/khushiidalal/janmitra/blob/main/src/models/Case.ts"
click node_document_ui "https://github.com/khushiidalal/janmitra/blob/main/src/app/(dashboard)/documents/page.tsx"
click node_document_api "https://github.com/khushiidalal/janmitra/tree/main/src/app/api/documents"
click node_ocr_api "https://github.com/khushiidalal/janmitra/blob/main/src/app/api/documents/%5Bid%5D/ocr/route.ts"
click node_ocr_service "https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/ocr.ts"
click node_document_model "https://github.com/khushiidalal/janmitra/blob/main/src/models/Document.ts"
click node_storage "https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/storage.ts"
click node_audit_ui "https://github.com/khushiidalal/janmitra/blob/main/src/app/(dashboard)/audit-trail/page.tsx"
click node_audit_api "https://github.com/khushiidalal/janmitra/blob/main/src/app/api/audit/route.ts"
click node_security_service "https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/security.ts"
click node_audit_model "https://github.com/khushiidalal/janmitra/blob/main/src/models/Audit.ts"
click node_draft_api "https://github.com/khushiidalal/janmitra/blob/main/src/app/api/draft/route.ts"
click node_draft_model "https://github.com/khushiidalal/janmitra/blob/main/src/models/Draft.ts"
click node_db_connector "https://github.com/khushiidalal/janmitra/blob/main/src/lib/db.ts"
click node_mailer "https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/mailer.ts"

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_portal_ui,node_registration_ui,node_login_ui,node_dashboard,node_security_card toneBlue
class node_auth_api,node_auth_service,node_user_model,node_otp_api,node_mailer toneAmber
class node_case_ui,node_case_api,node_case_ids,node_case_model,node_document_ui,node_document_api,node_ocr_api,node_ocr_service,node_document_model,node_storage,node_draft_api,node_draft_model toneMint
class node_audit_ui,node_audit_api,node_security_service,node_audit_model toneRose
class node_api_client,node_database,node_db_connector,node_personnel,node_otp_provider,node_ocr_engines toneIndigo
```

## Components

### Officer portal

- [Portal pages](https://github.com/khushiidalal/janmitra/tree/main/src/app/(dashboard)): `src/app/(dashboard)`
- [Registration flow](https://github.com/khushiidalal/janmitra/tree/main/src/app/register): `src/app/register`
- [Login and 2FA](https://github.com/khushiidalal/janmitra/tree/main/src/app/2fa-login): `src/app/2fa-login`
- [Dashboard](https://github.com/khushiidalal/janmitra/blob/main/src/app/(dashboard)/dashboard/page.tsx): `src/app/(dashboard)/dashboard/page.tsx`
- [Security alerts](https://github.com/khushiidalal/janmitra/blob/main/src/components/dashboard/SecurityAlertsCard.tsx): `src/components/dashboard/SecurityAlertsCard.tsx`

### Identity and access

- [Authentication API](https://github.com/khushiidalal/janmitra/tree/main/src/app/api/auth): `src/app/api/auth`
- [Auth and RBAC](https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/auth.ts): `src/lib/server/auth.ts`
- [User and sessions](https://github.com/khushiidalal/janmitra/blob/main/src/models/User.ts): `src/models/User.ts`
- [OTP verification](https://github.com/khushiidalal/janmitra/tree/main/src/app/api/otp): `src/app/api/otp`
- [Email delivery](https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/mailer.ts): `src/lib/server/mailer.ts`

### Case and evidence

- [Case workflow](https://github.com/khushiidalal/janmitra/tree/main/src/app/(dashboard)/cases): `src/app/(dashboard)/cases`
- [Case endpoints](https://github.com/khushiidalal/janmitra/tree/main/src/app/api/cases): `src/app/api/cases`
- [Case identifiers](https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/caseId.ts): `src/lib/server/caseId.ts`
- [Case records](https://github.com/khushiidalal/janmitra/blob/main/src/models/Case.ts): `src/models/Case.ts`
- [Document vault](https://github.com/khushiidalal/janmitra/blob/main/src/app/(dashboard)/documents/page.tsx): `src/app/(dashboard)/documents/page.tsx`
- [Document endpoints](https://github.com/khushiidalal/janmitra/tree/main/src/app/api/documents): `src/app/api/documents`
- [OCR endpoints](https://github.com/khushiidalal/janmitra/blob/main/src/app/api/documents/%5Bid%5D/ocr/route.ts): `src/app/api/documents/[id]/ocr/route.ts`
- [OCR processing](https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/ocr.ts): `src/lib/server/ocr.ts`
- [Document records](https://github.com/khushiidalal/janmitra/blob/main/src/models/Document.ts): `src/models/Document.ts`
- [File storage and hashes](https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/storage.ts): `src/lib/server/storage.ts`
- [Draft autosave](https://github.com/khushiidalal/janmitra/blob/main/src/app/api/draft/route.ts): `src/app/api/draft/route.ts`
- [Draft records](https://github.com/khushiidalal/janmitra/blob/main/src/models/Draft.ts): `src/models/Draft.ts`

### Audit and monitoring

- [Audit trail](https://github.com/khushiidalal/janmitra/blob/main/src/app/(dashboard)/audit-trail/page.tsx): `src/app/(dashboard)/audit-trail/page.tsx`
- [Audit endpoints](https://github.com/khushiidalal/janmitra/blob/main/src/app/api/audit/route.ts): `src/app/api/audit/route.ts`
- [Security events](https://github.com/khushiidalal/janmitra/blob/main/src/lib/server/security.ts): `src/lib/server/security.ts`
- [Audit records](https://github.com/khushiidalal/janmitra/blob/main/src/models/Audit.ts): `src/models/Audit.ts`

### Data and services

- [API client](https://github.com/khushiidalal/janmitra/blob/main/src/lib/api.ts): `src/lib/api.ts`
- **MongoDB**
- [DB connector](https://github.com/khushiidalal/janmitra/blob/main/src/lib/db.ts): `src/lib/db.ts`

### Other components

- **Personnel**
- **Email and SMS providers**
- **OCR engines**

## Connections

- Personnel → Portal pages: uses
- Personnel → Registration flow: registers through
- Personnel → Login and 2FA: signs in through
- Portal pages → API client: requests data
- Registration flow → Authentication API: submits registration
- Login and 2FA → Authentication API: submits credentials
- Security alerts → API client: polls alerts (evidence: `src/components/dashboard/SecurityAlertsCard.tsx`)
- Authentication API → Auth and RBAC: uses auth helpers (evidence: `src/app/api/auth/login/route.ts`)
- Authentication API → User and sessions: reads and updates (evidence: `src/app/api/auth/login/route.ts`)
- Authentication API → Security events: records login events (evidence: `src/app/api/auth/login/route.ts`)
- Authentication API → Email delivery: sends verification (evidence: `src/app/api/auth/login/route.ts`)
- OTP verification → Email delivery: sends email OTP (evidence: `src/app/api/otp/send/route.ts`)
- OTP verification → Email and SMS providers: delivers OTP
- Case workflow → Case endpoints: manages cases
- Case endpoints → Auth and RBAC: authenticates user (evidence: `src/app/api/cases/route.ts`)
- Case endpoints → Case identifiers: generates identifiers (evidence: `src/app/api/cases/route.ts`)
- Case endpoints → Case records: queries and creates (evidence: `src/app/api/cases/route.ts`)
- Document vault → Document endpoints: uploads and retrieves
- Document endpoints → File storage and hashes: stores uploaded files (evidence: `src/app/api/documents/route.ts`)
- Document endpoints → Document records: creates document records (evidence: `src/app/api/documents/route.ts`)
- Document endpoints → Case records: finds parent case (evidence: `src/app/api/documents/route.ts`)
- OCR endpoints → OCR processing: processes documents
- OCR endpoints → OCR engines: extracts text
- Audit trail → Audit endpoints: filters audit records
- Audit endpoints → Auth and RBAC: authenticates user (evidence: `src/app/api/audit/route.ts`)
- Audit endpoints → Audit records: queries records (evidence: `src/app/api/audit/route.ts`)
- Security events → Audit records: writes security events (evidence: `src/lib/server/security.ts`)
- Draft autosave → Draft records: reads and writes drafts (evidence: `src/app/api/draft/route.ts`)
- Authentication API → DB connector: connects database (evidence: `src/app/api/auth/login/route.ts`)
- Case endpoints → DB connector: connects database (evidence: `src/app/api/cases/route.ts`)
- Document endpoints → DB connector: connects database (evidence: `src/app/api/documents/route.ts`)
- Audit endpoints → DB connector: connects database (evidence: `src/app/api/audit/route.ts`)
- DB connector → MongoDB: connects to (evidence: `src/lib/db.ts`)
