+ {!configured && (
+
+
Supabase not configured
+
+ Cloud sync is optional. To enable it, set
+ {' '}VITE_SUPABASE_URL and{' '}
+ VITE_SUPABASE_ANON_KEY in .env.local,
+ then restart the dev server.
+
+
+ See supabase/README.md for full setup instructions.
+
+
+ )}
+
+ {configured && loading && (
+
+ )}
+
+ {configured && !loading && !user && (
+
+ )}
+
+ {configured && user && (
+ <>
+
+
Sync status
+
Account: {user.email}
+
+ Network: {status.online ? 'online' : 'offline'}
+
+
+ Pending uploads: {status.pending}
+
+
+ Last sync: {lastSyncLabel}
+
+ {status.error && (
+
+ Error: {status.error}
+
+ )}
+
+
+
+
+ >
+ )}
+
+ >
+ )
+}
diff --git a/src/services/auth.ts b/src/services/auth.ts
new file mode 100644
index 0000000..99ea172
--- /dev/null
+++ b/src/services/auth.ts
@@ -0,0 +1,44 @@
+import type { Session, User } from '@supabase/supabase-js'
+import { supabase, isSupabaseConfigured } from './supabase'
+
+export type AuthChangeListener = (user: User | null) => void
+
+export async function getCurrentSession(): Promise