Clone this repository
For self-hosted knots, clone URLs may differ based on your setup.
Download tar.gz
Handle browser AudioContext suspension by resuming on use, pass ctx
parameter to playTone to avoid redundant getAudioContext calls, and
wrap all play functions in try/catch for graceful degradation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Synthesize short tones via Web Audio API - no external audio files needed.
Correct answers play an ascending two-note ding, incorrect answers play a
gentle descending tone, and lesson completion plays a four-note fanfare.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add /api/tts endpoint using msedge-tts crate for high-quality
Filipino neural voices (fil-PH-BlessicaNeural default)
- Disk-based LRU cache in data/tts-cache/ to avoid re-synthesis
- Update useSpeech hook to fetch from server and play audio via
HTMLAudioElement instead of Web Speech API
- Add loading spinner to SpeakButton while audio is fetched
- TTS is now always available regardless of browser support
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>