Before: UserContext waited for a Supabase profiles table query (~200ms) before setting isInitialized=true, causing FullContextRoutes to show a spinner on every page refresh even with a valid stored session. After: UserContext immediately builds a profile from auth metadata + localStorage (synchronous, zero network calls) and sets isInitialized=true before the Supabase query. The Supabase profiles table is still queried in the background and the profile is updated when it returns with authoritative user_db_name/school_db_name data. On refresh with a stored session: auth metadata is available synchronously via INITIAL_SESSION, so the page renders with no visible spinner. 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%