[ ALPHA ]Node.jsDockerVanilla JSPrometheusGrafana

MyDash — ops dashboard for the home server

MyDash — ops dashboard for the home server

What it is

MyDash is the single pane of glass for cascla-u-serv — the Ubuntu VM running 35+ Docker containers. One page for container status, Pi-hole/DNS, CrowdSec/firewall, a terminal into any container or remote host, monitoring (Prometheus/Grafana/Loki), and an orchestrator that watches for drift.

Features

Container start/stop/restart and log tailing; DNS cutover between resolvers with a live health check; firewall rule toggling and a one-click "kill all" for an active attack; a hand-rolled WebSocket terminal for both docker exec and SSH; AI-usage tracking across the coding agents that touch this host; and a watchdog that surfaces invariant checks (unpinned images, secrets left in compose files, orphaned services.json entries) instead of me finding them by accident.

Why I built it

I kept SSHing in and running the same six commands to answer "is everything up." Every home-server project before this lived in its own tab, its own auth, its own mental model. MyDash exists so one glance answers the question, and so fixing something (restart a container, toggle a firewall rule) doesn’t need a terminal at all most days.

How it works

A single Node.js server (server.js) talks to the Docker socket, Pi-hole/Technitium APIs, CrowdSec’s API, and a Prometheus instance, and serves a vanilla-JS single-page frontend — no framework, no build step, edit and refresh. It’s being pulled apart strangler-fig style into server/routes/<domain>.js + services/<domain>.js pairs, one integration at a time, instead of a rewrite.

How it was built

Grew organically since mid-2026 as each new home-server service needed a control surface. The current refactor push (2026-08) extracts one domain per session — docker, DNS, firewall, terminal, orchestrator — each verified against the real running system before being called done, not just build-checked. A staging instance (port 3017, mock data by default) lets frontend changes get reviewed without touching the real Docker socket or firewall.

Service grid — every container on the host, live status
Service grid — every container on the host, live status
Security panel — CrowdSec, firewall rules, kill-all
Security panel — CrowdSec, firewall rules, kill-all