# arpitaghetiya/foodrescue architecture

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

- Interactive diagram: https://gitdiagram.com/arpitaghetiya/foodrescue
- Repository: https://github.com/arpitaghetiya/foodrescue

## Overview

FoodRescue connects food donors with verified NGOs through donation listings, claim requests, donor approval, pickup and completion; administrators verify NGOs and moderate the platform. The client provides public discovery, role-specific dashboards and account flows, while the Express API enforces authorization and persists platform records through Prisma. The README documents SQLite and lifecycle capabilities; some implementation details are unsampled, so those relationships are shown only where documented or evidenced by the excerpts and source index.

Main entry points: [`client/src/App.tsx`](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/App.tsx) (Application routing), [`client/src/services/api.ts`](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/services/api.ts) (API client), [`server/src/prisma.ts`](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/prisma.ts) (Prisma client), [`server/src/index.ts`](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/index.ts) (REST API server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Application routing<br/>[App.tsx]"]
  node_auth_ui["Account and session<br/>[AuthContext.tsx]"]
  node_discovery["Public discovery<br/>[LandingPage.tsx]"]
  node_donor_ui["Donor dashboard<br/>[DonorDashboard.tsx]"]
  node_create_ui["Create donation"]
  node_ngo_ui["NGO browsing"]
  node_ngo_dashboard["NGO requests<br/>[NgoDashboard.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
end

subgraph group_workflow["Donation workflow"]
  node_donation_routes["Donation routes<br/>[donationRoutes.ts]"]
  node_request_routes["Request routes<br/>[requestRoutes.ts]"]
  node_donation_controller["Listing lifecycle"]
  node_request_controller["Request lifecycle"]
end

subgraph group_api["API and security"]
  node_server["REST API server<br/>[index.ts]"]
  node_auth_routes["Authentication routes<br/>[authRoutes.ts]"]
  node_auth_controller["Account services<br/>[authController.ts]"]
  node_auth_middleware["JWT and role checks<br/>[auth.ts]"]
  node_token["JWT utilities<br/>[token.ts]"]
end

subgraph group_admin["Administration"]
  node_admin_ui["Admin console<br/>[AdminDashboard.tsx]"]
  node_admin_routes["Admin routes<br/>[adminRoutes.ts]"]
  node_stats_routes["Public statistics<br/>[statsRoutes.ts]"]
  node_admin_controller["Verification and moderation<br/>[adminController.ts]"]
end

subgraph group_data["Persistence"]
  node_prisma["Prisma client<br/>[prisma.ts]"]
  node_database[("SQLite records")]
end

node_donor(("Food donor"))
node_ngo(("Verified NGO"))
node_admin_actor(("Administrator"))

node_app -->|"provides session"| node_auth_ui
node_app -->|"routes to"| node_discovery
node_app -->|"routes to"| node_donor_ui
node_app -->|"routes to"| node_create_ui
node_app -->|"routes to"| node_ngo_ui
node_app -->|"routes to"| node_ngo_dashboard
node_app -->|"routes to"| node_admin_ui
node_discovery -->|"fetches summary"| node_api_client
node_auth_ui -->|"calls account API"| node_api_client
node_donor_ui -->|"uses API"| node_api_client
node_create_ui -->|"uses API"| node_api_client
node_ngo_ui -->|"uses API"| node_api_client
node_ngo_dashboard -->|"uses API"| node_api_client
node_admin_ui -->|"uses API"| node_api_client
node_api_client -->|"sends REST requests"| node_server
node_server -->|"mounts"| node_auth_routes
node_server -->|"mounts"| node_donation_routes
node_server -->|"mounts"| node_request_routes
node_server -->|"mounts"| node_admin_routes
node_server -->|"mounts"| node_stats_routes
node_auth_routes -->|"dispatches to"| node_auth_controller
node_donation_routes -->|"dispatches to"| node_donation_controller
node_request_routes -->|"dispatches to"| node_request_controller
node_request_routes -->|"checks access"| node_auth_middleware
node_admin_routes -->|"dispatches to"| node_admin_controller
node_admin_ui -.->|"requests verification"| node_admin_controller
node_auth_controller -->|"queries records"| node_prisma
node_donation_controller -->|"reads and writes"| node_prisma
node_request_controller -->|"reads and writes"| node_prisma
node_admin_controller -->|"reads and writes"| node_prisma
node_stats_routes -->|"queries statistics"| node_prisma
node_auth_middleware -->|"verifies tokens"| node_token
node_auth_middleware -->|"loads user"| node_prisma
node_prisma -->|"persists records"| node_database
node_donor -->|"posts surplus"| node_create_ui
node_ngo -->|"browses listings"| node_ngo_ui
node_admin_actor -->|"manages platform"| node_admin_ui

click node_app "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/App.tsx"
click node_auth_ui "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/context/AuthContext.tsx"
click node_discovery "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/LandingPage.tsx"
click node_donor_ui "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/donor/DonorDashboard.tsx"
click node_create_ui "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/donor/CreateDonationPage.tsx"
click node_ngo_ui "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/ngo/BrowseDonationsPage.tsx"
click node_ngo_dashboard "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/ngo/NgoDashboard.tsx"
click node_admin_ui "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/admin/AdminDashboard.tsx"
click node_api_client "https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/services/api.ts"
click node_server "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/index.ts"
click node_auth_routes "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/authRoutes.ts"
click node_donation_routes "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/donationRoutes.ts"
click node_request_routes "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/requestRoutes.ts"
click node_admin_routes "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/adminRoutes.ts"
click node_stats_routes "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/statsRoutes.ts"
click node_auth_controller "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/authController.ts"
click node_donation_controller "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/donationController.ts"
click node_request_controller "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/requestController.ts"
click node_admin_controller "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/adminController.ts"
click node_auth_middleware "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/middleware/auth.ts"
click node_token "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/utils/token.ts"
click node_prisma "https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/prisma.ts"
click node_database "https://github.com/arpitaghetiya/foodrescue/tree/main/server/prisma"

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_auth_ui,node_discovery,node_donor_ui,node_create_ui,node_ngo_ui,node_ngo_dashboard,node_api_client toneBlue
class node_donation_routes,node_request_routes,node_donation_controller,node_request_controller toneAmber
class node_server,node_auth_routes,node_auth_controller,node_auth_middleware,node_token toneMint
class node_admin_ui,node_admin_routes,node_stats_routes,node_admin_controller toneRose
class node_prisma,node_database,node_donor,node_ngo,node_admin_actor toneIndigo
```

## Components

### Web client

- [Application routing](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Account and session](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/context/AuthContext.tsx): `client/src/context/AuthContext.tsx`
- [Public discovery](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/LandingPage.tsx): `client/src/pages/LandingPage.tsx`
- [Donor dashboard](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/donor/DonorDashboard.tsx): `client/src/pages/donor/DonorDashboard.tsx`
- [Create donation](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/donor/CreateDonationPage.tsx): `client/src/pages/donor/CreateDonationPage.tsx`
- [NGO browsing](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/ngo/BrowseDonationsPage.tsx): `client/src/pages/ngo/BrowseDonationsPage.tsx`
- [NGO requests](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/ngo/NgoDashboard.tsx): `client/src/pages/ngo/NgoDashboard.tsx`
- [API client](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/services/api.ts): `client/src/services/api.ts`

### Donation workflow

- [Donation routes](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/donationRoutes.ts): `server/src/routes/donationRoutes.ts`
- [Request routes](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/requestRoutes.ts): `server/src/routes/requestRoutes.ts`
- [Listing lifecycle](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/donationController.ts): `server/src/controllers/donationController.ts`
- [Request lifecycle](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/requestController.ts): `server/src/controllers/requestController.ts`

### API and security

- [REST API server](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/index.ts): `server/src/index.ts`
- [Authentication routes](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/authRoutes.ts): `server/src/routes/authRoutes.ts`
- [Account services](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/authController.ts): `server/src/controllers/authController.ts`
- [JWT and role checks](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/middleware/auth.ts): `server/src/middleware/auth.ts`
- [JWT utilities](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/utils/token.ts): `server/src/utils/token.ts`

### Administration

- [Admin console](https://github.com/arpitaghetiya/foodrescue/blob/main/client/src/pages/admin/AdminDashboard.tsx): `client/src/pages/admin/AdminDashboard.tsx`
- [Admin routes](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/adminRoutes.ts): `server/src/routes/adminRoutes.ts`
- [Public statistics](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/routes/statsRoutes.ts): `server/src/routes/statsRoutes.ts`
- [Verification and moderation](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/controllers/adminController.ts): `server/src/controllers/adminController.ts`

### Persistence

- [Prisma client](https://github.com/arpitaghetiya/foodrescue/blob/main/server/src/prisma.ts): `server/src/prisma.ts`
- [SQLite records](https://github.com/arpitaghetiya/foodrescue/tree/main/server/prisma): `server/prisma`

### Other components

- **Food donor**
- **Verified NGO**
- **Administrator**

## Connections

- Application routing → Account and session: provides session (evidence: `client/src/App.tsx`)
- Application routing → Public discovery: routes to (evidence: `client/src/App.tsx`)
- Application routing → Donor dashboard: routes to (evidence: `client/src/App.tsx`)
- Application routing → Create donation: routes to (evidence: `client/src/App.tsx`)
- Application routing → NGO browsing: routes to (evidence: `client/src/App.tsx`)
- Application routing → NGO requests: routes to (evidence: `client/src/App.tsx`)
- Application routing → Admin console: routes to (evidence: `client/src/App.tsx`)
- Public discovery → API client: fetches summary (evidence: `client/src/pages/LandingPage.tsx`)
- Account and session → API client: calls account API (evidence: `client/src/context/AuthContext.tsx`)
- Donor dashboard → API client: uses API (evidence: `client/src/pages/donor/DonorDashboard.tsx`)
- Create donation → API client: uses API (evidence: `client/src/pages/donor/CreateDonationPage.tsx`)
- NGO browsing → API client: uses API (evidence: `client/src/pages/ngo/BrowseDonationsPage.tsx`)
- NGO requests → API client: uses API (evidence: `client/src/pages/ngo/NgoDashboard.tsx`)
- Admin console → API client: uses API (evidence: `client/src/pages/admin/AdminDashboard.tsx`)
- API client → REST API server: sends REST requests
- REST API server → Authentication routes: mounts (evidence: `server/src/index.ts`)
- REST API server → Donation routes: mounts (evidence: `server/src/index.ts`)
- REST API server → Request routes: mounts (evidence: `server/src/index.ts`)
- REST API server → Admin routes: mounts (evidence: `server/src/index.ts`)
- REST API server → Public statistics: mounts (evidence: `server/src/index.ts`)
- Authentication routes → Account services: dispatches to (evidence: `server/src/routes/authRoutes.ts`)
- Donation routes → Listing lifecycle: dispatches to (evidence: `server/src/routes/donationRoutes.ts`)
- Request routes → Request lifecycle: dispatches to (evidence: `server/src/routes/requestRoutes.ts`)
- Request routes → JWT and role checks: checks access (evidence: `server/src/routes/requestRoutes.ts`)
- Admin routes → Verification and moderation: dispatches to (evidence: `server/src/routes/adminRoutes.ts`)
- Admin console → Verification and moderation: requests verification
- Account services → Prisma client: queries records (evidence: `server/src/controllers/authController.ts`)
- Listing lifecycle → Prisma client: reads and writes (evidence: `server/src/controllers/donationController.ts`)
- Request lifecycle → Prisma client: reads and writes (evidence: `server/src/controllers/requestController.ts`)
- Verification and moderation → Prisma client: reads and writes (evidence: `server/src/controllers/adminController.ts`)
- Public statistics → Prisma client: queries statistics (evidence: `server/src/routes/statsRoutes.ts`)
- JWT and role checks → JWT utilities: verifies tokens (evidence: `server/src/middleware/auth.ts`)
- JWT and role checks → Prisma client: loads user (evidence: `server/src/middleware/auth.ts`)
- Prisma client → SQLite records: persists records
- Food donor → Create donation: posts surplus
- Verified NGO → NGO browsing: browses listings
- Administrator → Admin console: manages platform
