mirror of
https://github.com/Dvorinka/Dash.git
synced 2026-10-28 07:41:27 +00:00
feat: phase 0 foundation — monorepo scaffold, backend, frontend, CI, docker
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>
This commit is contained in:
1 parent
e7f32949e9
commit
b60821350a
46 files changed
+6415
-10
No files matched your search
@@ -0,0 +1,37 @@
|
||||
# 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/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
|
||||
- `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.
|
||||
Reference in new issue
Block a user