# mkparan/tilapiavision architecture

> Architecture diagram of the GitHub repository mkparan/tilapiavision, 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/mkparan/tilapiavision
- Repository: https://github.com/mkparan/tilapiavision

## Overview

TilapiaVision is an offline Flutter app for presumptive screening of hemorrhagic lesions in Nile tilapia. The principal workflow is capturing or selecting an image, running on-device YOLO11n inference, presenting a screening result, and retaining detections for review or export. The README also documents farm setup, biosecurity guidance, settings, localization, and image-retention behavior. Dart source was not provided, so relationships below are limited to README-documented behavior; uncertain internal wiring is omitted or marked dashed.

Main entry points: [`lib/presentation/app_shell.dart`](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/app_shell.dart) (App shell), [`lib/presentation/screens/history/detection_history_screen.dart`](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/history/detection_history_screen.dart) (Detection history), [`lib/data/repositories/detection_repository.dart`](https://github.com/mkparan/tilapiavision/blob/main/lib/data/repositories/detection_repository.dart) (Detection repository), [`lib/presentation/screens/result/result_screen.dart`](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/result/result_screen.dart) (Screening result)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and navigation"]
  node_entry["App entry<br/>[main.dart]"]
  node_shell["App shell<br/>[app_shell.dart]"]
  node_settings["Settings"]
  node_localization["Localization"]
  node_disclaimer["Disclaimer gate"]
end

subgraph group_screening["Screening workflow"]
  node_capture["Camera capture"]
  node_gallery["Gallery picker"]
  node_engine["TFLite inference"]
  node_verifier["Tilapia verifier"]
  node_detection["Detection state"]
  node_result["Screening result<br/>[result_screen.dart]"]
end

subgraph group_records["Records and storage"]
  node_history["Detection history"]
  node_detail["Detection detail"]
  node_repository["Detection repository"]
  node_csv[("CSV log<br/>[csv_store.dart]")]
  node_storage["Image storage"]
end

subgraph group_farm["Farm and guidance"]
  node_farmsetup["Farm profile setup"]
  node_farmprofile["Farm profile data"]
  node_biosecurity["Biosecurity tips"]
end

node_farmer(("Farmer"))

node_farmer -.->|"opens app"| node_entry
node_entry -.->|"starts"| node_shell
node_farmer -.->|"captures image"| node_capture
node_farmer -->|"selects image"| node_gallery
node_capture -.->|"submits image"| node_engine
node_engine -->|"returns inference"| node_result
node_farmer -.->|"views screening"| node_result
node_result -.->|"saves detection"| node_repository
node_repository -->|"logs records"| node_csv
node_repository -->|"caches images"| node_storage
node_farmer -.->|"reviews records"| node_history
node_history -->|"opens record"| node_detail
node_history -->|"exports CSV"| node_csv
node_detail -.->|"reads photo"| node_storage
node_farmer -.->|"sets up farm"| node_farmsetup
node_farmsetup -.->|"stores profile"| node_farmprofile
node_farmer -.->|"reads guidance"| node_biosecurity
node_farmer -.->|"configures app"| node_settings
node_shell -.->|"gates access"| node_disclaimer
node_shell -.->|"localizes UI"| node_localization

click node_entry "https://github.com/mkparan/tilapiavision/blob/main/lib/main.dart"
click node_shell "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/app_shell.dart"
click node_capture "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/capture/camera_capture_screen.dart"
click node_gallery "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/capture/camera_capture_screen.dart"
click node_engine "https://github.com/mkparan/tilapiavision/blob/main/lib/services/detection/tflite_detection_engine.dart"
click node_verifier "https://github.com/mkparan/tilapiavision/blob/main/lib/services/verification/tflite_tilapia_verifier.dart"
click node_detection "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/providers/detection_provider.dart"
click node_result "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/result/result_screen.dart"
click node_history "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/history/detection_history_screen.dart"
click node_detail "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/history/detection_detail_screen.dart"
click node_repository "https://github.com/mkparan/tilapiavision/blob/main/lib/data/repositories/detection_repository.dart"
click node_csv "https://github.com/mkparan/tilapiavision/blob/main/lib/data/local/csv_store.dart"
click node_storage "https://github.com/mkparan/tilapiavision/blob/main/lib/services/storage_service.dart"
click node_farmsetup "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/onboarding/farm_profile_setup_screen.dart"
click node_farmprofile "https://github.com/mkparan/tilapiavision/blob/main/lib/data/repositories/farm_profile_repository.dart"
click node_biosecurity "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/biosecurity/biosecurity_tips_screen.dart"
click node_settings "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/settings/settings_screen.dart"
click node_localization "https://github.com/mkparan/tilapiavision/blob/main/lib/core/app_localizations.dart"
click node_disclaimer "https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/onboarding/disclaimer_gate_screen.dart"

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_entry,node_shell,node_settings,node_localization,node_disclaimer toneBlue
class node_capture,node_gallery,node_engine,node_verifier,node_detection,node_result toneAmber
class node_history,node_detail,node_repository,node_csv,node_storage toneMint
class node_farmsetup,node_farmprofile,node_biosecurity toneRose
class node_farmer toneIndigo
```

## Components

### App and navigation

- [App entry](https://github.com/mkparan/tilapiavision/blob/main/lib/main.dart): `lib/main.dart`
- [App shell](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/app_shell.dart): `lib/presentation/app_shell.dart`
- [Settings](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/settings/settings_screen.dart): `lib/presentation/screens/settings/settings_screen.dart`
- [Localization](https://github.com/mkparan/tilapiavision/blob/main/lib/core/app_localizations.dart): `lib/core/app_localizations.dart`
- [Disclaimer gate](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/onboarding/disclaimer_gate_screen.dart): `lib/presentation/screens/onboarding/disclaimer_gate_screen.dart`

### Screening workflow

- [Camera capture](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/capture/camera_capture_screen.dart): `lib/presentation/screens/capture/camera_capture_screen.dart`
- [Gallery picker](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/capture/camera_capture_screen.dart): `lib/presentation/screens/capture/camera_capture_screen.dart`
- [TFLite inference](https://github.com/mkparan/tilapiavision/blob/main/lib/services/detection/tflite_detection_engine.dart): `lib/services/detection/tflite_detection_engine.dart`
- [Tilapia verifier](https://github.com/mkparan/tilapiavision/blob/main/lib/services/verification/tflite_tilapia_verifier.dart): `lib/services/verification/tflite_tilapia_verifier.dart`
- [Detection state](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/providers/detection_provider.dart): `lib/presentation/providers/detection_provider.dart`
- [Screening result](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/result/result_screen.dart): `lib/presentation/screens/result/result_screen.dart`

### Records and storage

- [Detection history](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/history/detection_history_screen.dart): `lib/presentation/screens/history/detection_history_screen.dart`
- [Detection detail](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/history/detection_detail_screen.dart): `lib/presentation/screens/history/detection_detail_screen.dart`
- [Detection repository](https://github.com/mkparan/tilapiavision/blob/main/lib/data/repositories/detection_repository.dart): `lib/data/repositories/detection_repository.dart`
- [CSV log](https://github.com/mkparan/tilapiavision/blob/main/lib/data/local/csv_store.dart): `lib/data/local/csv_store.dart`
- [Image storage](https://github.com/mkparan/tilapiavision/blob/main/lib/services/storage_service.dart): `lib/services/storage_service.dart`

### Farm and guidance

- [Farm profile setup](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/onboarding/farm_profile_setup_screen.dart): `lib/presentation/screens/onboarding/farm_profile_setup_screen.dart`
- [Farm profile data](https://github.com/mkparan/tilapiavision/blob/main/lib/data/repositories/farm_profile_repository.dart): `lib/data/repositories/farm_profile_repository.dart`
- [Biosecurity tips](https://github.com/mkparan/tilapiavision/blob/main/lib/presentation/screens/biosecurity/biosecurity_tips_screen.dart): `lib/presentation/screens/biosecurity/biosecurity_tips_screen.dart`

### Other components

- **Farmer**

## Connections

- Farmer → App entry: opens app
- App entry → App shell: starts
- Farmer → Camera capture: captures image
- Farmer → Gallery picker: selects image (evidence: `README.md`)
- Camera capture → TFLite inference: submits image
- TFLite inference → Screening result: returns inference (evidence: `README.md`)
- Farmer → Screening result: views screening
- Screening result → Detection repository: saves detection
- Detection repository → CSV log: logs records (evidence: `README.md`)
- Detection repository → Image storage: caches images (evidence: `README.md`)
- Farmer → Detection history: reviews records
- Detection history → Detection detail: opens record (evidence: `README.md`)
- Detection history → CSV log: exports CSV (evidence: `README.md`)
- Detection detail → Image storage: reads photo
- Farmer → Farm profile setup: sets up farm
- Farm profile setup → Farm profile data: stores profile
- Farmer → Biosecurity tips: reads guidance
- Farmer → Settings: configures app
- App shell → Disclaimer gate: gates access
- App shell → Localization: localizes UI
