Fix Video Meeting Bugs In React/TypeScript App

Job ID: 39035815

Budget: $30 – $250 CAD

Project Overview: React/TypeScript application using Daily.co for video meetings, integrated with Supabase for backend services. The application handles interview scheduling and video meetings but has connection issues that need debugging and fixing.

Tech Stack:

Frontend: React 18, TypeScript
Backend: Supabase
Video Integration: Daily.co
State Management: React Query
UI Components: Shadcn/UI
Real-time Updates: Supabase Realtime
Current Issues:

Meeting connection failures
Token creation errors
Room URL validation issues
Device permission handling problems
Key Files to Work With:

src/components/VideoView.tsx
src/components/CandidateVideoRoom.tsx
supabase/functions/manage-daily-room/index.ts
src/components/VideoInterview.tsx
Required Skills:

Strong experience with React and TypeScript
Experience with WebRTC or video conferencing integrations
Knowledge of Daily.co API
Familiarity with Supabase or similar backend-as-a-service
Understanding of real-time communications and WebSocket connections
Specific Tasks:

Daily.co Integration Fixes:

Debug and fix token creation in Edge Function
Implement proper room URL validation
Add robust error handling for room creation
Device Management:

Improve camera/microphone permission handling
Add device selection persistence
Implement fallback for device errors
Connection Management:

Add reconnection logic
Implement proper room status tracking
Add connection quality monitoring
Error Handling:

Implement comprehensive error logging
Add user-friendly error messages
Create recovery mechanisms for failed connections
Code Areas Requiring Attention:


// Key areas in VideoView.tsx
const [connectionStatus, setConnectionStatus] = useState<'waiting' | 'connecting' | 'connected'>('waiting');
const [permissionStatus, setPermissionStatus] = useState<'pending' | 'granted' | 'denied'>('pending');

// Daily.co room creation in Edge Function
const { url: meetingUrl, hostToken, participantToken } = await createDailyRoom(scheduledInterview.id);

// Real-time status updates
const channel = supabase.channel('room_status_changes')
.on('postgres_changes', {
event: 'UPDATE',
schema: 'public',
table: 'scheduled_interviews',
filter: `meeting_link=eq.${roomUrl}`
});
Expected Deliverables:

Fixed room creation and token generation
Improved device permission handling
Robust error recovery mechanisms
Documentation of fixes and improvements
Test cases for various failure scenarios
Testing Requirements:

Test on multiple browsers (Chrome, Firefox, Safari)
Test with various network conditions
Test device permission scenarios
Test room creation and joining flows
Database Schema Context: The application uses these key tables:

scheduled_interviews: Stores meeting details and room status
interview_slots: Manages interview time slots
room_events: Tracks room status changes
Related categories: JavaScript HTML5 Node.js AngularJS React.js