commits
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>
- Remove orphaned Divider in ReviewPage card (no content above it after
message moved to SpeechBubble)
- Remove unused Divider import
- Simplify lowHeartMessages in LessonPage: only 2 of 4 entries were
reachable, replaced array with direct ternary
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 'encourage' mood with nodding animation
- Create SpeechBubble component for Rambi to "speak"
- Add Rambi to correct/incorrect feedback banners with Tagalog phrases
- Enhance ReviewPage with speech bubble and varied score-based messages
- Show Rambi encouragement during lessons when hearts are low
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rename the mascot component from Rambutan to Rambi and introduce the
name in the HomePage greeting ("Kamusta! I'm Rambi!"). Update all
imports across LoginPage, RegisterPage, and ReviewPage.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
vite-plugin-pwa@1.2.0 only supports vite up to v7, causing npm ci
to fail in the Docker build. Setting legacy-peer-deps=true allows
the install to proceed while the upstream adds vite@8 support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the lightning bolt favicon with a rambutan mascot SVG matching
the in-app character. Set the tab title to "Ayos". Add PWA support via
vite-plugin-pwa with manifest, service worker, and installability in
Chrome. Generate PNG icons at 192x192, 512x512, and 180x180 for
apple-touch-icon. Include cargo fmt formatting fixes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
- 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>
- Remove orphaned Divider in ReviewPage card (no content above it after
message moved to SpeechBubble)
- Remove unused Divider import
- Simplify lowHeartMessages in LessonPage: only 2 of 4 entries were
reachable, replaced array with direct ternary
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 'encourage' mood with nodding animation
- Create SpeechBubble component for Rambi to "speak"
- Add Rambi to correct/incorrect feedback banners with Tagalog phrases
- Enhance ReviewPage with speech bubble and varied score-based messages
- Show Rambi encouragement during lessons when hearts are low
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the lightning bolt favicon with a rambutan mascot SVG matching
the in-app character. Set the tab title to "Ayos". Add PWA support via
vite-plugin-pwa with manifest, service worker, and installability in
Chrome. Generate PNG icons at 192x192, 512x512, and 180x180 for
apple-touch-icon. Include cargo fmt formatting fixes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>