Files
Tomas DvorakandDevin d1486d5ec8 feat(landing): rebuild as Next.js app with live product mocks
Replaces the static HTML page with a Next.js 15 + Tailwind v4 + Motion
app. The hero renders the dashboard itself - live tiles, ticking clock,
wandering metrics, pulsing status dots - instead of screenshots. Adds a
playable four-renderer switcher (bento/cards/index/console) with layout
animations, live monitor/domain/system mocks, and a cycling alert feed.

Vercel project dash is now git-connected with root dir landing/; pushes
deploy automatically. Canonical alias: dash-homelab.vercel.app.

Authored By: TDvorak <[email protected]>

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-25 13:19:06 +02:00

41 lines
1.6 KiB
Markdown

# Dash
Self-hosted homelab dashboard. Single Go binary serving an embedded React UI.
Optional auth (off by default), no YAML. See `ROADMAP.md` (canonical) and
`docs/specs/` for design.
## Layout
- `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/` — Next.js 15 marketing site (own package.json, not a workspace);
Vercel project `dash`, root dir `landing`, git-connected to this repo
- `infra/` — Dockerfile (multi-stage, one image)
- `tools/oxlint/anti-slop` — vendored lint plugin (do not extend casually)
- `data/` — runtime SQLite + uploaded icons (gitignored)
## Commands
```sh
npm install
npm run generate # regenerate TS client from openapi.yaml
npm run dev # vite dev server (proxies /api -> :8080)
npm run typecheck # tsc --noEmit
npm run lint # oxlint + anti-slop rules
npm run build # api-client types + frontend bundle
cd apps/backend
go build ./... # build backend
go test ./... # tests
DASH_DEV=1 go run ./cmd/dash # dev server on :8080, no embedded UI needed
```
## Rules
- OpenAPI is the API contract. Never hand-write API types in the frontend.
- All schema changes go through goose migrations in `apps/backend/internal/db/migrations`.
- Board renderers share state/dnd/popover primitives; never reimplement them per renderer.
- No emojis in code or UI.
- Before pushing: `npm run typecheck`, `npm run lint`, `npm run build`, `go build/vet/test ./...` all green.