mock data with actual API contracts
- Normalize all `cn` imports to `@/lib/utils` across
30+ UI and component files
- Replace relative imports with `@/` alias in auth,
roles, users, stats, and layout components
- Remove redundant `as` type assertions in playlist
routes (Zod parse already returns typed data)
- Replace `any` with proper types in FallbackCache,
mock handlers, and validateIcons
- Use `type` import for type-only imports
- Add type-safe `.filter(Boolean)` with type guard
in Sidebar nav item arrays
- Update MSW mock data to match actual API shape:
numeric IDs, `role` field, HTTP-only cookie auth,
paginated response format, and settings schema
- Add JSDoc to AuthTokens clarifying cookie-based
token storage
- Replace console.* calls with logger in icon
validation
- Ignore SQLite WAL files in .gitignore
- Add error reporting to all error boundary components
- Replace hardcoded colors with theme tokens (destructive,
primary, amber) for dark mode compatibility
- Use `??` instead of `||` for config/setting defaults
- Replace `any` with `unknown` in asyncHandler types
- Add `Identifiable` constraint to createQueryHook generics
- Fix timeout leaks with useRef and componentWillUnmount
- Add `.catch()` on fire-and-forget promises
- Deduplicate theme sync logic into `maybeSyncToServer`
- Extract `resolveActualMode` helper in theme store
- Add Zustand `useShallow` selector to CardSizeControl
- Add axios module augmentation for custom request config
- Set 30s default timeout on API client
- Deduplicate toast IDs to prevent session-expired spam
- Fix TOAST_REMOVE_DELAY from 1000000ms to 1000ms
- Fix use-toast useEffect dependency array
- Remove redundant try/catch in asyncHandler-wrapped routes
- Lock body scroll when mobile sidebar is open
- Fix route ordering: static before wildcard in App.tsx
- Quote background-image URLs in LazyBackgroundImage
- Remove duplicate onCancel call in ConfirmDialog
- Add deferred TODO.md for architectural improvements
- Clear isMaintenanceMode on logout, stop persisting it
Replace `{condition && (<JSX>)}` pattern with
`{condition ? (<JSX>) : null}` across all frontend components.
This avoids potential falsy value rendering issues with
the logical AND operator.