/** * @license * SPDX-License-Identifier: Apache-2.0 */ import React, { useEffect, Suspense } from 'react'; import { HelmetProvider } from 'react-helmet-async'; import ReactDOM from 'react-dom/client'; import { BrowserRouter as Router, Routes, Route, Navigate } from 'react-router-dom'; import './index.css'; import LandingPage from './components/LandingPage'; import CookieConsent from './components/CookieConsent'; import { LanguageProvider } from './src/i18n/LanguageContext'; import GeoRedirect from './src/i18n/GeoRedirect'; import LanguageRoute from './src/i18n/LanguageRoute'; // Observability — error tracking + product analytics import { initSentry, SentryErrorBoundary } from './src/observability/sentry'; import { initPosthog } from './src/observability/posthog'; // Fire observability init as early as possible. Both modules no-op if their // env vars are missing (dev + untrusted builds stay quiet). initSentry(); initPosthog(); // Lazy-loaded route components for code splitting const Login = React.lazy(() => import('./components/Login')); const Generator = React.lazy(() => import('./components/Generator')); const AdminPanel = React.lazy(() => import('./components/AdminPanel')); // New admin system (Phase 0/1/2/3) — replaces simple AdminPanel with nested RBAC routes const AdminLayout = React.lazy(() => import('./components/admin/AdminLayout')); const AdminDashboard = React.lazy(() => import('./components/admin/AdminDashboard')); const AdminUsers = React.lazy(() => import('./components/admin/AdminUsers')); const AdminRoleManagement = React.lazy(() => import('./components/admin/AdminRoleManagement')); const AdminAuditLog = React.lazy(() => import('./components/admin/AdminAuditLog')); const AdminBilling = React.lazy(() => import('./components/admin/AdminBilling')); const AdminMessages = React.lazy(() => import('./components/admin/AdminMessages')); const AdminAnalytics = React.lazy(() => import('./components/admin/AdminAnalytics')); const AdminContent = React.lazy(() => import('./components/admin/AdminContent')); const AdminPlaceholder = React.lazy(() => import('./components/admin/AdminPlaceholder')); const UserSettings = React.lazy(() => import('./components/UserSettings')); const LegalPages = React.lazy(() => import('./components/LegalPages')); const ContactPage = React.lazy(() => import('./components/ContactPage')); const BlogListPage = React.lazy(() => import('./components/BlogListPage')); const BlogPost = React.lazy(() => import('./components/BlogPost')); const NotFoundPage = React.lazy(() => import('./components/NotFoundPage')); const DemoGenerator = React.lazy(() => import('./components/DemoGenerator')); const GscCallback = React.lazy(() => import('./components/GscCallback')); const GscDashboard = React.lazy(() => import('./components/GscDashboard')); const FeaturePage = React.lazy(() => import('./components/FeaturePage')); const FeaturesListPage = React.lazy(() => import('./components/FeaturesListPage')); const AuditPage = React.lazy(() => import('./components/AuditPage')); // const ChatWidget = React.lazy(() => import('./components/ChatWidget')); function LoadingFallback() { return (
SEOKRATES hit an unexpected error. Our team has been notified. Refresh to try again.