Commit Graph

19 Commits

Author SHA1 Message Date
Jeff Emmett aa85248a22 fix(mobile): show toolbox controls immediately on mobile browsers
The toolbox was hidden by default on mobile and only appeared on tap,
which users couldn't discover. Now shows controls on conference mount
since the mobile auto-hide timeout is already a no-op.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 17:31:41 -07:00
Jeff Emmett ec77b5f471 feat(video-layout): make videos fill tiles and remove blurred background
Videos now use object-fit: cover in all thumbnail types, removing dark
bars around portrait videos. Hides the blurred large video background
and makes the large video fill its container edge-to-edge.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 13:28:03 -07:00
Jeff Emmett 325960fa15 feat(reactions,chat): expand emoji features across reactions, chat picker, and message reactions
Add 8 new floating reactions (party, thinking, wave, cry, eyes, mindblown, pray, rocket) in a
two-row grid layout without sounds or shortcuts. Replace the basic SmileysPanel in chat with a
full @emoji-mart/react picker featuring categories, search, and skin tones. Expand message
reaction quick-access from 5 to 8 emojis with a "+" button to open the full picker.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 11:22:48 -07:00
Jeff Emmett ef6a5a1ffe feat(video-layout): default to tile view on conference join
Also add tooltip to Meeting Intelligence button explaining that
recordings are transcribed by self-hosted AI post-recording.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 14:15:27 -08:00
Jeff Emmett 528d8d2962 chore: remove CLAUDE.md from git tracking
CLAUDE.md may contain project context with credentials and is now
covered by global gitignore to prevent accidental secret commits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 14:41:15 -08:00
Jeff Emmett c835176a80 fix(mobile): enable mobile browser support by disabling deep-linking
Mobile users were being blocked by a deep-linking page prompting them to
download the Jitsi Meet app. Since this is a self-hosted instance with no
native app, disable deep-linking so users join directly in the browser.

- Set deeplinking.disabled: true in config.js
- Set MOBILE_APP_PROMO: false in interface_config.js
- Fix mobile header background to match purple theme

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 11:22:06 -07:00
Jeff Emmett 70a0ca61ec feat(dashboard): add standalone recordings dashboard page
- View all recorded meetings with status indicators
- Display full transcripts with timestamps
- Search/filter meetings
- Export transcripts as JSON
- Copy transcript text to clipboard
- Auto-refresh every 30 seconds
- Purple theme matching Jeffsi Meet branding

Accessible at: https://meet.jeffemmett.com/recordings.html

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 12:58:50 +00:00
Jeff Emmett dd12348da8 fix(meeting-intelligence): fix transcription pipeline bugs
- Fix JSONB serialization in API database.py (json.dumps + ::jsonb casts)
- Fix integer vs UUID job ID handling in transcriber
- Fix UUID-to-string conversion for meeting_id in processor
- Add whisper.cpp shared libraries to Dockerfile (libwhisper, libggml)
- Fix Jibri finalize script log directory path
- Add graceful error handling for speaker diarization
- Support video_path parameter for automatic audio extraction

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 12:25:59 +00:00
Jeff Emmett 0e9c78c86a feat(deploy): add video quality and TURN configuration
- Add .env.example with documented video quality bitrate settings
- Configure VP8/VP9/H264/AV1 codec bitrates for optimal quality
- Add STUN/TURN server configuration for NAT traversal
- Document required firewall rules for media traffic
- Update branding: watermark, variables, interface config

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 11:36:17 +00:00
Jeff Emmett 68016c30f6 feat(meeting-intelligence): add frontend dashboard for recordings and transcripts
Adds the Meeting Intelligence dashboard UI with:
- Toolbar button to open side panel during meetings
- Recordings list showing past meeting recordings
- Transcript viewer with speaker diarization colors
- AI summary panel with key points, action items, decisions
- Search panel for searching across all transcripts
- Export functionality (Markdown, PDF, JSON)

Frontend components:
- MeetingIntelligenceButton (toolbar integration)
- MeetingIntelligenceDashboard (side panel container)
- RecordingsList, TranscriptViewer, SummaryPanel, SearchPanel

