cohorta/src/App.tsx
Vadym Samoilenko b7065cfe78 fix: correct emails, AImpress LTD links, cookie banner, wavy bg, credits math
- All hello@cohorta.ai-impress.comhello@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>
2026-05-23 21:20:43 +01:00

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;