# akankshawish24-maurya/foodconnect architecture

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

- Interactive diagram: https://gitdiagram.com/akankshawish24-maurya/foodconnect
- Repository: https://github.com/akankshawish24-maurya/foodconnect

## Overview

FoodConnect is a role-based food donation and redistribution application. Donors list food; receivers browse available food or request smart matches; claims and volunteer pickups carry donations through delivery, with notifications and administrative oversight. Donors can also submit consumption data for demand predictions. The frontend routes users to role-specific screens, while the Express server mounts API routes backed by controllers and MongoDB models. Source excerpts confirm food, pickup, matching, notification, and admin interactions; several other controller implementations and frontend API calls were not sampled, so those links are not asserted.

Main entry points: [`frontend/src/App.jsx`](https://github.com/akankshawish24-maurya/foodconnect/blob/main/frontend/src/App.jsx) (Frontend router), [`backend/controllers/pickupController.js`](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/pickupController.js) (Pickup lifecycle), [`backend/server.js`](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/server.js) (API server), [`backend/controllers/adminController.js`](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/adminController.js) (Administration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_app["Frontend router<br/>[App.jsx]"]
  node_donor_ui["Donor screens"]
  node_receiver_ui["Receiver screens"]
  node_volunteer_ui["Volunteer screens"]
  node_admin_ui["Admin screens<br/>[AdminDashboard.jsx]"]
end

subgraph group_api["API workflows"]
  node_express["API server<br/>[server.js]"]
  node_food_routes["Food routes<br/>[foodRoutes.js]"]
  node_pickup_routes["Pickup routes<br/>[pickupRoutes.js]"]
  node_admin_routes["Admin routes<br/>[adminRoutes.js]"]
  node_demand_routes["Demand routes<br/>[demandRoutes.js]"]
end

subgraph group_domain["Domain logic"]
  node_food_controller["Food listings<br/>[foodController.js]"]
  node_pickup_controller["Pickup lifecycle"]
  node_matching_controller["Smart matching"]
  node_demand_controller["Demand prediction"]
  node_claim_controller["Claims<br/>[claimController.js]"]
  node_analytics_controller["Analytics"]
  node_notification_controller["Notifications"]
  node_admin_controller["Administration<br/>[adminController.js]"]
  node_urgency["Urgency scoring<br/>[urgency.js]"]
  node_matching["Match scoring<br/>[matching.js]"]
end

subgraph group_data["Persistent data"]
  node_food_store[("Food listings<br/>[foodListing.js]")]
  node_pickup_store[("Pickups<br/>[Pickup.js]")]
  node_claim_store[("Claims<br/>[claim.js]")]
  node_notification_store[("Notifications<br/>[Notification.js]")]
  node_consumption_store[("Consumption data<br/>[ConsumptionData.js]")]
end

node_donor(("Donor"))
node_receiver(("Receiver"))
node_volunteer(("Volunteer"))
node_admin(("Administrator"))

node_donor -->|"uses"| node_app
node_receiver -->|"uses"| node_app
node_volunteer -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"routes to"| node_donor_ui
node_app -->|"routes to"| node_receiver_ui
node_app -->|"routes to"| node_volunteer_ui
node_app -->|"routes to"| node_admin_ui
node_express -->|"mounts"| node_food_routes
node_express -->|"mounts"| node_pickup_routes
node_express -->|"mounts"| node_admin_routes
node_express -->|"mounts"| node_demand_routes
node_food_routes -->|"dispatches"| node_food_controller
node_pickup_routes -->|"dispatches"| node_pickup_controller
node_admin_routes -->|"dispatches"| node_admin_controller
node_demand_routes -->|"dispatches"| node_demand_controller
node_food_controller -->|"reads/writes"| node_food_store
node_food_controller -->|"calculates"| node_urgency
node_pickup_controller -->|"reads/writes"| node_pickup_store
node_pickup_controller -->|"updates"| node_food_store
node_pickup_controller -->|"updates"| node_claim_store
node_pickup_controller -->|"creates"| node_notification_store
node_matching_controller -->|"reads/updates"| node_food_store
node_matching_controller -->|"scores"| node_matching
node_matching_controller -->|"calculates"| node_urgency
node_demand_controller -->|"reads/writes"| node_consumption_store
node_claim_controller -->|"reads/writes"| node_claim_store
node_notification_controller -->|"reads/writes"| node_notification_store
node_admin_controller -->|"reads"| node_food_store
node_admin_controller -->|"reads"| node_pickup_store
node_admin_controller -->|"reads"| node_claim_store

click node_app "https://github.com/akankshawish24-maurya/foodconnect/blob/main/frontend/src/App.jsx"
click node_donor_ui "https://github.com/akankshawish24-maurya/foodconnect/tree/main/frontend/src/pages/donor"
click node_receiver_ui "https://github.com/akankshawish24-maurya/foodconnect/tree/main/frontend/src/pages/receiver"
click node_volunteer_ui "https://github.com/akankshawish24-maurya/foodconnect/blob/main/frontend/src/pages/VolunteerPickups.jsx"
click node_admin_ui "https://github.com/akankshawish24-maurya/foodconnect/blob/main/frontend/src/pages/AdminDashboard.jsx"
click node_express "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/server.js"
click node_food_routes "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/foodRoutes.js"
click node_pickup_routes "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/pickupRoutes.js"
click node_admin_routes "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/adminRoutes.js"
click node_demand_routes "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/demandRoutes.js"
click node_food_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/foodController.js"
click node_pickup_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/pickupController.js"
click node_matching_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/matchingController.js"
click node_demand_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/demandController.js"
click node_claim_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/claimController.js"
click node_analytics_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/analyticsController.js"
click node_notification_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/notificationController.js"
click node_admin_controller "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/adminController.js"
click node_urgency "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/utils/urgency.js"
click node_matching "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/utils/matching.js"
click node_food_store "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/foodListing.js"
click node_pickup_store "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/Pickup.js"
click node_claim_store "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/claim.js"
click node_notification_store "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/Notification.js"
click node_consumption_store "https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/ConsumptionData.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_donor_ui,node_receiver_ui,node_volunteer_ui,node_admin_ui toneBlue
class node_express,node_food_routes,node_pickup_routes,node_admin_routes,node_demand_routes toneAmber
class node_food_controller,node_pickup_controller,node_matching_controller,node_demand_controller,node_claim_controller,node_analytics_controller,node_notification_controller,node_admin_controller,node_urgency,node_matching toneMint
class node_food_store,node_pickup_store,node_claim_store,node_notification_store,node_consumption_store toneRose
class node_donor,node_receiver,node_volunteer,node_admin toneIndigo
```

## Components

### User experience

- [Frontend router](https://github.com/akankshawish24-maurya/foodconnect/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Donor screens](https://github.com/akankshawish24-maurya/foodconnect/tree/main/frontend/src/pages/donor): `frontend/src/pages/donor`
- [Receiver screens](https://github.com/akankshawish24-maurya/foodconnect/tree/main/frontend/src/pages/receiver): `frontend/src/pages/receiver`
- [Volunteer screens](https://github.com/akankshawish24-maurya/foodconnect/blob/main/frontend/src/pages/VolunteerPickups.jsx): `frontend/src/pages/VolunteerPickups.jsx`
- [Admin screens](https://github.com/akankshawish24-maurya/foodconnect/blob/main/frontend/src/pages/AdminDashboard.jsx): `frontend/src/pages/AdminDashboard.jsx`

### API workflows

- [API server](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/server.js): `backend/server.js`
- [Food routes](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/foodRoutes.js): `backend/routes/foodRoutes.js`
- [Pickup routes](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/pickupRoutes.js): `backend/routes/pickupRoutes.js`
- [Admin routes](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/adminRoutes.js): `backend/routes/adminRoutes.js`
- [Demand routes](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/routes/demandRoutes.js): `backend/routes/demandRoutes.js`

### Domain logic

- [Food listings](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/foodController.js): `backend/controllers/foodController.js`
- [Pickup lifecycle](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/pickupController.js): `backend/controllers/pickupController.js`
- [Smart matching](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/matchingController.js): `backend/controllers/matchingController.js`
- [Demand prediction](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/demandController.js): `backend/controllers/demandController.js`
- [Claims](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/claimController.js): `backend/controllers/claimController.js`
- [Analytics](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/analyticsController.js): `backend/controllers/analyticsController.js`
- [Notifications](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/notificationController.js): `backend/controllers/notificationController.js`
- [Administration](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/controllers/adminController.js): `backend/controllers/adminController.js`
- [Urgency scoring](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/utils/urgency.js): `backend/utils/urgency.js`
- [Match scoring](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/utils/matching.js): `backend/utils/matching.js`

### Persistent data

- [Food listings](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/foodListing.js): `backend/models/foodListing.js`
- [Pickups](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/Pickup.js): `backend/models/Pickup.js`
- [Claims](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/claim.js): `backend/models/claim.js`
- [Notifications](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/Notification.js): `backend/models/Notification.js`
- [Consumption data](https://github.com/akankshawish24-maurya/foodconnect/blob/main/backend/models/ConsumptionData.js): `backend/models/ConsumptionData.js`

### Other components

- **Donor**
- **Receiver**
- **Volunteer**
- **Administrator**

## Connections

- Donor → Frontend router: uses
- Receiver → Frontend router: uses
- Volunteer → Frontend router: uses
- Administrator → Frontend router: uses
- Frontend router → Donor screens: routes to
- Frontend router → Receiver screens: routes to
- Frontend router → Volunteer screens: routes to
- Frontend router → Admin screens: routes to
- API server → Food routes: mounts
- API server → Pickup routes: mounts
- API server → Admin routes: mounts
- API server → Demand routes: mounts
- Food routes → Food listings: dispatches
- Pickup routes → Pickup lifecycle: dispatches
- Admin routes → Administration: dispatches
- Demand routes → Demand prediction: dispatches
- Food listings → Food listings: reads/writes
- Food listings → Urgency scoring: calculates
- Pickup lifecycle → Pickups: reads/writes
- Pickup lifecycle → Food listings: updates
- Pickup lifecycle → Claims: updates
- Pickup lifecycle → Notifications: creates
- Smart matching → Food listings: reads/updates
- Smart matching → Match scoring: scores
- Smart matching → Urgency scoring: calculates
- Demand prediction → Consumption data: reads/writes
- Claims → Claims: reads/writes
- Notifications → Notifications: reads/writes
- Administration → Food listings: reads
- Administration → Pickups: reads
- Administration → Claims: reads
