01 — Architecture & Structure¶
FSD Compliance¶
The app follows Feature-Sliced Design loosely. Layer boundaries are mostly respected.
🟡 Router (router/index.ts)¶
- All 30+ routes in one flat array — No route grouping by feature. Hard to maintain.
requiresSaveguard works but silently redirects. User gets no feedback on why they bounced.- Transition plays before navigation via
beforeEach→await trans.play(wipe). This blocks route entry. Ifplay()hangs, navigation freezes. - No 404 page — Catch-all just redirects to
/. User has no idea what happened. - No route-level code splitting hints — All lazy imports use generic
() => import(...). NowebpackChunkNameor Vite manual chunk hints for debugging.
🟡 App.vue¶
- Touch gesture system in root component — The swipe-to-arrow-key system (
onGlobalTouchStart/onGlobalTouchMove) belongs in a composable likeuseTouchNavigation(), not in App.vue. - Magic number threshold
40for swipe detection — Should be a named constant. ParticleBackgroundalways rendered — 8 animated DOM elements floating on every page, even pages that don't need them (e.g., OnTrackHud). Should be conditional or page-opt-in.
🔵 main.ts¶
buttons.cssis never imported — The file exists withretro-btnstyles butmain.tsonly importsglobal.css. Either import it or delete it.- Error handler is good but only logs to console. Consider sending to a telemetry service or showing a user-facing crash screen.
⚪ General Structure¶
shared/ui/core/has 22 components — Good granularity but the barrelindex.tsdoesn't exportCyberAvatar,CyberBackground,CyberDataGrid,CyberGauge,CyberRadarChart,CyberSplitView, orTrackMap. Inconsistent.widgets/hud/TrackMap.vueexists alongsideshared/ui/core/TrackMap.vue— Confusing duplication. The widget version wraps the core one but the naming is identical.