# derek-aman/socialmedia architecture

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

- Interactive diagram: https://gitdiagram.com/derek-aman/socialmedia
- Repository: https://github.com/derek-aman/socialmedia

## Overview

Networq is a professional social network. Users authenticate, manage profiles and connections, publish and engage with posts, and exchange messages; the backend routes requests to controllers and persists domain data, with Redis-backed caching and Socket.IO for live messaging. The frontend includes dashboard, discovery, profile, connection, login, and messaging experiences, plus Redux state. Backend routing, controller/model use, cache access, and socket behavior are supported by excerpts; frontend-to-backend request wiring is not shown, so those links are omitted.

Main entry points: [`backend/server.js`](https://github.com/derek-aman/socialmedia/blob/main/backend/server.js) (HTTP server), [`backend/controllers/user.controller.js`](https://github.com/derek-aman/socialmedia/blob/main/backend/controllers/user.controller.js) (User and profile logic), [`backend/routes/user.routes.js`](https://github.com/derek-aman/socialmedia/blob/main/backend/routes/user.routes.js) (User routes), [`backend/routes/posts.routes.js`](https://github.com/derek-aman/socialmedia/blob/main/backend/routes/posts.routes.js) (Post routes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web application"]
  node_login["Login<br/>[index.jsx]"]
  node_dashboard["Dashboard<br/>[index.jsx]"]
  node_discover["Discover<br/>[index.jsx]"]
  node_connections_ui["Connections<br/>[index.jsx]"]
  node_profile_ui["Profile views<br/>[index.jsx]"]
  node_public_profile_ui["Public profile<br/>[&#91;username&#93;.jsx]"]
  node_messages_ui["Message inbox<br/>[index.jsx]"]
  node_redux["Redux state<br/>[store.js]"]
end

subgraph group_identity["Identity and network"]
  node_user_routes["User routes<br/>[user.routes.js]"]
  node_user_controller["User and profile logic<br/>[user.controller.js]"]
  node_user_model[("User records<br/>[user.model.js]")]
  node_profile_model[("Profile records<br/>[profile.model.js]")]
  node_connection_model[("Connection requests")]
end

subgraph group_social["Posts and engagement"]
  node_post_routes["Post routes<br/>[posts.routes.js]"]
  node_post_controller["Post operations"]
  node_post_model[("Posts<br/>[posts.model.js]")]
  node_comment_model[("Comments<br/>[comments.model.js]")]
end

subgraph group_messaging["Messaging"]
  node_message_routes["Message routes<br/>[message.routes.js]"]
  node_message_controller["Message operations"]
  node_message_model[("Messages<br/>[messages.model.js]")]
  node_conversation_model[("Conversations")]
  node_socket["Live socket service<br/>[socket.js]"]
end

subgraph group_platform["Backend platform"]
  node_server["HTTP server<br/>[server.js]"]
  node_auth["JWT authentication<br/>[auth.middleware.js]"]
  node_limiter["Rate limiting<br/>[rateLimiter.js]"]
  node_cache_helpers["Cache helpers<br/>[safeCache.js]"]
  node_redis[("Redis cache<br/>[redisClient.js]")]
end

node_person(("Network user"))
node_mongodb[("MongoDB")]

node_person -.->|"uses"| node_login
node_person -.->|"uses"| node_dashboard
node_person -.->|"uses"| node_discover
node_person -.->|"uses"| node_connections_ui
node_person -.->|"uses"| node_profile_ui
node_person -.->|"uses"| node_public_profile_ui
node_person -.->|"uses"| node_messages_ui
node_server -->|"mounts"| node_user_routes
node_server -->|"mounts"| node_post_routes
node_server -->|"mounts"| node_message_routes
node_server -->|"initializes"| node_socket
node_server -->|"connects"| node_mongodb
node_user_routes -->|"routes to"| node_user_controller
node_user_routes -->|"protects"| node_auth
node_user_routes -->|"limits"| node_limiter
node_user_controller -->|"reads and writes"| node_user_model
node_user_controller -->|"reads and writes"| node_profile_model
node_user_controller -->|"manages"| node_connection_model
node_user_controller -->|"uses cache"| node_cache_helpers
node_post_routes -->|"routes to"| node_post_controller
node_post_routes -->|"protects"| node_auth
node_post_routes -->|"limits"| node_limiter
node_post_controller -->|"reads and writes"| node_post_model
node_post_controller -->|"manages"| node_comment_model
node_post_controller -->|"uses cache"| node_cache_helpers
node_message_routes -->|"routes to"| node_message_controller
node_message_routes -->|"protects"| node_auth
node_message_routes -->|"limits"| node_limiter
node_message_controller -->|"creates and reads"| node_message_model
node_message_controller -->|"updates and reads"| node_conversation_model
node_message_controller -->|"emits message"| node_socket
node_cache_helpers -->|"reads and writes"| node_redis
node_limiter -->|"counts requests"| node_redis

click node_login "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/login/index.jsx"
click node_dashboard "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/dashboard/index.jsx"
click node_discover "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/discover/index.jsx"
click node_connections_ui "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/my_connections/index.jsx"
click node_profile_ui "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/profile/index.jsx"
click node_public_profile_ui "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/view_profile/%5Busername%5D.jsx"
click node_messages_ui "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/messages/index.jsx"
click node_redux "https://github.com/derek-aman/socialmedia/blob/main/frontend/src/config/redux/store.js"
click node_user_routes "https://github.com/derek-aman/socialmedia/blob/main/backend/routes/user.routes.js"
click node_user_controller "https://github.com/derek-aman/socialmedia/blob/main/backend/controllers/user.controller.js"
click node_user_model "https://github.com/derek-aman/socialmedia/blob/main/backend/models/user.model.js"
click node_profile_model "https://github.com/derek-aman/socialmedia/blob/main/backend/models/profile.model.js"
click node_connection_model "https://github.com/derek-aman/socialmedia/blob/main/backend/models/connections.model.js"
click node_post_routes "https://github.com/derek-aman/socialmedia/blob/main/backend/routes/posts.routes.js"
click node_post_controller "https://github.com/derek-aman/socialmedia/blob/main/backend/controllers/posts.controller.js"
click node_post_model "https://github.com/derek-aman/socialmedia/blob/main/backend/models/posts.model.js"
click node_comment_model "https://github.com/derek-aman/socialmedia/blob/main/backend/models/comments.model.js"
click node_message_routes "https://github.com/derek-aman/socialmedia/blob/main/backend/routes/message.routes.js"
click node_message_controller "https://github.com/derek-aman/socialmedia/blob/main/backend/controllers/message.controller.js"
click node_message_model "https://github.com/derek-aman/socialmedia/blob/main/backend/models/messages.model.js"
click node_conversation_model "https://github.com/derek-aman/socialmedia/blob/main/backend/models/conversation.model.js"
click node_socket "https://github.com/derek-aman/socialmedia/blob/main/backend/socket.js"
click node_server "https://github.com/derek-aman/socialmedia/blob/main/backend/server.js"
click node_auth "https://github.com/derek-aman/socialmedia/blob/main/backend/middleware/auth.middleware.js"
click node_limiter "https://github.com/derek-aman/socialmedia/blob/main/backend/middleware/rateLimiter.js"
click node_cache_helpers "https://github.com/derek-aman/socialmedia/blob/main/backend/redis/safeCache.js"
click node_redis "https://github.com/derek-aman/socialmedia/blob/main/backend/redis/redisClient.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_login,node_dashboard,node_discover,node_connections_ui,node_profile_ui,node_public_profile_ui,node_messages_ui,node_redux,node_person toneBlue
class node_user_routes,node_user_controller,node_user_model,node_profile_model,node_connection_model,node_mongodb toneAmber
class node_post_routes,node_post_controller,node_post_model,node_comment_model toneMint
class node_message_routes,node_message_controller,node_message_model,node_conversation_model,node_socket toneRose
class node_server,node_auth,node_limiter,node_cache_helpers,node_redis toneIndigo
```

## Components

### Web application

- [Login](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/login/index.jsx): `frontend/src/pages/login/index.jsx`
- [Dashboard](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/dashboard/index.jsx): `frontend/src/pages/dashboard/index.jsx`
- [Discover](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/discover/index.jsx): `frontend/src/pages/discover/index.jsx`
- [Connections](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/my_connections/index.jsx): `frontend/src/pages/my_connections/index.jsx`
- [Profile views](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/profile/index.jsx): `frontend/src/pages/profile/index.jsx`
- [Public profile](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/view_profile/%5Busername%5D.jsx): `frontend/src/pages/view_profile/[username].jsx`
- [Message inbox](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/pages/messages/index.jsx): `frontend/src/pages/messages/index.jsx`
- [Redux state](https://github.com/derek-aman/socialmedia/blob/main/frontend/src/config/redux/store.js): `frontend/src/config/redux/store.js`

### Identity and network

- [User routes](https://github.com/derek-aman/socialmedia/blob/main/backend/routes/user.routes.js): `backend/routes/user.routes.js`
- [User and profile logic](https://github.com/derek-aman/socialmedia/blob/main/backend/controllers/user.controller.js): `backend/controllers/user.controller.js`
- [User records](https://github.com/derek-aman/socialmedia/blob/main/backend/models/user.model.js): `backend/models/user.model.js`
- [Profile records](https://github.com/derek-aman/socialmedia/blob/main/backend/models/profile.model.js): `backend/models/profile.model.js`
- [Connection requests](https://github.com/derek-aman/socialmedia/blob/main/backend/models/connections.model.js): `backend/models/connections.model.js`

### Posts and engagement

- [Post routes](https://github.com/derek-aman/socialmedia/blob/main/backend/routes/posts.routes.js): `backend/routes/posts.routes.js`
- [Post operations](https://github.com/derek-aman/socialmedia/blob/main/backend/controllers/posts.controller.js): `backend/controllers/posts.controller.js`
- [Posts](https://github.com/derek-aman/socialmedia/blob/main/backend/models/posts.model.js): `backend/models/posts.model.js`
- [Comments](https://github.com/derek-aman/socialmedia/blob/main/backend/models/comments.model.js): `backend/models/comments.model.js`

### Messaging

- [Message routes](https://github.com/derek-aman/socialmedia/blob/main/backend/routes/message.routes.js): `backend/routes/message.routes.js`
- [Message operations](https://github.com/derek-aman/socialmedia/blob/main/backend/controllers/message.controller.js): `backend/controllers/message.controller.js`
- [Messages](https://github.com/derek-aman/socialmedia/blob/main/backend/models/messages.model.js): `backend/models/messages.model.js`
- [Conversations](https://github.com/derek-aman/socialmedia/blob/main/backend/models/conversation.model.js): `backend/models/conversation.model.js`
- [Live socket service](https://github.com/derek-aman/socialmedia/blob/main/backend/socket.js): `backend/socket.js`

### Backend platform

- [HTTP server](https://github.com/derek-aman/socialmedia/blob/main/backend/server.js): `backend/server.js`
- [JWT authentication](https://github.com/derek-aman/socialmedia/blob/main/backend/middleware/auth.middleware.js): `backend/middleware/auth.middleware.js`
- [Rate limiting](https://github.com/derek-aman/socialmedia/blob/main/backend/middleware/rateLimiter.js): `backend/middleware/rateLimiter.js`
- [Cache helpers](https://github.com/derek-aman/socialmedia/blob/main/backend/redis/safeCache.js): `backend/redis/safeCache.js`
- [Redis cache](https://github.com/derek-aman/socialmedia/blob/main/backend/redis/redisClient.js): `backend/redis/redisClient.js`

### Other components

- **Network user**
- **MongoDB**

## Connections

- Network user → Login: uses
- Network user → Dashboard: uses
- Network user → Discover: uses
- Network user → Connections: uses
- Network user → Profile views: uses
- Network user → Public profile: uses
- Network user → Message inbox: uses
- HTTP server → User routes: mounts (evidence: `backend/server.js`)
- HTTP server → Post routes: mounts (evidence: `backend/server.js`)
- HTTP server → Message routes: mounts (evidence: `backend/server.js`)
- HTTP server → Live socket service: initializes (evidence: `backend/server.js`)
- HTTP server → MongoDB: connects (evidence: `backend/server.js`)
- User routes → User and profile logic: routes to (evidence: `backend/routes/user.routes.js`)
- User routes → JWT authentication: protects (evidence: `backend/routes/user.routes.js`)
- User routes → Rate limiting: limits (evidence: `backend/routes/user.routes.js`)
- User and profile logic → User records: reads and writes (evidence: `backend/controllers/user.controller.js`)
- User and profile logic → Profile records: reads and writes (evidence: `backend/controllers/user.controller.js`)
- User and profile logic → Connection requests: manages (evidence: `backend/controllers/user.controller.js`)
- User and profile logic → Cache helpers: uses cache (evidence: `backend/controllers/user.controller.js`)
- Post routes → Post operations: routes to (evidence: `backend/routes/posts.routes.js`)
- Post routes → JWT authentication: protects (evidence: `backend/routes/posts.routes.js`)
- Post routes → Rate limiting: limits (evidence: `backend/routes/posts.routes.js`)
- Post operations → Posts: reads and writes (evidence: `backend/controllers/posts.controller.js`)
- Post operations → Comments: manages (evidence: `backend/controllers/posts.controller.js`)
- Post operations → Cache helpers: uses cache (evidence: `backend/controllers/posts.controller.js`)
- Message routes → Message operations: routes to (evidence: `backend/routes/message.routes.js`)
- Message routes → JWT authentication: protects (evidence: `backend/routes/message.routes.js`)
- Message routes → Rate limiting: limits (evidence: `backend/routes/message.routes.js`)
- Message operations → Messages: creates and reads (evidence: `backend/controllers/message.controller.js`)
- Message operations → Conversations: updates and reads (evidence: `backend/controllers/message.controller.js`)
- Message operations → Live socket service: emits message (evidence: `backend/controllers/message.controller.js`)
- Cache helpers → Redis cache: reads and writes (evidence: `backend/redis/safeCache.js`)
- Rate limiting → Redis cache: counts requests (evidence: `backend/middleware/rateLimiter.js`)
