Evidence type: [evidence]
Time horizon: After launch
Files: frontend/src/pages/PasswordChange.tsx:20-45, frontend/src/App.tsx:64-78
What's happening: PasswordChange.tsx defines a local Switch component while ui/Switch.tsx already exists unimported; App.tsx defines two inline spinner variants while ui/LoadingSpinner exposes the same thing. The local Switch references Tailwind token classes (bg-input, ring-ring) that aren't defined in tailwind.config.js, so its unchecked state has no background.
Why it matters: With only 7 primitives against 19,200 lines of page code, the component library is already being bypassed rather than extended.
Recommendation: Import ui/Switch in PasswordChange and delete the local copy; replace the two App.tsx spinners with ui/LoadingSpinner.
Expected impact: Fewer divergent implementations; the broken off-state disappears.
Effort estimate: S
Finding ID: UX-M10
Source: docs/agents/pre-launch-report.md
Evidence type: [evidence]
Time horizon: After launch
Files: frontend/src/pages/PasswordChange.tsx:20-45, frontend/src/App.tsx:64-78
What's happening:
PasswordChange.tsxdefines a localSwitchcomponent whileui/Switch.tsxalready exists unimported;App.tsxdefines two inline spinner variants whileui/LoadingSpinnerexposes the same thing. The localSwitchreferences Tailwind token classes (bg-input,ring-ring) that aren't defined intailwind.config.js, so its unchecked state has no background.Why it matters: With only 7 primitives against 19,200 lines of page code, the component library is already being bypassed rather than extended.
Recommendation: Import
ui/SwitchinPasswordChangeand delete the local copy; replace the twoApp.tsxspinners withui/LoadingSpinner.Expected impact: Fewer divergent implementations; the broken off-state disappears.
Effort estimate: S
Finding ID: UX-M10
Source: docs/agents/pre-launch-report.md