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 tablesTests
bun run test # or: npx vitest run
bun run coverage # writes ./coverage for this package alone