nexus/.planning/phases/30-hardware-detection-mode-selection/30-02-SUMMARY.md
Nexus Dev 3886756e03 docs(30-02): complete hardware detection UI + 3-step wizard plan
- SUMMARY.md for 30-02 (hardware API client, ModeSelector, HardwareSummaryStep, wizard refactor)
- STATE.md updated with position, decisions, and session info
- ROADMAP.md updated with phase 30 plan progress
- REQUIREMENTS.md: ONBD-07 marked complete
2026-04-04 03:55:49 +00:00

76 lines
3.9 KiB
Markdown

---
phase: 30-hardware-detection-mode-selection
plan: "02"
subsystem: ui
tags: [onboarding, hardware-detection, mode-selection, react-query, wizard]
dependency_graph:
requires: ["30-01"]
provides: ["hardware-api-client", "mode-selector-ui", "hardware-summary-ui", "3-step-wizard"]
affects: ["ui/src/components/NexusOnboardingWizard.tsx"]
tech_stack:
added: []
patterns: ["useQuery for hardware probe", "multi-step wizard with step state", "non-blocking hardware probe"]
key_files:
created:
- ui/src/api/hardware.ts
- ui/src/hooks/useHardwareInfo.ts
- ui/src/components/onboarding/ModeSelector.tsx
- ui/src/components/onboarding/HardwareSummaryStep.tsx
modified:
- ui/src/components/NexusOnboardingWizard.tsx
- ui/src/lib/queryKeys.ts
decisions:
- "Hardware probe is non-blocking — wizard step 1 always has an enabled Continue button regardless of probe outcome"
- "Mode save on wizard completion is wrapped in try/catch — failure is silent, defaults to 'both'"
- "Pre-existing AgentConfigForm.tsx TypeScript error is out-of-scope; documented here for awareness"
metrics:
duration: 15
completed_date: "2026-04-02"
tasks_completed: 2
files_changed: 6
---
# Phase 30 Plan 02: Hardware Detection UI + 3-Step Wizard Summary
**One-liner:** Three-step onboarding wizard with hardware probe display (GPU/Apple Silicon/CPU-only), three-card mode selector, and settings persistence via PATCH /api/nexus/settings.
## What Was Built
### Task 1: API client, hook, ModeSelector, and HardwareSummaryStep
- `ui/src/api/hardware.ts` — typed fetch wrappers: `fetchHardwareInfo`, `fetchNexusSettings`, `updateNexusSettings`, plus `HardwareInfo`, `HardwareTier`, `NexusMode`, `NexusSettings` types (local copy — not imported from server)
- `ui/src/hooks/useHardwareInfo.ts``useHardwareInfo(enabled)` hook wrapping `useQuery` with 5-minute staleTime and retry: 1
- `ui/src/lib/queryKeys.ts` — added `hardware: { info: ["hardware", "info"] as const }` key
- `ui/src/components/onboarding/ModeSelector.tsx` — three vertical cards with `border-primary bg-primary/5` selected state; modes: Personal AI Assistant, Project Builder, Both (recommended)
- `ui/src/components/onboarding/HardwareSummaryStep.tsx` — skeleton loading (3 rows), error state (non-destructive copy), and success state with tier-appropriate labels (Unified memory for Apple Silicon, GPU VRAM for GPU tier, System RAM for CPU-only), plus privacy frame for local AI tiers
### Task 2: Wire multi-step wizard
- `ui/src/components/NexusOnboardingWizard.tsx` refactored from single-step to 3-step wizard
- Step indicator `Step {step} of 3` shown above content
- Step 1: hardware detection heading changes from "Detecting your hardware..." to "Your hardware" when probe resolves; HardwareSummaryStep displayed; Continue always enabled
- Step 2: ModeSelector with "both" pre-selected; Continue and Back buttons
- Step 3: existing root directory form preserved; Back button added; Get Started submit
- `updateNexusSettings({ mode: selectedMode })` called after company creation, before navigate — wrapped in try/catch (non-blocking)
- Reset effect expanded to also reset `step` to 1 and `selectedMode` to "both" on wizard close
## Checkpoint: Awaiting Visual Verification
Task 3 is a `checkpoint:human-verify` — see PLAN.md for how-to-verify steps.
## Deviations from Plan
None — plan executed exactly as written.
## Known Stubs
None — all data paths are wired. `useHardwareInfo` fetches from `/api/system/providers` (implemented in 30-01). `updateNexusSettings` PATCHes `/api/nexus/settings` (implemented in 30-01).
## Self-Check: PASSED
Files created/modified:
- FOUND: /opt/nexus/ui/src/api/hardware.ts
- FOUND: /opt/nexus/ui/src/hooks/useHardwareInfo.ts
- FOUND: /opt/nexus/ui/src/components/onboarding/ModeSelector.tsx
- FOUND: /opt/nexus/ui/src/components/onboarding/HardwareSummaryStep.tsx
- FOUND: /opt/nexus/ui/src/components/NexusOnboardingWizard.tsx
Commits: f4423546, e1bdb9a8