# beshith17/ajrasakha_chatbot architecture

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

- Interactive diagram: https://gitdiagram.com/beshith17/ajrasakha_chatbot
- Repository: https://github.com/beshith17/ajrasakha_chatbot

## Overview

Ajrasakha is an agricultural-support app for farmers and experts. A farmer signs in, selects a local role, then asks a typed or recorded question or joins an expert session; the backend saves session messages, generates an AI answer or accepts an expert reply, and sends session updates. Speech transcription and playback are separate REST flows. The README also documents optional image diagnosis. Edges reflect README workflows and the supplied source/index references; diagnosis is represented as an implementation capability, not a confirmed mounted API.

Main entry points: [`backend/src/app.js`](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/app.js) (Express API), [`backend/src/controllers/chat.controller.js`](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/controllers/chat.controller.js) (Chat controller), [`frontend/src/api.js`](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/api.js) (REST client), [`backend/src/server.js`](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/server.js) (Server bootstrap)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser experience"]
  node_farmer_ui["Farmer dashboard"]
  node_expert_ui["Expert dashboard"]
  node_app_layout["App shell<br/>[AppLayout.jsx]"]
  node_api_client["REST client<br/>[api.js]"]
end

subgraph group_identity["Identity and profiles"]
  node_auth_ui["Auth context<br/>[AuthContext.jsx]"]
  node_auth_pages["Sign-in and roles<br/>[AuthPage.jsx]"]
  node_firebase["Firebase Auth<br/>[firebase.js]"]
  node_user_store[("User accounts<br/>[User.js]")]
end

subgraph group_sessions["Chat and sessions"]
  node_chat_controller["Chat controller<br/>[chat.controller.js]"]
  node_chat_sessions[("Chat sessions<br/>[ChatSession.js]")]
  node_review_queue[("Review queue<br/>[ReviewQueueItem.js]")]
  node_socket_service["Live updates<br/>[socket.service.js]"]
end

subgraph group_assistance["AI and diagnosis"]
  node_retrieval["Answer resolution"]
  node_llm["Agriculture answers<br/>[llm.service.js]"]
  node_knowledge["Seed knowledge<br/>[sampleKnowledge.js]"]
  node_knowledge_store[("Knowledge entries<br/>[KnowledgeEntry.js]")]
  node_diagnosis["Image diagnosis"]
  node_diagnosis_controller["Diagnosis controller"]
  node_diagnosis_reports[("Diagnosis reports<br/>[DiagnosisReport.js]")]
  node_speech_controller["Speech controller"]
  node_sarvam["Speech service<br/>[sarvam.service.js]"]
end

subgraph group_platform["Backend platform"]
  node_api_server["Express API<br/>[app.js]"]
  node_server["Server bootstrap<br/>[server.js]"]
end

node_farmer(("Farmer"))
node_expert(("Expert"))
node_mongo[("MongoDB")]
node_gemini["Gemini API"]
node_speech_provider["Sarvam API"]
node_openai["OpenAI API"]

node_farmer -->|"asks questions"| node_farmer_ui
node_expert -->|"manages sessions"| node_expert_ui
node_farmer_ui -->|"calls REST"| node_api_client
node_expert_ui -->|"calls REST"| node_api_client
node_farmer_ui -->|"receives socket updates"| node_app_layout
node_expert_ui -->|"receives socket updates"| node_app_layout
node_auth_pages -->|"uses auth state"| node_auth_ui
node_auth_ui -->|"password auth"| node_api_client
node_auth_ui -->|"Google sign-in"| node_firebase
node_api_client -->|"HTTP requests"| node_api_server
node_app_layout -->|"Socket.IO updates"| node_socket_service
node_api_server -->|"routes chat requests"| node_chat_controller
node_chat_controller -->|"reads and writes"| node_chat_sessions
node_chat_controller -->|"resolves answers"| node_retrieval
node_retrieval -->|"generates answer"| node_llm
node_retrieval -->|"creates pending item"| node_review_queue
node_chat_controller -->|"emits updates"| node_socket_service
node_server -->|"starts API"| node_api_server
node_server -->|"connects"| node_mongo
node_server -->|"seeds at startup"| node_knowledge
node_knowledge -->|"inserts entries"| node_knowledge_store
node_llm -->|"requests generation"| node_gemini
node_api_server -->|"routes speech requests"| node_speech_controller
node_speech_controller -->|"transcribes and synthesizes"| node_sarvam
node_sarvam -->|"calls speech API"| node_speech_provider
node_diagnosis_controller -->|"runs diagnosis"| node_diagnosis
node_diagnosis -.->|"stores reports"| node_diagnosis_reports
node_diagnosis -.->|"optional vision analysis"| node_openai
node_api_server -.->|"auth persistence"| node_user_store

