debate-timer

Round timing: the per-speech timer, the prep timer, per-format speech times, and the speech recorder (mic selection, live waveform, playback) that records while the timer runs.

import { SpeechTimer, PrepTimer, useSpeechRecorder } from "debate-timer"
import { debateStyles, type DebateStyleKey } from "debate-timer/src/formats/debate-format-times"
import { wordCountStyles, getWordCountStatus } from "debate-timer/src/formats/word-count-format"

Speech times are the source of truth for which columns a flow gets, so debate-round depends on this package rather than the other way around.

Package layout

Logic lives under src/, grouped by role; tests live under test/.

debate-timer/
├── src/
│   ├── audio/        # timer sound effects
│   ├── formats/      # per-format speech times and column layouts
│   ├── hooks/        # useSpeechRecorder
│   ├── recorder/     # mic selector, live waveform, recording player
│   ├── timers/       # SpeechTimer, PrepTimer
│   ├── types/        # timer and speech types
│   └── index.ts      # public entry point
└── test/             # Vitest suites for the format tables

Tests

bun run test        # or: npx vitest run
bun run coverage    # writes ./coverage for this package alone