Tomas Dvorak 8afc7df53b feat: phase 2 widgets — registry, fetchers, clock, config dialog
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>
2026-09-17 20:29:22 +02:00

Dash

A self-hosted homelab dashboard. CasaOS-grade ease of use, Vercel-grade design. Single container, UI-managed, no YAML, no auth.

Status: pre-release. See ROADMAP.md.

Run

docker run -v ./data:/data -p 3000:3000 dash

or

docker compose up

Then open http://localhost:3000.

Develop

Requires Go 1.24+ and Node 20+.

npm install            # workspaces: frontend + api-client
npm run generate       # regenerate TS client from openapi.yaml
npm run dev            # vite dev on :5173, proxies /api to :8080

In another shell:

cd apps/backend
DASH_DEV=1 go run ./cmd/dash   # API on :8080 (DASH_DEV skips embedded UI)

Stack

Go + Gin + SQLite (single static binary, embeds the frontend) · React 18 + Vite + TS strict + Tailwind + shadcn/ui + dnd-kit · OpenAPI-generated client.

License

MIT

S
Description
No description provided
Readme MIT
19 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 49.1%
Go 37.1%
HTML 12.2%
CSS 0.8%
Shell 0.4%
Other 0.4%