Pages Overview
71 lazy-loaded page components routed in frontend/src/App.tsx (as of 2026-06), backed by 167 .tsx files under frontend/src/pages/ — the file count includes co-located sections, dialogs, and useFooState hooks per the Component Decomposition pattern. All pages use lazy loading via React.lazy() + Suspense with a shared LoadingFallback.
Page Areas
Auth (11 pages, public)
| Page | Path | Purpose |
|---|---|---|
| Login | /login | Email/password + SSO login (all @renewa.de emails route to SSO) |
| Signup | /signup | New user registration |
| CheckEmail | /check-email | Email verification prompt |
| VerifyEmail | /verify-email | Email verification handler |
| ForgotPassword | /forgot-password | Password reset request |
| ResetPassword | /reset-password | Password reset form |
| PhoneNumberInput | /phone-number | Phone number entry for verification |
| PhoneVerification | /phone-verification | Phone code verification |
| MagicLinkRequest | /magic-link | Passwordless login request |
| MagicLinkVerify | /auth/magic-link | Magic link verification |
| AuthCallback | /auth/callback | OAuth redirect handler |
Core Business
| Page | Route | Related Entity |
|---|---|---|
| Buildings | /buildings | Buildings |
| BuildingDetail | /buildings/:id | Buildings, Building Components |
| ProjectDetail | /buildings/:buildingId/projects/:projectId | Projects, Scenarios |
| ScenarioDetail | .../scenarios/:scenarioId | Scenarios, Measures |
| FundingApplications | /funding-applications | Funding Applications |
| Quotes | /quotes/* | Quotes |
BuildingDetail is the building dashboard: tabbed via useTabState (overview, timeline, participants, revenue, protocols, plus coming-soon stubs), composed from pages/dashboard/ (58 files: construction/, process/, revenue/, audit/, header/). The protocols tab hosts site protocols (PR#1969) with PDF export (PR#1994).
The index route / redirects via HomeRedirect → getDefaultRoute() (components/sidebar/sidebarService.ts); the legacy pages/Dashboard.tsx landing page is no longer routed.
CRM (6 pages)
| Page | Entity |
|---|---|
| ContactsPage / ContactDetailPage | Contacts |
| CompaniesPage / CompanyDetailPage | Companies |
| LeadsPage / LeadDetailPage | Leads |
Admin (/admin/*, ~25 routed pages)
SettingsOverview (/admin/settings), TeamAdmin (/admin/responsibilities — old /admin/users, /admin/team-admin, /admin/departments redirect here), FundingProgramsList/Detail + Form/VersionForm/MeasureForm/LoanForm, FormBuilder, FormsAdmin, FormFieldsAdmin, FormSubmissionsAdmin, DocumentTemplatesAdmin, EngagementTaskTemplatesAdmin, PdfTemplatesList, TypologyUValuesAdmin + TypologyUValueForm (/admin/u-values), AdminProductsList/AdminProductDetail, HubSpot (/admin/hubspot, consolidated — old monitoring/test routes redirect), Admin Dashboard (/admin/dashboard).
See RBAC Authorization for admin route protection.
Internal (/internal/*, ~20 routed pages)
- Document obtaining suite: DocumentObtainingDashboard, DocumentObtaining, DocumentObtainingSets, DocumentObtainingDocs, DocumentObtainingCollections, DocumentObtainingDetail (
/internal/document-obtaining/*). See Document Obtaining. - DocumentReviewDetail:
/internal/document-review/:collectionId/:fulfillmentId— fullscreen, mounted outside the mainLayoutfor screen space. See Document Review. - WorkflowPage:
/internal/workflow— Workflow v4 internal board with kanban orders tab; plus TaskTypesSettings (/internal/workflow/settings/task-types). See Workflows. - BillingPage:
/internal/billing. See Invoices. - Collection settings: EmailTemplatesSettings, RejectionReasonsSettings, FlowDefinitionsSettings (
/internal/collection-settings/*). - Others: TeamPage, PortalPreview (
/internal/portal-preview/:id), HelpRequestsAdmin, Changelog, EntraGroupsList/EntraGroupDetail (/internal/entra-groups).
Portal (4 pages)
| Page | Route | Auth Method |
|---|---|---|
| PortalDashboard | /portal, /portal/collections/:id | Token-based (URL or localStorage) |
| PortalAppointmentView | /portal/appointments/:proposalId | Appointment token |
| PortalFormPage | /portal/forms/:formKey[/:submissionId] | JWT (ProtectedRoute) — Form Builder v3 portal forms |
| PortalTokenErrorPage | rendered on token failure | Public |
See Portal for token-based authentication flow.
Profile (6 sections)
Profile page (/profile) with tabbed sections: PersonalInfo, Password, TwoFactor, Responsibility, DeleteAccount, plus a parent Profile shell.
Utility Pages
FilesDemo (/files-demo), FloorPlanDataCapture (/helper/floor-plan-capture), PdfExport (/helper/pdf-export).
Code Splitting
All pages are lazy-loaded in frontend/src/App.tsx (71 lazy() imports as of 2026-06):
const BuildingDetail = lazy(() => import('./pages/BuildingDetail'));Wrapped in <Suspense fallback={<LoadingFallback />}> at the router level.
Related
- Routing — Route definitions and hierarchy
- Frontend Architecture — Overall frontend structure
- Component Library — Shared UI components used by pages
- Authentication — Auth flow and protected routes
- Query Modules — Data fetching per page