# aadityaraj25/metos architecture

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

- Interactive diagram: https://gitdiagram.com/aadityaraj25/metos
- Repository: https://github.com/aadityaraj25/metos

## Overview

METoS is a social collaboration platform for finding people and teams, forming groups around problems, and coordinating work. Its principal workflow spans user discovery, team discovery or creation, invitations and join requests, membership, and project work in a workspace. The tree also shows profile management, connections, and real-time sockets. Sampled source confirms the app bootstrap, API routing, authentication, group management, and invitations; some frontend page-to-API and workspace details are unsampled, so those links are omitted.

Main entry points: [`Backend/src/controllers/invite.controllers.js`](https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/invite.controllers.js) (Invite handling), [`Backend/src/app.js`](https://github.com/aadityaraj25/metos/blob/main/Backend/src/app.js) (Express app), [`Frontend/src/main.jsx`](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/main.jsx) (Client bootstrap), [`Backend/src/controllers/group.controllers.js`](https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/group.controllers.js) (Group management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_frontend["Client bootstrap<br/>[main.jsx]"]
  node_router["App routing<br/>[AppRouter.jsx]"]
  node_authstate["Auth context<br/>[AuthContext.jsx]"]
  node_socketstate["Socket context<br/>[SocketContext.jsx]"]
  node_pages["Product pages"]
  node_clientapi["HTTP client<br/>[client.js]"]
end

subgraph group_api["HTTP API"]
  node_authapi["Auth API<br/>[auth.js]"]
  node_peopleapi["People API<br/>[users.js]"]
  node_groupsapi["Groups API<br/>[groups.js]"]
  node_invitesapi["Invitations API<br/>[invites.js]"]
  node_joinapi["Join requests API<br/>[joinRequests.js]"]
  node_projectsapi["Projects API<br/>[projects.js]"]
  node_workspaceapi["Workspace API<br/>[workspace.js]"]
  node_authroutes["Auth routes<br/>[auth.routes.js]"]
  node_grouproutes["Group routes<br/>[group.routes.js]"]
  node_connectionroutes["Connection routes"]
  node_joinroutes["Join request routes"]
end

subgraph group_teams["People and teams"]
  node_authcontroller["Authentication"]
  node_groupcontroller["Group management"]
  node_invitecontroller["Invite handling"]
end

subgraph group_work["Project work"]
  node_workpages["Workspace page<br/>[Workspace.jsx]"]
end

subgraph group_runtime["Runtime and persistence"]
  node_serverapp["Express app<br/>[app.js]"]
  node_email["Email delivery<br/>[emailService.js]"]
  node_socket["Realtime sockets<br/>[socket.js]"]
  node_users[("User records<br/>[user.models.js]")]
  node_groups[("Group records<br/>[group.models.js]")]
  node_invites[("Invite records<br/>[invite.models.js]")]
end

node_user(("Platform user"))

node_user -->|"uses"| node_frontend
node_frontend -->|"renders"| node_router
node_frontend -->|"provides auth"| node_authstate
node_frontend -->|"provides sockets"| node_socketstate
node_router -->|"routes to"| node_pages
node_clientapi -->|"sends requests"| node_serverapp
node_serverapp -->|"mounts"| node_authroutes
node_serverapp -->|"mounts"| node_grouproutes
node_serverapp -->|"mounts"| node_connectionroutes
node_serverapp -->|"mounts"| node_joinroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_grouproutes -->|"dispatches"| node_groupcontroller
node_joinroutes -.-> node_invitecontroller
node_authcontroller -->|"reads and writes"| node_users
node_groupcontroller -->|"reads and writes"| node_groups
node_groupcontroller -->|"updates membership"| node_users
node_groupcontroller -->|"updates invites"| node_invites
node_invitecontroller -->|"reads and updates"| node_groups
node_invitecontroller -->|"reads and writes"| node_invites
node_invitecontroller -->|"looks up users"| node_users
node_invitecontroller -->|"sends invitation"| node_email
node_invitecontroller -->|"dispatches notification"| node_socket
node_pages -->|"includes"| node_workpages

click node_frontend "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/main.jsx"
click node_router "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/AppRouter.jsx"
click node_authstate "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/context/AuthContext.jsx"
click node_socketstate "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/context/SocketContext.jsx"
click node_pages "https://github.com/aadityaraj25/metos/tree/main/Frontend/src/pages"
click node_clientapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/client.js"
click node_authapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/auth.js"
click node_peopleapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/users.js"
click node_groupsapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/groups.js"
click node_invitesapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/invites.js"
click node_joinapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/joinRequests.js"
click node_projectsapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/projects.js"
click node_workspaceapi "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/workspace.js"
click node_serverapp "https://github.com/aadityaraj25/metos/blob/main/Backend/src/app.js"
click node_authroutes "https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/auth/auth.routes.js"
click node_grouproutes "https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/group.routes.js"
click node_connectionroutes "https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/connection.routes.js"
click node_joinroutes "https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/joinRequest.routes.js"
click node_authcontroller "https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/auth.controllers.js"
click node_groupcontroller "https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/group.controllers.js"
click node_invitecontroller "https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/invite.controllers.js"
click node_email "https://github.com/aadityaraj25/metos/blob/main/Backend/src/utils/emailService.js"
click node_socket "https://github.com/aadityaraj25/metos/blob/main/Backend/src/sockets/socket.js"
click node_users "https://github.com/aadityaraj25/metos/blob/main/Backend/src/models/user.models.js"
click node_groups "https://github.com/aadityaraj25/metos/blob/main/Backend/src/models/group.models.js"
click node_invites "https://github.com/aadityaraj25/metos/blob/main/Backend/src/models/invite.models.js"
click node_workpages "https://github.com/aadityaraj25/metos/blob/main/Frontend/src/pages/Workspace.jsx"

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_router,node_authstate,node_socketstate,node_pages,node_clientapi,node_user toneBlue
class node_authapi,node_peopleapi,node_groupsapi,node_invitesapi,node_joinapi,node_projectsapi,node_workspaceapi,node_authroutes,node_grouproutes,node_connectionroutes,node_joinroutes toneAmber
class node_authcontroller,node_groupcontroller,node_invitecontroller toneMint
class node_workpages toneRose
class node_serverapp,node_email,node_socket,node_users,node_groups,node_invites toneIndigo
```

## Components

### Web client

- [Client bootstrap](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/main.jsx): `Frontend/src/main.jsx`
- [App routing](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/AppRouter.jsx): `Frontend/src/AppRouter.jsx`
- [Auth context](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/context/AuthContext.jsx): `Frontend/src/context/AuthContext.jsx`
- [Socket context](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/context/SocketContext.jsx): `Frontend/src/context/SocketContext.jsx`
- [Product pages](https://github.com/aadityaraj25/metos/tree/main/Frontend/src/pages): `Frontend/src/pages`
- [HTTP client](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/client.js): `Frontend/src/api/client.js`

### HTTP API

- [Auth API](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/auth.js): `Frontend/src/api/auth.js`
- [People API](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/users.js): `Frontend/src/api/users.js`
- [Groups API](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/groups.js): `Frontend/src/api/groups.js`
- [Invitations API](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/invites.js): `Frontend/src/api/invites.js`
- [Join requests API](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/joinRequests.js): `Frontend/src/api/joinRequests.js`
- [Projects API](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/projects.js): `Frontend/src/api/projects.js`
- [Workspace API](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/api/workspace.js): `Frontend/src/api/workspace.js`
- [Auth routes](https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/auth/auth.routes.js): `Backend/src/routes/auth/auth.routes.js`
- [Group routes](https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/group.routes.js): `Backend/src/routes/group.routes.js`
- [Connection routes](https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/connection.routes.js): `Backend/src/routes/connection.routes.js`
- [Join request routes](https://github.com/aadityaraj25/metos/blob/main/Backend/src/routes/joinRequest.routes.js): `Backend/src/routes/joinRequest.routes.js`

### People and teams

- [Authentication](https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/auth.controllers.js): `Backend/src/controllers/auth.controllers.js`
- [Group management](https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/group.controllers.js): `Backend/src/controllers/group.controllers.js`
- [Invite handling](https://github.com/aadityaraj25/metos/blob/main/Backend/src/controllers/invite.controllers.js): `Backend/src/controllers/invite.controllers.js`

### Project work

- [Workspace page](https://github.com/aadityaraj25/metos/blob/main/Frontend/src/pages/Workspace.jsx): `Frontend/src/pages/Workspace.jsx`

### Runtime and persistence

- [Express app](https://github.com/aadityaraj25/metos/blob/main/Backend/src/app.js): `Backend/src/app.js`
- [Email delivery](https://github.com/aadityaraj25/metos/blob/main/Backend/src/utils/emailService.js): `Backend/src/utils/emailService.js`
- [Realtime sockets](https://github.com/aadityaraj25/metos/blob/main/Backend/src/sockets/socket.js): `Backend/src/sockets/socket.js`
- [User records](https://github.com/aadityaraj25/metos/blob/main/Backend/src/models/user.models.js): `Backend/src/models/user.models.js`
- [Group records](https://github.com/aadityaraj25/metos/blob/main/Backend/src/models/group.models.js): `Backend/src/models/group.models.js`
- [Invite records](https://github.com/aadityaraj25/metos/blob/main/Backend/src/models/invite.models.js): `Backend/src/models/invite.models.js`

### Other components

- **Platform user**

## Connections

- Platform user → Client bootstrap: uses
- Client bootstrap → App routing: renders
- Client bootstrap → Auth context: provides auth
- Client bootstrap → Socket context: provides sockets
- App routing → Product pages: routes to
- HTTP client → Express app: sends requests
- Express app → Auth routes: mounts
- Express app → Group routes: mounts
- Express app → Connection routes: mounts
- Express app → Join request routes: mounts
- Auth routes → Authentication: dispatches
- Group routes → Group management: dispatches
- Join request routes → Invite handling
- Authentication → User records: reads and writes
- Group management → Group records: reads and writes
- Group management → User records: updates membership
- Group management → Invite records: updates invites
- Invite handling → Group records: reads and updates
- Invite handling → Invite records: reads and writes
- Invite handling → User records: looks up users
- Invite handling → Email delivery: sends invitation
- Invite handling → Realtime sockets: dispatches notification
- Product pages → Workspace page: includes
