Pages Overview

96 page components in frontend/src/pages/, organized by functional area. All pages use lazy loading via React.lazy() + Suspense with a shared LoadingFallback.

Page Areas

Auth (11 pages)

PagePathPurpose
Login/loginEmail/password + SSO login
Signup/signupNew user registration
ForgotPassword/forgot-passwordPassword reset request
ResetPassword/reset-passwordPassword reset form
MagicLinkRequest/magic-linkPasswordless login request
MagicLinkVerify/magic-link/verifyMagic link verification
MagicLinkSuccess/magic-link/successMagic link confirmation
PhoneNumberVerify/phone/verifyPhone 2FA verification
PhoneNumberSuccess/phone/successPhone verification success
AuthCallback/auth/callbackOAuth redirect handler
TwoFactorVerify/2faTOTP verification

Core Business (5 pages)

PageRouteRelated Entity
Buildings/buildingsBuildings
BuildingDetail/buildings/:idBuildings, Building Components
ProjectDetail/buildings/:buildingId/projects/:projectIdProjects, Scenarios
ScenarioDetail.../scenarios/:scenarioIdScenarios, Measures
FundingApplications/funding-applicationsFunding Applications

CRM (6 pages)

PageEntity
ContactsPage / ContactDetailPageContacts
CompaniesPage / CompanyDetailPageCompanies
LeadsPage / LeadDetailPageLeads

Admin (16+ pages)

UsersAdmin, TeamDepartments, FundingProgramsAdmin, FundingProgramDetail, FormBuilder, FormsAdmin, FormFieldsAdmin, DocumentTemplatesAdmin, PdfTemplatesList, TypologyUValuesAdmin, TypologyUValueDetail, AdminProducts, AdminProductDetail, HubSpotAdmin, Admin Dashboard, RejectionReasonsSettings.

See RBAC Authorization for admin route protection.

Internal (10+ pages)

DocumentObtaining suite (dashboard, sets, documents, collections, detail), DocumentReviewDetail, WorkflowPage, TeamPage, Changelog, EmailTemplatesSettings, RejectionReasonsSettings.

See Document Obtaining, Document Review, Workflows.

Portal (4 pages)

PageAuth Method
PortalDashboardToken-based
PortalFormPageToken-based
PortalAppointmentViewAppointment token
PortalTokenErrorPagePublic

See Portal for token-based authentication flow.

Profile (6 sections)

Profile page with tabbed sections: PersonalInfo, Password, TwoFactor, Responsibility, DeleteAccount, plus a parent Profile shell.

Utility Pages

Dashboard (landing), FilesDemo, PdfExport, FloorPlanDataCapture/.

Code Splitting

All pages are lazy-loaded in frontend/src/App.tsx:

const BuildingDetail = lazy(() => import('./pages/BuildingDetail'));

Wrapped in <Suspense fallback={<LoadingFallback />}> at the router level.