# sijan2006/momoexpress architecture

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

- Interactive diagram: https://gitdiagram.com/sijan2006/momoexpress
- Repository: https://github.com/sijan2006/momoexpress

## Overview

MomoExpress is a restaurant ordering and management system: customers browse a menu, order for delivery or dine-in, and view their orders; administrators manage menu availability and order status. The React client communicates with an Express API backed by Sequelize/MySQL. The README documents authenticated delivery, guest dine-in, and five-second admin order polling; some client page details and integrations are represented at subsystem level because their implementation was not excerpted.

Main entry points: [`client/src/App.tsx`](https://github.com/sijan2006/momoexpress/blob/main/client/src/App.tsx) (SPA Routing), [`server/routes/OrderRoutes.js`](https://github.com/sijan2006/momoexpress/blob/main/server/routes/OrderRoutes.js) (Order Routes), [`client/src/services/api.ts`](https://github.com/sijan2006/momoexpress/blob/main/client/src/services/api.ts) (API Client), [`server/config/database.js`](https://github.com/sijan2006/momoexpress/blob/main/server/config/database.js) (Sequelize Connection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Customer and Admin Client"]
  node_app["SPA Routing<br/>[App.tsx]"]
  node_auth_state["Auth State<br/>[AuthContext.tsx]"]
  node_route_guard["Role Guards"]
  node_menu_ui["Menu and Cart<br/>[menu.tsx]"]
  node_home_ui["Home Discovery<br/>[home.tsx]"]
  node_featured["Featured Items<br/>[featuredItems.tsx]"]
  node_register_ui["Registration<br/>[Register.tsx]"]
  node_login_ui["Login<br/>[login.tsx]"]
  node_customer_orders["Order Tracking<br/>[CustomerOrders.tsx]"]
  node_admin_ui["Order Dashboard<br/>[admin.tsx]"]
  node_api_client["API Client<br/>[api.ts]"]
end

subgraph group_api["REST API"]
  node_server["Express Server<br/>[server.js]"]
  node_auth_routes["Authentication Routes<br/>[AuthRoutes.js]"]
  node_menu_routes["Menu Routes<br/>[MenuRoutes.js]"]
  node_order_routes["Order Routes<br/>[OrderRoutes.js]"]
end

subgraph group_domain["Ordering Domain"]
  node_menu_model["Menu Catalog<br/>[MenuItem.js]"]
  node_order_model["Order Records<br/>[Order.js]"]
  node_order_item_model["Order Lines<br/>[OrderItem.js]"]
  node_user_model["User Accounts<br/>[User.js]"]
end

subgraph group_data["Persistence"]
  node_database_config["Sequelize Connection<br/>[database.js]"]
end

node_customer(("Customer"))
node_admin_actor(("Administrator"))
node_mysql[("MySQL Database")]

node_customer -->|"uses"| node_app
node_admin_actor -->|"uses"| node_app
node_app -->|"reads auth"| node_auth_state
node_app -->|"guards routes"| node_route_guard
node_app -->|"routes to"| node_home_ui
node_app -->|"routes to"| node_menu_ui
node_app -->|"routes to"| node_register_ui
node_app -->|"routes to"| node_login_ui
node_app -->|"routes to"| node_customer_orders
node_app -->|"routes to"| node_admin_ui
node_home_ui -->|"renders"| node_featured
node_route_guard -->|"checks role"| node_auth_state
node_menu_ui -->|"requests data"| node_api_client
node_featured -->|"requests items"| node_api_client
node_register_ui -->|"submits registration"| node_api_client
node_login_ui -->|"submits login"| node_api_client
node_login_ui -->|"sets session"| node_auth_state
node_customer_orders -->|"loads orders"| node_api_client
node_admin_ui -->|"manages orders"| node_api_client
node_api_client -->|"sends API requests"| node_server
node_server -->|"mounts at /auth"| node_auth_routes
node_server -->|"mounts at /menu"| node_menu_routes
node_server -->|"mounts at /orders"| node_order_routes
node_menu_routes -->|"reads and writes"| node_menu_model
node_order_routes -->|"creates and queries"| node_order_model
node_order_routes -->|"creates order lines"| node_order_item_model
node_order_routes -->|"looks up items"| node_menu_model
node_order_routes -->|"includes users"| node_user_model
node_auth_routes -->|"uses accounts"| node_user_model
node_server -->|"syncs schema"| node_database_config
node_menu_model -->|"uses connection"| node_database_config
node_order_model -->|"uses connection"| node_database_config
node_order_item_model -->|"uses connection"| node_database_config
node_user_model -->|"uses connection"| node_database_config
node_database_config -->|"connects to"| node_mysql
node_customer -->|"places orders"| node_order_routes
node_admin_actor -->|"updates status"| node_order_routes

click node_app "https://github.com/sijan2006/momoexpress/blob/main/client/src/App.tsx"
click node_auth_state "https://github.com/sijan2006/momoexpress/blob/main/client/src/context/AuthContext.tsx"
click node_route_guard "https://github.com/sijan2006/momoexpress/blob/main/client/src/components/ProtectedRoutes.tsx"
click node_menu_ui "https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/menu.tsx"
click node_home_ui "https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/home.tsx"
click node_featured "https://github.com/sijan2006/momoexpress/blob/main/client/src/components/featuredItems.tsx"
click node_register_ui "https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/Register.tsx"
click node_login_ui "https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/login.tsx"
click node_customer_orders "https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/CustomerOrders.tsx"
click node_admin_ui "https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/admin.tsx"
click node_api_client "https://github.com/sijan2006/momoexpress/blob/main/client/src/services/api.ts"
click node_server "https://github.com/sijan2006/momoexpress/blob/main/server/server.js"
click node_auth_routes "https://github.com/sijan2006/momoexpress/blob/main/server/routes/AuthRoutes.js"
click node_menu_routes "https://github.com/sijan2006/momoexpress/blob/main/server/routes/MenuRoutes.js"
click node_order_routes "https://github.com/sijan2006/momoexpress/blob/main/server/routes/OrderRoutes.js"
click node_menu_model "https://github.com/sijan2006/momoexpress/blob/main/server/models/MenuItem.js"
click node_order_model "https://github.com/sijan2006/momoexpress/blob/main/server/models/Order.js"
click node_order_item_model "https://github.com/sijan2006/momoexpress/blob/main/server/models/OrderItem.js"
click node_user_model "https://github.com/sijan2006/momoexpress/blob/main/server/models/User.js"
click node_database_config "https://github.com/sijan2006/momoexpress/blob/main/server/config/database.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_auth_state,node_route_guard,node_menu_ui,node_home_ui,node_featured,node_register_ui,node_login_ui,node_customer_orders,node_admin_ui,node_api_client toneBlue
class node_server,node_auth_routes,node_menu_routes,node_order_routes,node_mysql toneAmber
class node_menu_model,node_order_model,node_order_item_model,node_user_model toneMint
class node_database_config toneRose
class node_customer,node_admin_actor toneIndigo
```

## Components

### Customer and Admin Client

- [SPA Routing](https://github.com/sijan2006/momoexpress/blob/main/client/src/App.tsx): `client/src/App.tsx`
- [Auth State](https://github.com/sijan2006/momoexpress/blob/main/client/src/context/AuthContext.tsx): `client/src/context/AuthContext.tsx`
- [Role Guards](https://github.com/sijan2006/momoexpress/blob/main/client/src/components/ProtectedRoutes.tsx): `client/src/components/ProtectedRoutes.tsx`
- [Menu and Cart](https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/menu.tsx): `client/src/pages/menu.tsx`
- [Home Discovery](https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/home.tsx): `client/src/pages/home.tsx`
- [Featured Items](https://github.com/sijan2006/momoexpress/blob/main/client/src/components/featuredItems.tsx): `client/src/components/featuredItems.tsx`
- [Registration](https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/Register.tsx): `client/src/pages/Register.tsx`
- [Login](https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/login.tsx): `client/src/pages/login.tsx`
- [Order Tracking](https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/CustomerOrders.tsx): `client/src/pages/CustomerOrders.tsx`
- [Order Dashboard](https://github.com/sijan2006/momoexpress/blob/main/client/src/pages/admin.tsx): `client/src/pages/admin.tsx`
- [API Client](https://github.com/sijan2006/momoexpress/blob/main/client/src/services/api.ts): `client/src/services/api.ts`

### REST API

- [Express Server](https://github.com/sijan2006/momoexpress/blob/main/server/server.js): `server/server.js`
- [Authentication Routes](https://github.com/sijan2006/momoexpress/blob/main/server/routes/AuthRoutes.js): `server/routes/AuthRoutes.js`
- [Menu Routes](https://github.com/sijan2006/momoexpress/blob/main/server/routes/MenuRoutes.js): `server/routes/MenuRoutes.js`
- [Order Routes](https://github.com/sijan2006/momoexpress/blob/main/server/routes/OrderRoutes.js): `server/routes/OrderRoutes.js`

### Ordering Domain

- [Menu Catalog](https://github.com/sijan2006/momoexpress/blob/main/server/models/MenuItem.js): `server/models/MenuItem.js`
- [Order Records](https://github.com/sijan2006/momoexpress/blob/main/server/models/Order.js): `server/models/Order.js`
- [Order Lines](https://github.com/sijan2006/momoexpress/blob/main/server/models/OrderItem.js): `server/models/OrderItem.js`
- [User Accounts](https://github.com/sijan2006/momoexpress/blob/main/server/models/User.js): `server/models/User.js`

### Persistence

- [Sequelize Connection](https://github.com/sijan2006/momoexpress/blob/main/server/config/database.js): `server/config/database.js`

### Other components

- **Customer**
- **Administrator**
- **MySQL Database**

## Connections

- Customer → SPA Routing: uses (evidence: `client/src/App.tsx`)
- Administrator → SPA Routing: uses (evidence: `client/src/App.tsx`)
- SPA Routing → Auth State: reads auth (evidence: `client/src/App.tsx`)
- SPA Routing → Role Guards: guards routes (evidence: `client/src/App.tsx`)
- SPA Routing → Home Discovery: routes to (evidence: `client/src/App.tsx`)
- SPA Routing → Menu and Cart: routes to (evidence: `client/src/App.tsx`)
- SPA Routing → Registration: routes to (evidence: `client/src/App.tsx`)
- SPA Routing → Login: routes to (evidence: `client/src/App.tsx`)
- SPA Routing → Order Tracking: routes to (evidence: `client/src/App.tsx`)
- SPA Routing → Order Dashboard: routes to (evidence: `client/src/App.tsx`)
- Home Discovery → Featured Items: renders (evidence: `client/src/pages/home.tsx`)
- Role Guards → Auth State: checks role (evidence: `client/src/components/ProtectedRoutes.tsx`)
- Menu and Cart → API Client: requests data (evidence: `client/src/pages/menu.tsx`)
- Featured Items → API Client: requests items (evidence: `client/src/components/featuredItems.tsx`)
- Registration → API Client: submits registration (evidence: `client/src/pages/Register.tsx`)
- Login → API Client: submits login (evidence: `client/src/pages/login.tsx`)
- Login → Auth State: sets session (evidence: `client/src/pages/login.tsx`)
- Order Tracking → API Client: loads orders (evidence: `client/src/pages/CustomerOrders.tsx`)
- Order Dashboard → API Client: manages orders (evidence: `client/src/pages/admin.tsx`)
- API Client → Express Server: sends API requests (evidence: `readme.md`)
- Express Server → Authentication Routes: mounts at /auth (evidence: `server/server.js`)
- Express Server → Menu Routes: mounts at /menu (evidence: `server/server.js`)
- Express Server → Order Routes: mounts at /orders (evidence: `server/server.js`)
- Menu Routes → Menu Catalog: reads and writes (evidence: `server/routes/MenuRoutes.js`)
- Order Routes → Order Records: creates and queries (evidence: `server/routes/OrderRoutes.js`)
- Order Routes → Order Lines: creates order lines (evidence: `server/routes/OrderRoutes.js`)
- Order Routes → Menu Catalog: looks up items (evidence: `server/routes/OrderRoutes.js`)
- Order Routes → User Accounts: includes users (evidence: `server/routes/OrderRoutes.js`)
- Authentication Routes → User Accounts: uses accounts (evidence: `server/routes/AuthRoutes.js`)
- Express Server → Sequelize Connection: syncs schema (evidence: `server/server.js`)
- Menu Catalog → Sequelize Connection: uses connection (evidence: `server/models/MenuItem.js`)
- Order Records → Sequelize Connection: uses connection (evidence: `server/models/Order.js`)
- Order Lines → Sequelize Connection: uses connection (evidence: `server/models/OrderItem.js`)
- User Accounts → Sequelize Connection: uses connection (evidence: `server/models/User.js`)
- Sequelize Connection → MySQL Database: connects to (evidence: `server/config/database.js`)
- Customer → Order Routes: places orders (evidence: `readme.md`)
- Administrator → Order Routes: updates status (evidence: `server/routes/OrderRoutes.js`)
