# yeats88/streamer_ow architecture

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

- Interactive diagram: https://gitdiagram.com/yeats88/streamer_ow
- Repository: https://github.com/yeats88/streamer_ow

## Overview

This local OWCS/Overwatch dashboard polls supported streaming platforms and presents player, coach, and broadcast-channel status. The main workflow is roster loading or editing, periodic status collection, status composition, then browser display and alerts; users can also filter, hide, add entries, adjust settings, or refresh the roster. The excerpts establish key server, roster, monitor, and network calls; README capability details support the UI branches, while unsampled platform-specific internals are represented at subsystem level.

Main entry points: [`server.py`](https://github.com/yeats88/streamer_ow/blob/main/server.py) (HTTP server), [`static/app.js`](https://github.com/yeats88/streamer_ow/blob/main/static/app.js) (Dashboard UI), [`monitor.py`](https://github.com/yeats88/streamer_ow/blob/main/monitor.py) (Live monitor), [`roster.py`](https://github.com/yeats88/streamer_ow/blob/main/roster.py) (Roster management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Dashboard"]
  node_browser["Dashboard UI<br/>[app.js]"]
  node_browser_alerts["Browser notifications<br/>[app.js]"]
end

subgraph group_api["Local API"]
  node_server["HTTP server<br/>[server.py]"]
  node_hidden_data[("Hidden entries<br/>[server.py]")]
end

subgraph group_roster["Roster"]
  node_roster_ops["Roster management<br/>[roster.py]"]
  node_roster_data[("Roster snapshots<br/>[players.json]")]
  node_custom_data[("Custom entries")]
end

subgraph group_monitor["Status monitoring"]
  node_monitor["Live monitor<br/>[monitor.py]"]
  node_status_cache[("Status cache<br/>[monitor.py]")]
  node_platform_checks["Platform checks<br/>[monitor.py]"]
  node_settings["Monitoring settings<br/>[monitor.py]"]
end

subgraph group_network["Network access"]
  node_network["Proxy-aware requests<br/>[network.py]"]
  node_platforms{{"Streaming platforms"}}
  node_roster_source{{"Roster source"}}
end

node_user(("Local user"))

node_user -->|"uses"| node_browser
node_browser -->|"requests API"| node_server
node_server -->|"reads status"| node_monitor
node_server -->|"manages roster"| node_roster_ops
node_server -->|"reads/writes"| node_hidden_data
node_server -->|"serves assets"| node_browser
node_roster_ops -->|"downloads roster"| node_network
node_network -->|"requests data"| node_roster_source
node_roster_ops -->|"loads/saves"| node_roster_data
node_roster_ops -->|"loads/saves"| node_custom_data
node_monitor -->|"loads players"| node_roster_ops
node_monitor -->|"collects status"| node_platform_checks
node_platform_checks -->|"sends requests"| node_network
node_network -->|"queries streams"| node_platforms
node_monitor -.->|"persists cache"| node_status_cache
node_monitor -->|"uses configuration"| node_settings
node_browser -->|"notifies favorites"| node_browser_alerts
node_browser -->|"adds/hides entries"| node_server
node_browser -->|"updates settings"| node_server

click node_browser "https://github.com/yeats88/streamer_ow/blob/main/static/app.js"
click node_server "https://github.com/yeats88/streamer_ow/blob/main/server.py"
click node_roster_ops "https://github.com/yeats88/streamer_ow/blob/main/roster.py"
click node_roster_data "https://github.com/yeats88/streamer_ow/blob/main/data/players.json"
click node_hidden_data "https://github.com/yeats88/streamer_ow/blob/main/server.py"
click node_monitor "https://github.com/yeats88/streamer_ow/blob/main/monitor.py"
click node_status_cache "https://github.com/yeats88/streamer_ow/blob/main/monitor.py"
click node_platform_checks "https://github.com/yeats88/streamer_ow/blob/main/monitor.py"
click node_network "https://github.com/yeats88/streamer_ow/blob/main/network.py"
click node_settings "https://github.com/yeats88/streamer_ow/blob/main/monitor.py"
click node_browser_alerts "https://github.com/yeats88/streamer_ow/blob/main/static/app.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_browser,node_browser_alerts,node_user toneBlue
class node_server,node_hidden_data toneAmber
class node_roster_ops,node_roster_data,node_custom_data toneMint
class node_monitor,node_status_cache,node_platform_checks,node_settings toneRose
class node_network,node_platforms,node_roster_source toneIndigo
```

## Components

### Dashboard

- [Dashboard UI](https://github.com/yeats88/streamer_ow/blob/main/static/app.js): `static/app.js`
- [Browser notifications](https://github.com/yeats88/streamer_ow/blob/main/static/app.js): `static/app.js`

### Local API

- [HTTP server](https://github.com/yeats88/streamer_ow/blob/main/server.py): `server.py`
- [Hidden entries](https://github.com/yeats88/streamer_ow/blob/main/server.py): `server.py`

### Roster

- [Roster management](https://github.com/yeats88/streamer_ow/blob/main/roster.py): `roster.py`
- [Roster snapshots](https://github.com/yeats88/streamer_ow/blob/main/data/players.json): `data/players.json`
- **Custom entries**

### Status monitoring

- [Live monitor](https://github.com/yeats88/streamer_ow/blob/main/monitor.py): `monitor.py`
- [Status cache](https://github.com/yeats88/streamer_ow/blob/main/monitor.py): `monitor.py`
- [Platform checks](https://github.com/yeats88/streamer_ow/blob/main/monitor.py): `monitor.py`
- [Monitoring settings](https://github.com/yeats88/streamer_ow/blob/main/monitor.py): `monitor.py`

### Network access

- [Proxy-aware requests](https://github.com/yeats88/streamer_ow/blob/main/network.py): `network.py`
- **Streaming platforms**
- **Roster source**

### Other components

- **Local user**

## Connections

- Local user → Dashboard UI: uses (evidence: `README.md`)
- Dashboard UI → HTTP server: requests API (evidence: `static/app.js`)
- HTTP server → Live monitor: reads status (evidence: `server.py`)
- HTTP server → Roster management: manages roster (evidence: `server.py`)
- HTTP server → Hidden entries: reads/writes (evidence: `server.py`)
- HTTP server → Dashboard UI: serves assets (evidence: `server.py`)
- Roster management → Proxy-aware requests: downloads roster (evidence: `roster.py`)
- Proxy-aware requests → Roster source: requests data (evidence: `README.md`)
- Roster management → Roster snapshots: loads/saves (evidence: `roster.py`)
- Roster management → Custom entries: loads/saves (evidence: `roster.py`)
- Live monitor → Roster management: loads players (evidence: `monitor.py`)
- Live monitor → Platform checks: collects status (evidence: `monitor.py`)
- Platform checks → Proxy-aware requests: sends requests (evidence: `network.py`)
- Proxy-aware requests → Streaming platforms: queries streams (evidence: `README.md`)
- Live monitor → Status cache: persists cache (evidence: `monitor.py`)
- Live monitor → Monitoring settings: uses configuration (evidence: `monitor.py`)
- Dashboard UI → Browser notifications: notifies favorites (evidence: `static/app.js`)
- Dashboard UI → HTTP server: adds/hides entries (evidence: `static/app.js`)
- Dashboard UI → HTTP server: updates settings (evidence: `README.md`)
