import { Suspense, lazy, useEffect } from "react"; import { Routes, Route, Navigate } from "react-router-dom"; import { HelmetProvider } from "react-helmet-async"; import AppLayout from "./layout/AppLayout"; import { ScrollToTop } from "./components/common/ScrollToTop"; import ProtectedRoute from "./components/auth/ProtectedRoute"; import AdminRoute from "./components/auth/AdminRoute"; import GlobalErrorDisplay from "./components/common/GlobalErrorDisplay"; import LoadingStateMonitor from "./components/common/LoadingStateMonitor"; import { PageProvider } from "./context/PageContext"; import { useAuthStore } from "./store/authStore"; import { useModuleStore } from "./store/moduleStore"; import SuspenseLoader from "./components/common/SuspenseLoader"; // Auth pages - loaded immediately (needed for login) import SignIn from "./pages/AuthPages/SignIn"; import SignUp from "./pages/AuthPages/SignUp"; // NOTE: SignUpPK removed - country selection now via dropdown in main signup form import Payment from "./pages/Payment"; import NotFound from "./pages/OtherPage/NotFound"; // Legal pages - Public const Terms = lazy(() => import("./pages/legal/Terms")); const Privacy = lazy(() => import("./pages/legal/Privacy")); // Auth pages - Lazy loaded (password reset, verification, etc.) const ForgotPassword = lazy(() => import("./pages/AuthPages/ForgotPassword")); const ResetPassword = lazy(() => import("./pages/AuthPages/ResetPassword")); const VerifyEmail = lazy(() => import("./pages/AuthPages/VerifyEmail")); const Unsubscribe = lazy(() => import("./pages/AuthPages/Unsubscribe")); // Lazy load all other pages - only loads when navigated to const Home = lazy(() => import("./pages/Dashboard/Home")); // Planner Module - Lazy loaded const Keywords = lazy(() => import("./pages/Planner/Keywords")); const Clusters = lazy(() => import("./pages/Planner/Clusters")); const ClusterDetail = lazy(() => import("./pages/Planner/ClusterDetail")); const Ideas = lazy(() => import("./pages/Planner/Ideas")); // Writer Module - Lazy loaded const Tasks = lazy(() => import("./pages/Writer/Tasks")); const Content = lazy(() => import("./pages/Writer/Content")); const ContentView = lazy(() => import("./pages/Writer/ContentView")); const Images = lazy(() => import("./pages/Writer/Images")); const Review = lazy(() => import("./pages/Writer/Review")); const Approved = lazy(() => import("./pages/Writer/Approved")); // Automation Module - Lazy loaded const AutomationPage = lazy(() => import("./pages/Automation/AutomationPage")); const AutomationOverview = lazy(() => import("./pages/Automation/AutomationOverview")); const AutomationRunDetail = lazy(() => import("./pages/Automation/AutomationRunDetail")); const PipelineSettings = lazy(() => import("./pages/Automation/PipelineSettings")); // Linker Module - Lazy loaded const LinkerContentList = lazy(() => import("./pages/Linker/ContentList")); // Optimizer Module - Lazy loaded const OptimizerContentSelector = lazy(() => import("./pages/Optimizer/ContentSelector")); const AnalysisPreview = lazy(() => import("./pages/Optimizer/AnalysisPreview")); // Thinker Module - Lazy loaded (Admin Only) const Prompts = lazy(() => import("./pages/Thinker/Prompts")); const AuthorProfiles = lazy(() => import("./pages/Thinker/AuthorProfiles")); const ThinkerProfile = lazy(() => import("./pages/Thinker/Profile")); const Strategies = lazy(() => import("./pages/Thinker/Strategies")); const ImageTesting = lazy(() => import("./pages/Thinker/ImageTesting")); // Billing Module - Lazy loaded const Credits = lazy(() => import("./pages/Billing/Credits")); const Transactions = lazy(() => import("./pages/Billing/Transactions")); const Usage = lazy(() => import("./pages/Billing/Usage")); const CreditsAndBilling = lazy(() => import("./pages/Settings/CreditsAndBilling")); const PlansAndBillingPage = lazy(() => import("./pages/account/PlansAndBillingPage")); const AccountSettingsPage = lazy(() => import("./pages/account/AccountSettingsPage")); // TeamManagementPage - Now integrated as tab in AccountSettingsPage const UsageAnalyticsPage = lazy(() => import("./pages/account/UsageAnalyticsPage")); const UsageDashboardPage = lazy(() => import("./pages/account/UsageDashboardPage")); const ContentSettingsPage = lazy(() => import("./pages/account/ContentSettingsPage")); const NotificationsPage = lazy(() => import("./pages/account/NotificationsPage")); // Reference Data - Lazy loaded const SeedKeywords = lazy(() => import("./pages/Reference/SeedKeywords")); const ReferenceIndustries = lazy(() => import("./pages/Reference/Industries")); // Setup Pages - Lazy loaded const IndustriesSectorsKeywords = lazy(() => import("./pages/Setup/IndustriesSectorsKeywords")); // Settings - Lazy loaded const GeneralSettings = lazy(() => import("./pages/Settings/General")); // ProfileSettingsPage - Now integrated as tab in AccountSettingsPage const Users = lazy(() => import("./pages/Settings/Users")); const Subscriptions = lazy(() => import("./pages/Settings/Subscriptions")); const SystemSettings = lazy(() => import("./pages/Settings/System")); const AccountSettings = lazy(() => import("./pages/Settings/Account")); const Plans = lazy(() => import("./pages/Settings/Plans")); const Industries = lazy(() => import("./pages/Settings/Industries")); const Integration = lazy(() => import("./pages/Settings/Integration")); const Publishing = lazy(() => import("./pages/Settings/Publishing")); const Sites = lazy(() => import("./pages/Settings/Sites")); // ImportExport - Removed from UI, individual pages have their own import/export // Sites - Lazy loaded const SiteList = lazy(() => import("./pages/Sites/List")); const SiteDashboard = lazy(() => import("./pages/Sites/Dashboard")); const SiteContent = lazy(() => import("./pages/Sites/Content")); const SiteContentStructure = lazy(() => import("./pages/Sites/ContentStructure")); const PageManager = lazy(() => import("./pages/Sites/PageManager")); const PostEditor = lazy(() => import("./pages/Sites/PostEditor")); const SiteSettings = lazy(() => import("./pages/Sites/Settings")); const SyncDashboard = lazy(() => import("./pages/Sites/SyncDashboard")); const DeploymentPanel = lazy(() => import("./pages/Sites/DeploymentPanel")); // Publisher Module - Lazy loaded const ContentCalendar = lazy(() => import("./pages/Publisher/ContentCalendar")); // PublishSettings removed - now integrated into Site Settings > Automation tab // Setup - Lazy loaded const SetupWizard = lazy(() => import("./pages/Setup/SetupWizard")); // Help - Lazy loaded const Help = lazy(() => import("./pages/Help/Help")); // Components - Lazy loaded const Components = lazy(() => import("./pages/Components")); // UI Elements - Lazy loaded (Design System Reference) const UIElements = lazy(() => import("./pages/UIElements")); export default function App() { const { isAuthenticated } = useAuthStore(); const { loadModuleSettings } = useModuleStore(); // Load global module settings immediately on mount (public endpoint, no auth required) useEffect(() => { loadModuleSettings(); }, [loadModuleSettings]); return ( }> {/* Auth Routes - Public */} } /> } /> {/* NOTE: /signup/pk removed - country selection now via dropdown in signup form */} {/* Redirect old PK route to main signup */} } /> } /> {/* Legal Pages - Public */} } /> } /> {/* Auth Flow Pages - Public */} } /> } /> } /> } /> {/* Protected Routes - Require Authentication */} } > {/* Dashboard */} } /> {/* Planner Module - Redirect dashboard to keywords */} } /> } /> } /> } /> } /> {/* Writer Module - Redirect dashboard to tasks */} } /> } /> {/* Writer Content Routes - Order matters: list route must come before detail route */} } /> {/* Content detail view - matches /writer/content/:id (e.g., /writer/content/10) */} } /> } /> } /> } /> } /> {/* Legacy route - redirect published to approved */} } /> {/* Automation Module */} } /> } /> } /> {/* automation/settings removed - now in Site Settings > Automation tab */} } /> } /> {/* Publisher Module - Content Calendar */} } /> } /> {/* Linker Module - Redirect dashboard to content */} } /> } /> {/* Optimizer Module - Redirect dashboard to content */} } /> } /> } /> {/* Thinker Module - Admin Only (Prompts & AI Configuration) */} } /> } /> } /> } /> } /> } /> {/* Billing Module */} } /> } /> } /> } /> } /> {/* Account Section - Billing & Management Pages */} {/* Notifications */} } /> {/* Account Settings - with sub-routes for sidebar navigation */} } /> } /> } /> {/* Legacy redirect - Team is now a tab in Account Settings */} } /> {/* Plans & Billing - with sub-routes for sidebar navigation */} } /> } /> } /> } /> {/* Usage Dashboard - Single comprehensive page with integrated logs */} } /> {/* Legacy routes redirect to dashboard */} } /> } /> } /> } /> {/* Content Settings - with sub-routes for sidebar navigation */} } /> } /> } /> {/* Reference Data */} } /> } /> {/* Keywords Library - primary route */} } /> {/* Legacy redirects */} } /> } /> {/* Settings */} {/* Legacy redirect - Profile is now a tab in Account Settings */} } /> } /> } /> } /> } /> } /> } /> } /> {/* AI Models Settings - Admin Only */} } /> } /> } /> {/* Legacy redirect - Import/Export removed, redirect to dashboard */} } /> {/* Sites Management */} } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> {/* Legacy redirect - Publishing Queue moved to Content Calendar */} } /> } /> } /> {/* Help */} } /> {/* Components (Showcase Page) */} } /> {/* UI Elements (Design System - Non-indexable) */} } /> {/* Fallback Route */} } /> ); }