bcc360892c
feat(06-03): add AdvisorPage, /advisor route, and TopBar link
...
- AdvisorPage: two-panel layout (sidebar + chat), streaming SSE tokens
- Sidebar: conversation list with refetchInterval 5s, New Chat button
- Chat: optimistic user messages, streaming cursor, model dropdown
- router.tsx: lazy AdvisorPage import + advisorRoute at /advisor
- TopBar.tsx: MessageSquare icon + Advisor link between Test and Scan
- AppShell.tsx: noPadding prop for full-height layouts
2026-04-10 07:39:56 +00:00
499dbb9929
feat(05-03): Cable Test Station page at /test
...
- Add web/src/api/test.ts with submitCableTest, getRecentTests, streamTestEvents
- Add web/src/pages/CableTestPage.tsx with three-panel layout (readout/label/recent)
- Register /test route in router.tsx
- Add Test nav link (Cable icon) in TopBar
- SSE live readout via EventSource, closed on unmount
- Print & Next mutation with react-hot-toast feedback
- Mobile-responsive: single col on mobile, 3-col on lg+
- ClickHouse design tokens throughout (#000000 bg, #faff69 accent)
2026-04-10 07:19:24 +00:00
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
5909025677
feat(03-04): intake wizard UI — AIResultReview, ConfirmForm, IntakePage, router wiring
...
- AIResultReview: confidence meter (green/yellow/red), manufacturer/model/category/tags, editable name input, ai_notes card
- ConfirmForm: confirm/start-over action buttons with submitting spinner state
- AppShell: top-nav layout wrapper with HWLab logo and Inventory/Add Item nav links
- IntakePage: three-step wizard (upload → submitting → review) wired to submitIntake()
- router.tsx: lazy-loads IntakePage for /intake, Suspense+Spinner fallback
- Analyze button disabled during submitting (T-03-13 DoS mitigation)
2026-04-10 06:21:53 +00:00
19c2bb7d05
feat(03-03): DashboardPage, ItemDetailPage, FilterBar, and router wiring
...
- web/src/components/inventory/FilterBar.tsx: search + status dropdown + grid/list toggle
- web/src/pages/DashboardPage.tsx: / route with grid/list view, filters, loading/error/empty states
- web/src/pages/ItemDetailPage.tsx: /item/$id route, two-column desktop, single-column mobile
- web/src/router.tsx: lazy-load DashboardPage + ItemDetailPage, keep intake/scan stubs
2026-04-10 06:21:48 +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
d38f93dd67
feat(03-01): bootstrap React+TS frontend with ClickHouse design system
...
- Vite 5 + React 18 + TypeScript 5 + Tailwind 3 scaffold in web/
- ClickHouse design tokens (volt, forest, canvas, charcoal, near-black) in tailwind.config.ts
- TanStack Router v1 with placeholder routes for /, /item/$id, /intake, /scan
- TanStack Query v5 QueryClientProvider + Zustand uiStore
- shadcn/ui Button (neon/forest/secondary/outline/ghost), Card, Badge with ClickHouse variants
- Vite proxy: /api -> http://localhost:8080
- Makefile: added frontend and dev-frontend targets
- Fixed: @typescript-eslint v8 for ESLint v9 compatibility; @types/node for vite.config.ts
2026-04-10 06:16:46 +00:00