# fantomstranger/innovasia architecture

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

- Interactive diagram: https://gitdiagram.com/fantomstranger/innovasia
- Repository: https://github.com/fantomstranger/innovasia

## Overview

Bol Kisan is a multilingual agricultural advice and extension-operations platform: farmers use the Android client for voice, crop-disease, and offline knowledge workflows; uncertain or escalated cases reach human officers through the dashboard. Backend APIs combine retrieval and AI with deterministic pesticide safety, while weather, market, and officer-directory services extend the advice. The graph includes the documented capabilities, but several endpoint and UI implementations were not sampled, so some subsystem links rely on the README rather than inspected calls.

Main entry points: [`backend/app/api/v1/router.py`](https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/router.py) (API route dispatch), [`apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`](https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt) (App repository), [`backend/app/ai/rag_service.py`](https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/rag_service.py) (Knowledge retrieval), [`backend/app/main.py`](https://github.com/fantomstranger/innovasia/blob/main/backend/app/main.py) (Backend API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_farmer["Farmer Android"]
  node_mobile_nav["Mobile navigation<br/>[MainActivity.kt]"]
  node_farmer_screens["Farmer screens"]
  node_repository["App repository"]
  node_local_knowledge[("Offline knowledge")]
  node_offline_inference["Offline inference"]
  node_offline_models["Offline model manager"]
  node_sync_worker["Ticket sync<br/>[SyncWorker.kt]"]
end

subgraph group_backend["API and Advice"]
  node_backend_api["Backend API<br/>[main.py]"]
  node_api_routes["API route dispatch<br/>[router.py]"]
  node_advice_endpoints["Advice and voice<br/>[voice.py]"]
  node_disease_endpoint["Disease diagnosis<br/>[disease.py]"]
  node_ticket_endpoints["Tickets and officers<br/>[tickets.py]"]
  node_ai_generation["AI generation<br/>[gemini_service.py]"]
  node_retrieval["Knowledge retrieval<br/>[rag_service.py]"]
  node_query_understanding["Query understanding"]
  node_vision["Crop vision engine"]
  node_safety["Pesticide safety"]
end

subgraph group_data["Knowledge and Integrations"]
  node_db[("Platform database<br/>[models.py]")]
  node_knowledge_base[("Verified knowledge base")]
  node_integrations["Weather, mandi, officers"]
end

subgraph group_officer["Officer Operations"]
  node_officer_ui["Officer dashboard<br/>[App.tsx]"]
  node_ticket_detail["Case inspection<br/>[TicketDetail.tsx]"]
  node_prescription["CIBRC prescription builder"]
end

node_farmer(("Farmer"))
node_external_services{{"External data services"}}
node_officer(("Extension officer"))

node_farmer -->|"uses"| node_mobile_nav
node_mobile_nav -->|"navigates to"| node_farmer_screens
node_farmer_screens -.->|"requests data"| node_repository
node_repository -->|"reads and seeds"| node_local_knowledge
node_repository -->|"runs offline advice"| node_offline_inference
node_offline_models -->|"initializes"| node_offline_inference
node_repository -.->|"calls API"| node_backend_api
node_sync_worker -.->|"uploads pending tickets"| node_backend_api
node_backend_api -->|"mounts routes"| node_api_routes
node_api_routes -->|"dispatches voice"| node_advice_endpoints
node_api_routes -->|"dispatches diagnosis"| node_disease_endpoint
node_api_routes -->|"dispatches tickets"| node_ticket_endpoints
node_advice_endpoints -.->|"generates advice"| node_ai_generation
node_advice_endpoints -.->|"retrieves evidence"| node_retrieval
node_retrieval -->|"uses query analysis"| node_query_understanding
node_retrieval -.->|"grounds responses"| node_knowledge_base
node_disease_endpoint -.->|"analyzes crop image"| node_vision
node_vision -->|"retrieves disease evidence"| node_retrieval
node_vision -->|"checks chemical advice"| node_safety
node_ticket_endpoints -.->|"persists cases"| node_db
node_api_routes -.->|"routes weather and market"| node_integrations
node_integrations -.->|"fetches feeds"| node_external_services
node_officer -->|"triages cases"| node_officer_ui
node_officer_ui -.->|"opens case dossier"| node_ticket_detail
node_ticket_detail -.->|"builds prescription"| node_prescription
node_officer_ui -.->|"loads case operations"| node_backend_api

click node_mobile_nav "https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/MainActivity.kt"
click node_farmer_screens "https://github.com/fantomstranger/innovasia/tree/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/presentation"
click node_repository "https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt"
click node_local_knowledge "https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/KnowledgePrepopulator.kt"
click node_offline_inference "https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt"
click node_offline_models "https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineModelManager.kt"
click node_sync_worker "https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt"
click node_backend_api "https://github.com/fantomstranger/innovasia/blob/main/backend/app/main.py"
click node_api_routes "https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/router.py"
click node_advice_endpoints "https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/endpoints/voice.py"
click node_disease_endpoint "https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/endpoints/disease.py"
click node_ticket_endpoints "https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/endpoints/tickets.py"
click node_ai_generation "https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/gemini_service.py"
click node_retrieval "https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/rag_service.py"
click node_query_understanding "https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/query_understanding.py"
click node_vision "https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/crop_vision_engine.py"
click node_safety "https://github.com/fantomstranger/innovasia/blob/main/backend/app/safety/pesticide_validator.py"
click node_db "https://github.com/fantomstranger/innovasia/blob/main/backend/app/database/models.py"
click node_knowledge_base "https://github.com/fantomstranger/innovasia/tree/main/knowledge-base"
click node_integrations "https://github.com/fantomstranger/innovasia/tree/main/backend/app/integrations"
click node_officer_ui "https://github.com/fantomstranger/innovasia/blob/main/apps/officer-dashboard/src/App.tsx"
click node_ticket_detail "https://github.com/fantomstranger/innovasia/blob/main/apps/officer-dashboard/src/pages/TicketDetail.tsx"
click node_prescription "https://github.com/fantomstranger/innovasia/blob/main/apps/officer-dashboard/src/components/CibrcPrescriptionBuilder.tsx"

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_mobile_nav,node_farmer_screens,node_repository,node_local_knowledge,node_offline_inference,node_offline_models,node_sync_worker toneBlue
class node_backend_api,node_api_routes,node_advice_endpoints,node_disease_endpoint,node_ticket_endpoints,node_ai_generation,node_retrieval,node_query_understanding,node_vision,node_safety toneAmber
class node_db,node_knowledge_base,node_integrations toneMint
class node_officer_ui,node_ticket_detail,node_prescription toneRose
class node_farmer,node_external_services,node_officer toneIndigo
```

## Components

### Farmer Android

- [Mobile navigation](https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/MainActivity.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/MainActivity.kt`
- [Farmer screens](https://github.com/fantomstranger/innovasia/tree/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/presentation): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/presentation`
- [App repository](https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`
- [Offline knowledge](https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/KnowledgePrepopulator.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/local/KnowledgePrepopulator.kt`
- [Offline inference](https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineInferenceEngine.kt`
- [Offline model manager](https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineModelManager.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineModelManager.kt`
- [Ticket sync](https://github.com/fantomstranger/innovasia/blob/main/apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt): `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/worker/SyncWorker.kt`

### API and Advice

- [Backend API](https://github.com/fantomstranger/innovasia/blob/main/backend/app/main.py): `backend/app/main.py`
- [API route dispatch](https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/router.py): `backend/app/api/v1/router.py`
- [Advice and voice](https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/endpoints/voice.py): `backend/app/api/v1/endpoints/voice.py`
- [Disease diagnosis](https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/endpoints/disease.py): `backend/app/api/v1/endpoints/disease.py`
- [Tickets and officers](https://github.com/fantomstranger/innovasia/blob/main/backend/app/api/v1/endpoints/tickets.py): `backend/app/api/v1/endpoints/tickets.py`
- [AI generation](https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/gemini_service.py): `backend/app/ai/gemini_service.py`
- [Knowledge retrieval](https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/rag_service.py): `backend/app/ai/rag_service.py`
- [Query understanding](https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/query_understanding.py): `backend/app/ai/query_understanding.py`
- [Crop vision engine](https://github.com/fantomstranger/innovasia/blob/main/backend/app/ai/crop_vision_engine.py): `backend/app/ai/crop_vision_engine.py`
- [Pesticide safety](https://github.com/fantomstranger/innovasia/blob/main/backend/app/safety/pesticide_validator.py): `backend/app/safety/pesticide_validator.py`

### Knowledge and Integrations

- [Platform database](https://github.com/fantomstranger/innovasia/blob/main/backend/app/database/models.py): `backend/app/database/models.py`
- [Verified knowledge base](https://github.com/fantomstranger/innovasia/tree/main/knowledge-base): `knowledge-base`
- [Weather, mandi, officers](https://github.com/fantomstranger/innovasia/tree/main/backend/app/integrations): `backend/app/integrations`

### Officer Operations

- [Officer dashboard](https://github.com/fantomstranger/innovasia/blob/main/apps/officer-dashboard/src/App.tsx): `apps/officer-dashboard/src/App.tsx`
- [Case inspection](https://github.com/fantomstranger/innovasia/blob/main/apps/officer-dashboard/src/pages/TicketDetail.tsx): `apps/officer-dashboard/src/pages/TicketDetail.tsx`
- [CIBRC prescription builder](https://github.com/fantomstranger/innovasia/blob/main/apps/officer-dashboard/src/components/CibrcPrescriptionBuilder.tsx): `apps/officer-dashboard/src/components/CibrcPrescriptionBuilder.tsx`

### Other components

- **Farmer**
- **External data services**
- **Extension officer**

## Connections

- Farmer → Mobile navigation: uses
- Mobile navigation → Farmer screens: navigates to (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/MainActivity.kt`)
- Farmer screens → App repository: requests data
- App repository → Offline knowledge: reads and seeds (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`)
- App repository → Offline inference: runs offline advice (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/data/repository/BolKisanRepository.kt`)
- Offline model manager → Offline inference: initializes (evidence: `apps/farmer-android/app/src/main/java/com/bolkisan/farmer/domain/OfflineModelManager.kt`)
- App repository → Backend API: calls API
- Ticket sync → Backend API: uploads pending tickets
- Backend API → API route dispatch: mounts routes (evidence: `backend/app/main.py`)
- API route dispatch → Advice and voice: dispatches voice (evidence: `backend/app/api/v1/router.py`)
- API route dispatch → Disease diagnosis: dispatches diagnosis (evidence: `backend/app/api/v1/router.py`)
- API route dispatch → Tickets and officers: dispatches tickets (evidence: `backend/app/api/v1/router.py`)
- Advice and voice → AI generation: generates advice
- Advice and voice → Knowledge retrieval: retrieves evidence
- Knowledge retrieval → Query understanding: uses query analysis (evidence: `backend/app/ai/rag_service.py`)
- Knowledge retrieval → Verified knowledge base: grounds responses
- Disease diagnosis → Crop vision engine: analyzes crop image
- Crop vision engine → Knowledge retrieval: retrieves disease evidence (evidence: `backend/app/ai/crop_vision_engine.py`)
- Crop vision engine → Pesticide safety: checks chemical advice (evidence: `backend/app/ai/crop_vision_engine.py`)
- Tickets and officers → Platform database: persists cases
- API route dispatch → Weather, mandi, officers: routes weather and market
- Weather, mandi, officers → External data services: fetches feeds
- Extension officer → Officer dashboard: triages cases
- Officer dashboard → Case inspection: opens case dossier
- Case inspection → CIBRC prescription builder: builds prescription
- Officer dashboard → Backend API: loads case operations
