WordloopWordloop
WorkDeliveredLive CaptureTechnical DesignMilestonesFull Experience

App — Playback UI

Slice 5 App.

Slice 5: App — Playback UI + Transcript Synchronisation

Owner: App engineer Domain: App Complexity: M Status: 🔧 In Progress Prerequisite: Slice 4 merged

Audio playback with synchronised transcript highlighting.

Tasks

  • Core: GET /meetings/{id}/audio-url and GET /meetings/{id}/audio (dev proxy)
  • App: AudioPlayer component — play/pause, ±10s skip, seek bar, playback speed
  • App: transcript sync — highlight segment where start_ms ≤ currentTime < end_ms
  • App: click-to-seek — clicking segment sets audio position
  • App: display resolved person names on segments
  • App: auto-scroll — keep active transcript segment in view
  • App: handle audio URL expiry — re-fetch before expiry
  • App: regenerate OpenAPI client to include person_id on TranscriptionSegment

Test cases:

TestLocationAssertion
Audio player renders with controlstest_appPlay/pause, skip, speed, and seek bar visible
Transcript highlight syncs with playbacktest_appSegment with matching time range has active style
Click-to-seek workstest_appClicking timestamp sets audio.currentTime to segment's start_ms / 1000
Auto-scroll follows playbacktest_appActive segment scrolled into viewport during playback
Speaker names displayedtest_appSegment with person_id shows person name, not speaker label
Full playback flow end-to-endtest_systemUser opens completed meeting, plays audio, sees synced transcript

On this page