Skip to content

feat: meeting export enhancements — HTML/PDF, batch (all meetings), section filters, retry & analytics - #714

Open
akamabu wants to merge 4 commits into
Zackriya-Solutions:mainfrom
akamabu:feat/meeting-export-enhancements
Open

feat: meeting export enhancements — HTML/PDF, batch (all meetings), section filters, retry & analytics#714
akamabu wants to merge 4 commits into
Zackriya-Solutions:mainfrom
akamabu:feat/meeting-export-enhancements

Conversation

@akamabu

@akamabu akamabu commented Aug 15, 2026

Copy link
Copy Markdown

Summary

Comprehensive meeting-export enhancement: new formats (HTML/PDF), batch export of all meetings, section filtering (summary/transcript/full), resilient error handling, and analytics tracking.

Note: this PR supersedes #707 (Markdown export) — all of #707's functionality plus HTML/PDF batch is included here, so #707 was closed.

Changes

Rust (frontend/src-tauri)

  • New Tauri commands: api_get/export_meeting_html, api_get/export_meetings_markdown, api_get/export_meetings_html
  • ExportSection enum (Full | SummaryOnly | TranscriptOnly) applied to all single + batch renderers
  • Batch renderers combine multiple meetings into one document (markdown + HTML)
  • Self-contained, print-friendly HTML with XSS-safe escaping (no external deps)
  • LLM title fallback to heuristic (generate_fallback_title) on provider error
  • Unit tests for build_meeting_markdown / build_meeting_html (full doc, missing summary/transcript, corrupt JSON, HTML escaping, summary/transcript-only, batch combine, section parse)

TypeScript (frontend)

  • useExportOperations rewritten: retry loop (3 attempts, exponential backoff), lastError/error boundary, HTML + PDF (browser print-to-PDF) export, batch export (all meetings), section param
  • Pure logic extracted into lib/export-errors.ts (ExportError, classifyExportError, userFriendlyMessage) and lib/title-utils.ts (isDefaultTitle, generateHeuristicTitle) with bun:test
  • useAutoNaming local fallback (isDefaultTitle) + shouldAutoName(title) helper
  • SummaryUpdaterButtonGroup export dropdown with format/section selector + batch (all meetings) actions, wired through SummaryPanel + page-content

Analytics

  • New events: export_markdown_batch, export_html_batch, export_markdown_batch_all, export_html_batch_all, export_pdf
  • Clipboard copy already tracked via Analytics.trackCopy (summary/transcript)

Test plan

  • cargo test -p meetily (export_markdown module)
  • bun test for lib/export-errors.test.ts + lib/title-utils.test.ts
  • Manual: open a meeting → export dropdown → Markdown / HTML / PDF, section filter, "Export all meetings"

Notes

  • PDF is generated client-side via window.print() (browser print-to-PDF) using the HTML renderer — no extra native dependency.

### Feature 1: Smart Meeting Auto-Naming (LLM-powered)
- Add Tauri command `api_auto_generate_title` that generates meeting
  titles from transcript using the configured LLM
- Add `api_should_auto_name` to detect default timestamp titles
- Frontend hook `useAutoNaming` with auto-rename-if-needed flow
- Enables renaming meetings WITHOUT generating a full summary

### Feature 2: Vietnamese Quick Summary Templates
- Add 3 new built-in templates for Vietnamese users:
  - `vietnamese_meeting`: General meeting notes (Tóm tắt, Quyết định,
    Hành động, Thảo luận)
  - `vietnamese_standup`: Daily standup (Hôm qua/Hôm nay/Vướng mắc)
  - `vietnamese_interview`: Interview evaluation (Kỹ năng, Điểm mạnh/yếu,
    Quyết định)
- Templates support Vietnamese-language LLM output natively
- All templates registered in defaults.rs with tests

### Feature 3: Export to Markdown
- Add Tauri command `api_export_meeting_markdown` with save dialog
- Add `api_get_meeting_markdown` for clipboard export
- Frontend hook `useExportOperations` with file + clipboard modes
- Export button added to SummaryUpdaterButtonGroup
- Output includes metadata, transcript with timestamps, and AI summary
- Add useAutoNaming hook to page-content.tsx with auto-rename-if-needed
- Add useExportOperations hook with file export + clipboard copy
- Pass hooks through TranscriptPanel to TranscriptButtonGroup
- Add Wand2 'Rename' button (shows spinner during generation)
- Add Download 'Export' dropdown with 'Export to File' + 'Copy Markdown'
- Fix export_markdown.rs pool access (method, not field)

Refs: #auto-naming, #export-markdown
…ry/analytics

- Rust: add api_get/export_meeting_html, api_get/export_meetings_markdown/html
  with ExportSection (full/summary/transcript) and batch multi-meeting combine
- Rust: add unit tests for build_meeting_markdown (full, missing summary/transcript,
  corrupt JSON, HTML escaping, summary/transcript-only, batch combine, section parse)
- TS: rewrite useExportOperations with retry loop, lastError/error boundary,
  HTML+PDF export (browser print-to-PDF), batch export (all meetings), section param
- TS: extract pure logic into lib/export-errors.ts + lib/title-utils.ts with bun:test
- TS: add useAutoNaming local fallback (isDefaultTitle) + shouldAutoName(title) helper
- UI: SummaryUpdaterButtonGroup export dropdown with format/section selector and
  batch (all meetings) options; wire through SummaryPanel + page-content
- auto_naming.rs: LLM title fallback to heuristic on provider error
@akamabu

akamabu commented Aug 16, 2026

Copy link
Copy Markdown
Author

Hi maintainers — this PR is ready for review. It adds HTML/PDF + batch meeting export, section filtering, resilient retry/error handling, and analytics, with Rust unit tests and bun:test TS coverage.

The CI workflows on this head commit haven't run yet (showing as pending). Could a maintainer approve the workflow run so checks can complete? Happy to address any feedback or split the PR if you'd prefer smaller pieces. Thanks!

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