Audio prompt mode (listen and identify) #37

Open
opened 2026-09-26 13:58:40 +00:00 by belvedere · 0 comments
Collaborator

Objective: Add listening practice, deferred until the core loop works.

Files:

  • Create: lib/first_thousand_words/audio/provider.ex, .../audio/tts_provider.ex
  • Modify: priv/static/ or object storage for cached clips

Steps:

  1. Generate audio per word once, cache by (word_id, voice); never synthesise per request.
  2. Store audio_url on Word.
  3. Add direction: :listen cards.
  4. Make the provider configurable; keep the abstraction thin.

Verify: a listen card plays cached audio for 10 words without regenerating.

Notes: explicitly deferred. Marked future because it adds a storage dependency and a
vendor decision that should not block v1.

**Objective:** Add listening practice, deferred until the core loop works. **Files:** - Create: `lib/first_thousand_words/audio/provider.ex`, `.../audio/tts_provider.ex` - Modify: `priv/static/` or object storage for cached clips **Steps:** 1. Generate audio per word once, cache by `(word_id, voice)`; never synthesise per request. 2. Store `audio_url` on `Word`. 3. Add `direction: :listen` cards. 4. Make the provider configurable; keep the abstraction thin. **Verify:** a listen card plays cached audio for 10 words without regenerating. **Notes:** explicitly deferred. Marked `future` because it adds a storage dependency and a vendor decision that should not block v1.
Sign in to join this conversation.
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nickkeers/first-thousand-words#37
No description provided.