singlePlayerPage was using useUser().user which is always null (no setter in UserContext). This caused the redirect effect to always fire, making the workspace completely inaccessible. Fixed by destructuring profile as user, which IS properly set from the Supabase profiles query. Also added 8s timeout to NeoUserContext.switchContext call to match the NeoInstituteContext timeout fix, preventing infinite spinner if the navigation API call hangs. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Description
React 18 + TypeScript + TLDraw 3.6 frontend for Classroom Copilot — whiteboard, transcription panel, timetable, and graph views
Languages
TypeScript
96%
CSS
3.2%
JavaScript
0.5%
Dockerfile
0.2%
HTML
0.1%