docs(03): auto-generated context (frontend phase)
This commit is contained in:
parent
7b322653e7
commit
22c504247d
1 changed files with 114 additions and 0 deletions
114
.planning/phases/03-dashboard-intake-ui/03-CONTEXT.md
Normal file
114
.planning/phases/03-dashboard-intake-ui/03-CONTEXT.md
Normal file
|
|
@ -0,0 +1,114 @@
|
||||||
|
# Phase 3: Dashboard & Intake UI - Context
|
||||||
|
|
||||||
|
**Gathered:** 2026-04-10
|
||||||
|
**Status:** Ready for planning
|
||||||
|
**Mode:** Auto-generated (autonomous mode)
|
||||||
|
|
||||||
|
<domain>
|
||||||
|
## Phase Boundary
|
||||||
|
|
||||||
|
Users can browse their full inventory, run intake for new items, and view item detail — all through the React SPA served by the Go binary. This phase delivers the React+TypeScript frontend with the ClickHouse design system, inventory dashboard, intake flow, item detail view, and PWA installation with camera-based QR scanner.
|
||||||
|
|
||||||
|
</domain>
|
||||||
|
|
||||||
|
<decisions>
|
||||||
|
## Implementation Decisions
|
||||||
|
|
||||||
|
### Tech Stack (from PROJECT.md)
|
||||||
|
- Vite 5.x for build tooling
|
||||||
|
- React 18 + TypeScript 5.x
|
||||||
|
- TanStack Router v1 for routing
|
||||||
|
- TanStack Query v5 for server state
|
||||||
|
- Zustand v4 for client state
|
||||||
|
- shadcn/ui (Radix + Tailwind) for components
|
||||||
|
- Tailwind CSS 3.x with ClickHouse design tokens
|
||||||
|
- react-dropzone for file uploads
|
||||||
|
- react-hot-toast for notifications
|
||||||
|
- lucide-react for icons
|
||||||
|
|
||||||
|
### Design System — ClickHouse
|
||||||
|
- Pure black (#000000) canvas
|
||||||
|
- Neon volt (#faff69) accent for CTAs
|
||||||
|
- Forest green (#166534) for primary actions
|
||||||
|
- Inter 900 (Black) for display typography
|
||||||
|
- Charcoal borders rgba(65,65,65,0.8)
|
||||||
|
- 4px sharp corners for buttons, 8px for cards
|
||||||
|
- Reference: ~/.claude/DESIGN.md (already globally configured)
|
||||||
|
|
||||||
|
### Project Structure
|
||||||
|
- Frontend lives in `web/` directory
|
||||||
|
- Built assets go to `web/dist/` (already embedded via go:embed)
|
||||||
|
- Dev mode: Vite serves at http://localhost:5173, proxies /api to Go backend at :8080
|
||||||
|
- Prod mode: Go binary serves embedded SPA
|
||||||
|
|
||||||
|
### Routing
|
||||||
|
- `/` — Inventory Dashboard (grid/list view)
|
||||||
|
- `/item/:id` — Item detail
|
||||||
|
- `/intake` — AI Intake Wizard (photo upload)
|
||||||
|
- `/scan` — PWA camera QR scanner
|
||||||
|
- 404 fallback to dashboard
|
||||||
|
|
||||||
|
### PWA
|
||||||
|
- Manifest.json with installable config
|
||||||
|
- Service worker for offline shell caching
|
||||||
|
- Camera access via MediaDevices API for QR scanning
|
||||||
|
- QR decoding via @zxing/browser or html5-qrcode
|
||||||
|
|
||||||
|
### State Management
|
||||||
|
- TanStack Query for all NetBox data (dashboard list, item detail)
|
||||||
|
- Zustand for UI state (intake wizard steps, scanner state)
|
||||||
|
- No Redux
|
||||||
|
|
||||||
|
### API Contract
|
||||||
|
- Backend exposes: GET /api/inventory (list), GET /api/inventory/:id (detail), POST /api/intake (upload photos)
|
||||||
|
- Phase 3 adds GET endpoints; intake POST already exists from Phase 2
|
||||||
|
|
||||||
|
### Claude's Discretion
|
||||||
|
All visual details and component hierarchy at Claude's discretion, following the ClickHouse DESIGN.md.
|
||||||
|
|
||||||
|
</decisions>
|
||||||
|
|
||||||
|
<code_context>
|
||||||
|
## Existing Code Insights
|
||||||
|
|
||||||
|
### Reusable Assets from Phase 1-2
|
||||||
|
- `cmd/hwlab/main.go` — binary entry, already serves web/dist via go:embed
|
||||||
|
- `internal/api/router.go` — chi router, add GET inventory endpoints
|
||||||
|
- `internal/api/handlers/` — health.go, intake.go patterns
|
||||||
|
- `internal/netbox/client.go` — ListDevices for dashboard
|
||||||
|
- `web/dist/index.html` — current stub placeholder
|
||||||
|
- `assets.go` — go:embed directive
|
||||||
|
|
||||||
|
### Established Patterns
|
||||||
|
- Integration tests skip gracefully
|
||||||
|
- Module path: git.georgsen.dk/hwlab
|
||||||
|
- ClickHouse design system global default
|
||||||
|
|
||||||
|
### Integration Points
|
||||||
|
- Add GET /api/inventory handler listing NetBox devices
|
||||||
|
- Add GET /api/inventory/:id handler for detail
|
||||||
|
- Replace web/dist stub with real Vite build output
|
||||||
|
- Makefile targets: `make frontend` (vite build), `make dev` (parallel vite + go run)
|
||||||
|
|
||||||
|
</code_context>
|
||||||
|
|
||||||
|
<specifics>
|
||||||
|
## Specific Ideas
|
||||||
|
|
||||||
|
- Tailwind config should inherit ClickHouse tokens directly from ~/.claude/DESIGN.md
|
||||||
|
- Use shadcn/ui CLI to scaffold components
|
||||||
|
- Drag-drop intake zone with thumbnail preview
|
||||||
|
- Dashboard uses data-table pattern with sort/filter
|
||||||
|
- Item detail is a side-panel or full-page modal
|
||||||
|
|
||||||
|
</specifics>
|
||||||
|
|
||||||
|
<deferred>
|
||||||
|
## Deferred Ideas
|
||||||
|
|
||||||
|
- Real-time updates (websockets) — not needed for single-operator
|
||||||
|
- Offline sync — PWA shell only
|
||||||
|
- Advanced filtering (Phase 7 — AI NLP search)
|
||||||
|
- Lab Advisor chat (Phase 6)
|
||||||
|
|
||||||
|
</deferred>
|
||||||
Loading…
Add table
Reference in a new issue