# samirkoirala/compose-manager architecture

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

## Overview

Compose Manager is a browser-based dashboard for discovering and operating Docker Compose projects on remote hosts over SSH. Users select a VM, review discovered stacks and their running state, service counts, published ports and conflicts, then start or stop a stack with streamed output or inspect its recent logs. The graph reflects README capabilities and sampled backend routes; frontend behavior and unsampled implementation details are not independently verified.

Main entry points: [`backend/server.js`](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js) (HTTP API and static server), [`frontend/public/index.html`](https://github.com/samirkoirala/compose-manager/blob/main/frontend/public/index.html) (Web dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Dashboard"]
  node_ui["Web dashboard<br/>[index.html]"]
end

subgraph group_api["Backend API"]
  node_api_server["HTTP API and static server<br/>[server.js]"]
  node_vm_config["VM selection<br/>[server.js]"]
end

subgraph group_remote["Remote Operations"]
  node_ssh_config["SSH configuration and key<br/>[server.js]"]
  node_ssh_client["SSH transport<br/>[server.js]"]
  node_discovery["Compose file discovery<br/>[server.js]"]
  node_stack_control["Stack start and stop<br/>[server.js]"]
  node_log_inspection["Recent project logs<br/>[server.js]"]
end

subgraph group_analysis["Project Insights"]
  node_insights["Status and port analysis<br/>[server.js]"]
  node_port_conflicts["Port conflict summary<br/>[server.js]"]
end

node_user(("Operator"))
node_remote_host["Remote server"]
node_compose_projects["Compose projects"]

node_user -->|"uses"| node_ui
node_api_server -->|"serves"| node_ui
node_ui -->|"requests API"| node_api_server
node_api_server -->|"lists VMs"| node_vm_config
node_api_server -->|"builds connection"| node_ssh_config
node_api_server -->|"discovers projects"| node_discovery
node_discovery -->|"runs searches"| node_ssh_client
node_ssh_config -->|"configures"| node_ssh_client
node_ssh_client -->|"connects by SSH"| node_remote_host
node_remote_host -->|"contains"| node_compose_projects
node_discovery -->|"finds files"| node_compose_projects
node_api_server -->|"collects project data"| node_insights
node_insights -->|"queries status and ports"| node_ssh_client
node_insights -->|"aggregates ports"| node_port_conflicts
node_api_server -->|"dispatches action"| node_stack_control
node_stack_control -->|"runs Compose command"| node_ssh_client
node_stack_control -->|"streams output"| node_ui
node_api_server -->|"requests logs"| node_log_inspection
node_log_inspection -->|"runs logs command"| node_ssh_client
node_log_inspection -->|"streams log lines"| node_ui

click node_ui "https://github.com/samirkoirala/compose-manager/blob/main/frontend/public/index.html"
click node_api_server "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_vm_config "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_ssh_config "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_ssh_client "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_discovery "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_insights "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_port_conflicts "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_stack_control "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js"
click node_log_inspection "https://github.com/samirkoirala/compose-manager/blob/main/backend/server.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_ui toneBlue
class node_api_server,node_vm_config toneAmber
class node_ssh_config,node_ssh_client,node_discovery,node_stack_control,node_log_inspection,node_remote_host toneMint
class node_insights,node_port_conflicts toneRose
class node_user,node_compose_projects toneIndigo
```

## Components

### Dashboard

- [Web dashboard](https://github.com/samirkoirala/compose-manager/blob/main/frontend/public/index.html): `frontend/public/index.html`

### Backend API

- [HTTP API and static server](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`
- [VM selection](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`

### Remote Operations

- [SSH configuration and key](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`
- [SSH transport](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`
- [Compose file discovery](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`
- [Stack start and stop](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`
- [Recent project logs](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`

### Project Insights

- [Status and port analysis](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`
- [Port conflict summary](https://github.com/samirkoirala/compose-manager/blob/main/backend/server.js): `backend/server.js`

### Other components

- **Operator**
- **Remote server**
- **Compose projects**

## Connections

- Operator → Web dashboard: uses
- HTTP API and static server → Web dashboard: serves
- Web dashboard → HTTP API and static server: requests API
- HTTP API and static server → VM selection: lists VMs
- HTTP API and static server → SSH configuration and key: builds connection
- HTTP API and static server → Compose file discovery: discovers projects
- Compose file discovery → SSH transport: runs searches
- SSH configuration and key → SSH transport: configures
- SSH transport → Remote server: connects by SSH
- Remote server → Compose projects: contains
- Compose file discovery → Compose projects: finds files
- HTTP API and static server → Status and port analysis: collects project data
- Status and port analysis → SSH transport: queries status and ports
- Status and port analysis → Port conflict summary: aggregates ports
- HTTP API and static server → Stack start and stop: dispatches action
- Stack start and stop → SSH transport: runs Compose command
- Stack start and stop → Web dashboard: streams output
- HTTP API and static server → Recent project logs: requests logs
- Recent project logs → SSH transport: runs logs command
- Recent project logs → Web dashboard: streams log lines
