Skip to content

Conversation

@jhodapp
Copy link
Member

@jhodapp jhodapp commented Dec 21, 2025

Summary

This PR adds the frontend components for the AI meeting recording and transcription feature, completing Phase 6 of the AI Meeting Integration project.

New API Modules

  • meeting-recordings.ts: Recording start/stop, transcript fetching with 5-second polling, manual LeMUR extraction endpoints
  • ai-suggestions.ts: Accept/dismiss AI-detected actions and agreements

New Components

  • meeting-controls.tsx: Join Meet button + Start/Stop recording controls + Extract Actions/Agreements menu items
  • session-transcript.tsx: Displays transcript with speaker-labeled segments and AI suggestions panel
  • transcript-segment.tsx: Individual utterance with timestamp, speaker label, and sentiment badge
  • session-summary.tsx: AI-generated session summary with extracted actions/agreements display
  • ai-suggestions-panel.tsx: Groups AI-detected actions/agreements by type
  • ai-suggestion-card.tsx: Accept/dismiss card with toast notifications, shows assignee info

UI Integrations

  • Summary tab added to CoachingTabsContainer (4th tab, after Actions)
  • Transcript tab added to OverarchingGoalContainer with green dot indicator when transcript is available
  • MeetingControls added to coaching session page header with dropdown menu

Key Features

  1. Recording States: Shows appropriate UI for pending/joining/recording/processing/completed/failed
  2. Dual Privacy Levels: Supports separate coach and coachee privacy consent with effective level calculation
  3. Role-based Controls: Only coaches can start/stop recording and trigger manual extraction
  4. One-click AI Actions: Accept suggestions to create Actions/Agreements, dismiss to hide
  5. Manual Extraction: Extract Actions and Extract Agreements menu items for on-demand LeMUR analysis

Recent Fixes

  • Handle null due_by gracefully in actions list display (for AI-extracted actions)
  • Add dropdown menu with Extract Actions/Agreements options
  • Support lowercase enum serialization for status fields

Test plan

  • Verify MeetingControls displays correctly when no meeting URL is configured
  • Verify Join Meet button opens Google Meet in new tab
  • Verify Extract Actions/Agreements menu items appear when transcript is completed
  • Verify Summary tab shows empty state when no transcript
  • Verify Transcript tab shows empty state when no recording
  • Verify actions with null due_by display "—" instead of crashing
  • Verify TypeScript compilation passes (npm run typecheck)

Relates to #146

…on (Phase 2)

Add settings infrastructure for coach integration configuration and
per-relationship AI privacy settings:

Settings Page:
- Add /settings route with layout matching existing app structure
- SettingsContainer with Integrations and Relationships tabs
- Coach-only access (coachees see informational message)

Integration Settings (coach-only):
- Google Account connection status and OAuth flow trigger
- Recall.ai API key input with save and verify functionality
- AssemblyAI API key input with save and verify functionality
- Status badges showing connection/verification state

Relationship Settings (coach-only):
- Per-coachee Google Meet URL configuration
- Per-relationship AI privacy level selection:
  - Full: All AI features (recording, transcript, suggestions)
  - Transcribe Only: Text transcription without video/audio storage
  - None: No AI features for privacy-conscious clients
- Visual privacy level selector with icons and descriptions

Type Definitions:
- Add AiPrivacyLevel enum to coaching-relationship types
- Add meeting_url and ai_privacy_level to CoachingRelationship
- Add UserIntegration types for API credentials status
- Add MeetingRecording, Transcription, TranscriptSegment types
- Add AiSuggestedItem types for AI-suggested actions/agreements

API Updates:
- Add user-integrations API module with hooks
- Implement coaching relationship update for meeting_url and ai_privacy_level
- Link Settings in user-nav dropdown

Relates to: #146
Add frontend components for the AI meeting recording and transcription feature:

API Modules:
- meeting-recordings.ts: Recording start/stop, transcript fetching with polling
- ai-suggestions.ts: Accept/dismiss AI-detected actions and agreements

Components:
- meeting-controls.tsx: Join Meet button + Start/Stop recording controls
- session-transcript.tsx: Displays transcript with segments and AI suggestions
- transcript-segment.tsx: Single utterance with speaker label and sentiment
- session-summary.tsx: AI-generated session summary with empty state
- ai-suggestions-panel.tsx: Groups AI-detected actions/agreements
- ai-suggestion-card.tsx: Accept/dismiss card for individual suggestions

Integrations:
- Added Summary tab to coaching-tabs-container (4th tab after Actions)
- Added Transcript tab to overarching-goal-container with green dot indicator
- Added MeetingControls to coaching session page header

Relates to #146
- Add polling to transcript hooks for automatic updates (5s interval)
- Fix empty POST body type (null → {} for TypeScript compatibility)
- Unify user integrations API to single endpoint
- Simplify meeting controls header layout
- Create HeaderSessionSelector component that only renders on coaching session pages
- Add session selector to site header (left of theme toggle and user nav)
- Remove duplicate session selector from coaching session page
- Add polling (5s interval) to useAiSuggestions hook for automatic updates
- Increase width to w-64/md:w-72/lg:w-80 for better content display
- Remove restrictive pr-2 padding that clipped dropdown arrow
- Increase chevron icon size from h-4 to h-5 for better visibility
- Add shrink-0 to prevent icon compression
- Create HeaderSessionSelector component that only renders on coaching session pages
- Add session selector to site header (left of theme toggle and user nav)
- Remove duplicate session selector from coaching session page
- Add polling (5s interval) to useAiSuggestions hook for automatic updates
- Increase width to w-64/md:w-72/lg:w-80 for better content display
- Remove restrictive pr-2 padding that clipped dropdown arrow
- Increase chevron icon size from h-4 to h-5 for better visibility
- Add shrink-0 to prevent icon compression
- Add Extract Actions/Agreements menu items to meeting controls
- Add coachee relationship settings for privacy level consent
- Add auto-approve AI suggestions toggle to integration settings
- Display AI extraction results (actions/agreements) in session summary
- Update coaching relationship types for dual privacy levels
- Add API functions for manual LeMUR extraction endpoints
@jhodapp jhodapp marked this pull request as draft December 24, 2025 18:36
@jhodapp jhodapp self-assigned this Dec 24, 2025
@jhodapp jhodapp added the prototype Prototyping a major new feature. label Dec 24, 2025
@jhodapp
Copy link
Member Author

jhodapp commented Dec 24, 2025

Consolidated into #243 - AI Meeting Recording Integration Frontend

@jhodapp jhodapp closed this Dec 24, 2025
@jhodapp jhodapp deleted the feature/146-ai-meeting-integration-frontend-phase6 branch December 24, 2025 18:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

prototype Prototyping a major new feature.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants