image_service.py: Fetches thumbnail from Wikipedia REST API (free,
no account). Falls back to emoji for abstract words (40+ mapped).
Auto-enrichment: When a learning unit is created, images are
automatically fetched for all words that don't have one yet.
Manual endpoint: POST /api/vocabulary/enrich-images fills images
for existing words without images.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
AudioButton now tries Piper TTS via /api/vocabulary/tts endpoint
first, falls back to Browser Web Speech API if unavailable.
Backend: New GET /api/vocabulary/tts?text=...&lang=de endpoint.
audio_service.py: Fixed presigned URL flow for MinIO download.
This gives the same high-quality voice as the Investor Agent
in the pitch deck (Thorsten DE / Lessac EN, MIT license).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
65 files in klausur-service packages + 3 in backend-lehrer packages
had stale imports referencing deleted shim modules.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
klausur-service: 183 shims deleted, 26 test files + 8 source files updated
backend-lehrer: 59 shims deleted, main.py + 8 source files updated
All imports now use the new package paths directly.
Zero shims remaining in the entire codebase.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>