Commit graph

6 commits

Author SHA1 Message Date
021c82875e fix(03): resolve TypeScript type mismatches from merged plans 2026-04-10 06:27:11 +00:00
e2ac3b10aa chore: merge 03-04 worktree (intake UI) — resolved router/api/AppShell conflicts 2026-04-10 06:25:29 +00:00
8c7563af9a chore: merge 03-03 worktree (dashboard+detail) — resolved router/api/AppShell conflicts 2026-04-10 06:24:20 +00:00
75c91a5941 feat(03-05): QR scanner page with @zxing/browser and router wiring
- web/src/pages/ScanPage.tsx: camera QR scanner with volt reticle overlay
  - extractHWID() parses both URL format and bare HW-XXXXX patterns
  - rear camera preference (back/rear/environment label matching)
  - debounce via lastScanned state prevents duplicate navigation
  - graceful camera permission denied error state
- web/src/router.tsx: lazy-loads ScanPage with Suspense fallback spinner
- web/src/lib/api.ts: typed fetch wrappers (fetchInventory, fetchInventoryItem)
- web/src/components/layout/AppShell.tsx: minimal page wrapper (stub for plan 03-03)
2026-04-10 06:22:14 +00:00
1867846a9f feat(03-03): API client, TanStack Query hooks, layout shell, inventory item components
- web/src/lib/api.ts: typed fetch wrappers for GET /api/inventory and GET /api/inventory/:id
- web/src/hooks/useInventory.ts: useInventory + useInventoryItem TanStack Query hooks
- web/src/components/inventory/StatusBadge.tsx: catalog_status → Badge variant mapping
- web/src/components/inventory/ItemCard.tsx: grid card with photo, HW ID, name, status, NetBox link
- web/src/components/inventory/ItemRow.tsx: list-mode row with status color indicator
- web/src/components/layout/TopBar.tsx: sticky nav with HWLab volt brand, Add Item + Scan buttons
- web/src/components/layout/AppShell.tsx: TopBar + main content wrapper
2026-04-10 06:21:43 +00:00
709876d3a0 feat(03-04): add intake Zustand store, api.ts submitIntake, DropZone, PhotoPreview
- useIntakeStore: step tracking, photos (max 3), aiResult, editedName, error
- submitIntake(): multipart FormData POST /api/intake with IntakeResponse type
- DropZone: react-dropzone with camera capture, volt hover state, slot counter
- PhotoPreview: thumbnail grid with X remove button per photo
2026-04-10 06:20:35 +00:00