Client Portal

Client Portal

The Client Portal is a self-service interface giving clients direct access to their projects, quotes, invoices, and documents — reducing support queries and improving satisfaction.

Enabling Portal Access

Two conditions must be met: the portal_enabled flag on the Client record must be true, and a portal_user_id must link the client to a User account. Use the ClientPortalController enable endpoint with a valid user_id (UUID). The client must be active and the user must not be linked to another client. Only Power Users with the managePortalAccess policy can enable or disable portal access.

Per-Contact Portal Access

Individual contacts have a portal_access boolean on ClientContact. For access, the contact must have an email, is_active must be true, and the parent client's portal_enabled must be true. From the Contacts tab, use Enable Portal Access or Resend Portal Invitation actions.

Bulk Invitations

The BulkInviteDialog loads the eligible count (clients with email, no existing portal account), shows statistics (eligible, already invited, total clients), requires a confirmation checkbox, displays a progress bar during sending, and shows a results summary (success, failed, skipped counts) on completion.

What Clients See (ClientPortal.vue)

Welcome Section: Personalised greeting with the client's name.

Quick Stats Cards (four cards across the top):

  1. Active Projects — Count of active projects
  2. Pending Invoices — Invoices awaiting payment
  3. Documents — Total shared documents
  4. Outstanding Balance — Total amount owed

Upcoming Projects: Status chip, project name, date range, and a View All Projects button. Empty state shown when none exist.

Recent Invoices: Status chip (draft/sent/paid/overdue/cancelled), invoice number, amount and due date, and a View All Invoices button.

Pending Quotes: Warning card displayed when quotes need approval. Shows quote number, amount, valid-until date, with Approve and View buttons.

Portal Navigation

Top app bar contains: company logo (left), notifications bell (icon button), and a user menu with avatar and name expanding to Profile, Settings, and Logout.

Portal Activity Tracking (ClientPortalActivity)

Every portal action is logged. Activity types:

  • login, logout, failed_login, password_reset — Security events
  • view_project, view_quote, approve_quote — Project/quote actions
  • view_invoice, pay_invoice — Financial actions
  • download_file, upload_file — File operations
  • send_message, update_profile — Communication and profile

Each record captures: session_id, ip_address, user_agent, device_type (desktop, mobile, tablet), browser, and platform. Security events and financial actions are flagged by isSecurityEvent() and isFinancialAction() helper methods.

Disabling Portal Access

Use the ClientPortalController disable endpoint. This sets portal_enabled to false whilst preserving the user account reference.

Tips

  • Enable portal access for key contacts to reduce support enquiries.
  • Monitor portal activity to gauge client engagement.
  • Use the quote approval workflow to accelerate the sales cycle.
  • Review failed login attempts for potential security issues.
  • Share files by setting is_shared_with_client to true.

Was this article helpful?