# fahim-muntasir/syncora24 architecture

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

- Interactive diagram: https://gitdiagram.com/fahim-muntasir/syncora24
- Repository: https://github.com/fahim-muntasir/syncora24

## Overview

Syncora24 is a real-time language-practice platform. A participant signs in, discovers or creates a practice room, joins it, then communicates through room chat and live audio/video or screen sharing; hosts and moderators can manage participants and room state. The frontend uses API calls for account and room operations and Socket.IO for live events and WebRTC signaling. MongoDB holds persistent application data, while Redis holds temporary room and moderation state. Some source excerpts were unavailable, so uncertain controller-to-library wiring is not detailed.

Main entry points: [`apps/backend/src/app/app.ts`](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/app/app.ts) (Express API), [`apps/frontend/hooks/useRoomSocket.ts`](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/hooks/useRoomSocket.ts) (Room Socket Hook), [`apps/frontend/components/practicezoon/Room/RoomLayout.tsx`](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/practicezoon/Room/RoomLayout.tsx) (Room Experience), [`apps/frontend/app/page.tsx`](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/app/page.tsx) (Next.js App)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web Client"]
  node_webapp["Next.js App<br/>[page.tsx]"]
  node_authui["Sign-in / Sign-up<br/>[SignIn.tsx]"]
  node_roomui["Room Experience<br/>[RoomLayout.tsx]"]
  node_roomlist["Room Discovery<br/>[RoomCardList.tsx]"]
  node_clientstate["Client State<br/>[store.ts]"]
  node_chatui["Room Chat<br/>[index.tsx]"]
end

subgraph group_backend["Backend API"]
  node_api["Express API<br/>[app.ts]"]
  node_authroutes["Authentication<br/>[index.ts]"]
  node_roomroutes["Room Operations<br/>[index.ts]"]
  node_chatapi["Chat API<br/>[index.ts]"]
  node_authlib["Auth Logic<br/>[index.ts]"]
  node_roomlib["Room Logic<br/>[index.ts]"]
  node_moderation["Moderation Logic<br/>[index.ts]"]
  node_webrtcapi["WebRTC Signaling API<br/>[index.ts]"]
end

subgraph group_realtime["Live Communication"]
  node_socketclient["Socket Client<br/>[SocketManager.ts]"]
  node_roomhook["Room Socket Hook<br/>[useRoomSocket.ts]"]
  node_peer["Peer Connections<br/>[PeerManager.ts]"]
  node_socketserver["Socket Server<br/>[socket.ts]"]
end

subgraph group_state["Application State"]
  node_userstore[("User Model<br/>[Auth.ts]")]
  node_mongodb[("MongoDB")]
  node_redis[("Redis")]
end

node_participant(("Participant"))

node_participant -->|"uses"| node_webapp
node_webapp -->|"opens"| node_authui
node_webapp -->|"browses"| node_roomlist
node_participant -->|"joins"| node_roomui
node_authui -->|"requests auth"| node_api
node_roomlist -->|"requests rooms"| node_api
node_api -->|"routes auth"| node_authroutes
node_api -->|"routes rooms"| node_roomroutes
node_api -->|"routes chat"| node_chatapi
node_authroutes -->|"delegates auth"| node_authlib
node_roomroutes -->|"delegates rooms"| node_roomlib
node_authlib -->|"uses model"| node_userstore
node_userstore -->|"persists users"| node_mongodb
node_roomlib -.->|"room state"| node_redis
node_moderation -.->|"moderation state"| node_redis
node_roomui -->|"joins live"| node_roomhook
node_roomhook -->|"emits events"| node_socketclient
node_socketclient -->|"Socket.IO"| node_socketserver
node_socketserver -->|"dispatches events"| node_roomhook
node_roomhook -->|"manages peers"| node_peer
node_peer -->|"signals offers"| node_socketclient
node_socketserver -->|"handles signaling"| node_webrtcapi
node_roomui -->|"shows chat"| node_chatui
node_roomui -->|"reads room state"| node_clientstate
node_roomhook -->|"updates state"| node_clientstate

