frontend/
React + Vite + TypeScript + Tailwind + Zustand SPA. Built bundle ships under frontend/dist/ and is served by the FastAPI backend at /.
Stack
React 19, Vite 8, TypeScript 5.9, Tailwind v4 (pure CSS tokens, no shadcn/radix).
Zustand 5 for state.
react-resizable-panelsfor the IDA-style dockable layout.react-plotly.jsfor charts;@tanstack/react-virtualfor hex rows.driver.jsfor first-time-user tours.
Top-level views
No URL routing today. useAppStore.appView switches between landing, wizard, and workspace.
Workspace layout
Sidebar with six tabs (bookmarks, dumps, format, structures, sessions, import).
Main panel:
HexViewer,HexOverlay, orHexComparisondepending onviewMode.Bottom tabs (mode-gated): analysis, results, strings, entropy, consensus, live-consensus, architect, experiment, convergence, verify-key, pipeline.
Detail panel: neighborhood overlay, structure overlay, or result summary.
Build
cd frontend
npm ci
npm run build # → frontend/dist
npm run dev # → Vite dev server on :5173 with proxy to :8080
State stores
Thirteen Zustand slices under frontend/src/stores/:
app-store, dump-store, hex-store, analysis-store, results-store, pipeline-store, oracle-store, consensus-store, consensus-incremental-store, strings-store, browser-store, verification-store, settings-store.
Keyboard shortcuts are wired via useKeyboardShortcuts and treat metaKey as ctrlKey, so the four bindings below also fire on macOS with ⌘.