# gestjava/dashboard architecture

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

- Interactive diagram: https://gitdiagram.com/gestjava/dashboard
- Repository: https://github.com/gestjava/dashboard

## Overview

This is a browser-based dashboard command center for displaying configurable web pages in dashboard slots, with an optional local proxy for sites that block iframe embedding. The principal workflow is configuring slot URLs, displaying them in iframes, and saving or restoring configuration; carousel rotation and admin controls support that workflow. The source excerpt is partial and the README is empty, so the graph omits undocumented UI details and shows only evidenced wiring.

Main entry points: [`app.js`](https://github.com/gestjava/dashboard/blob/main/app.js) (Dashboard controller), [`index.html`](https://github.com/gestjava/dashboard/blob/main/index.html) (Iframe slots), [`proxy-server.js`](https://github.com/gestjava/dashboard/blob/main/proxy-server.js) (HTTP proxy server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_dashboard["Dashboard interface"]
  node_page["Dashboard page<br/>[index.html]"]
  node_controller["Dashboard controller<br/>[app.js]"]
  node_admin["Admin controls<br/>[app.js]"]
  node_clock["Live clock<br/>[app.js]"]
  node_notifications["Toast notifications<br/>[app.js]"]
end

subgraph group_runtime["Slot runtime"]
  node_slot_config["Slot configuration<br/>[app.js]"]
  node_iframe_slots["Iframe slots<br/>[index.html]"]
  node_slot_scaling["Iframe scaling<br/>[app.js]"]
  node_lazy_loading["Lazy loading<br/>[app.js]"]
  node_carousel_config["Carousel configuration<br/>[app.js]"]
  node_carousel_rotation["Carousel rotation<br/>[app.js]"]
  node_local_storage[("Browser LocalStorage")]
end

subgraph group_proxy["Embedding proxy"]
  node_proxy_server["HTTP proxy server<br/>[proxy-server.js]"]
end

node_operator(("Dashboard operator"))
node_target_sites(("Target websites"))

node_operator -->|"uses"| node_page
node_page -->|"loads"| node_controller
node_controller -->|"toggles"| node_admin
node_controller -->|"updates"| node_clock
node_controller -->|"shows"| node_notifications
node_controller -->|"updates"| node_slot_config
node_slot_config -->|"sets URLs"| node_iframe_slots
node_controller -->|"updates"| node_slot_scaling
node_controller -->|"observes slots"| node_lazy_loading
node_controller -->|"updates"| node_carousel_config
node_carousel_config -->|"starts or stops"| node_carousel_rotation
node_carousel_rotation -->|"changes URLs"| node_iframe_slots
node_controller -->|"saves and loads"| node_local_storage
node_iframe_slots -->|"loads pages"| node_target_sites
node_iframe_slots -.->|"may load proxied URL"| node_proxy_server
node_proxy_server -->|"fetches and relays"| node_target_sites

click node_page "https://github.com/gestjava/dashboard/blob/main/index.html"
click node_controller "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_admin "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_clock "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_notifications "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_slot_config "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_iframe_slots "https://github.com/gestjava/dashboard/blob/main/index.html"
click node_slot_scaling "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_lazy_loading "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_carousel_config "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_carousel_rotation "https://github.com/gestjava/dashboard/blob/main/app.js"
click node_proxy_server "https://github.com/gestjava/dashboard/blob/main/proxy-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_page,node_controller,node_admin,node_clock,node_notifications toneBlue
class node_slot_config,node_iframe_slots,node_slot_scaling,node_lazy_loading,node_carousel_config,node_carousel_rotation,node_local_storage toneAmber
class node_proxy_server toneMint
class node_operator,node_target_sites toneIndigo
```

## Components

### Dashboard interface

- [Dashboard page](https://github.com/gestjava/dashboard/blob/main/index.html): `index.html`
- [Dashboard controller](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- [Admin controls](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- [Live clock](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- [Toast notifications](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`

### Slot runtime

- [Slot configuration](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- [Iframe slots](https://github.com/gestjava/dashboard/blob/main/index.html): `index.html`
- [Iframe scaling](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- [Lazy loading](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- [Carousel configuration](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- [Carousel rotation](https://github.com/gestjava/dashboard/blob/main/app.js): `app.js`
- **Browser LocalStorage**

### Embedding proxy

- [HTTP proxy server](https://github.com/gestjava/dashboard/blob/main/proxy-server.js): `proxy-server.js`

### Other components

- **Dashboard operator**
- **Target websites**

## Connections

- Dashboard operator → Dashboard page: uses
- Dashboard page → Dashboard controller: loads
- Dashboard controller → Admin controls: toggles
- Dashboard controller → Live clock: updates
- Dashboard controller → Toast notifications: shows
- Dashboard controller → Slot configuration: updates
- Slot configuration → Iframe slots: sets URLs
- Dashboard controller → Iframe scaling: updates
- Dashboard controller → Lazy loading: observes slots
- Dashboard controller → Carousel configuration: updates
- Carousel configuration → Carousel rotation: starts or stops
- Carousel rotation → Iframe slots: changes URLs
- Dashboard controller → Browser LocalStorage: saves and loads
- Iframe slots → Target websites: loads pages
- Iframe slots → HTTP proxy server: may load proxied URL
- HTTP proxy server → Target websites: fetches and relays
