# chatok-jnr/bitenow architecture

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

- Interactive diagram: https://gitdiagram.com/chatok-jnr/bitenow
- Repository: https://github.com/chatok-jnr/bitenow

## Overview

BiteNow is a multi-role food-delivery platform: customers discover food, manage carts and place orders; restaurant owners manage listings and orders; riders handle delivery; administrators oversee approvals and operations. Three frontends use a shared Express API, with MongoDB-backed domain records and Socket.IO for real-time capabilities. The README documents broader features such as payments, maps, email and media storage; where implementation wiring is not shown, those links are omitted or left unverified.

Main entry points: [`backend/app.js`](https://github.com/chatok-jnr/bitenow/blob/main/backend/app.js) (REST API), [`backend/models`](https://github.com/chatok-jnr/bitenow/tree/main/backend/models) (MongoDB records), [`backend/routes/authRoutes.js`](https://github.com/chatok-jnr/bitenow/blob/main/backend/routes/authRoutes.js) (Auth routes), [`backend/controllers/orderController.js`](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/orderController.js) (Order lifecycle)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User applications"]
  node_customer_ui["Customer app"]
  node_owner_ui["Owner portal"]
  node_rider_ui["Rider app"]
  node_admin_ui["Admin dashboard"]
end

subgraph group_api["API and identity"]
  node_api_app["REST API<br/>[app.js]"]
  node_auth_routes["Auth routes<br/>[authRoutes.js]"]
  node_auth_controller["Authentication<br/>[authController.js]"]
  node_auth_guard["Access control<br/>[authMiddleware.js]"]
  node_admin_ops["Admin operations<br/>[adminController.js]"]
end

subgraph group_commerce["Delivery domains"]
  node_catalog["Restaurant catalog"]
  node_food_menu["Food menu<br/>[foodController.js]"]
  node_cart["Cart management<br/>[cartModel.js]"]
  node_orders["Order lifecycle<br/>[orderController.js]"]
  node_owner_ops["Owner operations"]
  node_rider_ops["Rider operations<br/>[riderController.js]"]
  node_locations["Location services"]
end

subgraph group_platform["Data and integrations"]
  node_live_updates["Live updates<br/>[socketService.js]"]
  node_media["Media storage<br/>[cloudinary.js]"]
  node_email["Email notifications<br/>[sendEmail.js]"]
  node_mongo[("MongoDB records")]
  node_socket["Socket.IO server<br/>[socket.js]"]
end

node_external_users(("Customers, owners, riders"))
node_administrators(("Administrators"))
node_cloudinary_service[("Cloudinary")]
node_email_service["Email provider"]

node_external_users -->|"browse and order"| node_customer_ui
node_external_users -->|"manage restaurants"| node_owner_ui
node_external_users -->|"deliver orders"| node_rider_ui
node_administrators -->|"administer platform"| node_admin_ui
node_customer_ui -->|"use REST API"| node_api_app
node_owner_ui -->|"use REST API"| node_api_app
node_rider_ui -->|"use REST API"| node_api_app
node_admin_ui -->|"use REST API"| node_api_app
node_api_app -->|"mounts routes"| node_auth_routes
node_auth_routes -->|"dispatches auth"| node_auth_controller
node_auth_routes -->|"handles OAuth callback"| node_auth_controller
node_auth_controller -->|"reads and writes accounts"| node_mongo
node_auth_routes -.->|"uses access control"| node_auth_guard
node_api_app -.->|"routes admin requests"| node_admin_ops
node_api_app -.->|"routes catalog requests"| node_catalog
node_catalog -->|"reads and writes"| node_mongo
node_catalog -.->|"uploads media"| node_media
node_api_app -.->|"routes menu requests"| node_food_menu
node_api_app -.->|"routes cart requests"| node_cart
node_api_app -.->|"routes order requests"| node_orders
node_orders -->|"reads and writes"| node_mongo
node_api_app -.->|"routes owner requests"| node_owner_ops
node_owner_ops -->|"reads and writes"| node_mongo
node_owner_ops -->|"uploads media"| node_media
node_api_app -.->|"routes rider requests"| node_rider_ops
node_rider_ops -->|"reads and writes"| node_mongo
node_rider_ops -->|"uploads media"| node_media
node_admin_ops -->|"reads and writes"| node_mongo
node_orders -.->|"not verified"| node_live_updates
node_live_updates -->|"uses socket server"| node_socket
node_orders -.->|"location workflow"| node_locations
node_auth_controller -.->|"email workflow"| node_email
node_media -.->|"stores media"| node_cloudinary_service
node_email -.->|"sends messages"| node_email_service

click node_customer_ui "https://github.com/chatok-jnr/bitenow/tree/main/frontend/src/pages/customer"
click node_owner_ui "https://github.com/chatok-jnr/bitenow/tree/main/frontend/src/pages/RestaurantOwner"
click node_rider_ui "https://github.com/chatok-jnr/bitenow/tree/main/frontend/src/pages/rider"
click node_admin_ui "https://github.com/chatok-jnr/bitenow/tree/main/admin/src/pages"
click node_api_app "https://github.com/chatok-jnr/bitenow/blob/main/backend/app.js"
click node_auth_routes "https://github.com/chatok-jnr/bitenow/blob/main/backend/routes/authRoutes.js"
click node_auth_controller "https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/authController.js"
click node_auth_guard "https://github.com/chatok-jnr/bitenow/blob/main/backend/middleware/authMiddleware.js"
click node_admin_ops "https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/adminController.js"
click node_catalog "https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/restaurantController.js"
click node_food_menu "https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/foodController.js"
click node_cart "https://github.com/chatok-jnr/bitenow/blob/main/backend/models/cartModel.js"
click node_orders "https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/orderController.js"
click node_owner_ops "https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/restaurantOwnerController.js"
click node_rider_ops "https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/riderController.js"
click node_locations "https://github.com/chatok-jnr/bitenow/blob/main/backend/services/locationServices.js"
click node_live_updates "https://github.com/chatok-jnr/bitenow/blob/main/backend/services/socketService.js"
click node_media "https://github.com/chatok-jnr/bitenow/blob/main/backend/utils/cloudinary.js"
click node_email "https://github.com/chatok-jnr/bitenow/blob/main/backend/utils/sendEmail.js"
click node_mongo "https://github.com/chatok-jnr/bitenow/tree/main/backend/models"
click node_socket "https://github.com/chatok-jnr/bitenow/blob/main/backend/configuration/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_customer_ui,node_owner_ui,node_rider_ui,node_admin_ui toneBlue
class node_api_app,node_auth_routes,node_auth_controller,node_auth_guard,node_admin_ops,node_cloudinary_service toneAmber
class node_catalog,node_food_menu,node_cart,node_orders,node_owner_ops,node_rider_ops,node_locations toneMint
class node_live_updates,node_media,node_email,node_mongo,node_socket toneRose
class node_external_users,node_administrators,node_email_service toneIndigo
```

## Components

### User applications

- [Customer app](https://github.com/chatok-jnr/bitenow/tree/main/frontend/src/pages/customer): `frontend/src/pages/customer`
- [Owner portal](https://github.com/chatok-jnr/bitenow/tree/main/frontend/src/pages/RestaurantOwner): `frontend/src/pages/RestaurantOwner`
- [Rider app](https://github.com/chatok-jnr/bitenow/tree/main/frontend/src/pages/rider): `frontend/src/pages/rider`
- [Admin dashboard](https://github.com/chatok-jnr/bitenow/tree/main/admin/src/pages): `admin/src/pages`

### API and identity

- [REST API](https://github.com/chatok-jnr/bitenow/blob/main/backend/app.js): `backend/app.js`
- [Auth routes](https://github.com/chatok-jnr/bitenow/blob/main/backend/routes/authRoutes.js): `backend/routes/authRoutes.js`
- [Authentication](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/authController.js): `backend/controllers/authController.js`
- [Access control](https://github.com/chatok-jnr/bitenow/blob/main/backend/middleware/authMiddleware.js): `backend/middleware/authMiddleware.js`
- [Admin operations](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/adminController.js): `backend/controllers/adminController.js`

### Delivery domains

- [Restaurant catalog](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/restaurantController.js): `backend/controllers/restaurantController.js`
- [Food menu](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/foodController.js): `backend/controllers/foodController.js`
- [Cart management](https://github.com/chatok-jnr/bitenow/blob/main/backend/models/cartModel.js): `backend/models/cartModel.js`
- [Order lifecycle](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/orderController.js): `backend/controllers/orderController.js`
- [Owner operations](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/restaurantOwnerController.js): `backend/controllers/restaurantOwnerController.js`
- [Rider operations](https://github.com/chatok-jnr/bitenow/blob/main/backend/controllers/riderController.js): `backend/controllers/riderController.js`
- [Location services](https://github.com/chatok-jnr/bitenow/blob/main/backend/services/locationServices.js): `backend/services/locationServices.js`

### Data and integrations

- [Live updates](https://github.com/chatok-jnr/bitenow/blob/main/backend/services/socketService.js): `backend/services/socketService.js`
- [Media storage](https://github.com/chatok-jnr/bitenow/blob/main/backend/utils/cloudinary.js): `backend/utils/cloudinary.js`
- [Email notifications](https://github.com/chatok-jnr/bitenow/blob/main/backend/utils/sendEmail.js): `backend/utils/sendEmail.js`
- [MongoDB records](https://github.com/chatok-jnr/bitenow/tree/main/backend/models): `backend/models`
- [Socket.IO server](https://github.com/chatok-jnr/bitenow/blob/main/backend/configuration/socket.js): `backend/configuration/socket.js`

### Other components

- **Customers, owners, riders**
- **Administrators**
- **Cloudinary**
- **Email provider**

## Connections

- Customers, owners, riders → Customer app: browse and order
- Customers, owners, riders → Owner portal: manage restaurants
- Customers, owners, riders → Rider app: deliver orders
- Administrators → Admin dashboard: administer platform
- Customer app → REST API: use REST API
- Owner portal → REST API: use REST API
- Rider app → REST API: use REST API
- Admin dashboard → REST API: use REST API
- REST API → Auth routes: mounts routes (evidence: `backend/app.js`)
- Auth routes → Authentication: dispatches auth (evidence: `backend/routes/authRoutes.js`)
- Auth routes → Authentication: handles OAuth callback (evidence: `backend/routes/authRoutes.js`)
- Authentication → MongoDB records: reads and writes accounts (evidence: `backend/controllers/authController.js`)
- Auth routes → Access control: uses access control
- REST API → Admin operations: routes admin requests
- REST API → Restaurant catalog: routes catalog requests
- Restaurant catalog → MongoDB records: reads and writes (evidence: `backend/controllers/restaurantController.js`)
- Restaurant catalog → Media storage: uploads media (evidence: `backend/controllers/restaurantController.js`)
- REST API → Food menu: routes menu requests
- REST API → Cart management: routes cart requests
- REST API → Order lifecycle: routes order requests
- Order lifecycle → MongoDB records: reads and writes (evidence: `backend/controllers/orderController.js`)
- REST API → Owner operations: routes owner requests
- Owner operations → MongoDB records: reads and writes (evidence: `backend/controllers/restaurantOwnerController.js`)
- Owner operations → Media storage: uploads media (evidence: `backend/controllers/restaurantOwnerController.js`)
- REST API → Rider operations: routes rider requests
- Rider operations → MongoDB records: reads and writes (evidence: `backend/controllers/riderController.js`)
- Rider operations → Media storage: uploads media (evidence: `backend/controllers/riderController.js`)
- Admin operations → MongoDB records: reads and writes (evidence: `backend/controllers/adminController.js`)
- Order lifecycle → Live updates: not verified
- Live updates → Socket.IO server: uses socket server (evidence: `backend/services/socketService.js`)
- Order lifecycle → Location services: location workflow
- Authentication → Email notifications: email workflow (evidence: `backend/controllers/authController.js`)
- Media storage → Cloudinary: stores media
- Email notifications → Email provider: sends messages
