# pshenok/server-survival architecture

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

- Interactive diagram: https://gitdiagram.com/pshenok/server-survival
- Repository: https://github.com/pshenok/server-survival

## Overview

Server Survival is a browser-based cloud-architecture simulation game. The player builds and connects services, then the simulation routes changing traffic through that topology; service behavior and resilience mechanics determine successes, failures, costs, and health, which the game presents as run feedback. Survival, Sandbox, and Campaign provide distinct ways to play, with Campaign adding authored levels and objectives. The graph also shows persistence and achievements as supporting systems. README claims establish several capabilities whose detailed wiring is not visible in the sampled excerpts, so uncertain internal links are omitted.

Main entry points: [`src/entities/Service.js`](https://github.com/pshenok/server-survival/blob/main/src/entities/Service.js) (Service runtime), [`game.js`](https://github.com/pshenok/server-survival/blob/main/game.js) (Game runtime), [`src/sim/topology.js`](https://github.com/pshenok/server-survival/blob/main/src/sim/topology.js) (Build topology), [`src/ui/campaign-ui.js`](https://github.com/pshenok/server-survival/blob/main/src/ui/campaign-ui.js) (Campaign UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Game entry"]
  node_game["Game runtime<br/>[game.js]"]
  node_input["Input handlers<br/>[handlers.js]"]
  node_state["Game state<br/>[state.js]"]
end

subgraph group_play["Play modes"]
  node_topology["Build topology<br/>[topology.js]"]
  node_campaign["Campaign flow<br/>[campaign.js]"]
  node_levels["Campaign levels<br/>[levels.js]"]
  node_sandbox["Sandbox controls<br/>[toolbar.js]"]
end

subgraph group_simulation["Simulation"]
  node_scheduler["Traffic scheduler<br/>[scheduler.js]"]
  node_service["Service runtime<br/>[Service.js]"]
  node_handlers["Service handlers<br/>[index.js]"]
  node_request["Request model<br/>[Request.js]"]
  node_resilience["Resilience mechanics<br/>[circuit-breaker.js]"]
  node_autoscaling["Auto-scaling<br/>[autoscaling.js]"]
  node_gpu["GPU inference<br/>[gpu.js]"]
  node_power["Power constraints<br/>[power.js]"]
end

subgraph group_feedback["Player feedback"]
  node_economy["Economy<br/>[economy.js]"]
  node_actions["Request outcomes<br/>[actions.js]"]
  node_metrics["Run metrics<br/>[metrics.js]"]
  node_metricsui["Metrics panel<br/>[metrics-panel.js]"]
  node_failui["Failure badges<br/>[failure-badges.js]"]
  node_campaignui["Campaign UI<br/>[campaign-ui.js]"]
end

subgraph group_support["Progress and state"]
  node_persistence["Save and load<br/>[save-load.js]"]
  node_achievements["Achievements<br/>[achievements.js]"]
  node_achievementui["Trophies UI<br/>[ui.js]"]
  node_tutorial["Tutorial<br/>[tutorial.js]"]
end

node_player(("Player"))
node_browserstore[("Browser storage")]

node_player -->|"starts and plays"| node_game
node_game -->|"registers handlers"| node_input
node_input -->|"places and connects"| node_topology
node_topology -->|"creates services"| node_service
node_game -->|"runs simulation"| node_scheduler
node_scheduler -->|"updates services"| node_service
node_service -->|"dispatches requests"| node_handlers
node_handlers -->|"finishes or fails"| node_actions
node_service -->|"processes requests"| node_request
node_service -->|"uses breaker"| node_resilience
node_service -->|"updates scaling"| node_autoscaling
node_service -->|"uses GPU state"| node_gpu
node_topology -->|"checks capacity"| node_power
node_game -->|"updates finances"| node_economy
node_game -->|"tracks run"| node_metrics
node_metricsui -->|"reads report"| node_metrics
node_failui -->|"shows failures"| node_actions
node_player -->|"selects levels"| node_campaignui
node_campaignui -->|"starts campaign"| node_campaign
node_campaign -->|"loads level data"| node_levels
node_campaignui -->|"resets run"| node_game
node_campaignui -->|"gets run report"| node_metrics
node_player -->|"sets up sandbox"| node_sandbox
node_player -->|"saves or loads"| node_persistence
node_persistence -->|"reads and writes"| node_browserstore
node_achievements -->|"persists unlocks"| node_browserstore
node_achievements -->|"updates trophies"| node_achievementui
node_input -->|"checks fleet state"| node_autoscaling
node_topology -->|"notifies actions"| node_tutorial

click node_game "https://github.com/pshenok/server-survival/blob/main/game.js"
click node_input "https://github.com/pshenok/server-survival/blob/main/src/input/handlers.js"
click node_state "https://github.com/pshenok/server-survival/blob/main/src/state.js"
click node_topology "https://github.com/pshenok/server-survival/blob/main/src/sim/topology.js"
click node_campaign "https://github.com/pshenok/server-survival/blob/main/src/campaign/campaign.js"
click node_levels "https://github.com/pshenok/server-survival/blob/main/src/campaign/levels.js"
click node_sandbox "https://github.com/pshenok/server-survival/blob/main/src/ui/toolbar.js"
click node_scheduler "https://github.com/pshenok/server-survival/blob/main/src/sim/scheduler.js"
click node_service "https://github.com/pshenok/server-survival/blob/main/src/entities/Service.js"
click node_handlers "https://github.com/pshenok/server-survival/blob/main/src/sim/handlers/index.js"
click node_request "https://github.com/pshenok/server-survival/blob/main/src/entities/Request.js"
click node_resilience "https://github.com/pshenok/server-survival/blob/main/src/sim/circuit-breaker.js"
click node_autoscaling "https://github.com/pshenok/server-survival/blob/main/src/sim/autoscaling.js"
click node_gpu "https://github.com/pshenok/server-survival/blob/main/src/sim/gpu.js"
click node_power "https://github.com/pshenok/server-survival/blob/main/src/sim/power.js"
click node_economy "https://github.com/pshenok/server-survival/blob/main/src/core/economy.js"
click node_actions "https://github.com/pshenok/server-survival/blob/main/src/core/actions.js"
click node_metrics "https://github.com/pshenok/server-survival/blob/main/src/core/metrics.js"
click node_metricsui "https://github.com/pshenok/server-survival/blob/main/src/ui/metrics-panel.js"
click node_failui "https://github.com/pshenok/server-survival/blob/main/src/ui/failure-badges.js"
click node_campaignui "https://github.com/pshenok/server-survival/blob/main/src/ui/campaign-ui.js"
click node_persistence "https://github.com/pshenok/server-survival/blob/main/src/persistence/save-load.js"
click node_achievements "https://github.com/pshenok/server-survival/blob/main/src/achievements/achievements.js"
click node_achievementui "https://github.com/pshenok/server-survival/blob/main/src/achievements/ui.js"
click node_tutorial "https://github.com/pshenok/server-survival/blob/main/src/tutorial.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_game,node_input,node_state toneBlue
class node_topology,node_campaign,node_levels,node_sandbox,node_browserstore toneAmber
class node_scheduler,node_service,node_handlers,node_request,node_resilience,node_autoscaling,node_gpu,node_power toneMint
class node_economy,node_actions,node_metrics,node_metricsui,node_failui,node_campaignui toneRose
class node_persistence,node_achievements,node_achievementui,node_tutorial,node_player toneIndigo
```

## Components

### Game entry

- [Game runtime](https://github.com/pshenok/server-survival/blob/main/game.js): `game.js`
- [Input handlers](https://github.com/pshenok/server-survival/blob/main/src/input/handlers.js): `src/input/handlers.js`
- [Game state](https://github.com/pshenok/server-survival/blob/main/src/state.js): `src/state.js`

### Play modes

- [Build topology](https://github.com/pshenok/server-survival/blob/main/src/sim/topology.js): `src/sim/topology.js`
- [Campaign flow](https://github.com/pshenok/server-survival/blob/main/src/campaign/campaign.js): `src/campaign/campaign.js`
- [Campaign levels](https://github.com/pshenok/server-survival/blob/main/src/campaign/levels.js): `src/campaign/levels.js`
- [Sandbox controls](https://github.com/pshenok/server-survival/blob/main/src/ui/toolbar.js): `src/ui/toolbar.js`

### Simulation

- [Traffic scheduler](https://github.com/pshenok/server-survival/blob/main/src/sim/scheduler.js): `src/sim/scheduler.js`
- [Service runtime](https://github.com/pshenok/server-survival/blob/main/src/entities/Service.js): `src/entities/Service.js`
- [Service handlers](https://github.com/pshenok/server-survival/blob/main/src/sim/handlers/index.js): `src/sim/handlers/index.js`
- [Request model](https://github.com/pshenok/server-survival/blob/main/src/entities/Request.js): `src/entities/Request.js`
- [Resilience mechanics](https://github.com/pshenok/server-survival/blob/main/src/sim/circuit-breaker.js): `src/sim/circuit-breaker.js`
- [Auto-scaling](https://github.com/pshenok/server-survival/blob/main/src/sim/autoscaling.js): `src/sim/autoscaling.js`
- [GPU inference](https://github.com/pshenok/server-survival/blob/main/src/sim/gpu.js): `src/sim/gpu.js`
- [Power constraints](https://github.com/pshenok/server-survival/blob/main/src/sim/power.js): `src/sim/power.js`

### Player feedback

- [Economy](https://github.com/pshenok/server-survival/blob/main/src/core/economy.js): `src/core/economy.js`
- [Request outcomes](https://github.com/pshenok/server-survival/blob/main/src/core/actions.js): `src/core/actions.js`
- [Run metrics](https://github.com/pshenok/server-survival/blob/main/src/core/metrics.js): `src/core/metrics.js`
- [Metrics panel](https://github.com/pshenok/server-survival/blob/main/src/ui/metrics-panel.js): `src/ui/metrics-panel.js`
- [Failure badges](https://github.com/pshenok/server-survival/blob/main/src/ui/failure-badges.js): `src/ui/failure-badges.js`
- [Campaign UI](https://github.com/pshenok/server-survival/blob/main/src/ui/campaign-ui.js): `src/ui/campaign-ui.js`

### Progress and state

- [Save and load](https://github.com/pshenok/server-survival/blob/main/src/persistence/save-load.js): `src/persistence/save-load.js`
- [Achievements](https://github.com/pshenok/server-survival/blob/main/src/achievements/achievements.js): `src/achievements/achievements.js`
- [Trophies UI](https://github.com/pshenok/server-survival/blob/main/src/achievements/ui.js): `src/achievements/ui.js`
- [Tutorial](https://github.com/pshenok/server-survival/blob/main/src/tutorial.js): `src/tutorial.js`

### Other components

- **Player**
- **Browser storage**

## Connections

- Player → Game runtime: starts and plays
- Game runtime → Input handlers: registers handlers
- Input handlers → Build topology: places and connects
- Build topology → Service runtime: creates services
- Game runtime → Traffic scheduler: runs simulation
- Traffic scheduler → Service runtime: updates services
- Service runtime → Service handlers: dispatches requests
- Service handlers → Request outcomes: finishes or fails
- Service runtime → Request model: processes requests
- Service runtime → Resilience mechanics: uses breaker
- Service runtime → Auto-scaling: updates scaling
- Service runtime → GPU inference: uses GPU state
- Build topology → Power constraints: checks capacity
- Game runtime → Economy: updates finances
- Game runtime → Run metrics: tracks run
- Metrics panel → Run metrics: reads report
- Failure badges → Request outcomes: shows failures
- Player → Campaign UI: selects levels
- Campaign UI → Campaign flow: starts campaign
- Campaign flow → Campaign levels: loads level data
- Campaign UI → Game runtime: resets run
- Campaign UI → Run metrics: gets run report
- Player → Sandbox controls: sets up sandbox
- Player → Save and load: saves or loads
- Save and load → Browser storage: reads and writes
- Achievements → Browser storage: persists unlocks
- Achievements → Trophies UI: updates trophies
- Input handlers → Auto-scaling: checks fleet state
- Build topology → Tutorial: notifies actions
