import { useState, useEffect } from 'react' import { useAuth } from './hooks/useAuth' import { LoginPage } from './pages/LoginPage' import { OnboardingPage } from './pages/OnboardingPage' import { GamePage } from './pages/GamePage' import { AdminPage } from './pages/AdminPage' import './index.css' type AppRoute = 'login' | 'sent' | 'onboarding' | 'game' | 'admin' export default function App() { const { profile, token, loading, logout } = useAuth() const [route, setRoute] = useState('login') const [checkingOnboarding, setCheckingOnboarding] = useState(false) // Check for /admin path useEffect(() => { if (window.location.pathname === '/admin') { setRoute('admin') } }, []) // After auth resolves, check onboarding status useEffect(() => { if (!profile || !token) return if (route !== 'login' && route !== 'sent') return setCheckingOnboarding(true) fetch('/api/mnemonics', { headers: { Authorization: `Bearer ${token}` }, }) .then(r => r.json()) .then((mnemonics: Record) => { const count = Object.keys(mnemonics).length setRoute(count >= 12 ? 'game' : 'onboarding') }) .catch(() => setRoute('game')) .finally(() => setCheckingOnboarding(false)) }, [profile, token]) if (loading || checkingOnboarding) { return (

Loading quest...

) } return (
{route === 'login' && ( setRoute('sent')} /> )} {route === 'sent' && (

Check your email

We sent a magic link to your inbox. Click it to begin your quest!

)} {route === 'onboarding' && token && ( setRoute('game')} /> )} {route === 'game' && token && ( { logout(); setRoute('login') }} /> )} {route === 'admin' && }
) }