Commit Graph
8 Commits
Author SHA1 Message Date
Nate EmmertandClaude Sonnet 4.6 ca68e9df52 Switch data volume from bind mount to named Docker volume
Bind mount (./data:/app/data) was relative to the working directory,
so data was lost whenever the project was re-cloned or compose was run
from a different path. A named volume is managed by Docker and persists
across container rebuilds and image pulls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 20:20:01 -04:00
Nate EmmertandClaude Sonnet 4.6 3dc4ddea4b Add rich text editor for lesson content input
Replaces the plain textarea with a WYSIWYG contenteditable editor so
the formatting the parent sees while writing matches what the student
sees when reading. Toolbar supports bold, italic, underline, H2/H3,
bullet/numbered lists, links, and YouTube embeds. Selection is saved
on editor blur and restored before each execCommand so toolbar clicks
don't lose the user's selection.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 20:00:03 -04:00
Nate EmmertandClaude Sonnet 4.6 39d690bf93 Fix piper: keep all bundled libs, register with ldconfig
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 10:36:53 -04:00
Nate EmmertandClaude Sonnet 4.6 984834e896 Add piper error detail to TTS response for debugging
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 10:35:03 -04:00
Nate EmmertandClaude Sonnet 4.6 fd88d964f7 Fix piper: add libespeak-ng1 dep and remove invalid spawnSync encoding
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 10:27:44 -04:00
Nate EmmertandClaude Sonnet 4.6 8fa906b559 Fix speechSynthesis cancel before speak to unblock audio
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:38:20 -04:00
Nate EmmertandClaude Sonnet 4.6 6dd7e03d21 Fix piper download URL in Dockerfile
v1.2.0 uses piper_amd64.tar.gz; switch to 2023.11.14-2 which has piper_linux_x86_64.tar.gz.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 09:01:44 -04:00
Nate EmmertandClaude Sonnet 4.6 6f2281e2a7 Add spelling improvements and local Piper TTS
Practice: fire streak badge, first-letter hint on wrong answers, missed-words drill session after practice completes.
Test: audio-only mode with listening state before input appears, larger re-read button.
Words: definition field (DB migration + admin editor + TTS playback).
TTS: replace speechSynthesis with local Piper via /api/tts, WAV cached in data/tts-cache, falls back to browser voice when Piper is not installed.
Dockerfile: switched to node:26-slim, installs Piper binary + en_US-lessac-medium voice.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-21 08:47:10 -04:00