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 for status updates
  • ai-suggestions.ts: Accept/dismiss AI-detected actions and agreements

New Components

  • meeting-controls.tsx: Join Meet button + Start/Stop recording controls (coach-only controls)
  • 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 empty state (FileText icon)
  • ai-suggestions-panel.tsx: Groups AI-detected actions/agreements by type
  • ai-suggestion-card.tsx: Accept/dismiss card with toast notifications

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

Key Features

  1. Recording States: Shows appropriate UI for pending/joining/recording/processing/completed/failed
  2. Privacy Levels: Respects AI privacy settings (none/transcribe_only/full)
  3. Role-based Controls: Only coaches can start/stop recording
  4. One-click AI Actions: Accept suggestions to create Actions/Agreements, dismiss to hide

Test plan

  • Verify MeetingControls displays correctly when no meeting URL is configured
  • Verify Join Meet button opens Google Meet in new tab
  • Verify Summary tab shows empty state when no transcript
  • Verify Transcript tab shows empty state when no recording
  • 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
- 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
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.

2 participants