mirror of
https://github.com/Dvorinka/Dash.git
synced 2026-10-28 07:41:27 +00:00
Establishes the skeleton every later phase builds on: Go+Gin API with zap logging, /api/healthz, SQLite+goose runner; Vite+React18+TS strict+ Tailwind v4 frontend with bento-mono theme tokens; openapi.yaml driving a generated TS client; oxlint with vendored anti-slop rules; GitHub CI; multi-stage Dockerfile -> 33.6MB distroless image; docker compose up serves the blank board. Generated with [Devin](https://devin.ai) Authored By: TDvorak <[email protected]> Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
1.5 KiB
1.5 KiB
Dash
Self-hosted homelab dashboard. Single Go binary serving an embedded React UI.
No auth, no YAML. See ROADMAP.md (canonical) and docs/specs/ for design.
Layout
apps/frontend— React 18 + Vite + TS strict + Tailwind v4 + shadcn/uiapps/backend— Go + Gin + zap, CGO-free, SQLite viamodernc.org/sqlitepackages/api-client— generated TS client;openapi.yamlat repo root is the contractinfra/— Dockerfile (multi-stage, one image)tools/oxlint/anti-slop— vendored lint plugin (do not extend casually)data/— runtime SQLite + uploaded icons (gitignored)
Commands
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.