# mohammad-soyeb/messmate architecture

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

## Overview

MessMate is a browser-based mess workspace manager. Users register or sign in, create or join a mess, then manage members, record meals and bazaar purchases, and review balances and reports. The app’s route tree protects workspace features; domain services handle workspace setup and data operations through Supabase. The README also documents private receipt storage, signed image URLs, permissions, and RLS. Those capabilities are represented at the service boundary, but their full implementation and database schema were not sampled.

Main entry points: [`src/services/dataService.js`](https://github.com/mohammad-soyeb/messmate/blob/main/src/services/dataService.js) (Mess data service), [`src/App.jsx`](https://github.com/mohammad-soyeb/messmate/blob/main/src/App.jsx) (App routes), [`src/services/messService.js`](https://github.com/mohammad-soyeb/messmate/blob/main/src/services/messService.js) (Workspace service), [`src/lib/supabase.js`](https://github.com/mohammad-soyeb/messmate/blob/main/src/lib/supabase.js) (Supabase client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and access"]
  node_app["App routes<br/>[App.jsx]"]
  node_guard["Route guards<br/>[ProtectedRoute.jsx]"]
  node_workspaceguard["Workspace guard<br/>[WorkspaceRoute.jsx]"]
end

subgraph group_workspace["Workspace and identity"]
  node_authui["Sign-in and registration<br/>[Login.jsx]"]
  node_authstate["Authentication state<br/>[AuthContext.jsx]"]
  node_messsetup["Create or join mess<br/>[MessSetup.jsx]"]
  node_messservice["Workspace service<br/>[messService.js]"]
  node_profile["Account profile<br/>[Profile.jsx]"]
end

subgraph group_operations["Mess operations"]
  node_dashboard["Workspace dashboard<br/>[Dashboard.jsx]"]
  node_members["Member management<br/>[Members.jsx]"]
  node_manager["Manager controls<br/>[ManagerControl.jsx]"]
  node_meals["Meal records<br/>[Meals.jsx]"]
  node_mealhistory["Meal history<br/>[MealHistory.jsx]"]
  node_mealreport["Meal report<br/>[MealReport.jsx]"]
  node_bazaar["Bazaar entries<br/>[Bazaar.jsx]"]
  node_bazaarhistory["Bazaar history<br/>[BazaarHistory.jsx]"]
  node_bazaarsummary["Bazaar summary<br/>[BazaarSummary.jsx]"]
end

subgraph group_insights["Reports and settings"]
  node_reports["Monthly reports<br/>[Reports.jsx]"]
  node_balances["Member balances<br/>[MemberBalance.jsx]"]
  node_export["Report export<br/>[ExportReport.jsx]"]
  node_settings["Workspace settings<br/>[Settings.jsx]"]
  node_datamanagement["Data management<br/>[DataManagement.jsx]"]
  node_danger["Destructive actions<br/>[DangerZone.jsx]"]
end

subgraph group_backend["Supabase data layer"]
  node_dataservice["Mess data service<br/>[dataService.js]"]
  node_supabase["Supabase client<br/>[supabase.js]"]
end

node_user(("Mess user"))
node_backendservice[("Supabase platform")]

node_user -->|"opens"| node_app
node_app -->|"routes to"| node_authui
node_app -->|"routes to"| node_messsetup
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_meals
node_app -->|"routes to"| node_members
node_app -->|"routes to"| node_bazaar
node_app -->|"routes to"| node_reports
node_app -->|"routes to"| node_settings
node_app -->|"wraps routes"| node_guard
node_app -->|"gates workspace"| node_workspaceguard
node_authui -->|"uses auth"| node_authstate
node_authstate -->|"reads auth and profiles"| node_supabase
node_messsetup -->|"creates or joins"| node_messservice
node_workspaceguard -->|"checks workspace"| node_messservice
node_messservice -->|"calls workspace APIs"| node_supabase
node_profile -->|"uses data operations"| node_dataservice
node_dashboard -->|"loads workspace data"| node_dataservice
node_members -->|"manages members"| node_dataservice
node_manager -->|"updates member roles"| node_dataservice
node_meals -.->|"uses data operations"| node_dataservice
node_mealhistory -->|"loads meal history"| node_dataservice
node_mealreport -->|"loads meal data"| node_dataservice
node_bazaar -->|"records purchases"| node_dataservice
node_bazaarhistory -->|"loads purchase history"| node_dataservice
node_bazaarsummary -->|"loads summaries"| node_dataservice
node_reports -.->|"uses report data"| node_dataservice
node_balances -->|"loads balances"| node_dataservice
node_export -->|"loads export data"| node_dataservice
node_datamanagement -->|"uses data operations"| node_dataservice
node_danger -->|"uses data operations"| node_dataservice
node_dataservice -->|"resolves workspace"| node_messservice
node_dataservice -->|"reads and writes records"| node_supabase
node_supabase -->|"connects to"| node_backendservice
node_backendservice -.->|"authenticates and stores workspace data"| node_user

click node_app "https://github.com/mohammad-soyeb/messmate/blob/main/src/App.jsx"
click node_guard "https://github.com/mohammad-soyeb/messmate/blob/main/src/components/ProtectedRoute.jsx"
click node_workspaceguard "https://github.com/mohammad-soyeb/messmate/blob/main/src/components/WorkspaceRoute.jsx"
click node_authui "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Login.jsx"
click node_authstate "https://github.com/mohammad-soyeb/messmate/blob/main/src/context/AuthContext.jsx"
click node_messsetup "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/MessSetup.jsx"
click node_messservice "https://github.com/mohammad-soyeb/messmate/blob/main/src/services/messService.js"
click node_profile "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Profile.jsx"
click node_dashboard "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Dashboard.jsx"
click node_members "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Members.jsx"
click node_manager "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/members/ManagerControl.jsx"
click node_meals "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Meals.jsx"
click node_mealhistory "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/meals/MealHistory.jsx"
click node_mealreport "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/meals/MealReport.jsx"
click node_bazaar "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Bazaar.jsx"
click node_bazaarhistory "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/bazaar/BazaarHistory.jsx"
click node_bazaarsummary "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/bazaar/BazaarSummary.jsx"
click node_reports "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Reports.jsx"
click node_balances "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/reports/MemberBalance.jsx"
click node_export "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/reports/ExportReport.jsx"
click node_settings "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Settings.jsx"
click node_datamanagement "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/settings/DataManagement.jsx"
click node_danger "https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/settings/DangerZone.jsx"
click node_dataservice "https://github.com/mohammad-soyeb/messmate/blob/main/src/services/dataService.js"
click node_supabase "https://github.com/mohammad-soyeb/messmate/blob/main/src/lib/supabase.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_guard,node_workspaceguard,node_user toneBlue
class node_authui,node_authstate,node_messsetup,node_messservice,node_profile,node_backendservice toneAmber
class node_dashboard,node_members,node_manager,node_meals,node_mealhistory,node_mealreport,node_bazaar,node_bazaarhistory,node_bazaarsummary toneMint
class node_reports,node_balances,node_export,node_settings,node_datamanagement,node_danger toneRose
class node_dataservice,node_supabase toneIndigo
```

## Components

### Application and access

- [App routes](https://github.com/mohammad-soyeb/messmate/blob/main/src/App.jsx): `src/App.jsx`
- [Route guards](https://github.com/mohammad-soyeb/messmate/blob/main/src/components/ProtectedRoute.jsx): `src/components/ProtectedRoute.jsx`
- [Workspace guard](https://github.com/mohammad-soyeb/messmate/blob/main/src/components/WorkspaceRoute.jsx): `src/components/WorkspaceRoute.jsx`

### Workspace and identity

- [Sign-in and registration](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Login.jsx): `src/pages/Login.jsx`
- [Authentication state](https://github.com/mohammad-soyeb/messmate/blob/main/src/context/AuthContext.jsx): `src/context/AuthContext.jsx`
- [Create or join mess](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/MessSetup.jsx): `src/pages/MessSetup.jsx`
- [Workspace service](https://github.com/mohammad-soyeb/messmate/blob/main/src/services/messService.js): `src/services/messService.js`
- [Account profile](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Profile.jsx): `src/pages/Profile.jsx`

### Mess operations

- [Workspace dashboard](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Dashboard.jsx): `src/pages/Dashboard.jsx`
- [Member management](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Members.jsx): `src/pages/Members.jsx`
- [Manager controls](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/members/ManagerControl.jsx): `src/pages/members/ManagerControl.jsx`
- [Meal records](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Meals.jsx): `src/pages/Meals.jsx`
- [Meal history](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/meals/MealHistory.jsx): `src/pages/meals/MealHistory.jsx`
- [Meal report](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/meals/MealReport.jsx): `src/pages/meals/MealReport.jsx`
- [Bazaar entries](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Bazaar.jsx): `src/pages/Bazaar.jsx`
- [Bazaar history](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/bazaar/BazaarHistory.jsx): `src/pages/bazaar/BazaarHistory.jsx`
- [Bazaar summary](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/bazaar/BazaarSummary.jsx): `src/pages/bazaar/BazaarSummary.jsx`

### Reports and settings

- [Monthly reports](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Reports.jsx): `src/pages/Reports.jsx`
- [Member balances](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/reports/MemberBalance.jsx): `src/pages/reports/MemberBalance.jsx`
- [Report export](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/reports/ExportReport.jsx): `src/pages/reports/ExportReport.jsx`
- [Workspace settings](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/Settings.jsx): `src/pages/Settings.jsx`
- [Data management](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/settings/DataManagement.jsx): `src/pages/settings/DataManagement.jsx`
- [Destructive actions](https://github.com/mohammad-soyeb/messmate/blob/main/src/pages/settings/DangerZone.jsx): `src/pages/settings/DangerZone.jsx`

### Supabase data layer

- [Mess data service](https://github.com/mohammad-soyeb/messmate/blob/main/src/services/dataService.js): `src/services/dataService.js`
- [Supabase client](https://github.com/mohammad-soyeb/messmate/blob/main/src/lib/supabase.js): `src/lib/supabase.js`

### Other components

- **Mess user**
- **Supabase platform**

## Connections

- Mess user → App routes: opens
- App routes → Sign-in and registration: routes to (evidence: `src/App.jsx`)
- App routes → Create or join mess: routes to (evidence: `src/App.jsx`)
- App routes → Workspace dashboard: routes to (evidence: `src/App.jsx`)
- App routes → Meal records: routes to (evidence: `src/App.jsx`)
- App routes → Member management: routes to (evidence: `src/App.jsx`)
- App routes → Bazaar entries: routes to (evidence: `src/App.jsx`)
- App routes → Monthly reports: routes to (evidence: `src/App.jsx`)
- App routes → Workspace settings: routes to (evidence: `src/App.jsx`)
- App routes → Route guards: wraps routes (evidence: `src/App.jsx`)
- App routes → Workspace guard: gates workspace (evidence: `src/App.jsx`)
- Sign-in and registration → Authentication state: uses auth (evidence: `src/pages/Login.jsx`)
- Authentication state → Supabase client: reads auth and profiles (evidence: `src/context/AuthContext.jsx`)
- Create or join mess → Workspace service: creates or joins (evidence: `src/pages/MessSetup.jsx`)
- Workspace guard → Workspace service: checks workspace (evidence: `src/components/WorkspaceRoute.jsx`)
- Workspace service → Supabase client: calls workspace APIs (evidence: `src/services/messService.js`)
- Account profile → Mess data service: uses data operations (evidence: `src/pages/Profile.jsx`)
- Workspace dashboard → Mess data service: loads workspace data (evidence: `src/pages/Dashboard.jsx`)
- Member management → Mess data service: manages members (evidence: `src/pages/Members.jsx`)
- Manager controls → Mess data service: updates member roles (evidence: `src/pages/members/ManagerControl.jsx`)
- Meal records → Mess data service: uses data operations
- Meal history → Mess data service: loads meal history (evidence: `src/pages/meals/MealHistory.jsx`)
- Meal report → Mess data service: loads meal data (evidence: `src/pages/meals/MealReport.jsx`)
- Bazaar entries → Mess data service: records purchases (evidence: `src/pages/Bazaar.jsx`)
- Bazaar history → Mess data service: loads purchase history (evidence: `src/pages/bazaar/BazaarHistory.jsx`)
- Bazaar summary → Mess data service: loads summaries (evidence: `src/pages/bazaar/BazaarSummary.jsx`)
- Monthly reports → Mess data service: uses report data
- Member balances → Mess data service: loads balances (evidence: `src/pages/reports/MemberBalance.jsx`)
- Report export → Mess data service: loads export data (evidence: `src/pages/reports/ExportReport.jsx`)
- Data management → Mess data service: uses data operations (evidence: `src/pages/settings/DataManagement.jsx`)
- Destructive actions → Mess data service: uses data operations (evidence: `src/pages/settings/DangerZone.jsx`)
- Mess data service → Workspace service: resolves workspace (evidence: `src/services/dataService.js`)
- Mess data service → Supabase client: reads and writes records (evidence: `src/services/dataService.js`)
- Supabase client → Supabase platform: connects to (evidence: `src/lib/supabase.js`)
- Supabase platform → Mess user: authenticates and stores workspace data (evidence: `README.md`)
