Component extraction (CQ1):
- lib/types.ts: All interfaces (OllamaData, SystemData, Toast, etc.)
- lib/format.ts: formatBytes, formatUptime utilities
- lib/ollama-config.ts: Shared OLLAMA_URL constant
- components/StatusDot.tsx: Status indicator component
- components/ProgressBar.tsx: Progress bar component
- page.tsx: Now imports from extracted modules, reduced from 1180 to
1077 lines (interfaces + utilities + sub-components removed)
Error boundary (CQ4):
- error.tsx: Next.js App Router error boundary with styled error UI,
stack trace preview, and 'Try again' button
Shared config (CQ3):
- All 3 Ollama API routes now import OLLAMA_URL from lib/ollama-config.ts
instead of duplicating the env var fallback
Security (S1):
- Add MODEL_NAME_RE regex validation on POST /api/ollama — rejects
invalid model names before passing to Ollama API
Security (S2):
- Replace exec() with execFile() for brew package version check —
prevents shell injection if targets list ever becomes dynamic