import { lazy, Suspense } from "react"; import { ThemeProvider } from "next-themes"; import { Toaster } from "@/components/ui/toaster"; import { Toaster as Sonner } from "@/components/ui/sonner"; import { TooltipProvider } from "@/components/ui/tooltip"; import { QueryClientProvider } from "@tanstack/react-query"; import { BrowserRouter, Routes, Route, Navigate, useNavigate } from "react-router-dom"; import { AuthProvider } from "@/contexts/AuthContext"; import ProtectedRoute from "@/components/ProtectedRoute"; import StudentLayout from "@/components/StudentLayout"; import TeacherLayout from "@/components/TeacherLayout"; import AdminLmsLayout from "@/components/AdminLmsLayout"; import { queryClient } from "@/lib/query-client"; import { Button } from "@/components/ui/button"; import { ErrorBoundary } from "@/components/ErrorBoundary"; // ----------------------------------------------------------------------------- // Lazy-loaded route pages // ----------------------------------------------------------------------------- // Keeping the initial bundle small matters on slow networks / modest hardware // (many teachers/students open the app from school Wi-Fi). Each page below is // split into its own chunk and only fetched when the user hits the matching // route. The shell (layouts, providers, router) is still eagerly imported so // the first paint stays snappy. // Auth const Login = lazy(() => import("@/pages/Login")); const Register = lazy(() => import("@/pages/Register")); const EmailVerification = lazy(() => import("@/pages/EmailVerification")); const OnboardingWizard = lazy(() => import("@/pages/OnboardingWizard")); const ForgotPassword = lazy(() => import("@/pages/ForgotPassword")); const ResetPassword = lazy(() => import("@/pages/ResetPassword")); const ScoreVerification = lazy(() => import("@/pages/ScoreVerification")); // Original platform pages const AdminDashboard = lazy(() => import("@/pages/AdminDashboard")); const UsersPage = lazy(() => import("@/pages/UsersPage")); const EntitiesPage = lazy(() => import("@/pages/EntitiesPage")); const AssignmentsPage = lazy(() => import("@/pages/AssignmentsPage")); const ExamsListPage = lazy(() => import("@/pages/ExamsListPage")); const ExamStructuresPage = lazy(() => import("@/pages/ExamStructuresPage")); const RubricsPage = lazy(() => import("@/pages/RubricsPage")); const GenerationPage = lazy(() => import("@/pages/GenerationPage")); const ApprovalWorkflowsPage = lazy(() => import("@/pages/ApprovalWorkflowsPage")); const ClassroomsPage = lazy(() => import("@/pages/ClassroomsPage")); const StudentPerformancePage = lazy(() => import("@/pages/StudentPerformancePage")); const StatsCorporatePage = lazy(() => import("@/pages/StatsCorporatePage")); const RecordPage = lazy(() => import("@/pages/RecordPage")); const VocabularyPage = lazy(() => import("@/pages/VocabularyPage")); const GrammarPage = lazy(() => import("@/pages/GrammarPage")); const PaymentRecordPage = lazy(() => import("@/pages/PaymentRecordPage")); const TicketsPage = lazy(() => import("@/pages/TicketsPage")); const SettingsPage = lazy(() => import("@/pages/SettingsPage")); // Student pages const StudentDashboard = lazy(() => import("@/pages/student/StudentDashboard")); const StudentCourses = lazy(() => import("@/pages/student/StudentCourses")); const StudentCourseDetail = lazy(() => import("@/pages/student/StudentCourseDetail")); const StudentAssignments = lazy(() => import("@/pages/student/StudentAssignments")); const StudentGrades = lazy(() => import("@/pages/student/StudentGrades")); const StudentAttendance = lazy(() => import("@/pages/student/StudentAttendance")); const StudentTimetable = lazy(() => import("@/pages/student/StudentTimetable")); const StudentProfile = lazy(() => import("@/pages/student/StudentProfile")); // Adaptive learning pages const SubjectSelection = lazy(() => import("@/pages/student/SubjectSelection")); const DiagnosticTest = lazy(() => import("@/pages/student/DiagnosticTest")); const ProficiencyProfile = lazy(() => import("@/pages/student/ProficiencyProfile")); const LearningPlanPage = lazy(() => import("@/pages/student/LearningPlan")); const TopicLearning = lazy(() => import("@/pages/student/TopicLearning")); // Teacher pages const TeacherDashboard = lazy(() => import("@/pages/teacher/TeacherDashboard")); const TeacherCourses = lazy(() => import("@/pages/teacher/TeacherCourses")); const CourseBuilder = lazy(() => import("@/pages/teacher/CourseBuilder")); const TeacherAssignments = lazy(() => import("@/pages/teacher/TeacherAssignments")); const TeacherAssignmentDetail = lazy(() => import("@/pages/teacher/TeacherAssignmentDetail")); const TeacherAttendance = lazy(() => import("@/pages/teacher/TeacherAttendance")); const TeacherStudents = lazy(() => import("@/pages/teacher/TeacherStudents")); const TeacherTimetable = lazy(() => import("@/pages/teacher/TeacherTimetable")); const TeacherProfile = lazy(() => import("@/pages/teacher/TeacherProfile")); const TeacherLibrary = lazy(() => import("@/pages/teacher/TeacherLibrary")); const AdaptiveSettings = lazy(() => import("@/pages/teacher/AdaptiveSettings")); // Admin LMS pages const AdminLmsDashboard = lazy(() => import("@/pages/admin/AdminLmsDashboard")); const AdminCourses = lazy(() => import("@/pages/admin/AdminCourses")); const AdminStudents = lazy(() => import("@/pages/admin/AdminStudents")); const AdminTeachers = lazy(() => import("@/pages/admin/AdminTeachers")); const AdminBatches = lazy(() => import("@/pages/admin/AdminBatches")); const AdminBatchDetail = lazy(() => import("@/pages/admin/AdminBatchDetail")); const AdminTimetable = lazy(() => import("@/pages/admin/AdminTimetable")); const AdminReports = lazy(() => import("@/pages/admin/AdminReports")); const AdminSettings = lazy(() => import("@/pages/admin/AdminSettings")); const AdminProfileLms = lazy(() => import("@/pages/admin/AdminProfile")); const TaxonomyManager = lazy(() => import("@/pages/admin/TaxonomyManager")); const ResourceManager = lazy(() => import("@/pages/admin/ResourceManager")); const AcademicYearManager = lazy(() => import("@/pages/admin/AcademicYearManager")); const DepartmentManager = lazy(() => import("@/pages/admin/DepartmentManager")); const AdmissionList = lazy(() => import("@/pages/admin/AdmissionList")); const AdmissionDetail = lazy(() => import("@/pages/admin/AdmissionDetail")); const AdmissionRegisterPage = lazy(() => import("@/pages/admin/AdmissionRegisterPage")); const InstitutionalExamSessions = lazy(() => import("@/pages/admin/InstitutionalExamSessions")); const MarksheetManager = lazy(() => import("@/pages/admin/MarksheetManager")); const AdminStudentLeave = lazy(() => import("@/pages/admin/AdminStudentLeave")); const AdminFees = lazy(() => import("@/pages/admin/AdminFees")); const AdminLessons = lazy(() => import("@/pages/admin/AdminLessons")); const AdminGradebook = lazy(() => import("@/pages/admin/AdminGradebook")); const AdminStudentProgress = lazy(() => import("@/pages/admin/AdminStudentProgress")); const AdminLibrary = lazy(() => import("@/pages/admin/AdminLibrary")); const AdminActivities = lazy(() => import("@/pages/admin/AdminActivities")); const AdminFacilities = lazy(() => import("@/pages/admin/AdminFacilities")); const AdmissionApplication = lazy(() => import("@/pages/AdmissionApplication")); const SubjectRegistrationPage = lazy(() => import("@/pages/student/SubjectRegistrationPage")); // Courseware pages const CourseChapters = lazy(() => import("@/pages/teacher/CourseChapters")); const ChapterDetail = lazy(() => import("@/pages/teacher/ChapterDetail")); const AiWorkbench = lazy(() => import("@/pages/teacher/AiWorkbench")); const TeacherDiscussionBoard = lazy(() => import("@/pages/teacher/TeacherDiscussionBoard")); const TeacherAnnouncements = lazy(() => import("@/pages/teacher/TeacherAnnouncements")); const StudentChapterView = lazy(() => import("@/pages/student/StudentChapterView")); const StudentDiscussionBoard = lazy(() => import("@/pages/student/StudentDiscussionBoard")); const StudentAnnouncements = lazy(() => import("@/pages/student/StudentAnnouncements")); const StudentMessages = lazy(() => import("@/pages/student/StudentMessages")); const StudentJourney = lazy(() => import("@/pages/student/StudentJourney")); const AiEnglishCourse = lazy(() => import("@/pages/student/AiEnglishCourse")); const AiIeltsCourse = lazy(() => import("@/pages/student/AiIeltsCourse")); const ExamSession = lazy(() => import("@/pages/student/ExamSession")); const ExamStatus = lazy(() => import("@/pages/student/ExamStatus")); const ExamResults = lazy(() => import("@/pages/student/ExamResults")); const GapAnalysis = lazy(() => import("@/pages/student/GapAnalysis")); const CourseDelivery = lazy(() => import("@/pages/student/CourseDelivery")); const GradingQueue = lazy(() => import("@/pages/admin/GradingQueue")); const CourseConfig = lazy(() => import("@/pages/admin/CourseConfig")); const ModuleBuilder = lazy(() => import("@/pages/admin/ModuleBuilder")); const CourseProgress = lazy(() => import("@/pages/teacher/CourseProgress")); const PlacementBriefing = lazy(() => import("@/pages/student/PlacementBriefing")); const PlacementTest = lazy(() => import("@/pages/student/PlacementTest")); const PlacementResults = lazy(() => import("@/pages/student/PlacementResults")); const PlacementAccess = lazy(() => import("@/pages/student/PlacementAccess")); const FaqManager = lazy(() => import("@/pages/admin/FaqManager")); const NotificationRules = lazy(() => import("@/pages/admin/NotificationRules")); const ApprovalWorkflowConfig = lazy(() => import("@/pages/admin/ApprovalWorkflowConfig")); const RolesPermissions = lazy(() => import("@/pages/admin/RolesPermissions")); const AuthorityMatrix = lazy(() => import("@/pages/admin/AuthorityMatrix")); const UserRoles = lazy(() => import("@/pages/admin/UserRoles")); const BulkStudentUpload = lazy(() => import("@/pages/admin/BulkStudentUpload")); const CredentialDashboard = lazy(() => import("@/pages/admin/CredentialDashboard")); const AiEnglishQuality = lazy(() => import("@/pages/admin/AiEnglishQuality")); const AiEnglishTaxonomy = lazy(() => import("@/pages/admin/AiEnglishTaxonomy")); const AiIeltsValidation = lazy(() => import("@/pages/admin/AiIeltsValidation")); const AdaptiveDashboard = lazy(() => import("@/pages/admin/AdaptiveDashboard")); const AdaptiveStudentDetail = lazy(() => import("@/pages/admin/AdaptiveStudentDetail")); const LevelMappingConfig = lazy(() => import("@/pages/admin/LevelMappingConfig")); const WhiteLabelBranding = lazy(() => import("@/pages/admin/WhiteLabelBranding")); const ScoreApprovalQueue = lazy(() => import("@/pages/admin/ScoreApprovalQueue")); const ExamTemplateSelection = lazy(() => import("@/pages/admin/ExamTemplateSelection")); const IeltsExamCreate = lazy(() => import("@/pages/admin/IeltsExamCreate")); const IeltsSkillConfig = lazy(() => import("@/pages/admin/IeltsSkillConfig")); const IeltsContentPool = lazy(() => import("@/pages/admin/IeltsContentPool")); const IeltsExamValidation = lazy(() => import("@/pages/admin/IeltsExamValidation")); const CustomExamCreate = lazy(() => import("@/pages/admin/CustomExamCreate")); const ExamReviewQueue = lazy(() => import("@/pages/admin/ExamReviewQueue")); const ExamReviewDetail = lazy(() => import("@/pages/admin/ExamReviewDetail")); const AIPromptEditor = lazy(() => import("@/pages/admin/AIPromptEditor")); const AIFeedbackTriage = lazy(() => import("@/pages/admin/AIFeedbackTriage")); const PrivacyCenter = lazy(() => import("@/pages/PrivacyCenter")); const OfficialExamAccess = lazy(() => import("@/pages/OfficialExamAccess")); const FaqPage = lazy(() => import("@/pages/FaqPage")); const NotFound = lazy(() => import("@/pages/NotFound")); function StudentSubscriptionPlaceholder() { const navigate = useNavigate(); return (
Subscription checkout will be available here.