Integrations:
- Redux state management via ReducerRegistry
- Config support via meetingIntelligence settings
- SCSS styles matching Jitsi design system

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-06 02:24:50 +00:00
Jeff Emmett 9f9bb309bb fix(meeting-intelligence): fix Jibri XMPP connection and transcriber build
- Add wget to builder stage for model download
- Add curl and build-essential to production stage for health check and webrtcvad
- Remove unused whisper_models volume (model baked into image)
- Fix WHISPER_MODEL env var to use full path
- Update Jibri to use Docker internal DNS names (meet.jitsi)
- Connect Jibri to jeffsi-meet_meet.jitsi network for Prosody access

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 20:34:17 +00:00
Jeff Emmett 4cb219db0f feat(meeting-intelligence): add backend infrastructure for transcription and AI summaries
Add complete Meeting Intelligence System infrastructure:

Backend Services:
- PostgreSQL schema with pgvector for semantic search
- Transcription service using whisper.cpp and resemblyzer for diarization
- Meeting Intelligence API with FastAPI
- Jibri configuration for recording

API Endpoints:
- /meetings - List, get, delete meetings
- /meetings/{id}/transcript - Get transcripts with speaker attribution
- /meetings/{id}/summary - Generate AI summaries via Ollama
- /search - Full-text and semantic search
- /meetings/{id}/export - Export as PDF, Markdown, JSON
- /webhooks/recording-complete - Jibri callback

Features:
- Zero-cost local transcription (whisper.cpp CPU)
- Speaker diarization (who said what)
- AI-powered summaries with key points, action items, decisions
- Vector embeddings for semantic search
- Multi-format export

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 19:04:19 +00:00
Jeff Emmett f56986818b feat(shared-music): add support for Vimeo, SoundCloud, Spotify, Dailymotion, Twitch
- Add source type detection for Vimeo, SoundCloud, Spotify, Dailymotion, Twitch
- Create EmbedPlayerManager for iframe-based media players
- Update extractMusicUrl to extract IDs from various platforms
- Update SharedMusicPlayer to route to appropriate player manager
- Update SharedMusicTile to handle video vs audio sources
- Video sources (YouTube, Vimeo, Dailymotion, Twitch) show embedded player
- Audio sources (SoundCloud, Spotify) show embedded widget
- Direct audio files show HTML5 audio player with custom controls

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 16:43:22 +00:00
Jeff Emmett 751a04b950 feat(shared-music): display YouTube video in tile view with controls
- Add SharedMusicTile component for rendering video in filmstrip
- Create fake participant for shared music (shows as tile, not pinned)
- Make YouTube player visible with proper dimensions in tile
- Remove auto-mute behavior when sharing music
- Add SharedMusic to FakeParticipant enum
- Add isSharedMusicParticipant helper function
- Move player rendering from LargeVideo to tile
- Add CSS styles for player wrapper and controls overlay

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 16:29:59 +00:00
Jeff Emmett b6fc0ae0b5 feat(deploy): add Docker build and deployment configuration
- Add Dockerfile based on jitsi/web with custom web client
- Add docker-compose.yml for local testing
- Add deploy.sh script for automated builds and deployment
- Add .dockerignore to optimize Docker builds

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:26:30 +00:00
Jeff Emmett 237f2c5cdf docs(config): add sharedmusic to toolbar buttons documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:13:23 +00:00
Jeff Emmett dfebe26cd1 fix(shared-music): render player and add mobile/native support
- Add SharedMusicPlayer to LargeVideo.web.tsx so audio actually plays
- Handle mobile autoplay restrictions in DirectAudioManager with
  fallback to play on user interaction
- Add native (React Native) components for SharedMusicDialog and
  SharedMusicButton to support iOS/Android apps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:04:01 +00:00
Jeff Emmett 1c9fed8794 feat(shared-music): add synchronized music playback feature
Add a new shared-music feature that allows users to share YouTube or
direct audio URLs with all participants. Music plays locally on each
device with the host controlling playback (play/pause/seek/volume).

New feature module includes:
- Redux state management (actions, reducer, middleware)
- Conference command sync for real-time playback coordination
- YouTube player (hidden video, audio only) via react-youtube
- HTML5 audio player for direct audio URLs
- Toolbar button with share dialog
- Translation strings for all UI elements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 18:43:22 +00:00
Jeff Emmett 9f4b09d135 Initial commit: Jeffsi Meet - forked from Jitsi Meet 2026-01-08 19:27:14 +01:00