From e0ef60eca6b18cd96974d6d0656e209e244e2bd0 Mon Sep 17 00:00:00 2001 From: Tomas Dvorak Date: Tue, 22 Sep 2026 12:49:51 +0200 Subject: [PATCH] =?UTF-8?q?feat(ui):=20phase=205=20=E2=80=94=20graphs,=20w?= =?UTF-8?q?idgets,=20theming,=20PWA,=20boards,=20i18n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P5a: 24h uptime bar strip + latency chart on monitor detail, iframe embed widget, generic JSON-path widget, accent/wallpaper/custom CSS settings, PWA manifest + service worker, demo GIF. P5b: transport picker + per-transport fields + test button in settings; per-monitor alert-rule fields in dialogs. P5c: container cpu/mem columns, SMART/ZFS/GPU sections on system detail, subdomains section on domain detail. P5d: login/setup page + auth middleware client handling, board switcher + /b/:slug routes, full string extraction to typed t() keys with {param} interpolation, complete cs locale, language select. Authored By: TDvorak Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- README.md | 23 +- ROADMAP.md | 35 +- apps/frontend/index.html | 4 + apps/frontend/public/icon-192.png | Bin 0 -> 4221 bytes apps/frontend/public/icon-512.png | Bin 0 -> 12209 bytes apps/frontend/public/icon-maskable-512.png | Bin 0 -> 5751 bytes apps/frontend/public/icon.svg | 9 + apps/frontend/public/manifest.webmanifest | 16 + apps/frontend/public/sw.js | 57 +++ apps/frontend/src/App.tsx | 35 +- apps/frontend/src/api.ts | 12 + apps/frontend/src/board/Board.tsx | 11 +- apps/frontend/src/board/store.tsx | 107 ++++- .../frontend/src/components/BoardSwitcher.tsx | 127 ++++++ .../src/components/CommandPalette.tsx | 45 +- apps/frontend/src/components/DomainDialog.tsx | 47 +- .../frontend/src/components/MonitorDialog.tsx | 78 ++-- .../frontend/src/components/ServiceDialog.tsx | 41 +- .../src/components/SettingsDialog.tsx | 246 +++++++++-- apps/frontend/src/components/WidgetDialog.tsx | 31 +- apps/frontend/src/components/ui/dialog.tsx | 3 +- apps/frontend/src/i18n/cs.ts | 414 ++++++++++++++++++ apps/frontend/src/i18n/en.ts | 388 ++++++++++++++++ apps/frontend/src/i18n/index.ts | 28 +- apps/frontend/src/main.tsx | 6 + apps/frontend/src/pages/DomainDetailPage.tsx | 134 ++++-- apps/frontend/src/pages/DomainsPage.tsx | 36 +- apps/frontend/src/pages/IncidentsPage.tsx | 51 +-- apps/frontend/src/pages/LoginPage.tsx | 72 +++ apps/frontend/src/pages/MonitorDetailPage.tsx | 75 +++- apps/frontend/src/pages/MonitorsPage.tsx | 35 +- apps/frontend/src/pages/StatusPagesPage.tsx | 75 ++-- apps/frontend/src/pages/StatusPublicPage.tsx | 23 +- apps/frontend/src/pages/SystemDetailPage.tsx | 130 +++++- apps/frontend/src/pages/SystemsPage.tsx | 39 +- apps/frontend/src/renderers/bento/index.tsx | 5 +- apps/frontend/src/renderers/cards/index.tsx | 5 +- .../src/renderers/editorial/index.tsx | 11 +- .../frontend/src/renderers/terminal/index.tsx | 11 +- apps/frontend/src/types.ts | 15 + apps/frontend/src/widgets/blocker.tsx | 9 +- apps/frontend/src/widgets/domain.tsx | 3 +- apps/frontend/src/widgets/embed.tsx | 23 + apps/frontend/src/widgets/immich.tsx | 5 +- apps/frontend/src/widgets/index.tsx | 9 +- apps/frontend/src/widgets/jsonpath.tsx | 22 + apps/frontend/src/widgets/monitor.tsx | 3 +- apps/frontend/src/widgets/system.tsx | 3 +- docs/demo.gif | Bin 0 -> 198007 bytes 49 files changed, 2131 insertions(+), 426 deletions(-) create mode 100644 apps/frontend/public/icon-192.png create mode 100644 apps/frontend/public/icon-512.png create mode 100644 apps/frontend/public/icon-maskable-512.png create mode 100644 apps/frontend/public/icon.svg create mode 100644 apps/frontend/public/manifest.webmanifest create mode 100644 apps/frontend/public/sw.js create mode 100644 apps/frontend/src/components/BoardSwitcher.tsx create mode 100644 apps/frontend/src/i18n/cs.ts create mode 100644 apps/frontend/src/pages/LoginPage.tsx create mode 100644 apps/frontend/src/widgets/embed.tsx create mode 100644 apps/frontend/src/widgets/jsonpath.tsx create mode 100644 docs/demo.gif diff --git a/README.md b/README.md index 4b5185d..98998e9 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,32 @@ # Dash A self-hosted homelab dashboard. CasaOS-grade ease of use, Vercel-grade design. -Single container, UI-managed, no YAML, no auth. +Single container, UI-managed, no YAML. Optional auth. -![Dash board](docs/screenshots/board.png) +![Dash demo](docs/demo.gif) ## Features -- **Service board** — sections, drag-and-drop, multi-URL services, icon upload, - four board renderers (Bento, Cards, Index, Console), dark/light themes +- **Service board** — multiple boards, sections, drag-and-drop, multi-URL + services, icon upload, four renderers (Bento, Cards, Index, Console), + dark/light themes, custom accent/wallpaper/CSS - **Uptime monitors** — HTTP, TCP, ping, DNS, keyword, JSON-path, and push - checks on a schedule, with heartbeat history and uptime stats + checks on a schedule, heartbeat history, uptime graphs, per-monitor alert + rules - **Domain watch** — WHOIS/RDAP, DNS records, TLS certificate expiry, - registrar and provider detection + registrar and provider detection, CT-log subdomain discovery - **System monitoring** — lightweight `dash-agent` pushes CPU, memory, disk, - network, load, temperatures, and Docker container state + network, load, temperatures, per-container stats, and SMART/ZFS/GPU when + available - **Incidents & status pages** — manual and automatic incidents, maintenance windows, public `/status/:slug` pages, SVG badges -- **Alerts** — generic webhook notifications (Slack, Discord, ntfy compatible) +- **Alerts** — webhook, Slack, Discord, Telegram, Gotify, ntfy, and SMTP + transports - **Observability** — Prometheus `/api/metrics`, JSON export, CSV bulk import, importers for Homepage, Homarr, and Dashy configs +- **Optional auth** — local username/password with bcrypt + session cookies, + off by default; public status pages stay open either way +- **i18n + PWA** — English and Czech UI, installable manifest/service worker ## Run diff --git a/ROADMAP.md b/ROADMAP.md index de8e157..0aed93c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -205,41 +205,40 @@ Beszel-style server monitoring, push-based. **Exit:** a stranger can `docker run`, import their Homepage config, and have a working board in under two minutes. -## Phase 5 — Post-1.0 (planned, demand-confirmed 2026-09-21) +## Phase 5 — Post-1.0 (shipped 2026-09-22) -All items below confirmed in scope. Sequenced by dependency and risk — -quick wins first, structure-changing work last. Nothing here is built yet. +All items shipped on `feat/phase5`. ### P5a — Quick wins (frontend-heavy, no schema risk) -- [ ] **Uptime graphs** — monitor detail renders 24h/30d heartbeat bars + +- [x] **Uptime graphs** — monitor detail renders 24h/30d heartbeat bars + latency line (recharts, already a dep). Data: existing `/api/monitors/:id/heartbeats` + uptime stats. Frontend only. -- [ ] **iframe widget** — `config.url`, sandboxed `