Pitwall PWA — Full Audit Summary¶
Date: 2026-05-04
Scope: All .vue, .css, and .ts files in src/pwa/src/
Files Reviewed: ~100 files, ~12,000 lines
Audit Structure¶
| File | Covers |
|---|---|
| 01_architecture.md | FSD structure, routing, state management |
| 02_global_css.md | global.css, buttons.css, design tokens |
| 03_core_components.md | All shared/ui/core/Cyber*.vue components |
| 04_shared_ui.md | PageShell, CoachFloat, CoachCard, ParticleBackground |
| 05_widgets.md | StatusBar, DialogueBox, PauseMenu, HintBar, etc. |
| 06_pages.md | All page-level components |
| 07_stores_and_libs.md | Pinia stores, composables, utilities |
| 08_feature_requests.md | Missing features and enhancement ideas |
Top 10 Critical Issues¶
- Hardcoded mock data everywhere — Nearly every page uses inline dummy data instead of store/API calls
- No error boundaries — Zero
<ErrorBoundary>oronErrorCapturedusage across pages - Duplicate animation keyframes —
cursor-bouncedefined in 3+ places (global.css, CyberTile, Tile) - CRT overlay always running —
crt-flickeranimation runs at 0.15s interval even on low-end devices - Missing
glassvariant in CyberPanel — prop accepts'glass'but no CSS rule exists for it - buttons.css never imported —
retro-btnclasses defined but the file isn't imported in main.ts - No loading states — Pages mount and show content instantly with no skeleton/loading UX
- Accessibility gaps — No ARIA labels, no focus-visible styles, no screen reader support
- ParticleBackground renders on every page — Always mounted in App.vue, no conditional rendering
useKeyboardlisteners stack — Multiple pages register keyboard handlers that could conflict
Severity Legend¶
- 🔴 BUG — Broken or will break
- 🟡 PROBLEM — Works but is wrong
- 🔵 IMPROVEMENT — Could be better
- 🟢 FEATURE — Missing capability
- ⚪ PRACTICE — Code quality concern