File size: 2,880 Bytes
5a264f5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import { Routes, Route, Navigate } from 'react-router-dom'
import { AuthProvider, useAuth } from './context/AuthContext'
import { ThemeProvider } from './context/ThemeContext'
import AuthPage      from './pages/AuthPage'
import LandingPage   from './pages/LandingPage'
import Layout        from './components/Layout'
import DashboardPage from './pages/DashboardPage'
import AssessPage    from './pages/AssessPage'
import HistoryPage   from './pages/HistoryPage'
import ProfilePage   from './pages/ProfilePage'
import BreathePage      from './pages/BreathePage'
import BoxBreathingPage from './pages/BoxBreathingPage'
import GratitudePage    from './pages/GratitudePage'
import TodoPage      from './pages/TodoPage'

function PrivateRoute({ children }) {
  const { user, loading } = useAuth()
  if (loading) return <div className="full-loader"><div className="spinner" /></div>
  return user ? children : <Navigate to="/auth" replace />
}

function PublicRoute({ children }) {
  const { user, loading } = useAuth()
  if (loading) return <div className="full-loader"><div className="spinner" /></div>
  return user ? <Navigate to="/app/breathe" replace /> : children
}

export default function App() {
  return (
    <ThemeProvider>
      <AuthProvider>
      <Routes>
        {/* Public landing */}
        <Route path="/"     element={<PublicRoute><LandingPage /></PublicRoute>} />
        <Route path="/auth" element={<PublicRoute><AuthPage /></PublicRoute>} />

        {/* Breathe hub — full-screen, no sidebar */}
        <Route path="/app/breathe"     element={<PrivateRoute><BreathePage /></PrivateRoute>} />
        <Route path="/app/breathe/box" element={<PrivateRoute><BoxBreathingPage /></PrivateRoute>} />

        {/* Protected app shell (with sidebar) */}
        <Route path="/app" element={<PrivateRoute><Layout /></PrivateRoute>}>
          <Route index            element={<Navigate to="breathe" replace />} />
          <Route path="dashboard" element={<DashboardPage />} />
          <Route path="assess"    element={<AssessPage />} />
          <Route path="history"   element={<HistoryPage />} />
          <Route path="profile"   element={<ProfilePage />} />
          <Route path="gratitude" element={<GratitudePage />} />
          <Route path="todo"      element={<TodoPage />} />
        </Route>

        {/* Legacy short URLs — redirect logged-in users straight to app */}
        <Route path="/dashboard" element={<PrivateRoute><Navigate to="/app/dashboard" replace /></PrivateRoute>} />
        <Route path="/assess"    element={<PrivateRoute><Navigate to="/app/assess"    replace /></PrivateRoute>} />
        <Route path="/history"   element={<PrivateRoute><Navigate to="/app/history"   replace /></PrivateRoute>} />

        <Route path="*" element={<Navigate to="/" replace />} />
      </Routes>
    </AuthProvider>    </ThemeProvider>  )
}