From a10e9c9c6a4b47289c63a77c3cef798bd77046f0 Mon Sep 17 00:00:00 2001 From: MrPiglr Date: Thu, 5 Feb 2026 21:19:24 +0000 Subject: [PATCH] feat: proper routing - landing at /, app at /app --- src/frontend/App.jsx | 98 +++++++++++++++++++++++---- src/frontend/contexts/AuthContext.jsx | 16 +++++ 2 files changed, 101 insertions(+), 13 deletions(-) diff --git a/src/frontend/App.jsx b/src/frontend/App.jsx index 91e2f0f..cec6cf5 100644 --- a/src/frontend/App.jsx +++ b/src/frontend/App.jsx @@ -1,33 +1,105 @@ import React from 'react'; +import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; import { AuthProvider, useAuth } from './contexts/AuthContext'; import { MessagingProvider } from './contexts/MessagingContext'; import MainLayout from './mockup/MainLayout'; +import LandingPage from './mockup/pages/LandingPage'; +import LoginPage from './mockup/pages/LoginPage'; +import RegisterPage from './mockup/pages/RegisterPage'; +import AboutPage from './mockup/pages/AboutPage'; +import FeaturesPage from './mockup/pages/FeaturesPage'; import './index.css'; +import './mockup/mockup.css'; /** - * Main application component - * AeThex Connect - Discord-style communication platform + * Protected route - requires authentication */ -function AppContent() { - const { user, loading } = useAuth(); - +function ProtectedRoute({ children }) { + const { isAuthenticated, loading } = useAuth(); + if (loading) { return ( -
-
+
+
+ Loading...
); } + + return isAuthenticated ? children : ; +} - return ; +/** + * Public route - redirects to app if logged in + */ +function PublicRoute({ children }) { + const { isAuthenticated, loading } = useAuth(); + + if (loading) { + return ( +
+
+ Loading... +
+ ); + } + + return !isAuthenticated ? children : ; +} + +/** + * Main app with routing + */ +function AppRoutes() { + const { login, register, logout } = useAuth(); + + return ( + + {/* Marketing pages - public */} + } /> + } /> + } /> + + {/* Auth pages */} + + + + } /> + + + + } /> + + {/* Connect App - protected */} + + + + + + } /> + + + + + + } /> + + {/* Catch all - redirect to home */} + } /> + + ); } export default function App() { return ( - - - - - + + + + + ); } diff --git a/src/frontend/contexts/AuthContext.jsx b/src/frontend/contexts/AuthContext.jsx index e4ab73c..dfafc2f 100644 --- a/src/frontend/contexts/AuthContext.jsx +++ b/src/frontend/contexts/AuthContext.jsx @@ -49,6 +49,21 @@ export function AuthProvider({ children }) { return { success: true }; }; + const register = async (email, password, metadata = {}) => { + const { data, error } = await supabase.auth.signUp({ + email, + password, + options: { + data: metadata + } + }); + if (error) { + return { success: false, error: error.message }; + } + setUser(data.user); + return { success: true }; + }; + const logout = async () => { await supabase.auth.signOut(); setUser(null); @@ -62,6 +77,7 @@ export function AuthProvider({ children }) { user, loading, login, + register, logout, updateUser, isAuthenticated: !!user