# dhanunjaya23-02-2006/uber-clone architecture

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

- Interactive diagram: https://gitdiagram.com/dhanunjaya23-02-2006/uber-clone
- Repository: https://github.com/dhanunjaya23-02-2006/uber-clone

## Overview

Uber Clone is a two-sided ride-hailing app. Riders authenticate, search addresses, review route and fare options, request and track rides; captains authenticate, share availability and location, accept nearby requests, verify pickup by OTP, and complete payment in cash or manually confirmed UPI. The backend routes these actions through controllers and services into MongoDB, with OpenRouteService and Socket.IO integrations. Frontend page-to-page and API wiring is only partly shown, so documented capabilities are represented without asserting unsampled call relationships.

Main entry points: [`backend/controllers/ride.controller.js`](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/ride.controller.js) (Ride Lifecycle), [`frontend/src/App.jsx`](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/App.jsx) (Client Routes), [`backend/middlewares/auth.middleware.js`](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/middlewares/auth.middleware.js) (Token Authorization), [`backend/routes/ride.routes.js`](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/ride.routes.js) (Ride Routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Rider and Captain Client"]
  node_app_routes["Client Routes<br/>[App.jsx]"]
  node_rider_trip["Rider Trip UI<br/>[Home.jsx]"]
  node_rider_ride["Rider Ride UI<br/>[Riding.jsx]"]
  node_captain_home["Captain Availability<br/>[CaptainHome.jsx]"]
  node_captain_trip["Captain Ride UI<br/>[CaptianRiding.jsx]"]
end

subgraph group_api["API and Identity"]
  node_user_auth["Rider Authentication<br/>[user.controller.js]"]
  node_captain_auth["Captain Account"]
  node_auth_middleware["Token Authorization<br/>[auth.middleware.js]"]
  node_user_routes["Rider Routes<br/>[user.routes.js]"]
  node_captain_routes["Captain Routes<br/>[captian.routes.js]"]
  node_maps_routes["Map Routes<br/>[maps.routes.js]"]
end

subgraph group_rides["Ride Operations"]
  node_ride_routes["Ride Routes<br/>[ride.routes.js]"]
  node_ride_controller["Ride Lifecycle<br/>[ride.controller.js]"]
  node_fare_service["Fare Calculation<br/>[ride.service.js]"]
end

subgraph group_data["Persistence and Mapping"]
  node_user_store[("Rider Records<br/>[user.js]")]
  node_captain_store[("Captain Records<br/>[captian.model.js]")]
  node_ride_store[("Ride Records<br/>[ride.model.js]")]
  node_token_store[("Token Blacklist")]
  node_map_controller["Map Queries<br/>[map.controller.js]"]
  node_map_service["Geocoding and Routing<br/>[maps.services.js]"]
end

subgraph group_realtime["Realtime Dispatch"]
  node_socket["Socket.IO Dispatch<br/>[socket.js]"]
end

node_rider(("Rider"))
node_captain_actor(("Captain"))
node_ors{{"OpenRouteService"}}
node_mongodb[("MongoDB")]

node_rider -->|"uses"| node_app_routes
node_captain_actor -->|"uses"| node_app_routes
node_app_routes -->|"routes to"| node_rider_trip
node_app_routes -->|"routes to"| node_rider_ride
node_app_routes -->|"routes to"| node_captain_home
node_app_routes -->|"routes to"| node_captain_trip
node_user_routes -->|"dispatches"| node_user_auth
node_captain_routes -->|"dispatches"| node_captain_auth
node_ride_routes -->|"dispatches"| node_ride_controller
node_maps_routes -->|"dispatches"| node_map_controller
node_user_routes -->|"authorizes"| node_auth_middleware
node_captain_routes -->|"authorizes"| node_auth_middleware
node_ride_routes -->|"authorizes"| node_auth_middleware
node_user_auth -->|"reads and writes"| node_user_store
node_user_auth -->|"blacklists"| node_token_store
node_captain_auth -->|"reads and writes"| node_captain_store
node_captain_auth -->|"aggregates stats"| node_ride_store
node_captain_auth -->|"blacklists"| node_token_store
node_auth_middleware -->|"loads rider"| node_user_store
node_auth_middleware -->|"loads captain"| node_captain_store
node_auth_middleware -->|"checks blacklist"| node_token_store
node_ride_controller -->|"updates rides"| node_ride_store
node_ride_controller -->|"loads rider socket"| node_user_store
node_ride_controller -->|"geocodes pickup"| node_map_service
node_ride_controller -->|"gets fare"| node_fare_service
node_ride_controller -->|"sends ride events"| node_socket
node_fare_service -->|"gets route metrics"| node_map_service
node_map_controller -->|"requests map data"| node_map_service
node_map_service -->|"searches nearby"| node_captain_store
node_map_service -->|"requests geocoding and routes"| node_ors
node_mongodb -.->|"stores"| node_user_store
node_mongodb -.->|"stores"| node_captain_store
node_mongodb -.->|"stores"| node_ride_store
node_mongodb -.->|"stores"| node_token_store
node_rider_trip -.->|"requests rides"| node_ride_routes
node_captain_home -.->|"accepts offers"| node_ride_routes
node_captain_trip -.->|"updates ride"| node_ride_routes

click node_app_routes "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/App.jsx"
click node_rider_trip "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/Home.jsx"
click node_rider_ride "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/Riding.jsx"
click node_captain_home "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/CaptainHome.jsx"
click node_captain_trip "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/CaptianRiding.jsx"
click node_user_auth "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/user.controller.js"
click node_captain_auth "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/captian.controller.js"
click node_auth_middleware "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/middlewares/auth.middleware.js"
click node_user_routes "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/user.routes.js"
click node_captain_routes "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/captian.routes.js"
click node_maps_routes "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/maps.routes.js"
click node_ride_routes "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/ride.routes.js"
click node_ride_controller "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/ride.controller.js"
click node_fare_service "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/services/ride.service.js"
click node_user_store "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/user.js"
click node_captain_store "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/captian.model.js"
click node_ride_store "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/ride.model.js"
click node_token_store "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/blacklistToken.model.js"
click node_map_controller "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/map.controller.js"
click node_map_service "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/services/maps.services.js"
click node_socket "https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/socket.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_routes,node_rider_trip,node_rider_ride,node_captain_home,node_captain_trip toneBlue
class node_user_auth,node_captain_auth,node_auth_middleware,node_user_routes,node_captain_routes,node_maps_routes,node_mongodb toneAmber
class node_ride_routes,node_ride_controller,node_fare_service,node_ors toneMint
class node_user_store,node_captain_store,node_ride_store,node_token_store,node_map_controller,node_map_service toneRose
class node_socket,node_rider,node_captain_actor toneIndigo
```

## Components

### Rider and Captain Client

- [Client Routes](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Rider Trip UI](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/Home.jsx): `frontend/src/pages/Home.jsx`
- [Rider Ride UI](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/Riding.jsx): `frontend/src/pages/Riding.jsx`
- [Captain Availability](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/CaptainHome.jsx): `frontend/src/pages/CaptainHome.jsx`
- [Captain Ride UI](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/frontend/src/pages/CaptianRiding.jsx): `frontend/src/pages/CaptianRiding.jsx`

### API and Identity

- [Rider Authentication](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/user.controller.js): `backend/controllers/user.controller.js`
- [Captain Account](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/captian.controller.js): `backend/controllers/captian.controller.js`
- [Token Authorization](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/middlewares/auth.middleware.js): `backend/middlewares/auth.middleware.js`
- [Rider Routes](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/user.routes.js): `backend/routes/user.routes.js`
- [Captain Routes](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/captian.routes.js): `backend/routes/captian.routes.js`
- [Map Routes](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/maps.routes.js): `backend/routes/maps.routes.js`

### Ride Operations

- [Ride Routes](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/routes/ride.routes.js): `backend/routes/ride.routes.js`
- [Ride Lifecycle](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/ride.controller.js): `backend/controllers/ride.controller.js`
- [Fare Calculation](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/services/ride.service.js): `backend/services/ride.service.js`

### Persistence and Mapping

- [Rider Records](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/user.js): `backend/models/user.js`
- [Captain Records](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/captian.model.js): `backend/models/captian.model.js`
- [Ride Records](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/ride.model.js): `backend/models/ride.model.js`
- [Token Blacklist](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/models/blacklistToken.model.js): `backend/models/blacklistToken.model.js`
- [Map Queries](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/controllers/map.controller.js): `backend/controllers/map.controller.js`
- [Geocoding and Routing](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/services/maps.services.js): `backend/services/maps.services.js`

### Realtime Dispatch

- [Socket.IO Dispatch](https://github.com/dhanunjaya23-02-2006/uber-clone/blob/main/backend/socket.js): `backend/socket.js`

### Other components

- **Rider**
- **Captain**
- **OpenRouteService**
- **MongoDB**

## Connections

- Rider → Client Routes: uses (evidence: `frontend/src/App.jsx`)
- Captain → Client Routes: uses (evidence: `frontend/src/App.jsx`)
- Client Routes → Rider Trip UI: routes to (evidence: `frontend/src/App.jsx`)
- Client Routes → Rider Ride UI: routes to (evidence: `frontend/src/App.jsx`)
- Client Routes → Captain Availability: routes to (evidence: `frontend/src/App.jsx`)
- Client Routes → Captain Ride UI: routes to (evidence: `frontend/src/App.jsx`)
- Rider Routes → Rider Authentication: dispatches (evidence: `backend/routes/user.routes.js`)
- Captain Routes → Captain Account: dispatches (evidence: `backend/routes/captian.routes.js`)
- Ride Routes → Ride Lifecycle: dispatches (evidence: `backend/routes/ride.routes.js`)
- Map Routes → Map Queries: dispatches (evidence: `backend/routes/maps.routes.js`)
- Rider Routes → Token Authorization: authorizes (evidence: `backend/routes/user.routes.js`)
- Captain Routes → Token Authorization: authorizes (evidence: `backend/routes/captian.routes.js`)
- Ride Routes → Token Authorization: authorizes (evidence: `backend/routes/ride.routes.js`)
- Rider Authentication → Rider Records: reads and writes (evidence: `backend/controllers/user.controller.js`)
- Rider Authentication → Token Blacklist: blacklists (evidence: `backend/controllers/user.controller.js`)
- Captain Account → Captain Records: reads and writes (evidence: `backend/controllers/captian.controller.js`)
- Captain Account → Ride Records: aggregates stats (evidence: `backend/controllers/captian.controller.js`)
- Captain Account → Token Blacklist: blacklists (evidence: `backend/controllers/captian.controller.js`)
- Token Authorization → Rider Records: loads rider (evidence: `backend/middlewares/auth.middleware.js`)
- Token Authorization → Captain Records: loads captain (evidence: `backend/middlewares/auth.middleware.js`)
- Token Authorization → Token Blacklist: checks blacklist (evidence: `backend/middlewares/auth.middleware.js`)
- Ride Lifecycle → Ride Records: updates rides (evidence: `backend/controllers/ride.controller.js`)
- Ride Lifecycle → Rider Records: loads rider socket (evidence: `backend/controllers/ride.controller.js`)
- Ride Lifecycle → Geocoding and Routing: geocodes pickup (evidence: `backend/controllers/ride.controller.js`)
- Ride Lifecycle → Fare Calculation: gets fare (evidence: `backend/controllers/ride.controller.js`)
- Ride Lifecycle → Socket.IO Dispatch: sends ride events (evidence: `backend/controllers/ride.controller.js`)
- Fare Calculation → Geocoding and Routing: gets route metrics (evidence: `backend/services/ride.service.js`)
- Map Queries → Geocoding and Routing: requests map data (evidence: `backend/controllers/map.controller.js`)
- Geocoding and Routing → Captain Records: searches nearby (evidence: `backend/services/maps.services.js`)
- Geocoding and Routing → OpenRouteService: requests geocoding and routes (evidence: `backend/services/maps.services.js`)
- MongoDB → Rider Records: stores
- MongoDB → Captain Records: stores
- MongoDB → Ride Records: stores
- MongoDB → Token Blacklist: stores
- Rider Trip UI → Ride Routes: requests rides
- Captain Availability → Ride Routes: accepts offers
- Captain Ride UI → Ride Routes: updates ride
