Skip to content

feat(ui): meeting audio export + document export integration (MEET-7) - #373

Closed
eliotlim wants to merge 5 commits into
feat/meet-6-ai-summaryfrom
feat/meet-7-audio-export
Closed

eliotlim wants to merge 5 commits into
feat/meet-6-ai-summaryfrom
feat/meet-7-audio-export

Conversation

@eliotlim

@eliotlim eliotlim commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

Problem

Recorded meeting audio must be exportable as ordinary files — a hard requirement (owner records in Singapore, a single-party-consent jurisdiction; audio is the evidence). Document exports also needed the full meeting record. Board: MEET-7.

Solution

Per-block Export audio: single chunk → direct download; multi-chunk → ZIP (fflate, already a dep; stored not recompressed — exact original bytes, no stitching/transcoding) with lexicographically-safe, human-readable entry names (001-00h00m45s.webm). Untranscribed and mid-recording chunks are always exportable; failures abort cleanly (no partial zips) with retry. Document exports: md/html/pdf carry transcript + summary + notes + per-chunk audio links; page-zip/site exports embed the audio bytes; collection dedupes via collectAssetIds. Export works read-only (reading ≠ writing). Stacked on #372 — merge after it.

Key files: packages/ui/src/blockeditor/{meetingAudioExport.ts,meetingAudio.ts,exportBlocks.ts}, packages/ui/src/export/{exportAssets.ts,toHtml.ts}, tests meetingAudioExport.test.tsx + exportMeeting.test.ts.

Before / After

Behavior Before After
Get recorded audio out not possible one click: file or ordered ZIP, exact original bytes — zip round-tripped byte-for-byte in tests
Chunk uploaded but never transcribed n/a still exportable (audio ≠ transcript) — tested
md/html/pdf export of a meeting page transcript+summary+notes only + per-chunk audio download links; page-zip/site include audio bytes
Read-only viewer n/a can export audio; doc provably unmutated — tested

Visual delta is one button in the existing block chrome; full block captures live in #369.

Test procedure

VITEST_MAX_WORKERS=1 pnpm verify green incl. e2e. Targeted: pnpm --filter @book.dev/ui exec vitest run src/blockeditor/__tests__/meetingAudioExport.test.tsx src/export/__tests__/exportMeeting.test.ts.

Operational notes

No deps added (fflate reused), no env/migration. ~175MB transient memory at a 2h-meeting envelope (sequential fetch, in-memory zip) — acceptable, documented. PDF can't embed audio; the link text renders visibly so absence is never silent. Desktop save path unchanged (downloadBlob); live desktop validation rides MEET-8's signed-build acceptance.


Verify: green serialized. Reviews cleared: product/metrics (Parker — BLOCK→CLEAR after naming fix), code (Quinn). Final HEAD b8ca146.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
app.book.pub Canceled Canceled Oct 4, 2026 2:13pm UTC

Request Review

@eliotlim
eliotlim changed the base branch from main to feat/meet-6-ai-summary October 4, 2026 14:09
@eliotlim
eliotlim deleted the branch feat/meet-6-ai-summary October 4, 2026 14:09
@eliotlim eliotlim closed this Oct 4, 2026

This branch was previously deployed

1 inactive deployment
Preview — bef72f54 Deployed Oct 4, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant