# flashfoods2024/flashfoods architecture

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

- Interactive diagram: https://gitdiagram.com/flashfoods2024/flashfoods
- Repository: https://github.com/flashfoods2024/flashfoods

## Overview

FlashFoods is a college-canteen pre-ordering application with student, vendor, and admin workflows; its package description also identifies OTP pickup verification. The likely core journey is account access, browsing a shop menu, placing an order, and vendor fulfillment, with payment and pickup stages. The sampled code confirms server routing, authentication persistence, Razorpay webhook handling, vendor pending-order counts, and browser push-token registration. The README is only a placeholder, and unsampled route implementations limit confidence about the detailed ordering and menu-import wiring.

Main entry points: [`server.js`](https://github.com/flashfoods2024/flashfoods/blob/main/server.js) (Web application), [`routes/webhooks.js`](https://github.com/flashfoods2024/flashfoods/blob/main/routes/webhooks.js) (Payment webhooks), [`socket/index.js`](https://github.com/flashfoods2024/flashfoods/blob/main/socket/index.js) (Live order counts), [`routes/auth.js`](https://github.com/flashfoods2024/flashfoods/blob/main/routes/auth.js) (Account access)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_access["Access and identity"]
  node_auth["Account access<br/>[auth.js]"]
  node_identity["Identity API<br/>[authMe.js]"]
  node_authmw["Session identity<br/>[auth.js]"]
  node_userstore[("Users<br/>[User.js]")]
  node_profile["Profile<br/>[profile.js]"]
end

subgraph group_ordering["Canteen ordering"]
  node_shops["Shop discovery<br/>[shops.js]"]
  node_menu["Menus<br/>[menu.js]"]
  node_cart["Cart<br/>[cart.js]"]
  node_orders["Order handling<br/>[orders.js]"]
  node_orderstore[("Orders<br/>[Order.js]")]
  node_menustore[("Menu items<br/>[MenuItem.js]")]
  node_shopstore[("Shops<br/>[Shop.js]")]
end

subgraph group_operations["Vendor operations"]
  node_vendorops["Vendor operations<br/>[vendor.js]"]
  node_adminops["Administration<br/>[admin.js]"]
  node_menuimport["Menu import"]
end

subgraph group_platform["Platform services"]
  node_app["Web application<br/>[server.js]"]
  node_webhooks["Payment webhooks<br/>[webhooks.js]"]
  node_socket["Live order counts<br/>[index.js]"]
  node_fcmclient["Push registration<br/>[firebase-client.js]"]
  node_fcmapi["Push API<br/>[fcm.js]"]
  node_dispatch["Order notifications"]
end

node_student(("Student"))
node_vendor(("Vendor"))
node_admin(("Admin"))
node_razorpay["Razorpay"]
node_vendorbrowser["Vendor browser"]

node_student -->|"uses"| node_app
node_vendor -->|"uses"| node_app
node_admin -->|"uses"| node_app
node_app -->|"mounts"| node_auth
node_app -->|"mounts"| node_identity
node_app -->|"mounts"| node_shops
node_app -->|"mounts"| node_menu
node_app -->|"mounts"| node_cart
node_app -->|"mounts"| node_orders
node_app -->|"mounts"| node_vendorops
node_app -->|"mounts"| node_adminops
node_app -->|"mounts"| node_profile
node_app -->|"mounts"| node_webhooks
node_app -->|"mounts"| node_fcmapi
node_app -->|"loads identity"| node_authmw
node_authmw -->|"reads user"| node_userstore
node_auth -->|"reads/writes users"| node_userstore
node_razorpay -->|"sends events"| node_webhooks
node_webhooks -->|"reads/writes orders"| node_orderstore
node_webhooks -->|"reads shop settings"| node_shopstore
node_webhooks -->|"refreshes counts"| node_socket
node_webhooks -->|"dispatches notification"| node_dispatch
node_vendorbrowser -->|"joins shop"| node_socket
node_socket -->|"counts paid orders"| node_orderstore
node_socket -->|"sends pending count"| node_vendorbrowser
node_fcmclient -->|"registers token"| node_fcmapi

click node_app "https://github.com/flashfoods2024/flashfoods/blob/main/server.js"
click node_auth "https://github.com/flashfoods2024/flashfoods/blob/main/routes/auth.js"
click node_identity "https://github.com/flashfoods2024/flashfoods/blob/main/routes/api/authMe.js"
click node_authmw "https://github.com/flashfoods2024/flashfoods/blob/main/middleware/auth.js"
click node_userstore "https://github.com/flashfoods2024/flashfoods/blob/main/models/User.js"
click node_shops "https://github.com/flashfoods2024/flashfoods/blob/main/routes/shops.js"
click node_menu "https://github.com/flashfoods2024/flashfoods/blob/main/routes/menu.js"
click node_cart "https://github.com/flashfoods2024/flashfoods/blob/main/routes/cart.js"
click node_orders "https://github.com/flashfoods2024/flashfoods/blob/main/routes/orders.js"
click node_orderstore "https://github.com/flashfoods2024/flashfoods/blob/main/models/Order.js"
click node_menustore "https://github.com/flashfoods2024/flashfoods/blob/main/models/MenuItem.js"
click node_shopstore "https://github.com/flashfoods2024/flashfoods/blob/main/models/Shop.js"
click node_vendorops "https://github.com/flashfoods2024/flashfoods/blob/main/routes/vendor.js"
click node_adminops "https://github.com/flashfoods2024/flashfoods/blob/main/routes/admin.js"
click node_profile "https://github.com/flashfoods2024/flashfoods/blob/main/routes/profile.js"
click node_webhooks "https://github.com/flashfoods2024/flashfoods/blob/main/routes/webhooks.js"
click node_socket "https://github.com/flashfoods2024/flashfoods/blob/main/socket/index.js"
click node_vendorbrowser "https://github.com/flashfoods2024/flashfoods/blob/main/public/js/notification-manager.js"
click node_fcmclient "https://github.com/flashfoods2024/flashfoods/blob/main/public/js/firebase-client.js"
click node_fcmapi "https://github.com/flashfoods2024/flashfoods/blob/main/routes/api/fcm.js"
click node_menuimport "https://github.com/flashfoods2024/flashfoods/tree/main/menu-import"
click node_dispatch "https://github.com/flashfoods2024/flashfoods/blob/main/utils/notification-dispatch.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_auth,node_identity,node_authmw,node_userstore,node_profile,node_vendorbrowser toneBlue
class node_shops,node_menu,node_cart,node_orders,node_orderstore,node_menustore,node_shopstore toneAmber
class node_vendorops,node_adminops,node_menuimport toneMint
class node_app,node_webhooks,node_socket,node_fcmclient,node_fcmapi,node_dispatch toneRose
class node_student,node_vendor,node_admin,node_razorpay toneIndigo
```

## Components

### Access and identity

- [Account access](https://github.com/flashfoods2024/flashfoods/blob/main/routes/auth.js): `routes/auth.js`
- [Identity API](https://github.com/flashfoods2024/flashfoods/blob/main/routes/api/authMe.js): `routes/api/authMe.js`
- [Session identity](https://github.com/flashfoods2024/flashfoods/blob/main/middleware/auth.js): `middleware/auth.js`
- [Users](https://github.com/flashfoods2024/flashfoods/blob/main/models/User.js): `models/User.js`
- [Profile](https://github.com/flashfoods2024/flashfoods/blob/main/routes/profile.js): `routes/profile.js`

### Canteen ordering

- [Shop discovery](https://github.com/flashfoods2024/flashfoods/blob/main/routes/shops.js): `routes/shops.js`
- [Menus](https://github.com/flashfoods2024/flashfoods/blob/main/routes/menu.js): `routes/menu.js`
- [Cart](https://github.com/flashfoods2024/flashfoods/blob/main/routes/cart.js): `routes/cart.js`
- [Order handling](https://github.com/flashfoods2024/flashfoods/blob/main/routes/orders.js): `routes/orders.js`
- [Orders](https://github.com/flashfoods2024/flashfoods/blob/main/models/Order.js): `models/Order.js`
- [Menu items](https://github.com/flashfoods2024/flashfoods/blob/main/models/MenuItem.js): `models/MenuItem.js`
- [Shops](https://github.com/flashfoods2024/flashfoods/blob/main/models/Shop.js): `models/Shop.js`

### Vendor operations

- [Vendor operations](https://github.com/flashfoods2024/flashfoods/blob/main/routes/vendor.js): `routes/vendor.js`
- [Administration](https://github.com/flashfoods2024/flashfoods/blob/main/routes/admin.js): `routes/admin.js`
- [Menu import](https://github.com/flashfoods2024/flashfoods/tree/main/menu-import): `menu-import`

### Platform services

- [Web application](https://github.com/flashfoods2024/flashfoods/blob/main/server.js): `server.js`
- [Payment webhooks](https://github.com/flashfoods2024/flashfoods/blob/main/routes/webhooks.js): `routes/webhooks.js`
- [Live order counts](https://github.com/flashfoods2024/flashfoods/blob/main/socket/index.js): `socket/index.js`
- [Push registration](https://github.com/flashfoods2024/flashfoods/blob/main/public/js/firebase-client.js): `public/js/firebase-client.js`
- [Push API](https://github.com/flashfoods2024/flashfoods/blob/main/routes/api/fcm.js): `routes/api/fcm.js`
- [Order notifications](https://github.com/flashfoods2024/flashfoods/blob/main/utils/notification-dispatch.js): `utils/notification-dispatch.js`

### Other components

- **Student**
- **Vendor**
- **Admin**
- **Razorpay**
- [Vendor browser](https://github.com/flashfoods2024/flashfoods/blob/main/public/js/notification-manager.js): `public/js/notification-manager.js`

## Connections

- Student → Web application: uses
- Vendor → Web application: uses
- Admin → Web application: uses
- Web application → Account access: mounts
- Web application → Identity API: mounts
- Web application → Shop discovery: mounts
- Web application → Menus: mounts
- Web application → Cart: mounts
- Web application → Order handling: mounts
- Web application → Vendor operations: mounts
- Web application → Administration: mounts
- Web application → Profile: mounts
- Web application → Payment webhooks: mounts
- Web application → Push API: mounts
- Web application → Session identity: loads identity
- Session identity → Users: reads user
- Account access → Users: reads/writes users
- Razorpay → Payment webhooks: sends events
- Payment webhooks → Orders: reads/writes orders
- Payment webhooks → Shops: reads shop settings
- Payment webhooks → Live order counts: refreshes counts
- Payment webhooks → Order notifications: dispatches notification
- Vendor browser → Live order counts: joins shop
- Live order counts → Orders: counts paid orders
- Live order counts → Vendor browser: sends pending count
- Push registration → Push API: registers token
