# chonlajit/sbay architecture

> Architecture diagram of the GitHub repository chonlajit/sbay, 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/chonlajit/sbay
- Repository: https://github.com/chonlajit/sbay

## Overview

SBAY is a smart-bin recycling, asset-management, and rewards system. Users authenticate, recycle at a machine, earn points, review recycling history, and redeem partner rewards; partners handle redemption requests, while administrators manage users, devices, partners, and operational statistics. The map combines documented system topology with sampled frontend requests and the backend module tree; backend internals beyond those paths are not sampled, so uncertain controller-to-service wiring is omitted.

Main entry points: [`nginx/nginx.conf`](https://github.com/chonlajit/sbay/blob/main/nginx/nginx.conf) (Reverse proxy), [`backend/src/main/java/com/example/iotbackend/controller/SessionController.java`](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/SessionController.java) (Session endpoints), [`backend/src/main/java/com/example/iotbackend/controller/PartnerController.java`](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/PartnerController.java) (Partner endpoints), [`backend/src/main/java/com/example/iotbackend/controller/AppController.java`](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/AppController.java) (User and auth endpoints)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_frontend["Web application"]
  node_auth_ui["Authentication UI<br/>[AuthContainer.tsx]"]
  node_shared_context["Session and API context"]
  node_history_ui["History dashboard<br/>[page.tsx]"]
  node_stats_ui["Public statistics<br/>[StatsDashboard.tsx]"]
end

subgraph group_recycling["Recycling operations"]
  node_recycle_ui["Machine operation<br/>[page.tsx]"]
  node_device_api["Device endpoints"]
  node_session_api["Session endpoints"]
  node_recycle_service["Recycle processing"]
  node_device_health["Device health"]
  node_history_store[("Session and transaction data")]
end

subgraph group_rewards["Rewards and partners"]
  node_redeem_ui["Reward catalog<br/>[page.tsx]"]
  node_partner_ui["Partner workspace<br/>[page.tsx]"]
  node_admin_ui["Admin console<br/>[page.tsx]"]
  node_partner_admin_ui["Partner administration<br/>[page.tsx]"]
  node_partner_api["Partner endpoints"]
  node_redemption_store[("Redemption data")]
end

subgraph group_platform["Backend platform"]
  node_app_api["User and auth endpoints<br/>[AppController.java]"]
  node_stats_api["Statistics endpoints"]
  node_admin_api["Admin endpoints"]
  node_mongo[("MongoDB")]
  node_nginx["Reverse proxy<br/>[nginx.conf]"]
  node_websocket["WebSocket messaging"]
end

node_user(("User"))
node_partner_actor(("Partner staff"))
node_bin{{"Smart-bin device"}}
node_google(("Google OAuth"))

node_user -->|"uses"| node_frontend
node_frontend -->|"HTTP requests"| node_nginx
node_nginx -->|"routes API"| node_app_api
node_nginx -->|"routes API"| node_session_api
node_nginx -->|"routes API"| node_device_api
node_nginx -->|"routes API"| node_partner_api
node_nginx -->|"routes API"| node_admin_api
node_nginx -->|"routes API"| node_stats_api
node_auth_ui -->|"uses auth"| node_shared_context
node_shared_context -->|"calls auth"| node_app_api
node_auth_ui -.->|"OAuth login"| node_google
node_user -->|"operates bin"| node_recycle_ui
node_recycle_ui -->|"requests session"| node_session_api
node_bin -->|"reports device data"| node_device_api
node_device_api -->|"checks health"| node_device_health
node_session_api -->|"processes session"| node_recycle_service
node_recycle_service -->|"persists activity"| node_history_store
node_history_ui -->|"loads history"| node_session_api
node_history_ui -->|"loads user data"| node_app_api
node_stats_ui -->|"loads statistics"| node_stats_api
node_redeem_ui -->|"loads rewards"| node_partner_api
node_redeem_ui -->|"requests redemption"| node_app_api
node_partner_actor -->|"handles requests"| node_partner_ui
node_partner_ui -->|"manages redemptions"| node_partner_api
node_partner_api -->|"stores redemption data"| node_redemption_store
node_admin_ui -->|"admin operations"| node_admin_api
node_admin_ui -->|"subscribes updates"| node_websocket
node_partner_admin_ui -->|"manages partners"| node_admin_api
node_app_api -->|"stores application data"| node_mongo
node_session_api -->|"stores session data"| node_mongo
node_partner_api -->|"stores partner data"| node_mongo
node_admin_api -->|"accesses records"| node_mongo
node_stats_api -->|"reads statistics data"| node_mongo

click node_frontend "https://github.com/chonlajit/sbay/tree/main/frontend/app"
click node_auth_ui "https://github.com/chonlajit/sbay/blob/main/frontend/app/components/AuthContainer.tsx"
click node_shared_context "https://github.com/chonlajit/sbay/blob/main/frontend/app/context/SmartBinContext.tsx"
click node_history_ui "https://github.com/chonlajit/sbay/blob/main/frontend/app/dashboard/page.tsx"
click node_stats_ui "https://github.com/chonlajit/sbay/blob/main/frontend/components/StatsDashboard.tsx"
click node_recycle_ui "https://github.com/chonlajit/sbay/blob/main/frontend/app/operation/%5BmachineId%5D/page.tsx"
click node_device_api "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/DeviceController.java"
click node_session_api "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/SessionController.java"
click node_recycle_service "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/service/RecycleService.java"
click node_device_health "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/service/DeviceHealthChecker.java"
click node_history_store "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/repository/DeviceSessionRepository.java"
click node_redeem_ui "https://github.com/chonlajit/sbay/blob/main/frontend/app/redeem/page.tsx"
click node_partner_ui "https://github.com/chonlajit/sbay/blob/main/frontend/app/partner/page.tsx"
click node_admin_ui "https://github.com/chonlajit/sbay/blob/main/frontend/app/admin/page.tsx"
click node_partner_admin_ui "https://github.com/chonlajit/sbay/blob/main/frontend/app/admin/partners/page.tsx"
click node_partner_api "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/PartnerController.java"
click node_redemption_store "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/repository/RedemptionRepository.java"
click node_app_api "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/AppController.java"
click node_stats_api "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/StatsController.java"
click node_admin_api "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/AdminController.java"
click node_nginx "https://github.com/chonlajit/sbay/blob/main/nginx/nginx.conf"
click node_websocket "https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/config/WebSocketConfig.java"

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_frontend,node_auth_ui,node_shared_context,node_history_ui,node_stats_ui,node_user toneBlue
class node_recycle_ui,node_device_api,node_session_api,node_recycle_service,node_device_health,node_history_store toneAmber
class node_redeem_ui,node_partner_ui,node_admin_ui,node_partner_admin_ui,node_partner_api,node_redemption_store toneMint
class node_app_api,node_stats_api,node_admin_api,node_mongo,node_nginx,node_websocket toneRose
class node_partner_actor,node_bin,node_google toneIndigo
```

## Components

### User experience

- [Web application](https://github.com/chonlajit/sbay/tree/main/frontend/app): `frontend/app`
- [Authentication UI](https://github.com/chonlajit/sbay/blob/main/frontend/app/components/AuthContainer.tsx): `frontend/app/components/AuthContainer.tsx`
- [Session and API context](https://github.com/chonlajit/sbay/blob/main/frontend/app/context/SmartBinContext.tsx): `frontend/app/context/SmartBinContext.tsx`
- [History dashboard](https://github.com/chonlajit/sbay/blob/main/frontend/app/dashboard/page.tsx): `frontend/app/dashboard/page.tsx`
- [Public statistics](https://github.com/chonlajit/sbay/blob/main/frontend/components/StatsDashboard.tsx): `frontend/components/StatsDashboard.tsx`

### Recycling operations

- [Machine operation](https://github.com/chonlajit/sbay/blob/main/frontend/app/operation/%5BmachineId%5D/page.tsx): `frontend/app/operation/[machineId]/page.tsx`
- [Device endpoints](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/DeviceController.java): `backend/src/main/java/com/example/iotbackend/controller/DeviceController.java`
- [Session endpoints](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/SessionController.java): `backend/src/main/java/com/example/iotbackend/controller/SessionController.java`
- [Recycle processing](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/service/RecycleService.java): `backend/src/main/java/com/example/iotbackend/service/RecycleService.java`
- [Device health](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/service/DeviceHealthChecker.java): `backend/src/main/java/com/example/iotbackend/service/DeviceHealthChecker.java`
- [Session and transaction data](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/repository/DeviceSessionRepository.java): `backend/src/main/java/com/example/iotbackend/repository/DeviceSessionRepository.java`

### Rewards and partners

- [Reward catalog](https://github.com/chonlajit/sbay/blob/main/frontend/app/redeem/page.tsx): `frontend/app/redeem/page.tsx`
- [Partner workspace](https://github.com/chonlajit/sbay/blob/main/frontend/app/partner/page.tsx): `frontend/app/partner/page.tsx`
- [Admin console](https://github.com/chonlajit/sbay/blob/main/frontend/app/admin/page.tsx): `frontend/app/admin/page.tsx`
- [Partner administration](https://github.com/chonlajit/sbay/blob/main/frontend/app/admin/partners/page.tsx): `frontend/app/admin/partners/page.tsx`
- [Partner endpoints](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/PartnerController.java): `backend/src/main/java/com/example/iotbackend/controller/PartnerController.java`
- [Redemption data](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/repository/RedemptionRepository.java): `backend/src/main/java/com/example/iotbackend/repository/RedemptionRepository.java`

### Backend platform

- [User and auth endpoints](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/AppController.java): `backend/src/main/java/com/example/iotbackend/controller/AppController.java`
- [Statistics endpoints](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/StatsController.java): `backend/src/main/java/com/example/iotbackend/controller/StatsController.java`
- [Admin endpoints](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/controller/AdminController.java): `backend/src/main/java/com/example/iotbackend/controller/AdminController.java`
- **MongoDB**
- [Reverse proxy](https://github.com/chonlajit/sbay/blob/main/nginx/nginx.conf): `nginx/nginx.conf`
- [WebSocket messaging](https://github.com/chonlajit/sbay/blob/main/backend/src/main/java/com/example/iotbackend/config/WebSocketConfig.java): `backend/src/main/java/com/example/iotbackend/config/WebSocketConfig.java`

### Other components

- **User**
- **Partner staff**
- **Smart-bin device**
- **Google OAuth**

## Connections

- User → Web application: uses
- Web application → Reverse proxy: HTTP requests
- Reverse proxy → User and auth endpoints: routes API
- Reverse proxy → Session endpoints: routes API
- Reverse proxy → Device endpoints: routes API
- Reverse proxy → Partner endpoints: routes API
- Reverse proxy → Admin endpoints: routes API
- Reverse proxy → Statistics endpoints: routes API
- Authentication UI → Session and API context: uses auth
- Session and API context → User and auth endpoints: calls auth
- Authentication UI → Google OAuth: OAuth login
- User → Machine operation: operates bin
- Machine operation → Session endpoints: requests session
- Smart-bin device → Device endpoints: reports device data
- Device endpoints → Device health: checks health
- Session endpoints → Recycle processing: processes session
- Recycle processing → Session and transaction data: persists activity
- History dashboard → Session endpoints: loads history
- History dashboard → User and auth endpoints: loads user data
- Public statistics → Statistics endpoints: loads statistics
- Reward catalog → Partner endpoints: loads rewards
- Reward catalog → User and auth endpoints: requests redemption
- Partner staff → Partner workspace: handles requests
- Partner workspace → Partner endpoints: manages redemptions
- Partner endpoints → Redemption data: stores redemption data
- Admin console → Admin endpoints: admin operations
- Admin console → WebSocket messaging: subscribes updates
- Partner administration → Admin endpoints: manages partners
- User and auth endpoints → MongoDB: stores application data
- Session endpoints → MongoDB: stores session data
- Partner endpoints → MongoDB: stores partner data
- Admin endpoints → MongoDB: accesses records
- Statistics endpoints → MongoDB: reads statistics data
