diff --git a/.gitignore b/.gitignore index 8cbb8ea..5e9b36a 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ dist/ # local tooling artifacts .playwright-mcp/ .playwright-cli/ +.vercel diff --git a/AGENTS.md b/AGENTS.md index 2485a6c..1aa429e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -9,6 +9,7 @@ Optional auth (off by default), no YAML. See `ROADMAP.md` (canonical) and - `apps/frontend` — React 18 + Vite + TS strict + Tailwind v4 + shadcn/ui - `apps/backend` — Go + Gin + zap, CGO-free, SQLite via `modernc.org/sqlite` - `packages/api-client` — generated TS client; `openapi.yaml` at repo root is the contract +- `landing/` — static marketing page, deployed to Vercel; no build step, plain HTML/CSS/JS - `infra/` — Dockerfile (multi-stage, one image) - `tools/oxlint/anti-slop` — vendored lint plugin (do not extend casually) - `data/` — runtime SQLite + uploaded icons (gitignored) diff --git a/landing/.gitignore b/landing/.gitignore new file mode 100644 index 0000000..245259b --- /dev/null +++ b/landing/.gitignore @@ -0,0 +1,2 @@ +.vercel +.env* diff --git a/landing/assets/board.png b/landing/assets/board.png new file mode 100644 index 0000000..3215a09 Binary files /dev/null and b/landing/assets/board.png differ diff --git a/landing/assets/dash.svg b/landing/assets/dash.svg new file mode 100644 index 0000000..804cb76 --- /dev/null +++ b/landing/assets/dash.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/landing/assets/domains.png b/landing/assets/domains.png new file mode 100644 index 0000000..b3ec17e Binary files /dev/null and b/landing/assets/domains.png differ diff --git a/landing/assets/monitors.png b/landing/assets/monitors.png new file mode 100644 index 0000000..9388949 Binary files /dev/null and b/landing/assets/monitors.png differ diff --git a/landing/assets/status-page.png b/landing/assets/status-page.png new file mode 100644 index 0000000..e48e1bf Binary files /dev/null and b/landing/assets/status-page.png differ diff --git a/landing/fonts/geist-mono-var.woff2 b/landing/fonts/geist-mono-var.woff2 new file mode 100644 index 0000000..0750682 Binary files /dev/null and b/landing/fonts/geist-mono-var.woff2 differ diff --git a/landing/fonts/geist-var.woff2 b/landing/fonts/geist-var.woff2 new file mode 100644 index 0000000..991445d Binary files /dev/null and b/landing/fonts/geist-var.woff2 differ diff --git a/landing/index.html b/landing/index.html new file mode 100644 index 0000000..c5a113a --- /dev/null +++ b/landing/index.html @@ -0,0 +1,465 @@ + + + + + +Dash — Self-hosted homelab dashboard + + + + + + + + + + + + + + +
+
+ self-hosted · open source · MIT +

One container for your whole homelab.

+

Dash is a self-hosted dashboard: service boards, uptime monitors, domain + watch, and system metrics in a single static Go binary with the UI baked in. + No YAML, no external database, no mandatory accounts.

+
+ Get started + GitHub + docker run -p 3000:3000 ghcr.io/dvorinka/dash + + +
+
+
dash.localhost:3000
+ Dash service board with sections for media, infrastructure, and apps +
+
+
Deploy
One static binary
+
Database
SQLite, embedded
+
Config
UI-managed, no YAML
+
License
MIT
+
+
+
+ +
+
+

Features

06
+
+
+ Boards +

Service boards your way

+

Sections, drag-and-drop, multi-URL services, icon upload. Four renderers + - Bento, Cards, Index, Console - share one state, so the look is a setting, + not a migration.

+
bentocardsindexconsoledndcmd+k
+
+
+ Monitors +

Uptime checks on a schedule

+

HTTP, TCP, ping, DNS, keyword, JSON-path, and push checks with heartbeat + history, latency graphs, and per-monitor alert rules.

+ +
+
+ Domains +

Domain watch

+

RDAP/WHOIS, TLS expiry, DNS records attributed to their provider, and + CT-log subdomain discovery.

+
+
+ Systems +

System metrics

+

A tiny dash-agent pushes CPU, memory, disk, + network, temps, and per-container stats.

+
+
+ Status +

Status pages

+

Public /status/:slug pages, incidents, + maintenance windows, and SVG badges.

+
+
+ Alerts +

Notified where you already are

+

Alert rules for monitors, domains, and systems dispatch through the + transports you already run.

+
webhookslackdiscordtelegramgotifyntfysmtp
+
+
+
+
+ +
+
+

Screenshots

03
+
+
Uptime monitors list with status, uptime percentage, and latency
uptime monitors
+
Domain watch page with expiry countdowns and provider detection
domain watch
+
Public status page showing operational state of services
public status page
+
+
+
+ +
+
+

Install

~1 min
+
+
+
one-liner + +
+
$ curl -fsSL https://raw.githubusercontent.com/
Dvorinka/Dash/main/install.sh | sh
# installs into ./dash, serves :3000
+
+
+
docker + +
+
$ docker run -d -v ./data:/data \
-p 3000:3000 \
ghcr.io/dvorinka/dash:latest
+
+
+

Everything is configured from the UI at + http://localhost:3000. All state lives in one directory - a SQLite + database plus uploaded icons. Importers for Homepage, Homarr, and Dashy + configs are built in.

+
+
+ +
+
+
+

Run it in one command.

+

MIT licensed. Self-hosted. Yours.

+
+ Star on GitHub +
+
+ + + + + +