React 19 + Vite + Tailwind. Path alias: @/* → src/*.
| Directory | Contents |
|---|---|
api/ |
Client calls to /api/scan, /api/watch, translate |
components/layout/ |
Shell, nav, scan splash, SetupWizard, sidebars |
components/tabs/ |
Dashboard, vulnerabilities, stack |
components/vulns/ |
Cards, badges, filters UI |
components/charts/ |
Donut, bar charts |
components/settings/ |
Data sources panel |
components/ui/ |
Theme, language, toast, icons |
hooks/ |
Scan, watch, filters, theme, localStorage |
i18n/messages/ |
Six locales — update all when changing UI text |
lib/ |
Formatting, scanCache, storage normalization, display helpers |
constants/ |
Presets, navigation, severity UI theme |
features/ |
App workspace hook, main/setup flows, navigation (SubNav), vuln filter navigation |
types/ |
UI-only types; API types re-exported from @shared |
main.tsx— bootstrap, error boundaryApp.tsx— disclaimer gate, toast provider, setup vs main workspace routingfeatures/app/useAppWorkspace.ts— scan/watch state, filters, setup migration
Browser localStorage keys use the cve-radar:* prefix (legacy cve-intel:* migrated on load via lib/storageMigration.ts and lib/normalizeStorage.ts). Last scan results persist via lib/scanCache.ts (stack-keyed). First-run wizard sets cve-radar:setup-complete.