- All hello@cohorta.ai-impress.com → hello@ai-impress.com - All AImpress LTD instances now link to https://ai-impress.com/ - Cookie consent banner (bottom sheet, accept/decline, localStorage) - Hero background: grid → wavy SVG lines - Fix credits math: 50cr = 5 personas × 2cr + 1 session × 40cr (not 25 personas) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
99 lines
4.1 KiB
TypeScript
Executable file
99 lines
4.1 KiB
TypeScript
Executable file
|
|
import { Toaster } from "@/components/ui/sonner";
|
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom";
|
|
import Index from "./pages/Index";
|
|
import NotFound from "./pages/NotFound";
|
|
import About from "./pages/About";
|
|
import Privacy from "./pages/legal/Privacy";
|
|
import Terms from "./pages/legal/Terms";
|
|
import Cookies from "./pages/legal/Cookies";
|
|
import Gdpr from "./pages/legal/Gdpr";
|
|
import SyntheticUsers from "./pages/SyntheticUsers";
|
|
import FocusGroups from "./pages/FocusGroups";
|
|
import FocusGroupSession from "./pages/FocusGroupSession";
|
|
import Dashboard from "./pages/Dashboard";
|
|
import PersonaProfile from "./components/persona/PersonaProfile";
|
|
import Login from "./pages/Login";
|
|
import Register from "./pages/Register";
|
|
import VerifyEmail from "./pages/VerifyEmail";
|
|
import Admin from "./pages/Admin";
|
|
import MyUsage from "./pages/MyUsage";
|
|
import Billing from "./pages/Billing";
|
|
import ProtectedRoute from "./components/ProtectedRoute";
|
|
import AdminRoute from "./components/admin/AdminRoute";
|
|
import { AuthProvider } from "./contexts/AuthContext";
|
|
import { NavigationProvider } from "./contexts/NavigationContext";
|
|
import { WebSocketProvider } from "./contexts/WebSocketContextNew";
|
|
import PublicLayout from "./components/layout/PublicLayout";
|
|
import AppLayout from "./components/layout/AppLayout";
|
|
import CookieBanner from "./components/CookieBanner";
|
|
import "./styles/backButton.css";
|
|
|
|
const queryClient = new QueryClient();
|
|
|
|
const App = () => (
|
|
<QueryClientProvider client={queryClient}>
|
|
<BrowserRouter basename={import.meta.env.BASE_URL}>
|
|
<AuthProvider>
|
|
<WebSocketProvider>
|
|
<NavigationProvider>
|
|
<TooltipProvider>
|
|
<Toaster />
|
|
<CookieBanner />
|
|
<Routes>
|
|
{/* Landing page — with full header + footer */}
|
|
<Route element={<PublicLayout />}>
|
|
<Route path="/" element={<Index />} />
|
|
<Route path="*" element={<NotFound />} />
|
|
</Route>
|
|
|
|
{/* Legal + about — standalone (no app header) */}
|
|
<Route path="/about" element={<About />} />
|
|
<Route path="/privacy" element={<Privacy />} />
|
|
<Route path="/terms" element={<Terms />} />
|
|
<Route path="/cookies" element={<Cookies />} />
|
|
<Route path="/gdpr" element={<Gdpr />} />
|
|
|
|
{/* Auth pages — standalone, no header */}
|
|
<Route path="/login" element={<Login />} />
|
|
<Route path="/register" element={<Register />} />
|
|
<Route path="/verify-email" element={<VerifyEmail />} />
|
|
|
|
{/* App pages — with app header, no footer */}
|
|
<Route element={
|
|
<ProtectedRoute>
|
|
<AppLayout />
|
|
</ProtectedRoute>
|
|
}>
|
|
<Route path="/dashboard" element={<Dashboard />} />
|
|
<Route path="/synthetic-users" element={<SyntheticUsers />} />
|
|
<Route path="/synthetic-users/:id" element={<PersonaProfile />} />
|
|
<Route path="/personas/:id" element={<PersonaProfile />} />
|
|
<Route path="/focus-groups" element={<FocusGroups />} />
|
|
<Route path="/focus-groups/:id" element={<FocusGroupSession />} />
|
|
<Route path="/billing" element={<Billing />} />
|
|
<Route path="/usage" element={<MyUsage />} />
|
|
</Route>
|
|
|
|
{/* Admin */}
|
|
<Route path="/admin" element={
|
|
<AdminRoute>
|
|
<AppLayout>
|
|
<Admin />
|
|
</AppLayout>
|
|
</AdminRoute>
|
|
} />
|
|
|
|
<Route path="/old-path" element={<Navigate to="/" replace />} />
|
|
</Routes>
|
|
</TooltipProvider>
|
|
</NavigationProvider>
|
|
</WebSocketProvider>
|
|
</AuthProvider>
|
|
</BrowserRouter>
|
|
</QueryClientProvider>
|
|
);
|
|
|
|
export default App;
|