systems + system_stats tables; agents push JSON every N seconds
to POST /api/systems/ingest with a per-system bearer token. The
server stores each sample, keeps a `latest` snapshot for cheap
list/widget reads, prunes stats after 7d, and marks systems down
when silent > max(3x interval, 30s) — firing system.up/down
webhook events on transitions.
cmd/dash-agent is a standalone Linux collector: /proc for
cpu/mem/net/load/uptime, /sys hwmon temps, statfs disk, and
container liveness via /var/run/docker.sock when present.
No imports from the server module — the sample shape is
duplicated deliberately so the agent stays a single static
binary.
Frontend: /systems card grid with usage bars, /systems/:id with
recharts cpu/mem/net/load, temps + containers tables, and the
agent command; `system` board widget; nav + palette + WidgetDialog
picker wired.
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Two tracks from the Beszel/Domain-Locker merge plan in ROADMAP.md:
- Importers: POST /api/import/external sniffs Homepage services.yml,
Homarr JSON, and Dashy conf.yml into sections/items; SettingsDialog
import now accepts all four formats.
- Monitors (M1): monitors + heartbeats schema, pure checkers for
http/tcp/ping/dns/keyword/json-query/push, scheduler on app ctx,
CRUD + check-now + push ingest API, /monitors + /monitors/:id pages
(wouter), monitor board widget, ServiceDialog monitor opt-in.
Authored By: TDvorak <[email protected]>
Generated with Devin (https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Backend: internal/widget registry (type metadata + Fetcher), Pi-hole
v5 / AdGuard / Immich fetchers, /api/widgets/types + /api/widgets/:id/data
with 30s TTL cache (failures cached too), kind+config on item create/patch.
Config secrets are never logged or echoed in errors.
Frontend: WidgetContent host maps config.type to a component, polls
/data every 30s for server-backed types; clock renders client-side.
Generic WidgetDialog builds its form from the registry's field list.
Widget tiles are sortable items in both renderers.
Generated with [Devin](https://devin.ai)
Authored By: TDvorak <[email protected]>
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
All four styles are board renderers over one shared store, not color
themes. Renderer contract (Board/Section/Item/Widget) lands in Phase 1;
Cards ships in v0.1.0 to validate the seam early, Index and Console
follow in v0.3.0.
Generated with [Devin](https://devin.ai)
Authored By: TDvorak <[email protected]>
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Primary renderer is D (bento grid, mono palette). A/E/F kept as
alternate view themes on shared tokens. B and C deleted.
Roadmap now maps phases to releases v0.1.0 -> v1.0.0.
Generated with [Devin](https://devin.ai)
Authored By: TDvorak <[email protected]>
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>