Initial commit: Gravl MVP med onboarding

This commit is contained in:
2026-01-31 23:33:20 +01:00
commit 13ade5e903
21 changed files with 5157 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'
import { AuthProvider, useAuth } from './context/AuthContext'
import App from './App.jsx'
import RegisterPage from './pages/RegisterPage'
import LoginPage from './pages/LoginPage'
import OnboardingWizard from './pages/OnboardingWizard'
import './index.css'
function ProtectedRoute({ children, requireOnboarding = true }) {
const { user, loading } = useAuth();
if (loading) return <div className="app loading"><div className="spinner"></div></div>;
if (!user) return <Navigate to="/login" />;
if (requireOnboarding && !user.onboarding_complete) return <Navigate to="/onboarding" />;
return children;
}
function AuthRoute({ children }) {
const { user, loading } = useAuth();
if (loading) return <div className="app loading"><div className="spinner"></div></div>;
if (user?.onboarding_complete) return <Navigate to="/" />;
if (user) return <Navigate to="/onboarding" />;
return children;
}
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<BrowserRouter>
<AuthProvider>
<Routes>
<Route path="/register" element={<AuthRoute><RegisterPage /></AuthRoute>} />
<Route path="/login" element={<AuthRoute><LoginPage /></AuthRoute>} />
<Route path="/onboarding" element={<ProtectedRoute requireOnboarding={false}><OnboardingWizard /></ProtectedRoute>} />
<Route path="/*" element={<ProtectedRoute><App /></ProtectedRoute>} />
</Routes>
</AuthProvider>
</BrowserRouter>
</React.StrictMode>,
)