The previous implementation had two concurrent session recovery paths: 1. loadInitialSession() calling supabase.auth.getSession() 2. onAuthStateChange handling INITIAL_SESSION/SIGNED_IN These raced unpredictably causing setLoading(false) to never fire in certain interleavings, leaving the app permanently stuck on the spinner. Fix: Remove loadInitialSession() entirely. Start loading=true. Rely solely on onAuthStateChange — INITIAL_SESSION fires immediately with the current session state, eliminating the race. One path, one setLoading(false) call, no interleaving possible. 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%