feat(calls): in-call transcript open/copy/download (LC-411) #427
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/lc-411-transcript-export"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements LC-411 (the last LC-402 sub-issue): in-call transcript open / copy / download, available to every participant.
What
A small actions footer at the bottom of the live transcript drawer, shown only while a session is active:
/transcripts/{id}) in a new tab.speaker: textper line) to the clipboard, with a brief "Copied" confirmation./transcripts/{id}/export?format=....How / why it also covers consent
transcribe.jspoints the links at the live transcript id and reveals the footer whenever a session is active (driven fromshowBanner, which already runs at every start/stop withtranscriptIdset/cleared) and hides it on end. Every participant knows the id (theTranscriptStartedevent carries it), and the server access-gates/transcripts/{id}+ the export to call participants. So the affordance is available to all participants, not just the initiator - which strengthens transparency: everyone can see and retrieve exactly what is being recorded, reinforcing the existing "This call is being transcribed" pill + auto-opened drawer.A blocking consent-acknowledgement modal was considered and deliberately left out: it would interrupt every callee on every transcription start, and the persistent pill + drawer + now-shared export already make the recording obvious and inspectable.
Scope
Frontend only:
layout.html(footer),main.css(footer/action styles),transcribe.js(set/hide links + copy),locales/{en,es}/misc.ftl(open/copy/copied). No Rust, route, or schema change - reuses the existing transcript show + export routes (both already participant-gated and valid mid-call).Tests
just check,just test,just test-saasall pass.transcribe.jssyntax-checked;just build-cssregenerated.This closes the LC-402 voice-call redesign epic (all sub-issues LC-403..LC-412 done).
Adds an actions footer to the live transcript drawer so every participant - not just the initiator - can act on the recording mid-call: - Open: opens the saved transcript page (/transcripts/{id}) in a new tab. - Copy: copies the visible captions (speaker: text per line) to the clipboard, with a brief "Copied" confirmation. - .txt / .vtt: download the transcript via /transcripts/{id}/export. transcribe.js points the links at the live transcript id and reveals the footer whenever a session is active (driven from showBanner, which already runs at every start/stop with transcriptId set/cleared), and hides it when the session ends. The id is known to all participants (the TranscriptStarted event carries it), and the server access-gates /transcripts/{id} and the export to call participants, so the affordance also strengthens transparency: everyone can see and retrieve exactly what is being recorded, reinforcing the existing "being transcribed" pill. Frontend only: layout.html (footer), main.css (footer/action styles), transcribe.js (set/hide links + copy), en/es misc.ftl (open/copy/copied). No Rust/route/schema change - reuses the existing transcript show + export routes. just check, just test, just test-saas all pass; transcribe.js syntax-checked. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>