# srinuk9570/nexa-message architecture

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

## Overview

Nexa Message is a full-stack communications app. Users authenticate, enter a routed client, and use messaging, community, social, calling, and assistant features; the client communicates with Express over HTTP and with Socket.io for live events. The README documents additional media and document capabilities whose backend wiring is not shown in the sampled source. The graph reflects documented capabilities and sampled entry points; unsampled route internals are represented at their exact tree paths.

Main entry points: [`server/index.js`](https://github.com/srinuk9570/nexa-message/blob/main/server/index.js) (API and socket host), [`client/src/utils/api.js`](https://github.com/srinuk9570/nexa-message/blob/main/client/src/utils/api.js) (HTTP client), [`server/models/Message.js`](https://github.com/srinuk9570/nexa-message/blob/main/server/models/Message.js) (Domain models), [`client/src/context/SocketContext.js`](https://github.com/srinuk9570/nexa-message/blob/main/client/src/context/SocketContext.js) (Socket client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client experience"]
  node_app["App routes<br/>[App.js]"]
  node_aiui["AI assistant<br/>[AIPage.js]"]
  node_filesui["Documents media<br/>[DocumentsPage.js]"]
  node_searchui["Global search<br/>[GlobalSearch.js]"]
  node_api["HTTP client<br/>[api.js]"]
end

subgraph group_identity["Identity and people"]
  node_authui["Auth state<br/>[AuthContext.js]"]
  node_profileui["Profiles settings<br/>[ProfilePage.js]"]
  node_authroutes["Authentication routes<br/>[auth.js]"]
  node_usersroutes["User routes<br/>[users.js]"]
end

subgraph group_messaging["Messaging and calls"]
  node_chatui["Direct chat<br/>[ChatPage.js]"]
  node_groupui["Group chat<br/>[GroupsPage.js]"]
  node_callsui["Voice video calls<br/>[CallsPage.js]"]
  node_socketclient["Socket client<br/>[SocketContext.js]"]
  node_messageroutes["Message routes<br/>[messages.js]"]
  node_callroutes["Call history routes<br/>[calls.js]"]
  node_socketserver["Realtime signaling<br/>[socketHandler.js]"]
end

subgraph group_social["Social spaces"]
  node_communityui["Communities<br/>[CommunitiesPage.js]"]
  node_exploreui["Explore communities"]
  node_feedui["Public feed<br/>[FeedPage.js]"]
  node_storiesui["Stories<br/>[StoriesPage.js]"]
  node_socialroutes["Social routes<br/>[communities.js]"]
  node_feedroutes["Feed routes<br/>[posts.js]"]
  node_storyroutes["Story routes<br/>[stories.js]"]
end

subgraph group_platform["Server platform"]
  node_server["API and socket host<br/>[index.js]"]
  node_searchroutes["Search routes<br/>[search.js]"]
  node_airoutes["AI routes<br/>[ai.js]"]
  node_translateroutes["Translation routes<br/>[translate.js]"]
  node_models["Domain models<br/>[Message.js]"]
  node_database[("MongoDB connection<br/>[database.js]")]
end

node_person(("App user"))
node_sms{{"Fast2SMS"}}
node_gemini{{"Google Gemini"}}
node_browser(("Browser"))

node_person -->|"uses"| node_browser
node_browser -->|"loads"| node_app
node_app -->|"provides auth"| node_authui
node_person -->|"signs in"| node_authui
node_authui -->|"requests auth"| node_api
node_api -->|"HTTP requests"| node_server
node_server -->|"dispatches"| node_authroutes
node_server -->|"dispatches"| node_usersroutes
node_server -->|"dispatches"| node_messageroutes
node_server -->|"dispatches"| node_socialroutes
node_server -->|"dispatches"| node_feedroutes
node_server -->|"dispatches"| node_storyroutes
node_server -->|"dispatches"| node_searchroutes
node_server -->|"dispatches"| node_airoutes
node_server -->|"dispatches"| node_translateroutes
node_server -->|"dispatches"| node_callroutes
node_authroutes -.->|"sends OTP"| node_sms
node_airoutes -.->|"prompts"| node_gemini
node_chatui -->|"loads history"| node_api
node_chatui -->|"live messaging"| node_socketclient
node_groupui -->|"group actions"| node_api
node_groupui -->|"live messages"| node_socketclient
node_communityui -->|"community actions"| node_api
node_communityui -->|"channel messages"| node_socketclient
node_exploreui -->|"browses joins"| node_api
node_feedui -->|"feed actions"| node_api
node_storiesui -->|"story actions"| node_api
node_callsui -->|"call history"| node_api
node_callsui -->|"call signaling"| node_socketclient
node_aiui -->|"assistant requests"| node_api
node_filesui -->|"file actions"| node_api
node_profileui -->|"profile actions"| node_api
node_searchui -->|"searches"| node_api
node_socketclient -->|"socket connection"| node_server
node_server -->|"initializes"| node_socketserver
node_socketserver -->|"creates messages"| node_messageroutes
node_authroutes -->|"reads writes"| node_models
node_usersroutes -->|"reads writes"| node_models
node_messageroutes -->|"reads writes"| node_models
node_socialroutes -->|"reads writes"| node_models
node_feedroutes -->|"reads writes"| node_models
node_storyroutes -->|"reads writes"| node_models
node_server -->|"connects"| node_database
node_models -->|"persists data"| node_database

click node_app "https://github.com/srinuk9570/nexa-message/blob/main/client/src/App.js"
click node_authui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/context/AuthContext.js"
click node_chatui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/ChatPage.js"
click node_groupui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/GroupsPage.js"
click node_communityui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/CommunitiesPage.js"
click node_exploreui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/ExploreCommunitiesPage.js"
click node_feedui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/FeedPage.js"
click node_storiesui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/StoriesPage.js"
click node_callsui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/CallsPage.js"
click node_aiui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/AIPage.js"
click node_filesui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/DocumentsPage.js"
click node_profileui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/ProfilePage.js"
click node_searchui "https://github.com/srinuk9570/nexa-message/blob/main/client/src/components/Search/GlobalSearch.js"
click node_api "https://github.com/srinuk9570/nexa-message/blob/main/client/src/utils/api.js"
click node_socketclient "https://github.com/srinuk9570/nexa-message/blob/main/client/src/context/SocketContext.js"
click node_server "https://github.com/srinuk9570/nexa-message/blob/main/server/index.js"
click node_authroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/auth.js"
click node_usersroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/users.js"
click node_messageroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/messages.js"
click node_socialroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/communities.js"
click node_feedroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/posts.js"
click node_storyroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/stories.js"
click node_searchroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/search.js"
click node_airoutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/ai.js"
click node_translateroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/translate.js"
click node_callroutes "https://github.com/srinuk9570/nexa-message/blob/main/server/routes/calls.js"
click node_socketserver "https://github.com/srinuk9570/nexa-message/blob/main/server/socket/socketHandler.js"
click node_models "https://github.com/srinuk9570/nexa-message/blob/main/server/models/Message.js"
click node_database "https://github.com/srinuk9570/nexa-message/blob/main/server/config/database.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_aiui,node_filesui,node_searchui,node_api,node_person,node_browser toneBlue
class node_authui,node_profileui,node_authroutes,node_usersroutes toneAmber
class node_chatui,node_groupui,node_callsui,node_socketclient,node_messageroutes,node_callroutes,node_socketserver toneMint
class node_communityui,node_exploreui,node_feedui,node_storiesui,node_socialroutes,node_feedroutes,node_storyroutes toneRose
class node_server,node_searchroutes,node_airoutes,node_translateroutes,node_models,node_database,node_sms,node_gemini toneIndigo
```

## Components

### Client experience

- [App routes](https://github.com/srinuk9570/nexa-message/blob/main/client/src/App.js): `client/src/App.js`
- [AI assistant](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/AIPage.js): `client/src/pages/AIPage.js`
- [Documents media](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/DocumentsPage.js): `client/src/pages/DocumentsPage.js`
- [Global search](https://github.com/srinuk9570/nexa-message/blob/main/client/src/components/Search/GlobalSearch.js): `client/src/components/Search/GlobalSearch.js`
- [HTTP client](https://github.com/srinuk9570/nexa-message/blob/main/client/src/utils/api.js): `client/src/utils/api.js`

### Identity and people

- [Auth state](https://github.com/srinuk9570/nexa-message/blob/main/client/src/context/AuthContext.js): `client/src/context/AuthContext.js`
- [Profiles settings](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/ProfilePage.js): `client/src/pages/ProfilePage.js`
- [Authentication routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/auth.js): `server/routes/auth.js`
- [User routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/users.js): `server/routes/users.js`

### Messaging and calls

- [Direct chat](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/ChatPage.js): `client/src/pages/ChatPage.js`
- [Group chat](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/GroupsPage.js): `client/src/pages/GroupsPage.js`
- [Voice video calls](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/CallsPage.js): `client/src/pages/CallsPage.js`
- [Socket client](https://github.com/srinuk9570/nexa-message/blob/main/client/src/context/SocketContext.js): `client/src/context/SocketContext.js`
- [Message routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/messages.js): `server/routes/messages.js`
- [Call history routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/calls.js): `server/routes/calls.js`
- [Realtime signaling](https://github.com/srinuk9570/nexa-message/blob/main/server/socket/socketHandler.js): `server/socket/socketHandler.js`

### Social spaces

- [Communities](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/CommunitiesPage.js): `client/src/pages/CommunitiesPage.js`
- [Explore communities](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/ExploreCommunitiesPage.js): `client/src/pages/ExploreCommunitiesPage.js`
- [Public feed](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/FeedPage.js): `client/src/pages/FeedPage.js`
- [Stories](https://github.com/srinuk9570/nexa-message/blob/main/client/src/pages/StoriesPage.js): `client/src/pages/StoriesPage.js`
- [Social routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/communities.js): `server/routes/communities.js`
- [Feed routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/posts.js): `server/routes/posts.js`
- [Story routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/stories.js): `server/routes/stories.js`

### Server platform

- [API and socket host](https://github.com/srinuk9570/nexa-message/blob/main/server/index.js): `server/index.js`
- [Search routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/search.js): `server/routes/search.js`
- [AI routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/ai.js): `server/routes/ai.js`
- [Translation routes](https://github.com/srinuk9570/nexa-message/blob/main/server/routes/translate.js): `server/routes/translate.js`
- [Domain models](https://github.com/srinuk9570/nexa-message/blob/main/server/models/Message.js): `server/models/Message.js`
- [MongoDB connection](https://github.com/srinuk9570/nexa-message/blob/main/server/config/database.js): `server/config/database.js`

### Other components

- **App user**
- **Fast2SMS**
- **Google Gemini**
- **Browser**

## Connections

- App user → Browser: uses
- Browser → App routes: loads
- App routes → Auth state: provides auth
- App user → Auth state: signs in
- Auth state → HTTP client: requests auth
- HTTP client → API and socket host: HTTP requests
- API and socket host → Authentication routes: dispatches
- API and socket host → User routes: dispatches
- API and socket host → Message routes: dispatches
- API and socket host → Social routes: dispatches
- API and socket host → Feed routes: dispatches
- API and socket host → Story routes: dispatches
- API and socket host → Search routes: dispatches
- API and socket host → AI routes: dispatches
- API and socket host → Translation routes: dispatches
- API and socket host → Call history routes: dispatches
- Authentication routes → Fast2SMS: sends OTP
- AI routes → Google Gemini: prompts
- Direct chat → HTTP client: loads history
- Direct chat → Socket client: live messaging
- Group chat → HTTP client: group actions
- Group chat → Socket client: live messages
- Communities → HTTP client: community actions
- Communities → Socket client: channel messages
- Explore communities → HTTP client: browses joins
- Public feed → HTTP client: feed actions
- Stories → HTTP client: story actions
- Voice video calls → HTTP client: call history
- Voice video calls → Socket client: call signaling
- AI assistant → HTTP client: assistant requests
- Documents media → HTTP client: file actions
- Profiles settings → HTTP client: profile actions
- Global search → HTTP client: searches
- Socket client → API and socket host: socket connection
- API and socket host → Realtime signaling: initializes
- Realtime signaling → Message routes: creates messages
- Authentication routes → Domain models: reads writes
- User routes → Domain models: reads writes
- Message routes → Domain models: reads writes
- Social routes → Domain models: reads writes
- Feed routes → Domain models: reads writes
- Story routes → Domain models: reads writes
- API and socket host → MongoDB connection: connects
- Domain models → MongoDB connection: persists data
