# Classroom Timer Integration ## Purpose The classroom timer uses local Web Audio API sounds. Generated timer audio is not exposed because the backend does not define an audio-generation provider contract. ## Current Behavior - `ClassroomTimer` renders visual timer controls, sensory backgrounds, preset/custom durations, fullscreen projection, and built-in timer sounds. - `frontend/src/components/frameworks/ClassroomTimer.tsx` is a thin composition wrapper. - Timer state, fullscreen coordination, custom time parsing, progress formatting, urgency color selection, particles, and Web Audio orchestration live in `frontend/src/business/classroom-timer/`. - Timer catalogs are backend-owned content catalog records loaded through the shared content catalog API. `frontend/src/shared/constants/classroomTimer.ts` keeps only timing and particle-count configuration. - Timer view pieces live under `frontend/src/components/classroom-timer/`. - Built-in sounds are generated in-browser through the Web Audio API. - Missing timer catalog data renders an explicit backend content error instead of falling back to frontend seed records. - AI-generated timer sounds are not exposed in the UI until a backend audio provider contract exists. - Remote audio must be added through a typed backend API module and business hook after the backend provider contract exists. ## Verification - `npm run typecheck` passes. - `npm run lint` passes without Fast Refresh warnings. - `npm run test` passes. ## Remaining Work - Add a typed backend/API/business slice for generated audio only after the backend provider contract is defined.