# subhadeepadhikary-codes/jago-pwa architecture

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

- Interactive diagram: https://gitdiagram.com/subhadeepadhikary-codes/jago-pwa
- Repository: https://github.com/subhadeepadhikary-codes/jago-pwa

## Overview

JAGO is a scholarship-services PWA for tribal students, with a separate officer console. Its main user journey runs from onboarding and sign-in through scholarship discovery, eligibility and application, then document management and status tracking; officers have queue, exception-review and coverage-analysis views. The sampled files establish routing, shared app/auth state, consent-record retrieval, exception-review and analytics calls, and the API service’s storage/OTA dependencies. Other feature relationships are shown only where the route structure or sampled imports support them; unsampled page internals are not inferred.

Main entry points: [`src/App.jsx`](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/App.jsx) (Application router), [`src/context/AppContext.jsx`](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/context/AppContext.jsx) (Shared app state), [`src/services/apiService.js`](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/apiService.js) (Unified API service), [`src/services/db.js`](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/db.js) (Database service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["App and access"]
  node_app["Application router<br/>[App.jsx]"]
  node_auth["Authentication state<br/>[AuthContext.jsx]"]
  node_appstate["Shared app state<br/>[AppContext.jsx]"]
end

subgraph group_student["Student scholarship journey"]
  node_onboard["Onboarding<br/>[Onboarding.jsx]"]
  node_login["Student login<br/>[Login.jsx]"]
  node_dashboard["Student dashboard<br/>[Dashboard.jsx]"]
  node_explorer["Scholarship discovery"]
  node_find["Find scholarships"]
  node_eligibility["Eligibility check"]
  node_apply["Scholarship application"]
  node_detail["Scholarship details"]
  node_tracker["Application tracking"]
  node_wallet["Document wallet<br/>[DocumentWallet.jsx]"]
  node_consent["Consent management<br/>[ConsentManager.jsx]"]
  node_family["Family hub<br/>[FamilyHub.jsx]"]
  node_chatbot["JAGO assistant<br/>[JagoChatbot.jsx]"]
end

subgraph group_officer["Officer console"]
  node_officerlogin["Officer login<br/>[OfficerLogin.jsx]"]
  node_officerdash["Officer dashboard"]
  node_queue["Officer queue<br/>[OfficerQueue.jsx]"]
  node_exception["Exception review"]
  node_coverage["Coverage radar"]
end

subgraph group_services["Application services"]
  node_api["Unified API service<br/>[apiService.js]"]
  node_rules["Eligibility rules<br/>[rulesEngine.js]"]
  node_exception_service["Exception queue service"]
  node_analytics["Ministry analytics"]
  node_ota["OTA cloud service<br/>[otaCloudService.js]"]
  node_language["Language service<br/>[languageService.js]"]
end

subgraph group_state["Data and persistence"]
  node_dbservice["Database service<br/>[db.js]"]
  node_localdb[("Local data store<br/>[db.js]")]
  node_backend["REST persistence server<br/>[index.js]"]
end

node_student(("Student"))
node_officer_actor(("Officer"))

node_student -->|"uses"| node_app
node_officer_actor -->|"uses"| node_app
node_app -->|"provides auth"| node_auth
node_app -->|"provides app state"| node_appstate
node_app -->|"routes to"| node_onboard
node_app -->|"routes to"| node_login
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_explorer
node_app -->|"routes to"| node_find
node_app -->|"routes to"| node_eligibility
node_app -->|"routes to"| node_apply
node_app -->|"routes to"| node_detail
node_app -->|"routes to"| node_tracker
node_app -->|"routes to"| node_wallet
node_app -->|"routes to"| node_consent
node_app -->|"routes to"| node_family
node_app -->|"routes to"| node_officerlogin
node_app -->|"routes to"| node_officerdash
node_app -->|"routes to"| node_queue
node_appstate -->|"calls"| node_api
node_appstate -->|"calls"| node_dbservice
node_appstate -->|"calls"| node_ota
node_appstate -->|"calls"| node_language
node_consent -->|"gets consent records"| node_api
node_api -->|"uses"| node_dbservice
node_api -->|"publishes broadcasts"| node_ota
node_dbservice -->|"reads and writes"| node_localdb
node_exception -->|"calls"| node_exception_service
node_coverage -->|"gets radar data"| node_analytics
node_officerlogin -->|"checks officer access"| node_auth
node_officerdash -->|"uses shared state"| node_appstate
node_queue -->|"uses shared state"| node_appstate
node_chatbot -->|"assists"| node_student

click node_app "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/App.jsx"
click node_auth "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/context/AuthContext.jsx"
click node_appstate "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/context/AppContext.jsx"
click node_onboard "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/Onboarding.jsx"
click node_login "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/Login.jsx"
click node_dashboard "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/Dashboard.jsx"
click node_explorer "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ScholarshipExplorer.jsx"
click node_find "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/FindScholarship.jsx"
click node_eligibility "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/EligibilityChecker.jsx"
click node_apply "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ApplyScholarship.jsx"
click node_detail "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ScholarshipDetail.jsx"
click node_tracker "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ApplicationTracker.jsx"
click node_wallet "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/DocumentWallet.jsx"
click node_consent "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ConsentManager.jsx"
click node_family "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/FamilyHub.jsx"
click node_chatbot "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/components/chatbot/JagoChatbot.jsx"
click node_officerlogin "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerLogin.jsx"
click node_officerdash "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerDashboard.jsx"
click node_queue "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerQueue.jsx"
click node_exception "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerExceptionReview.jsx"
click node_coverage "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerCoverageRadar.jsx"
click node_api "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/apiService.js"
click node_rules "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/rulesEngine.js"
click node_exception_service "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/exceptionQueueService.js"
click node_analytics "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/ministryAnalyticsService.js"
click node_ota "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/otaCloudService.js"
click node_language "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/languageService.js"
click node_dbservice "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/db.js"
click node_localdb "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/db.js"
click node_backend "https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/server/index.js"

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,node_auth,node_appstate toneBlue
class node_onboard,node_login,node_dashboard,node_explorer,node_find,node_eligibility,node_apply,node_detail,node_tracker,node_wallet,node_consent,node_family,node_chatbot toneAmber
class node_officerlogin,node_officerdash,node_queue,node_exception,node_coverage toneMint
class node_api,node_rules,node_exception_service,node_analytics,node_ota,node_language toneRose
class node_dbservice,node_localdb,node_backend,node_student,node_officer_actor toneIndigo
```

## Components

### App and access

- [Application router](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/App.jsx): `src/App.jsx`
- [Authentication state](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/context/AuthContext.jsx): `src/context/AuthContext.jsx`
- [Shared app state](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/context/AppContext.jsx): `src/context/AppContext.jsx`

### Student scholarship journey

- [Onboarding](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/Onboarding.jsx): `src/pages/Onboarding.jsx`
- [Student login](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/Login.jsx): `src/pages/Login.jsx`
- [Student dashboard](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/Dashboard.jsx): `src/pages/Dashboard.jsx`
- [Scholarship discovery](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ScholarshipExplorer.jsx): `src/pages/ScholarshipExplorer.jsx`
- [Find scholarships](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/FindScholarship.jsx): `src/pages/FindScholarship.jsx`
- [Eligibility check](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/EligibilityChecker.jsx): `src/pages/EligibilityChecker.jsx`
- [Scholarship application](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ApplyScholarship.jsx): `src/pages/ApplyScholarship.jsx`
- [Scholarship details](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ScholarshipDetail.jsx): `src/pages/ScholarshipDetail.jsx`
- [Application tracking](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ApplicationTracker.jsx): `src/pages/ApplicationTracker.jsx`
- [Document wallet](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/DocumentWallet.jsx): `src/pages/DocumentWallet.jsx`
- [Consent management](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/ConsentManager.jsx): `src/pages/ConsentManager.jsx`
- [Family hub](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/FamilyHub.jsx): `src/pages/FamilyHub.jsx`
- [JAGO assistant](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/components/chatbot/JagoChatbot.jsx): `src/components/chatbot/JagoChatbot.jsx`

### Officer console

- [Officer login](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerLogin.jsx): `src/pages/officer/OfficerLogin.jsx`
- [Officer dashboard](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerDashboard.jsx): `src/pages/officer/OfficerDashboard.jsx`
- [Officer queue](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerQueue.jsx): `src/pages/officer/OfficerQueue.jsx`
- [Exception review](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerExceptionReview.jsx): `src/pages/officer/OfficerExceptionReview.jsx`
- [Coverage radar](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/pages/officer/OfficerCoverageRadar.jsx): `src/pages/officer/OfficerCoverageRadar.jsx`

### Application services

- [Unified API service](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/apiService.js): `src/services/apiService.js`
- [Eligibility rules](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/rulesEngine.js): `src/services/rulesEngine.js`
- [Exception queue service](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/exceptionQueueService.js): `src/services/exceptionQueueService.js`
- [Ministry analytics](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/ministryAnalyticsService.js): `src/services/ministryAnalyticsService.js`
- [OTA cloud service](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/otaCloudService.js): `src/services/otaCloudService.js`
- [Language service](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/languageService.js): `src/services/languageService.js`

### Data and persistence

- [Database service](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/db.js): `src/services/db.js`
- [Local data store](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/src/services/db.js): `src/services/db.js`
- [REST persistence server](https://github.com/subhadeepadhikary-codes/jago-pwa/blob/main/server/index.js): `server/index.js`

### Other components

- **Student**
- **Officer**

## Connections

- Student → Application router: uses
- Officer → Application router: uses
- Application router → Authentication state: provides auth
- Application router → Shared app state: provides app state
- Application router → Onboarding: routes to
- Application router → Student login: routes to
- Application router → Student dashboard: routes to
- Application router → Scholarship discovery: routes to
- Application router → Find scholarships: routes to
- Application router → Eligibility check: routes to
- Application router → Scholarship application: routes to
- Application router → Scholarship details: routes to
- Application router → Application tracking: routes to
- Application router → Document wallet: routes to
- Application router → Consent management: routes to
- Application router → Family hub: routes to
- Application router → Officer login: routes to
- Application router → Officer dashboard: routes to
- Application router → Officer queue: routes to
- Shared app state → Unified API service: calls
- Shared app state → Database service: calls
- Shared app state → OTA cloud service: calls
- Shared app state → Language service: calls
- Consent management → Unified API service: gets consent records
- Unified API service → Database service: uses
- Unified API service → OTA cloud service: publishes broadcasts
- Database service → Local data store: reads and writes
- Exception review → Exception queue service: calls
- Coverage radar → Ministry analytics: gets radar data
- Officer login → Authentication state: checks officer access
- Officer dashboard → Shared app state: uses shared state
- Officer queue → Shared app state: uses shared state
- JAGO assistant → Student: assists
