# enclicainteractive/voltage architecture

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

## Overview

Volt Server is the backend for a decentralized chat platform. A client request enters the Express server, passes through middleware, and reaches domain APIs for authentication, profiles, communities and channels, or messaging; those APIs read or update platform state and return responses. The product also supports media delivery, federation and self-hosting, bots, discovery, safety automation, and real-time communication. The tree and README establish these capabilities, but sampled route excerpts do not expose all their service wiring, so those links are intentionally omitted.

Main entry points: [`server.js`](https://github.com/enclicainteractive/voltage/blob/master/server.js) (Express server), [`services/dataService.js`](https://github.com/enclicainteractive/voltage/blob/master/services/dataService.js) (Data services), [`routes/userRoutes.js`](https://github.com/enclicainteractive/voltage/blob/master/routes/userRoutes.js) (User and friends API), [`routes/serverRoutes.js`](https://github.com/enclicainteractive/voltage/blob/master/routes/serverRoutes.js) (Servers and channels)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["HTTP entry"]
  node_server["Express server<br/>[server.js]"]
  node_middleware["Request middleware"]
end

subgraph group_chat["Chat domains"]
  node_auth["Authentication API<br/>[authRoutes.js]"]
  node_users["User and friends API<br/>[userRoutes.js]"]
  node_communities["Servers and channels<br/>[serverRoutes.js]"]
  node_channels["Channel operations<br/>[channelRoutes.js]"]
  node_messages["Messages and DMs<br/>[messageRoutes.js]"]
  node_realtime["WebSocket API<br/>[websocket.js]"]
end

subgraph group_platform["Platform features"]
  node_media["Uploads and media<br/>[uploadRoutes.js]"]
  node_cdn["CDN service<br/>[cdnService.js]"]
  node_federation["Federation API"]
  node_selfvolt["Self-Volt API<br/>[selfVoltRoutes.js]"]
  node_bots["Bot API<br/>[botRoutes.js]"]
  node_discovery["Discovery API<br/>[discoveryRoutes.js]"]
  node_safety["Safety and automod<br/>[safetyRoutes.js]"]
end

subgraph group_runtime["Runtime services"]
  node_data["Data services<br/>[dataService.js]"]
  node_storage["Storage adapter<br/>[storageService.js]"]
  node_database[("Configured data store")]
  node_wsmanager["WebSocket manager<br/>[wsManager.js]"]
end

node_client(("Client"))
node_redis[("Redis")]
node_federated(("Federated servers"))
node_cdnprovider[("CDN provider")]

node_client -->|"sends requests"| node_server
node_server -->|"applies middleware"| node_middleware
node_server -->|"routes requests"| node_auth
node_server -->|"routes requests"| node_users
node_server -->|"routes requests"| node_communities
node_server -->|"routes requests"| node_channels
node_server -->|"routes requests"| node_messages
node_server -->|"serves sockets"| node_realtime
node_server -->|"routes requests"| node_media
node_server -->|"routes requests"| node_federation
node_server -->|"routes requests"| node_selfvolt
node_server -->|"routes requests"| node_bots
node_server -->|"routes requests"| node_discovery
node_server -->|"routes requests"| node_safety
node_users -->|"reads and updates"| node_data
node_communities -->|"saves records"| node_data
node_channels -->|"reads channel data"| node_data
node_data -->|"initializes storage"| node_storage
node_storage -->|"reads and writes"| node_database
node_media -->|"uploads files"| node_cdn
node_cdn -.->|"stores media"| node_cdnprovider
node_federation -.->|"federates"| node_federated
node_selfvolt -.->|"connects hosts"| node_federated
node_realtime -->|"manages connections"| node_wsmanager
node_wsmanager -.->|"shares presence"| node_redis

click node_server "https://github.com/enclicainteractive/voltage/blob/master/server.js"
click node_middleware "https://github.com/enclicainteractive/voltage/tree/master/middleware"
click node_auth "https://github.com/enclicainteractive/voltage/blob/master/routes/authRoutes.js"
click node_users "https://github.com/enclicainteractive/voltage/blob/master/routes/userRoutes.js"
click node_communities "https://github.com/enclicainteractive/voltage/blob/master/routes/serverRoutes.js"
click node_channels "https://github.com/enclicainteractive/voltage/blob/master/routes/channelRoutes.js"
click node_messages "https://github.com/enclicainteractive/voltage/blob/master/routes/messageRoutes.js"
click node_realtime "https://github.com/enclicainteractive/voltage/blob/master/microservices/websocket.js"
click node_media "https://github.com/enclicainteractive/voltage/blob/master/routes/uploadRoutes.js"
click node_cdn "https://github.com/enclicainteractive/voltage/blob/master/services/cdnService.js"
click node_federation "https://github.com/enclicainteractive/voltage/blob/master/routes/federationRoutes.js"
click node_selfvolt "https://github.com/enclicainteractive/voltage/blob/master/routes/selfVoltRoutes.js"
click node_bots "https://github.com/enclicainteractive/voltage/blob/master/routes/botRoutes.js"
click node_discovery "https://github.com/enclicainteractive/voltage/blob/master/routes/discoveryRoutes.js"
click node_safety "https://github.com/enclicainteractive/voltage/blob/master/routes/safetyRoutes.js"
click node_data "https://github.com/enclicainteractive/voltage/blob/master/services/dataService.js"
click node_storage "https://github.com/enclicainteractive/voltage/blob/master/services/storageService.js"
click node_wsmanager "https://github.com/enclicainteractive/voltage/blob/master/services/wsManager.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_server,node_middleware,node_client toneBlue
class node_auth,node_users,node_communities,node_channels,node_messages,node_realtime,node_redis,node_cdnprovider toneAmber
class node_media,node_cdn,node_federation,node_selfvolt,node_bots,node_discovery,node_safety,node_federated toneMint
class node_data,node_storage,node_database,node_wsmanager toneRose
```

## Components

### HTTP entry

- [Express server](https://github.com/enclicainteractive/voltage/blob/master/server.js): `server.js`
- [Request middleware](https://github.com/enclicainteractive/voltage/tree/master/middleware): `middleware`

### Chat domains

- [Authentication API](https://github.com/enclicainteractive/voltage/blob/master/routes/authRoutes.js): `routes/authRoutes.js`
- [User and friends API](https://github.com/enclicainteractive/voltage/blob/master/routes/userRoutes.js): `routes/userRoutes.js`
- [Servers and channels](https://github.com/enclicainteractive/voltage/blob/master/routes/serverRoutes.js): `routes/serverRoutes.js`
- [Channel operations](https://github.com/enclicainteractive/voltage/blob/master/routes/channelRoutes.js): `routes/channelRoutes.js`
- [Messages and DMs](https://github.com/enclicainteractive/voltage/blob/master/routes/messageRoutes.js): `routes/messageRoutes.js`
- [WebSocket API](https://github.com/enclicainteractive/voltage/blob/master/microservices/websocket.js): `microservices/websocket.js`

### Platform features

- [Uploads and media](https://github.com/enclicainteractive/voltage/blob/master/routes/uploadRoutes.js): `routes/uploadRoutes.js`
- [CDN service](https://github.com/enclicainteractive/voltage/blob/master/services/cdnService.js): `services/cdnService.js`
- [Federation API](https://github.com/enclicainteractive/voltage/blob/master/routes/federationRoutes.js): `routes/federationRoutes.js`
- [Self-Volt API](https://github.com/enclicainteractive/voltage/blob/master/routes/selfVoltRoutes.js): `routes/selfVoltRoutes.js`
- [Bot API](https://github.com/enclicainteractive/voltage/blob/master/routes/botRoutes.js): `routes/botRoutes.js`
- [Discovery API](https://github.com/enclicainteractive/voltage/blob/master/routes/discoveryRoutes.js): `routes/discoveryRoutes.js`
- [Safety and automod](https://github.com/enclicainteractive/voltage/blob/master/routes/safetyRoutes.js): `routes/safetyRoutes.js`

### Runtime services

- [Data services](https://github.com/enclicainteractive/voltage/blob/master/services/dataService.js): `services/dataService.js`
- [Storage adapter](https://github.com/enclicainteractive/voltage/blob/master/services/storageService.js): `services/storageService.js`
- **Configured data store**
- [WebSocket manager](https://github.com/enclicainteractive/voltage/blob/master/services/wsManager.js): `services/wsManager.js`

### Other components

- **Client**
- **Redis**
- **Federated servers**
- **CDN provider**

## Connections

- Client → Express server: sends requests
- Express server → Request middleware: applies middleware
- Express server → Authentication API: routes requests
- Express server → User and friends API: routes requests
- Express server → Servers and channels: routes requests
- Express server → Channel operations: routes requests
- Express server → Messages and DMs: routes requests
- Express server → WebSocket API: serves sockets
- Express server → Uploads and media: routes requests
- Express server → Federation API: routes requests
- Express server → Self-Volt API: routes requests
- Express server → Bot API: routes requests
- Express server → Discovery API: routes requests
- Express server → Safety and automod: routes requests
- User and friends API → Data services: reads and updates
- Servers and channels → Data services: saves records
- Channel operations → Data services: reads channel data
- Data services → Storage adapter: initializes storage
- Storage adapter → Configured data store: reads and writes
- Uploads and media → CDN service: uploads files
- CDN service → CDN provider: stores media
- Federation API → Federated servers: federates
- Self-Volt API → Federated servers: connects hosts
- WebSocket API → WebSocket manager: manages connections
- WebSocket manager → Redis: shares presence
