# badhanroy/plantcheck architecture

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

- Interactive diagram: https://gitdiagram.com/badhanroy/plantcheck
- Repository: https://github.com/badhanroy/plantcheck

## Overview

PlantCheck is a smart-agriculture web platform for plant-disease diagnosis, crop care, and community knowledge sharing, with account authentication. Users enter through the React app; protected feature pages send requests to the Express API, while diagnosis uses a separate Python prediction service. Crop care adds weather-based watering advice, reminders, and journals. The graph includes the documented model-inference capability; the diagnosis controller and several wiring details were not sampled, so uncertain internal links are omitted.

Main entry points: [`backend/index.js`](https://github.com/badhanroy/plantcheck/blob/main/backend/index.js) (Express server), [`frontend/src/App.jsx`](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/App.jsx) (App and routes), [`backend/db/connectDB.js`](https://github.com/badhanroy/plantcheck/blob/main/backend/db/connectDB.js) (MongoDB), [`backend/controllers/cropCareController.js`](https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/cropCareController.js) (Crop care operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["App and routes<br/>[App.jsx]"]
  node_authui["Auth state<br/>[authStore.js]"]
  node_communityui["Community state<br/>[communityStore.js]"]
  node_cropui["Crop care pages<br/>[CropCare.jsx]"]
  node_diagnosisui["Diagnosis page<br/>[DiagnosePage.jsx]"]
  node_communityui_page["Community pages<br/>[CommunityPage.jsx]"]
  node_cropapi["Crop care API client<br/>[cropCareApi.js]"]
end

subgraph group_api["Application API"]
  node_server["Express server<br/>[index.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_communityroutes["Community routes"]
  node_croproutes["Crop routes<br/>[cropCareRoutes.js]"]
  node_diagnosisroutes["Diagnosis routes"]
  node_authcontroller["Authentication<br/>[auth.controller.js]"]
  node_communitycontroller["Community operations"]
end

subgraph group_crop["Crop care"]
  node_cropcontroller["Crop care operations"]
  node_watering["Watering advice<br/>[cropCareService.js]"]
  node_weather["Weather lookup<br/>[weatherService.js]"]
end

subgraph group_diagnosis["Disease diagnosis"]
  node_diagnosiscontroller["Diagnosis operations"]
  node_prediction["Prediction API<br/>[main.py]"]
  node_model["Disease model<br/>[model_service.py]"]
end

subgraph group_data["Persistence and integrations"]
  node_database[("MongoDB<br/>[connectDB.js]")]
  node_authmodels["User model<br/>[user.model.js]"]
  node_communitymodels["Post and comment models<br/>[post.model.js]"]
  node_cropmodels["Crop and journal models<br/>[Crop.js]"]
  node_diagnosismodel["Diagnosis history model<br/>[Diagnosis.js]"]
  node_mail["Email delivery<br/>[emails.js]"]
end

node_user(("Grower"))
node_mailservice{{"Mail provider"}}
node_weatherapi{{"Weather provider"}}

node_user -->|"uses"| node_app
node_app -->|"checks session"| node_authui
node_app -->|"routes to"| node_diagnosisui
node_app -->|"routes to"| node_cropui
node_app -->|"routes to"| node_communityui_page
node_authui -->|"requests auth"| node_authroutes
node_communityui -->|"requests posts"| node_communityroutes
node_communityui_page -->|"uses state"| node_communityui
node_cropui -->|"requests crop data"| node_cropapi
node_cropapi -->|"calls API"| node_croproutes
node_diagnosisui -->|"submits image"| node_diagnosisroutes
node_server -->|"mounts routes"| node_authroutes
node_server -->|"mounts routes"| node_communityroutes
node_server -->|"mounts routes"| node_croproutes
node_server -->|"mounts routes"| node_diagnosisroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_communityroutes -->|"dispatches"| node_communitycontroller
node_croproutes -->|"dispatches"| node_cropcontroller
node_diagnosisroutes -->|"dispatches"| node_diagnosiscontroller
node_authcontroller -->|"reads and writes"| node_authmodels
node_authcontroller -->|"sends messages"| node_mail
node_communitycontroller -->|"reads and writes"| node_communitymodels
node_cropcontroller -->|"reads and writes"| node_cropmodels
node_cropcontroller -->|"gets conditions"| node_weather
node_cropcontroller -->|"calculates advice"| node_watering
node_weather -.->|"fetches forecast"| node_weatherapi
node_mail -.->|"delivers email"| node_mailservice
node_prediction -->|"runs inference"| node_model
node_diagnosiscontroller -->|"stores history"| node_diagnosismodel
node_server -->|"starts service"| node_prediction
node_database -->|"backs models"| node_authmodels
node_database -->|"backs models"| node_communitymodels
node_database -->|"backs models"| node_cropmodels
node_database -->|"backs model"| node_diagnosismodel

click node_app "https://github.com/badhanroy/plantcheck/blob/main/frontend/src/App.jsx"
click node_authui "https://github.com/badhanroy/plantcheck/blob/main/frontend/src/store/authStore.js"
click node_communityui "https://github.com/badhanroy/plantcheck/blob/main/frontend/src/store/communityStore.js"
click node_cropui "https://github.com/badhanroy/plantcheck/blob/main/frontend/src/pages/CropCare.jsx"
click node_diagnosisui "https://github.com/badhanroy/plantcheck/blob/main/frontend/src/pages/DiagnosePage.jsx"
click node_communityui_page "https://github.com/badhanroy/plantcheck/blob/main/frontend/src/pages/CommunityPage.jsx"
click node_cropapi "https://github.com/badhanroy/plantcheck/blob/main/frontend/src/utils/cropCareApi.js"
click node_server "https://github.com/badhanroy/plantcheck/blob/main/backend/index.js"
click node_authroutes "https://github.com/badhanroy/plantcheck/blob/main/backend/routes/auth.routes.js"
click node_communityroutes "https://github.com/badhanroy/plantcheck/blob/main/backend/routes/community.routes.js"
click node_croproutes "https://github.com/badhanroy/plantcheck/blob/main/backend/routes/cropCareRoutes.js"
click node_diagnosisroutes "https://github.com/badhanroy/plantcheck/blob/main/backend/routes/diagnosis.routes.js"
click node_authcontroller "https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/auth.controller.js"
click node_communitycontroller "https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/community.controller.js"
click node_cropcontroller "https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/cropCareController.js"
click node_watering "https://github.com/badhanroy/plantcheck/blob/main/backend/services/cropCareService.js"
click node_weather "https://github.com/badhanroy/plantcheck/blob/main/backend/services/weatherService.js"
click node_diagnosiscontroller "https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/diagnosis.controller.js"
click node_prediction "https://github.com/badhanroy/plantcheck/blob/main/backend/main.py"
click node_model "https://github.com/badhanroy/plantcheck/blob/main/backend/model_service.py"
click node_database "https://github.com/badhanroy/plantcheck/blob/main/backend/db/connectDB.js"
click node_authmodels "https://github.com/badhanroy/plantcheck/blob/main/backend/models/user.model.js"
click node_communitymodels "https://github.com/badhanroy/plantcheck/blob/main/backend/models/post.model.js"
click node_cropmodels "https://github.com/badhanroy/plantcheck/blob/main/backend/models/Crop.js"
click node_diagnosismodel "https://github.com/badhanroy/plantcheck/blob/main/backend/models/Diagnosis.js"
click node_mail "https://github.com/badhanroy/plantcheck/blob/main/backend/mailtrap/emails.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_authui,node_communityui,node_cropui,node_diagnosisui,node_communityui_page,node_cropapi toneBlue
class node_server,node_authroutes,node_communityroutes,node_croproutes,node_diagnosisroutes,node_authcontroller,node_communitycontroller toneAmber
class node_cropcontroller,node_watering,node_weather toneMint
class node_diagnosiscontroller,node_prediction,node_model toneRose
class node_database,node_authmodels,node_communitymodels,node_cropmodels,node_diagnosismodel,node_mail,node_user,node_mailservice,node_weatherapi toneIndigo
```

## Components

### Web client

- [App and routes](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Auth state](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/store/authStore.js): `frontend/src/store/authStore.js`
- [Community state](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/store/communityStore.js): `frontend/src/store/communityStore.js`
- [Crop care pages](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/pages/CropCare.jsx): `frontend/src/pages/CropCare.jsx`
- [Diagnosis page](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/pages/DiagnosePage.jsx): `frontend/src/pages/DiagnosePage.jsx`
- [Community pages](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/pages/CommunityPage.jsx): `frontend/src/pages/CommunityPage.jsx`
- [Crop care API client](https://github.com/badhanroy/plantcheck/blob/main/frontend/src/utils/cropCareApi.js): `frontend/src/utils/cropCareApi.js`

### Application API

- [Express server](https://github.com/badhanroy/plantcheck/blob/main/backend/index.js): `backend/index.js`
- [Auth routes](https://github.com/badhanroy/plantcheck/blob/main/backend/routes/auth.routes.js): `backend/routes/auth.routes.js`
- [Community routes](https://github.com/badhanroy/plantcheck/blob/main/backend/routes/community.routes.js): `backend/routes/community.routes.js`
- [Crop routes](https://github.com/badhanroy/plantcheck/blob/main/backend/routes/cropCareRoutes.js): `backend/routes/cropCareRoutes.js`
- [Diagnosis routes](https://github.com/badhanroy/plantcheck/blob/main/backend/routes/diagnosis.routes.js): `backend/routes/diagnosis.routes.js`
- [Authentication](https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/auth.controller.js): `backend/controllers/auth.controller.js`
- [Community operations](https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/community.controller.js): `backend/controllers/community.controller.js`

### Crop care

- [Crop care operations](https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/cropCareController.js): `backend/controllers/cropCareController.js`
- [Watering advice](https://github.com/badhanroy/plantcheck/blob/main/backend/services/cropCareService.js): `backend/services/cropCareService.js`
- [Weather lookup](https://github.com/badhanroy/plantcheck/blob/main/backend/services/weatherService.js): `backend/services/weatherService.js`

### Disease diagnosis

- [Diagnosis operations](https://github.com/badhanroy/plantcheck/blob/main/backend/controllers/diagnosis.controller.js): `backend/controllers/diagnosis.controller.js`
- [Prediction API](https://github.com/badhanroy/plantcheck/blob/main/backend/main.py): `backend/main.py`
- [Disease model](https://github.com/badhanroy/plantcheck/blob/main/backend/model_service.py): `backend/model_service.py`

### Persistence and integrations

- [MongoDB](https://github.com/badhanroy/plantcheck/blob/main/backend/db/connectDB.js): `backend/db/connectDB.js`
- [User model](https://github.com/badhanroy/plantcheck/blob/main/backend/models/user.model.js): `backend/models/user.model.js`
- [Post and comment models](https://github.com/badhanroy/plantcheck/blob/main/backend/models/post.model.js): `backend/models/post.model.js`
- [Crop and journal models](https://github.com/badhanroy/plantcheck/blob/main/backend/models/Crop.js): `backend/models/Crop.js`
- [Diagnosis history model](https://github.com/badhanroy/plantcheck/blob/main/backend/models/Diagnosis.js): `backend/models/Diagnosis.js`
- [Email delivery](https://github.com/badhanroy/plantcheck/blob/main/backend/mailtrap/emails.js): `backend/mailtrap/emails.js`

### Other components

- **Grower**
- **Mail provider**
- **Weather provider**

## Connections

- Grower → App and routes: uses
- App and routes → Auth state: checks session
- App and routes → Diagnosis page: routes to
- App and routes → Crop care pages: routes to
- App and routes → Community pages: routes to
- Auth state → Auth routes: requests auth
- Community state → Community routes: requests posts
- Community pages → Community state: uses state
- Crop care pages → Crop care API client: requests crop data
- Crop care API client → Crop routes: calls API
- Diagnosis page → Diagnosis routes: submits image
- Express server → Auth routes: mounts routes
- Express server → Community routes: mounts routes
- Express server → Crop routes: mounts routes
- Express server → Diagnosis routes: mounts routes
- Auth routes → Authentication: dispatches
- Community routes → Community operations: dispatches
- Crop routes → Crop care operations: dispatches
- Diagnosis routes → Diagnosis operations: dispatches
- Authentication → User model: reads and writes
- Authentication → Email delivery: sends messages
- Community operations → Post and comment models: reads and writes
- Crop care operations → Crop and journal models: reads and writes
- Crop care operations → Weather lookup: gets conditions
- Crop care operations → Watering advice: calculates advice
- Weather lookup → Weather provider: fetches forecast
- Email delivery → Mail provider: delivers email
- Prediction API → Disease model: runs inference
- Diagnosis operations → Diagnosis history model: stores history
- Express server → Prediction API: starts service
- MongoDB → User model: backs models
- MongoDB → Post and comment models: backs models
- MongoDB → Crop and journal models: backs models
- MongoDB → Diagnosis history model: backs model
