# 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.
