Portal

Customer-facing portal for document submission, form filling, and appointment booking. Uses separate token-based Authentication (not session-based).

Architecture

LayerLocation
Routesbackend/src/routes/portal/
Servicebackend/src/services/portal-service.ts
Sub-servicesbackend/src/services/portal/
Auth middlewarebackend/src/middleware/portal-auth.ts
Appointment authbackend/src/middleware/appointment-portal-auth.ts
Pagesfrontend/src/pages/portal/
Componentsfrontend/src/components/portal/ (23 files)
Queriesfrontend/src/lib/queries/portalQueries.ts, portalAppointmentQueries.ts

Portal Pages

PagePurpose
PortalDashboardCustomer overview with pending tasks
PortalFormPageForm wizard for customer data entry
PortalAppointmentViewAppointment booking and management
PortalTokenErrorPageToken validation error handling

Key Components

ComponentPurpose
PortalDocumentUploadModalUpload documents for Document Obtaining
PortalDocumentTable / PortalDocumentCardDisplay document status
DocumentChecklistTrack required document submission progress
PortalHelpChatDialog / PortalStickyChatbotIn-portal help chat
FormWizard/Multi-step form rendering (see Form Builder)
PortalNotificationBellIn-app Notifications
PortalUploadZoneDrag-and-drop file upload area

Features

  • Document upload — customers upload required Documents through a guided checklist
  • Form wizard — multi-step forms created with Form Builder, rendered for customer completion
  • Appointment booking — schedule and manage Appointments with renovation team
  • Help chat — contextual help via sticky chatbot
  • Notification bell — real-time portal Notifications

Authentication Flow

Portal tokens are issued per-project and sent to customers via email or SMS. The token grants scoped access to a specific project’s portal view, without requiring a full user account.