Commit Graph
13 Commits
Author SHA1 Message Date
Nate EmmertandClaude Sonnet 4.6 10b4e3ae09 Rename crossword WORD placeholder to ANSWER for clarity
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-01 18:17:56 -04:00
Nate EmmertandClaude Sonnet 4.6 682534a061 Add crossword puzzle item type
Admin enters Across/Down words and clues; server auto-generates the grid
using a backtracking placement algorithm (longest-first, intersection-based).
Students fill in the interactive grid with click-to-select, direction toggle,
arrow-key navigation, and Tab-to-next-word. Auto-graded per word on submit,
with correct/wrong color highlighting on the results view. Includes a print
worksheet option for blank paper practice.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-01 17:56:46 -04:00
Nate EmmertandClaude Sonnet 4.6 60bfe3ca4a Add instructions field to quiz and matching item types
Instructions are optional free text shown to the student above the questions/word bank.
Admin enters them in the item editor; stored in items.body for quiz and matching types.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-01 16:57:52 -04:00
Nate EmmertandClaude Sonnet 4.6 f9cc515cec Fix matching type showing undefined in admin unit view; add print worksheet
- Add matching to TYPE_ICON/TYPE_LABEL in admin.js (was missing, caused undefined)
- Add 🖨 Print worksheet button on matching exercise (prints word bank + clue blanks)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-01 16:55:15 -04:00
Nate EmmertandClaude Sonnet 4.6 05cfdf7b09 Add matching quiz type, more theme colors, animal icon picker, and fix color persistence
- Fix theme not saving across sessions: /api/state was missing `theme` in SELECT
- Add 4 new color themes: red, teal, yellow, indigo (student + admin)
- Add animal icon picker (32 animals) with PATCH /api/students/:id/emoji endpoint
- Add Matching item type: word bank (A, B, C… alphabetical) + clue blanks, auto-graded
- Matching submit button stays disabled until all blanks are filled

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-01 16:27:22 -04:00
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