click node_farmer_ui "https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/FarmerDashboardPage.jsx"
click node_expert_ui "https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/ExpertDashboardPage.jsx"
click node_app_layout "https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/AppLayout.jsx"
click node_api_client "https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/api.js"
click node_auth_ui "https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/auth/AuthContext.jsx"
click node_auth_pages "https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/AuthPage.jsx"
click node_firebase "https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/firebase.js"
click node_chat_controller "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/controllers/chat.controller.js"
click node_chat_sessions "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/ChatSession.js"
click node_review_queue "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/ReviewQueueItem.js"
click node_socket_service "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/socket.service.js"
click node_retrieval "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/retrieval.service.js"
click node_llm "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/llm.service.js"
click node_knowledge "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/data/sampleKnowledge.js"
click node_knowledge_store "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/KnowledgeEntry.js"
click node_diagnosis "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/diagnosis.service.js"
click node_diagnosis_controller "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/controllers/diagnosis.controller.js"
click node_diagnosis_reports "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/DiagnosisReport.js"
click node_speech_controller "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/controllers/speech.controller.js"
click node_sarvam "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/sarvam.service.js"
click node_api_server "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/app.js"
click node_server "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/server.js"
click node_user_store "https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/User.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_farmer_ui,node_expert_ui,node_app_layout,node_api_client toneBlue
class node_auth_ui,node_auth_pages,node_firebase,node_user_store,node_mongo toneAmber
class node_chat_controller,node_chat_sessions,node_review_queue,node_socket_service,node_gemini,node_speech_provider,node_openai toneMint
class node_retrieval,node_llm,node_knowledge,node_knowledge_store,node_diagnosis,node_diagnosis_controller,node_diagnosis_reports,node_speech_controller,node_sarvam toneRose
class node_api_server,node_server,node_farmer,node_expert toneIndigo
```

## Components

### Browser experience

- [Farmer dashboard](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/FarmerDashboardPage.jsx): `frontend/src/pages/FarmerDashboardPage.jsx`
- [Expert dashboard](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/ExpertDashboardPage.jsx): `frontend/src/pages/ExpertDashboardPage.jsx`
- [App shell](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/AppLayout.jsx): `frontend/src/pages/AppLayout.jsx`
- [REST client](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/api.js): `frontend/src/api.js`

### Identity and profiles

- [Auth context](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/auth/AuthContext.jsx): `frontend/src/auth/AuthContext.jsx`
- [Sign-in and roles](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/pages/AuthPage.jsx): `frontend/src/pages/AuthPage.jsx`
- [Firebase Auth](https://github.com/beshith17/ajrasakha_chatbot/blob/main/frontend/src/firebase.js): `frontend/src/firebase.js`
- [User accounts](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/User.js): `backend/src/models/User.js`

### Chat and sessions

- [Chat controller](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/controllers/chat.controller.js): `backend/src/controllers/chat.controller.js`
- [Chat sessions](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/ChatSession.js): `backend/src/models/ChatSession.js`
- [Review queue](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/ReviewQueueItem.js): `backend/src/models/ReviewQueueItem.js`
- [Live updates](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/socket.service.js): `backend/src/services/socket.service.js`

### AI and diagnosis

- [Answer resolution](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/retrieval.service.js): `backend/src/services/retrieval.service.js`
- [Agriculture answers](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/llm.service.js): `backend/src/services/llm.service.js`
- [Seed knowledge](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/data/sampleKnowledge.js): `backend/src/data/sampleKnowledge.js`
- [Knowledge entries](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/KnowledgeEntry.js): `backend/src/models/KnowledgeEntry.js`
- [Image diagnosis](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/diagnosis.service.js): `backend/src/services/diagnosis.service.js`
- [Diagnosis controller](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/controllers/diagnosis.controller.js): `backend/src/controllers/diagnosis.controller.js`
- [Diagnosis reports](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/models/DiagnosisReport.js): `backend/src/models/DiagnosisReport.js`
- [Speech controller](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/controllers/speech.controller.js): `backend/src/controllers/speech.controller.js`
- [Speech service](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/services/sarvam.service.js): `backend/src/services/sarvam.service.js`

### Backend platform

- [Express API](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/app.js): `backend/src/app.js`
- [Server bootstrap](https://github.com/beshith17/ajrasakha_chatbot/blob/main/backend/src/server.js): `backend/src/server.js`

### Other components

- **Farmer**
- **Expert**
- **MongoDB**
- **Gemini API**
- **Sarvam API**
- **OpenAI API**

## Connections

- Farmer → Farmer dashboard: asks questions
- Expert → Expert dashboard: manages sessions
- Farmer dashboard → REST client: calls REST (evidence: `frontend/src/pages/FarmerDashboardPage.jsx`)
- Expert dashboard → REST client: calls REST (evidence: `frontend/src/pages/ExpertDashboardPage.jsx`)
- Farmer dashboard → App shell: receives socket updates (evidence: `frontend/src/pages/FarmerDashboardPage.jsx`)
- Expert dashboard → App shell: receives socket updates (evidence: `frontend/src/pages/ExpertDashboardPage.jsx`)
- Sign-in and roles → Auth context: uses auth state (evidence: `frontend/src/App.jsx`)
- Auth context → REST client: password auth (evidence: `frontend/src/auth/AuthContext.jsx`)
- Auth context → Firebase Auth: Google sign-in (evidence: `frontend/src/auth/AuthContext.jsx`)
- REST client → Express API: HTTP requests
- App shell → Live updates: Socket.IO updates
- Express API → Chat controller: routes chat requests (evidence: `backend/src/app.js`)
- Chat controller → Chat sessions: reads and writes (evidence: `backend/src/controllers/chat.controller.js`)
- Chat controller → Answer resolution: resolves answers (evidence: `backend/src/controllers/chat.controller.js`)
- Answer resolution → Agriculture answers: generates answer (evidence: `backend/src/services/retrieval.service.js`)
- Answer resolution → Review queue: creates pending item (evidence: `backend/src/services/retrieval.service.js`)
- Chat controller → Live updates: emits updates (evidence: `backend/src/controllers/chat.controller.js`)
- Server bootstrap → Express API: starts API (evidence: `backend/src/server.js`)
- Server bootstrap → MongoDB: connects
- Server bootstrap → Seed knowledge: seeds at startup (evidence: `backend/src/server.js`)
- Seed knowledge → Knowledge entries: inserts entries (evidence: `backend/src/data/sampleKnowledge.js`)
- Agriculture answers → Gemini API: requests generation (evidence: `backend/src/services/llm.service.js`)
- Express API → Speech controller: routes speech requests (evidence: `backend/src/app.js`)
- Speech controller → Speech service: transcribes and synthesizes (evidence: `backend/src/controllers/speech.controller.js`)
- Speech service → Sarvam API: calls speech API (evidence: `backend/src/services/sarvam.service.js`)
- Diagnosis controller → Image diagnosis: runs diagnosis (evidence: `backend/src/controllers/diagnosis.controller.js`)
- Image diagnosis → Diagnosis reports: stores reports
- Image diagnosis → OpenAI API: optional vision analysis
- Express API → User accounts: auth persistence
