# faixan-akhtar/life-link architecture

> Architecture diagram of the GitHub repository faixan-akhtar/life-link, 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/faixan-akhtar/life-link
- Repository: https://github.com/faixan-akhtar/life-link

## Overview

LifeLink connects blood recipients with donors through role-specific accounts, donor discovery, blood requests, donor responses, and status tracking. The React application exposes these user experiences; the Express API handles authentication, donor and request operations, responses, and enquiries, with MongoDB-backed models. The graph follows route mounts and controller/model calls visible in sampled source. Frontend API call wiring and several controller implementations were not sampled, so those connections are not inferred.

Main entry points: [`server/server.js`](https://github.com/faixan-akhtar/life-link/blob/main/server/server.js) (Express server), [`client/src/App.jsx`](https://github.com/faixan-akhtar/life-link/blob/main/client/src/App.jsx) (React routes), [`server/models/User.js`](https://github.com/faixan-akhtar/life-link/blob/main/server/models/User.js) (User records), [`server/routes/donorRoutes.js`](https://github.com/faixan-akhtar/life-link/blob/main/server/routes/donorRoutes.js) (Donor routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User experience"]
  node_react["React routes<br/>[App.jsx]"]
  node_account_ui["Account pages<br/>[RegisterPage.jsx]"]
  node_donor_ui["Donor discovery<br/>[FindDonor.jsx]"]
  node_request_ui["Request pages<br/>[RequestBlood.jsx]"]
  node_dashboards["Role dashboards"]
  node_contact_ui["Contact page<br/>[ContactPage.jsx]"]
end

subgraph group_api["API and access"]
  node_express["Express server<br/>[server.js]"]
  node_auth_routes["Authentication routes<br/>[authRoute.js]"]
  node_donor_routes["Donor routes<br/>[donorRoutes.js]"]
  node_request_routes["Request routes<br/>[requestRoute.js]"]
  node_donation_routes["Donation routes<br/>[donationRoute.js]"]
  node_dashboard_routes["Dashboard routes"]
  node_contact_routes["Contact routes<br/>[contactRoute.js]"]
  node_auth["Authentication<br/>[authController.js]"]
  node_auth_middleware["JWT verification<br/>[authmiddleware.js]"]
end

subgraph group_workflow["Donation workflow"]
  node_donor_ops["Donor operations<br/>[donorController.js]"]
  node_request_ops["Request operations"]
  node_donation_ops["Donation responses"]
  node_dashboard_ops["Donor dashboard operations"]
  node_contact_ops["Contact enquiries"]
end

subgraph group_data["Persistence"]
  node_users[("User records<br/>[User.js]")]
  node_blood_requests[("Blood requests<br/>[BloodRequest.js]")]
  node_responses[("Donation responses")]
  node_dashboard_requests[("Dashboard request records")]
  node_contact_records[("Contact records<br/>[Contact.js]")]
  node_db_config["MongoDB connection<br/>[db.js]"]
end

node_people(("Donors and recipients"))
node_mongodb[("MongoDB")]

node_people -->|"use app"| node_react
node_react -->|"routes to"| node_account_ui
node_react -->|"routes to"| node_donor_ui
node_react -->|"routes to"| node_request_ui
node_react -->|"routes to"| node_dashboards
node_react -->|"routes to"| node_contact_ui
node_express -->|"mounts"| node_auth_routes
node_express -->|"mounts"| node_donor_routes
node_express -->|"mounts"| node_request_routes
node_express -->|"mounts"| node_donation_routes
node_express -->|"mounts"| node_dashboard_routes
node_express -->|"mounts"| node_contact_routes
node_auth_routes -->|"dispatches"| node_auth
node_donor_routes -->|"dispatches"| node_donor_ops
node_request_routes -->|"dispatches"| node_request_ops
node_donation_routes -->|"dispatches"| node_donation_ops
node_dashboard_routes -->|"dispatches"| node_dashboard_ops
node_contact_routes -->|"dispatches"| node_contact_ops
node_donor_routes -->|"protects routes"| node_auth_middleware
node_dashboard_routes -->|"protects routes"| node_auth_middleware
node_auth -->|"reads and writes"| node_users
node_donor_ops -->|"reads and writes"| node_users
node_request_ops -->|"reads and writes"| node_blood_requests
node_request_ops -->|"finds donors"| node_users
node_donation_ops -->|"reads and updates"| node_blood_requests
node_donation_ops -->|"reads and updates"| node_responses
node_dashboard_ops -->|"reads and updates"| node_users
node_dashboard_ops -->|"reads and updates"| node_dashboard_requests
node_contact_ops -->|"persists enquiries"| node_contact_records
node_express -->|"connects through"| node_db_config
node_db_config -->|"connects"| node_mongodb

click node_react "https://github.com/faixan-akhtar/life-link/blob/main/client/src/App.jsx"
click node_account_ui "https://github.com/faixan-akhtar/life-link/blob/main/client/src/RegisterPage.jsx"
click node_donor_ui "https://github.com/faixan-akhtar/life-link/blob/main/client/src/FindDonor.jsx"
click node_request_ui "https://github.com/faixan-akhtar/life-link/blob/main/client/src/RequestBlood.jsx"
click node_dashboards "https://github.com/faixan-akhtar/life-link/blob/main/client/src/RecipientDashboard.jsx"
click node_contact_ui "https://github.com/faixan-akhtar/life-link/blob/main/client/src/ContactPage.jsx"
click node_express "https://github.com/faixan-akhtar/life-link/blob/main/server/server.js"
click node_auth_routes "https://github.com/faixan-akhtar/life-link/blob/main/server/routes/authRoute.js"
click node_donor_routes "https://github.com/faixan-akhtar/life-link/blob/main/server/routes/donorRoutes.js"
click node_request_routes "https://github.com/faixan-akhtar/life-link/blob/main/server/routes/requestRoute.js"
click node_donation_routes "https://github.com/faixan-akhtar/life-link/blob/main/server/routes/donationRoute.js"
click node_dashboard_routes "https://github.com/faixan-akhtar/life-link/blob/main/server/routes/donorDashboardRoutes.js"
click node_contact_routes "https://github.com/faixan-akhtar/life-link/blob/main/server/routes/contactRoute.js"
click node_auth "https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/authController.js"
click node_auth_middleware "https://github.com/faixan-akhtar/life-link/blob/main/server/middleware/authmiddleware.js"
click node_donor_ops "https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/donorController.js"
click node_request_ops "https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/requestController.js"
click node_donation_ops "https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/donationController.js"
click node_dashboard_ops "https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/donorDashboardController.js"
click node_contact_ops "https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/contactController.js"
click node_users "https://github.com/faixan-akhtar/life-link/blob/main/server/models/User.js"
click node_blood_requests "https://github.com/faixan-akhtar/life-link/blob/main/server/models/BloodRequest.js"
click node_responses "https://github.com/faixan-akhtar/life-link/blob/main/server/models/DonationResponse.js"
click node_dashboard_requests "https://github.com/faixan-akhtar/life-link/blob/main/server/models/donorDashboardBloodRequest.js"
click node_contact_records "https://github.com/faixan-akhtar/life-link/blob/main/server/models/Contact.js"
click node_db_config "https://github.com/faixan-akhtar/life-link/blob/main/server/config/db.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_react,node_account_ui,node_donor_ui,node_request_ui,node_dashboards,node_contact_ui toneBlue
class node_express,node_auth_routes,node_donor_routes,node_request_routes,node_donation_routes,node_dashboard_routes,node_contact_routes,node_auth,node_auth_middleware,node_mongodb toneAmber
class node_donor_ops,node_request_ops,node_donation_ops,node_dashboard_ops,node_contact_ops toneMint
class node_users,node_blood_requests,node_responses,node_dashboard_requests,node_contact_records,node_db_config toneRose
class node_people toneIndigo
```

## Components

### User experience

- [React routes](https://github.com/faixan-akhtar/life-link/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Account pages](https://github.com/faixan-akhtar/life-link/blob/main/client/src/RegisterPage.jsx): `client/src/RegisterPage.jsx`
- [Donor discovery](https://github.com/faixan-akhtar/life-link/blob/main/client/src/FindDonor.jsx): `client/src/FindDonor.jsx`
- [Request pages](https://github.com/faixan-akhtar/life-link/blob/main/client/src/RequestBlood.jsx): `client/src/RequestBlood.jsx`
- [Role dashboards](https://github.com/faixan-akhtar/life-link/blob/main/client/src/RecipientDashboard.jsx): `client/src/RecipientDashboard.jsx`
- [Contact page](https://github.com/faixan-akhtar/life-link/blob/main/client/src/ContactPage.jsx): `client/src/ContactPage.jsx`

### API and access

- [Express server](https://github.com/faixan-akhtar/life-link/blob/main/server/server.js): `server/server.js`
- [Authentication routes](https://github.com/faixan-akhtar/life-link/blob/main/server/routes/authRoute.js): `server/routes/authRoute.js`
- [Donor routes](https://github.com/faixan-akhtar/life-link/blob/main/server/routes/donorRoutes.js): `server/routes/donorRoutes.js`
- [Request routes](https://github.com/faixan-akhtar/life-link/blob/main/server/routes/requestRoute.js): `server/routes/requestRoute.js`
- [Donation routes](https://github.com/faixan-akhtar/life-link/blob/main/server/routes/donationRoute.js): `server/routes/donationRoute.js`
- [Dashboard routes](https://github.com/faixan-akhtar/life-link/blob/main/server/routes/donorDashboardRoutes.js): `server/routes/donorDashboardRoutes.js`
- [Contact routes](https://github.com/faixan-akhtar/life-link/blob/main/server/routes/contactRoute.js): `server/routes/contactRoute.js`
- [Authentication](https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/authController.js): `server/controllers/authController.js`
- [JWT verification](https://github.com/faixan-akhtar/life-link/blob/main/server/middleware/authmiddleware.js): `server/middleware/authmiddleware.js`

### Donation workflow

- [Donor operations](https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/donorController.js): `server/controllers/donorController.js`
- [Request operations](https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/requestController.js): `server/controllers/requestController.js`
- [Donation responses](https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/donationController.js): `server/controllers/donationController.js`
- [Donor dashboard operations](https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/donorDashboardController.js): `server/controllers/donorDashboardController.js`
- [Contact enquiries](https://github.com/faixan-akhtar/life-link/blob/main/server/controllers/contactController.js): `server/controllers/contactController.js`

### Persistence

- [User records](https://github.com/faixan-akhtar/life-link/blob/main/server/models/User.js): `server/models/User.js`
- [Blood requests](https://github.com/faixan-akhtar/life-link/blob/main/server/models/BloodRequest.js): `server/models/BloodRequest.js`
- [Donation responses](https://github.com/faixan-akhtar/life-link/blob/main/server/models/DonationResponse.js): `server/models/DonationResponse.js`
- [Dashboard request records](https://github.com/faixan-akhtar/life-link/blob/main/server/models/donorDashboardBloodRequest.js): `server/models/donorDashboardBloodRequest.js`
- [Contact records](https://github.com/faixan-akhtar/life-link/blob/main/server/models/Contact.js): `server/models/Contact.js`
- [MongoDB connection](https://github.com/faixan-akhtar/life-link/blob/main/server/config/db.js): `server/config/db.js`

### Other components

- **Donors and recipients**
- **MongoDB**

## Connections

- Donors and recipients → React routes: use app
- React routes → Account pages: routes to
- React routes → Donor discovery: routes to
- React routes → Request pages: routes to
- React routes → Role dashboards: routes to
- React routes → Contact page: routes to
- Express server → Authentication routes: mounts
- Express server → Donor routes: mounts
- Express server → Request routes: mounts
- Express server → Donation routes: mounts
- Express server → Dashboard routes: mounts
- Express server → Contact routes: mounts
- Authentication routes → Authentication: dispatches
- Donor routes → Donor operations: dispatches
- Request routes → Request operations: dispatches
- Donation routes → Donation responses: dispatches
- Dashboard routes → Donor dashboard operations: dispatches
- Contact routes → Contact enquiries: dispatches
- Donor routes → JWT verification: protects routes
- Dashboard routes → JWT verification: protects routes
- Authentication → User records: reads and writes
- Donor operations → User records: reads and writes
- Request operations → Blood requests: reads and writes
- Request operations → User records: finds donors
- Donation responses → Blood requests: reads and updates
- Donation responses → Donation responses: reads and updates
- Donor dashboard operations → User records: reads and updates
- Donor dashboard operations → Dashboard request records: reads and updates
- Contact enquiries → Contact records: persists enquiries
- Express server → MongoDB connection: connects through
- MongoDB connection → MongoDB: connects
