# devxankanofcode/cropswitch architecture

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

- Interactive diagram: https://gitdiagram.com/devxankanofcode/cropswitch
- Repository: https://github.com/devxankanofcode/cropswitch

## Overview

CropSwitch is a crop and field management application prototype with a React interface and a Django backend for satellite-data analysis. The user-facing workflow covers accounts, field registration and maps, NASA-data views, risk analysis, crop recommendations, and reports. In the backend, request handlers dispatch to data loading and domain engines; the engines compute risk, alerts, and crop suitability from bundled datasets. The sampled sources show no frontend-to-backend connection, and dashboard data explicitly identifies itself as demo data, so the two sides are shown separately.

Main entry points: [`src/App.jsx`](https://github.com/devxankanofcode/cropswitch/blob/main/src/App.jsx) (Route application), [`backend/core/data_loader.py`](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/data_loader.py) (Dataset loader), [`backend/core/views.py`](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/views.py) (Request handlers), [`backend/core/risk_engine.py`](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/risk_engine.py) (Risk analysis engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_app["Route application<br/>[App.jsx]"]
  node_layout["Workspace shell<br/>[MainLayout.jsx]"]
  node_header["Workspace header<br/>[Header.jsx]"]
end

subgraph group_farm["Farm workspace"]
  node_landing["Landing page<br/>[LandingPage.jsx]"]
  node_auth["Sign in and register<br/>[Login.jsx]"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_dashboarddata["Dashboard demo data<br/>[dashboardData.js]"]
  node_fields["Field management"]
  node_fieldmap["Field map<br/>[FieldMap.jsx]"]
  node_accounts["Account management<br/>[Accounts.jsx]"]
end

subgraph group_analysis["Analysis features"]
  node_nasa["NASA data view"]
  node_riskpage["Risk analysis view<br/>[RiskAnalysis.jsx]"]
  node_cropview["Crop rotation view<br/>[CropRotation.jsx]"]
  node_recommend["Recommendations view"]
  node_reports["Reports view<br/>[Reports.jsx]"]
end

subgraph group_api["Backend API"]
  node_apiurls["API routes<br/>[urls.py]"]
  node_views["Request handlers<br/>[views.py]"]
end

subgraph group_domain["Analysis engines"]
  node_loader["Dataset loader<br/>[data_loader.py]"]
  node_riskengine["Risk analysis engine<br/>[risk_engine.py]"]
  node_cropengine["Crop suitability engine<br/>[crop_engine.py]"]
  node_alertengine["Environmental alerts<br/>[alert_engine.py]"]
end

subgraph group_datasets["Satellite datasets"]
  node_smap["SMAP data<br/>[smap_data.py]"]
  node_ndvi["NDVI data<br/>[nvdi_data.py]"]
  node_gpm["GPM rainfall data<br/>[gpm_data.py]"]
  node_grace["GRACE water data<br/>[grace_data.py]"]
  node_power["POWER weather data<br/>[power_data.py]"]
end

node_user(("User"))

node_user -->|"opens"| node_app
node_app -->|"routes to"| node_landing
node_app -->|"routes to"| node_auth
node_app -->|"wraps workspace"| node_layout
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_fields
node_app -->|"routes to"| node_accounts
node_app -->|"routes to"| node_nasa
node_app -->|"routes to"| node_riskpage
node_app -->|"routes to"| node_cropview
node_app -->|"routes to"| node_recommend
node_app -->|"routes to"| node_reports
node_layout -->|"renders"| node_header
node_dashboard -->|"reads"| node_dashboarddata
node_fields -->|"renders"| node_fieldmap
node_apiurls -->|"routes requests"| node_views
node_views -->|"loads datasets"| node_loader
node_views -->|"requests risk analysis"| node_riskengine
node_views -->|"requests recommendations"| node_cropengine
node_views -->|"requests alerts"| node_alertengine
node_cropengine -->|"loads datasets"| node_loader
node_riskengine -->|"loads datasets"| node_loader
node_alertengine -->|"analyzes risks"| node_riskengine
node_loader -->|"loads records"| node_smap
node_loader -->|"loads records"| node_ndvi
node_loader -->|"loads records"| node_gpm
node_loader -->|"loads records"| node_grace
node_loader -->|"loads records"| node_power

click node_app "https://github.com/devxankanofcode/cropswitch/blob/main/src/App.jsx"
click node_layout "https://github.com/devxankanofcode/cropswitch/blob/main/src/components/layout/MainLayout.jsx"
click node_header "https://github.com/devxankanofcode/cropswitch/blob/main/src/components/layout/Header.jsx"
click node_landing "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/LandingPage.jsx"
click node_auth "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Login.jsx"
click node_dashboard "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Dashboard.jsx"
click node_dashboarddata "https://github.com/devxankanofcode/cropswitch/blob/main/src/data/dashboardData.js"
click node_fields "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/FieldManagement.jsx"
click node_fieldmap "https://github.com/devxankanofcode/cropswitch/blob/main/src/components/FieldMap.jsx"
click node_accounts "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Accounts.jsx"
click node_nasa "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/NASADataIntegration.jsx"
click node_riskpage "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/RiskAnalysis.jsx"
click node_cropview "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/CropRotation.jsx"
click node_recommend "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Recommendations.jsx"
click node_reports "https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Reports.jsx"
click node_apiurls "https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/urls.py"
click node_views "https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/views.py"
click node_loader "https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/data_loader.py"
click node_riskengine "https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/risk_engine.py"
click node_cropengine "https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/crop_engine.py"
click node_alertengine "https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/alert_engine.py"
click node_smap "https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/smap_data.py"
click node_ndvi "https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/nvdi_data.py"
click node_gpm "https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/gpm_data.py"
click node_grace "https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/grace_data.py"
click node_power "https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/power_data.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_app,node_layout,node_header,node_user toneBlue
class node_landing,node_auth,node_dashboard,node_dashboarddata,node_fields,node_fieldmap,node_accounts toneAmber
class node_nasa,node_riskpage,node_cropview,node_recommend,node_reports toneMint
class node_apiurls,node_views toneRose
class node_loader,node_riskengine,node_cropengine,node_alertengine toneIndigo
class node_smap,node_ndvi,node_gpm,node_grace,node_power toneTeal
```

## Components

### Web application

- [Route application](https://github.com/devxankanofcode/cropswitch/blob/main/src/App.jsx): `src/App.jsx`
- [Workspace shell](https://github.com/devxankanofcode/cropswitch/blob/main/src/components/layout/MainLayout.jsx): `src/components/layout/MainLayout.jsx`
- [Workspace header](https://github.com/devxankanofcode/cropswitch/blob/main/src/components/layout/Header.jsx): `src/components/layout/Header.jsx`

### Farm workspace

- [Landing page](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/LandingPage.jsx): `src/pages/LandingPage.jsx`
- [Sign in and register](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Login.jsx): `src/pages/Login.jsx`
- [Dashboard](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Dashboard.jsx): `src/pages/Dashboard.jsx`
- [Dashboard demo data](https://github.com/devxankanofcode/cropswitch/blob/main/src/data/dashboardData.js): `src/data/dashboardData.js`
- [Field management](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/FieldManagement.jsx): `src/pages/FieldManagement.jsx`
- [Field map](https://github.com/devxankanofcode/cropswitch/blob/main/src/components/FieldMap.jsx): `src/components/FieldMap.jsx`
- [Account management](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Accounts.jsx): `src/pages/Accounts.jsx`

### Analysis features

- [NASA data view](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/NASADataIntegration.jsx): `src/pages/NASADataIntegration.jsx`
- [Risk analysis view](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/RiskAnalysis.jsx): `src/pages/RiskAnalysis.jsx`
- [Crop rotation view](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/CropRotation.jsx): `src/pages/CropRotation.jsx`
- [Recommendations view](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Recommendations.jsx): `src/pages/Recommendations.jsx`
- [Reports view](https://github.com/devxankanofcode/cropswitch/blob/main/src/pages/Reports.jsx): `src/pages/Reports.jsx`

### Backend API

- [API routes](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/urls.py): `backend/core/urls.py`
- [Request handlers](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/views.py): `backend/core/views.py`

### Analysis engines

- [Dataset loader](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/data_loader.py): `backend/core/data_loader.py`
- [Risk analysis engine](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/risk_engine.py): `backend/core/risk_engine.py`
- [Crop suitability engine](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/crop_engine.py): `backend/core/crop_engine.py`
- [Environmental alerts](https://github.com/devxankanofcode/cropswitch/blob/main/backend/core/alert_engine.py): `backend/core/alert_engine.py`

### Satellite datasets

- [SMAP data](https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/smap_data.py): `backend/datasets/smap_data.py`
- [NDVI data](https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/nvdi_data.py): `backend/datasets/nvdi_data.py`
- [GPM rainfall data](https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/gpm_data.py): `backend/datasets/gpm_data.py`
- [GRACE water data](https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/grace_data.py): `backend/datasets/grace_data.py`
- [POWER weather data](https://github.com/devxankanofcode/cropswitch/blob/main/backend/datasets/power_data.py): `backend/datasets/power_data.py`

### Other components

- **User**

## Connections

- User → Route application: opens (evidence: `src/App.jsx`)
- Route application → Landing page: routes to (evidence: `src/App.jsx`)
- Route application → Sign in and register: routes to (evidence: `src/App.jsx`)
- Route application → Workspace shell: wraps workspace (evidence: `src/App.jsx`)
- Route application → Dashboard: routes to (evidence: `src/App.jsx`)
- Route application → Field management: routes to (evidence: `src/App.jsx`)
- Route application → Account management: routes to (evidence: `src/App.jsx`)
- Route application → NASA data view: routes to (evidence: `src/App.jsx`)
- Route application → Risk analysis view: routes to (evidence: `src/App.jsx`)
- Route application → Crop rotation view: routes to (evidence: `src/App.jsx`)
- Route application → Recommendations view: routes to (evidence: `src/App.jsx`)
- Route application → Reports view: routes to (evidence: `src/App.jsx`)
- Workspace shell → Workspace header: renders (evidence: `src/components/layout/MainLayout.jsx`)
- Dashboard → Dashboard demo data: reads (evidence: `src/pages/Dashboard.jsx`)
- Field management → Field map: renders (evidence: `src/pages/FieldManagement.jsx`)
- API routes → Request handlers: routes requests (evidence: `backend/core/urls.py`)
- Request handlers → Dataset loader: loads datasets (evidence: `backend/core/views.py`)
- Request handlers → Risk analysis engine: requests risk analysis (evidence: `backend/core/views.py`)
- Request handlers → Crop suitability engine: requests recommendations (evidence: `backend/core/views.py`)
- Request handlers → Environmental alerts: requests alerts (evidence: `backend/core/views.py`)
- Crop suitability engine → Dataset loader: loads datasets (evidence: `backend/core/crop_engine.py`)
- Risk analysis engine → Dataset loader: loads datasets (evidence: `backend/core/risk_engine.py`)
- Environmental alerts → Risk analysis engine: analyzes risks (evidence: `backend/core/alert_engine.py`)
- Dataset loader → SMAP data: loads records (evidence: `backend/core/data_loader.py`)
- Dataset loader → NDVI data: loads records (evidence: `backend/core/data_loader.py`)
- Dataset loader → GPM rainfall data: loads records (evidence: `backend/core/data_loader.py`)
- Dataset loader → GRACE water data: loads records (evidence: `backend/core/data_loader.py`)
- Dataset loader → POWER weather data: loads records (evidence: `backend/core/data_loader.py`)
