import { Toaster } from "@/components/ui/toaster"; import { Toaster as Sonner } from "@/components/ui/sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { BrowserRouter, Routes, Route, Navigate, useLocation, ScrollRestoration, } from "react-router-dom"; import { useEffect, lazy, Suspense, useCallback } from "react"; import ProtectedRoute from "./components/ProtectedRoute"; import { AuthProvider } from "./hooks/useAuth"; import { AdSettingsProvider } from "./hooks/useAdSettings"; import DemoDataProvider from "@/components/DemoDataProvider"; import SitemapRoute from "./components/SitemapRoute"; import { initGA, trackPageView } from "./lib/analytics"; import ErrorBoundary from "./components/ErrorBoundary"; import { HelmetProvider } from 'react-helmet-async'; import { ensureAdSenseScript } from "@/components/AdSenseSlot"; /* ─── Eager load Index (LCP critical) ─── */ import Index from "./pages/Index"; /* ─── Lazy load all other routes ─── */ const BlogPage = lazy(() => import("./pages/BlogPage")); const SingleBlogPost = lazy(() => import("./pages/SingleBlogPost")); const Contact = lazy(() => import("./pages/Contact")); const AdminLogin = lazy(() => import("./pages/AdminLogin")); const AdminDashboard = lazy(() => import("./pages/AdminDashboard")); const NotFound = lazy(() => import("./pages/NotFound")); const Error500 = lazy(() => import("./pages/Error500")); const PrivacyPolicy = lazy(() => import("./pages/PrivacyPolicy")); const TermsConditions = lazy(() => import("./pages/TermsConditions")); const AdTestPage = lazy(() => import("./pages/AdTestPage")); const AdsManagerTest = lazy(() => import("./test/AdsManagerTest")); const About = lazy(() => import("./pages/About")); const FAQ = lazy(() => import("./pages/FAQ")); const BusinessWebapps = lazy(() => import("./pages/BusinessWebapps")); const BrandDesign = lazy(() => import("./pages/services/BrandDesign")); const WebDevelopment = lazy(() => import("./pages/services/WebDevelopment")); const SEOService = lazy(() => import("./pages/services/SEOService")); const MobileAppDevelopment = lazy(() => import("./pages/services/MobileAppDevelopment")); const AnalyticsService = lazy(() => import("./pages/services/AnalyticsService")); const DigitalStrategy = lazy(() => import("./pages/services/DigitalStrategy")); const AIAutomationService = lazy(() => import("./pages/services/AIAutomationService")); const WhatsAppMarketingService = lazy(() => import("./pages/services/WhatsAppMarketingService")); const Services = lazy(() => import("./pages/Services")); const ServiceLocationsIndex = lazy(() => import("./pages/ServiceLocationsIndex")); const SecureDownload = lazy(() => import("./pages/SecureDownload")); const ServiceLocationRouter = lazy(() => import("./pages/ServiceLocationRouter")); const HierarchicalRouter = lazy(() => import("./pages/HierarchicalRouter")); const ServiceLocationPage = lazy(() => import("./pages/services/ServiceLocationPage")); const BudgetCalculator = lazy(() => import("./components/BudgetCalculator")); const ServiceDetailPage = lazy(() => import("./pages/services/ServiceDetailPage")); const Shop = lazy(() => import("./pages/Shop")); const ShopProduct = lazy(() => import("./pages/ShopProduct")); const DocumentPage = lazy(() => import("./pages/DocumentPage")); const CoursesPage = lazy(() => import("./pages/CoursesPage")); const CourseDetailPage = lazy(() => import("./pages/CourseDetailPage")); const CourseLogin = lazy(() => import("./pages/CourseLogin")); const MyCoursesPage = lazy(() => import("./pages/MyCoursesPage")); const LearnCoursePage = lazy(() => import("./pages/LearnCoursePage")); /* ─── Lazy load Tools pages ─── */ const ToolsHub = lazy(() => import("./pages/tools/ToolsHub")); const EmiCalculator = lazy(() => import("./pages/tools/EmiCalculator")); const SipCalculator = lazy(() => import("./pages/tools/SipCalculator")); const GstCalculator = lazy(() => import("./pages/tools/GstCalculator")); const IncomeTaxCalculator = lazy(() => import("./pages/tools/IncomeTaxCalculator")); const SalaryCalculator = lazy(() => import("./pages/tools/SalaryCalculator")); const PercentageCalculator = lazy(() => import("./pages/tools/PercentageCalculator")); const AgeCalculator = lazy(() => import("./pages/tools/AgeCalculator")); const BmiCalculator = lazy(() => import("./pages/tools/BmiCalculator")); const GradeCalculator = lazy(() => import("./pages/tools/GradeCalculator")); const UnitConverter = lazy(() => import("./pages/tools/UnitConverter")); const WordCounter = lazy(() => import("./pages/tools/WordCounter")); const CaseConverter = lazy(() => import("./pages/tools/CaseConverter")); const LoremIpsum = lazy(() => import("./pages/tools/LoremIpsum")); const HindiFontConverter = lazy(() => import("./pages/tools/writing/HindiFontConverter")); const PlagiarismChecker = lazy(() => import("./pages/tools/writing/PlagiarismChecker")); const Paraphraser = lazy(() => import("./pages/tools/writing/Paraphraser")); const ImageCompressor = lazy(() => import("./pages/tools/image/ImageCompressor")); const ImageResizer = lazy(() => import("./pages/tools/image/ImageResizer")); const FormatConverter = lazy(() => import("./pages/tools/image/FormatConverter")); const PhotoToPdf = lazy(() => import("./pages/tools/image/PhotoToPdf")); const PassportPhotoMaker = lazy(() => import("./pages/tools/image/PassportPhotoMaker")); const BackgroundRemover = lazy(() => import("./pages/tools/image/BackgroundRemover")); const QrCodeGenerator = lazy(() => import("./pages/tools/QrCodeGenerator")); const PasswordGenerator = lazy(() => import("./pages/tools/PasswordGenerator")); const Base64Tool = lazy(() => import("./pages/tools/Base64Tool")); const JsonFormatter = lazy(() => import("./pages/tools/JsonFormatter")); const ColorPicker = lazy(() => import("./pages/tools/ColorPicker")); const TimezoneConverter = lazy(() => import("./pages/tools/TimezoneConverter")); const WhatsAppGenerator = lazy(() => import("./pages/tools/WhatsAppGenerator")); const PFCalculator = lazy(() => import("./pages/tools/PFCalculator")); const GratuityCalculator = lazy(() => import("./pages/tools/GratuityCalculator")); const CtcCalculator = lazy(() => import("./pages/tools/CtcCalculator")); const StudentIdCard = lazy(() => import("./pages/tools/StudentIdCard")); const YouTubeThumbnailDownloader = lazy(() => import("./pages/tools/marketing/YouTubeThumbnailDownloader")); const UTMLinkBuilder = lazy(() => import("./pages/tools/marketing/UTMLinkBuilder")); const PromptGenerator = lazy(() => import("./pages/tools/ai/PromptGenerator")); const AITextHumanizer = lazy(() => import("./pages/tools/ai/AITextHumanizer")); const FreelanceRateCalculator = lazy(() => import("./pages/tools/business/FreelanceRateCalculator")); const InvoiceGenerator = lazy(() => import("./pages/tools/business/InvoiceGenerator")); const SvgToJsx = lazy(() => import("./pages/tools/developer/SvgToJsx")); const OpenGraphPreview = lazy(() => import("./pages/tools/developer/OpenGraphPreview")); const PomodoroTimer = lazy(() => import("./pages/tools/productivity/PomodoroTimer")); const WheelOfNames = lazy(() => import("./pages/tools/productivity/WheelOfNames")); /* ─── Lazy Ad Provider ─── */ const LazyAdConfigProvider = lazy(() => import("@/contexts/AdConfigContext").then(m => ({ default: m.AdConfigProvider })) ); /* ─── Query Client ─── */ const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 10 * 60 * 1000, // 10 min gcTime: 30 * 60 * 1000, // 30 min retry: 1, refetchOnWindowFocus: false, networkMode: 'offlineFirst', }, }, }); /* ─── Premium Page Loader ─── */ const PageLoader = () => (
Loading...