# ADR-003: React over Vue ## Status Accepted ## Context The frontend requires a component-based SPA framework with strong typing, a battle-tested component library, and broad ecosystem support. ## Decision Use **React 18+ with TypeScript** as the frontend framework. ## Rationale ### Why React over Vue? - **Ecosystem maturity:** React has the largest frontend ecosystem. Libraries (date pickers, data grids, rich text editors) assume React availability first. - **Fluent UI v9:** Microsoft's official React component library is built for React. The Vue-compatible version (Fluent UI Vue) lags significantly in features and maintenance. - **Hiring and onboarding:** React is more widely known. New contributors are more likely to arrive with React experience than Vue experience. - **Concurrent features:** React 18's concurrent rendering (`useTransition`, `useDeferredValue`) provides a foundation for performance improvements in data-heavy views like the ban table. ### Why not Vue? - Fluent UI v9 does not provide first-class Vue support. - Vue's composition API is well-designed, but does not outweigh the Fluent UI constraint. - Ecosystem and hiring advantages strongly favor React for enterprise-adjacent projects. ## Consequences - Frontend is a React SPA in `frontend/src/`. - All components are functional components using hooks. - Global state via React context (`frontend/src/providers/`).