click node_webapp "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/app/page.tsx"
click node_authui "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/Auth/SignIn.tsx"
click node_roomui "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/practicezoon/Room/RoomLayout.tsx"
click node_roomlist "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/practicezoon/RoomCardList.tsx"
click node_clientstate "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/libs/store.ts"
click node_api "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/app/app.ts"
click node_authroutes "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/auth/index.ts"
click node_roomroutes "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/room/index.ts"
click node_chatapi "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/chat/index.ts"
click node_authlib "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/lib/auth/index.ts"
click node_roomlib "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/lib/room/index.ts"
click node_moderation "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/lib/moderation/index.ts"
click node_userstore "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/models/Auth.ts"
click node_socketclient "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/libs/socket/SocketManager.ts"
click node_roomhook "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/hooks/useRoomSocket.ts"
click node_peer "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/libs/webrtc/PeerManager.ts"
click node_socketserver "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/socket/socket.ts"
click node_webrtcapi "https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/webrtc/index.ts"
click node_chatui "https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/practicezoon/Room/Chat/index.tsx"

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_webapp,node_authui,node_roomui,node_roomlist,node_clientstate,node_chatui toneBlue
class node_api,node_authroutes,node_roomroutes,node_chatapi,node_authlib,node_roomlib,node_moderation,node_webrtcapi toneAmber
class node_socketclient,node_roomhook,node_peer,node_socketserver toneMint
class node_userstore,node_mongodb,node_redis toneRose
class node_participant toneIndigo
```

## Components

### Web Client

- [Next.js App](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/app/page.tsx): `apps/frontend/app/page.tsx`
- [Sign-in / Sign-up](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/Auth/SignIn.tsx): `apps/frontend/components/Auth/SignIn.tsx`
- [Room Experience](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/practicezoon/Room/RoomLayout.tsx): `apps/frontend/components/practicezoon/Room/RoomLayout.tsx`
- [Room Discovery](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/practicezoon/RoomCardList.tsx): `apps/frontend/components/practicezoon/RoomCardList.tsx`
- [Client State](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/libs/store.ts): `apps/frontend/libs/store.ts`
- [Room Chat](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/components/practicezoon/Room/Chat/index.tsx): `apps/frontend/components/practicezoon/Room/Chat/index.tsx`

### Backend API

- [Express API](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/app/app.ts): `apps/backend/src/app/app.ts`
- [Authentication](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/auth/index.ts): `apps/backend/src/api/v1/auth/index.ts`
- [Room Operations](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/room/index.ts): `apps/backend/src/api/v1/room/index.ts`
- [Chat API](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/chat/index.ts): `apps/backend/src/api/v1/chat/index.ts`
- [Auth Logic](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/lib/auth/index.ts): `apps/backend/src/lib/auth/index.ts`
- [Room Logic](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/lib/room/index.ts): `apps/backend/src/lib/room/index.ts`
- [Moderation Logic](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/lib/moderation/index.ts): `apps/backend/src/lib/moderation/index.ts`
- [WebRTC Signaling API](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/api/v1/webrtc/index.ts): `apps/backend/src/api/v1/webrtc/index.ts`

### Live Communication

- [Socket Client](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/libs/socket/SocketManager.ts): `apps/frontend/libs/socket/SocketManager.ts`
- [Room Socket Hook](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/hooks/useRoomSocket.ts): `apps/frontend/hooks/useRoomSocket.ts`
- [Peer Connections](https://github.com/fahim-muntasir/syncora24/blob/master/apps/frontend/libs/webrtc/PeerManager.ts): `apps/frontend/libs/webrtc/PeerManager.ts`
- [Socket Server](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/socket/socket.ts): `apps/backend/src/socket/socket.ts`

### Application State

- [User Model](https://github.com/fahim-muntasir/syncora24/blob/master/apps/backend/src/models/Auth.ts): `apps/backend/src/models/Auth.ts`
- **MongoDB**
- **Redis**

### Other components

- **Participant**

## Connections

- Participant → Next.js App: uses
- Next.js App → Sign-in / Sign-up: opens
- Next.js App → Room Discovery: browses
- Participant → Room Experience: joins
- Sign-in / Sign-up → Express API: requests auth
- Room Discovery → Express API: requests rooms
- Express API → Authentication: routes auth
- Express API → Room Operations: routes rooms
- Express API → Chat API: routes chat
- Authentication → Auth Logic: delegates auth
- Room Operations → Room Logic: delegates rooms
- Auth Logic → User Model: uses model
- User Model → MongoDB: persists users
- Room Logic → Redis: room state
- Moderation Logic → Redis: moderation state
- Room Experience → Room Socket Hook: joins live
- Room Socket Hook → Socket Client: emits events
- Socket Client → Socket Server: Socket.IO
- Socket Server → Room Socket Hook: dispatches events
- Room Socket Hook → Peer Connections: manages peers
- Peer Connections → Socket Client: signals offers
- Socket Server → WebRTC Signaling API: handles signaling
- Room Experience → Room Chat: shows chat
- Room Experience → Client State: reads room state
- Room Socket Hook → Client State: updates state
