# koolanu1412-lab/feedsense-final architecture

> Architecture diagram of the GitHub repository koolanu1412-lab/feedsense-final, 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/koolanu1412-lab/feedsense-final
- Repository: https://github.com/koolanu1412-lab/feedsense-final

## Overview

FeedSense is a prototype feed/silage quality assessment system with a Flask backend and an Android client. Its main workflow accepts sample data and an image, screens the image, estimates nutrition and risks, and stores a result that can be retrieved or exported. The backend excerpt is partial, so endpoint wiring is shown only where the sampled code or module imports support it; Android UI behavior and several integrations are not inferred.

Main entry points: [`backend_app.py`](https://github.com/koolanu1412-lab/feedsense-final/blob/main/backend_app.py) (Flask API), [`services/analysis.py`](https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/analysis.py) (Sample analysis), [`database.py`](https://github.com/koolanu1412-lab/feedsense-final/blob/main/database.py) (SQLite records), [`android/app/src/main/java/com/example/feedsense/MainActivity.kt`](https://github.com/koolanu1412-lab/feedsense-final/blob/main/android/app/src/main/java/com/example/feedsense/MainActivity.kt) (Android app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client"]
  node_android["Android app<br/>[MainActivity.kt]"]
  node_android_api["API client<br/>[FeedSenseApi.kt]"]
end

subgraph group_api["Backend API"]
  node_backend["Flask API<br/>[backend_app.py]"]
end

subgraph group_assessment["Sample Assessment"]
  node_analysis["Sample analysis<br/>[analysis.py]"]
  node_vision["Image screening<br/>[vision.py]"]
  node_nir["Demo spectrum<br/>[nir.py]"]
  node_nutrition["Nutrition prediction<br/>[predict.py]"]
  node_storage_risk["Storage risk<br/>[storage.py]"]
end

subgraph group_records["Records and Exports"]
  node_db[("SQLite records<br/>[database.py]")]
  node_pdf["PDF report<br/>[pdf_report.py]"]
  node_qr["QR passport<br/>[qr.py]"]
  node_sensor_store[("Sensor records<br/>[database.py]")]
end

node_farmer(("Farmer"))
node_sensor_device(("Sensor source"))

node_farmer -->|"submits sample"| node_android
node_android -->|"uses API client"| node_android_api
node_android_api -.->|"requests"| node_backend
node_farmer -->|"submits sample"| node_backend
node_backend -->|"analyzes sample"| node_analysis
node_analysis -->|"screens image"| node_vision
node_analysis -->|"gets spectrum"| node_nir
node_analysis -->|"predicts nutrition"| node_nutrition
node_analysis -->|"calculates risk"| node_storage_risk
node_backend -->|"saves and reads samples"| node_db
node_backend -->|"saves and reads sensors"| node_sensor_store
node_sensor_device -->|"sends readings"| node_backend
node_backend -->|"calculates status"| node_storage_risk
node_backend -->|"creates report"| node_pdf
node_backend -->|"creates QR passport"| node_qr
node_db -->|"provides sample data"| node_pdf
node_db -->|"provides sample data"| node_qr

click node_android "https://github.com/koolanu1412-lab/feedsense-final/blob/main/android/app/src/main/java/com/example/feedsense/MainActivity.kt"
click node_android_api "https://github.com/koolanu1412-lab/feedsense-final/blob/main/android/app/src/main/java/com/example/feedsense/ui/network/FeedSenseApi.kt"
click node_backend "https://github.com/koolanu1412-lab/feedsense-final/blob/main/backend_app.py"
click node_analysis "https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/analysis.py"
click node_vision "https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/vision.py"
click node_nir "https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/nir.py"
click node_nutrition "https://github.com/koolanu1412-lab/feedsense-final/blob/main/ml/predict.py"
click node_storage_risk "https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/storage.py"
click node_db "https://github.com/koolanu1412-lab/feedsense-final/blob/main/database.py"
click node_pdf "https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/pdf_report.py"
click node_qr "https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/qr.py"
click node_sensor_store "https://github.com/koolanu1412-lab/feedsense-final/blob/main/database.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_android,node_android_api toneBlue
class node_backend toneAmber
class node_analysis,node_vision,node_nir,node_nutrition,node_storage_risk toneMint
class node_db,node_pdf,node_qr,node_sensor_store toneRose
class node_farmer,node_sensor_device toneIndigo
```

## Components

### Client

- [Android app](https://github.com/koolanu1412-lab/feedsense-final/blob/main/android/app/src/main/java/com/example/feedsense/MainActivity.kt): `android/app/src/main/java/com/example/feedsense/MainActivity.kt`
- [API client](https://github.com/koolanu1412-lab/feedsense-final/blob/main/android/app/src/main/java/com/example/feedsense/ui/network/FeedSenseApi.kt): `android/app/src/main/java/com/example/feedsense/ui/network/FeedSenseApi.kt`

### Backend API

- [Flask API](https://github.com/koolanu1412-lab/feedsense-final/blob/main/backend_app.py): `backend_app.py`

### Sample Assessment

- [Sample analysis](https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/analysis.py): `services/analysis.py`
- [Image screening](https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/vision.py): `services/vision.py`
- [Demo spectrum](https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/nir.py): `services/nir.py`
- [Nutrition prediction](https://github.com/koolanu1412-lab/feedsense-final/blob/main/ml/predict.py): `ml/predict.py`
- [Storage risk](https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/storage.py): `services/storage.py`

### Records and Exports

- [SQLite records](https://github.com/koolanu1412-lab/feedsense-final/blob/main/database.py): `database.py`
- [PDF report](https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/pdf_report.py): `services/pdf_report.py`
- [QR passport](https://github.com/koolanu1412-lab/feedsense-final/blob/main/services/qr.py): `services/qr.py`
- [Sensor records](https://github.com/koolanu1412-lab/feedsense-final/blob/main/database.py): `database.py`

### Other components

- **Farmer**
- **Sensor source**

## Connections

- Farmer → Android app: submits sample
- Android app → API client: uses API client
- API client → Flask API: requests
- Farmer → Flask API: submits sample
- Flask API → Sample analysis: analyzes sample
- Sample analysis → Image screening: screens image
- Sample analysis → Demo spectrum: gets spectrum
- Sample analysis → Nutrition prediction: predicts nutrition
- Sample analysis → Storage risk: calculates risk
- Flask API → SQLite records: saves and reads samples
- Flask API → Sensor records: saves and reads sensors
- Sensor source → Flask API: sends readings
- Flask API → Storage risk: calculates status
- Flask API → PDF report: creates report
- Flask API → QR passport: creates QR passport
- SQLite records → PDF report: provides sample data
- SQLite records → QR passport: provides sample data
