Appearance
Client portal
One SPA. Operators on one side, clients on the other.
The client portal isn't a separate app. It's the same SPA, role-shaped for the client view, branded per organisation. Tickets, billing, knowledge base, document downloads.
- Same SPA
No separate frontend to maintain. Branded per organisation. Role-shaped for the client view.
- Invite-based login
Email a one-time invite link; the contact sets a password on first use, then signs in with email + password. Passwordless magic-link login is in design.
- Tenant-isolated
Row-level security at the database layer. A bug in the SPA cannot return cross-tenant rows because the database refuses.
What clients see
Their world, no operator clutter.
- Tickets — submit, view, comment, attach files, see status
- Billing — invoice history, outstanding balance, PDF download
- Knowledge base — published articles, search
- Documents — assets, runbooks, policies (post-GA via the docs pillar)
- Profile — contact details, notification preferences
Branding
Per-organisation chrome.
- Logo upload
- Primary / accent colours
- Custom domain (post-GA — currently subdomain of opsmerge.cloud)
- Email-template branding for outbound notifications
Auth
Invite-based login + VIP contact priority.
- Invite-based login — email a one-time invite link; the contact sets a password on first use, then signs in with email + password. Passwordless magic-link login is in design.
- CIPP integration — Entra contact import for client matching, no direct Microsoft Graph wiring per MSP.
- VIP contact toggle — flag specific contacts as VIP. Future: priority tickets, SLA rules, escalation paths automatically tied to VIP status.
Privacy
Clients see only their stuff. Row-level security at the database layer enforces tenant boundaries. A bug in the client-portal SPA cannot return cross-tenant rows because the database refuses.
Pairs well with
Other things in the platform
Common questions
Can clients submit tickets without an account?
First touch is an invite link: the client gets a one-time link emailed, sets a password, and signs in from then on. Passwordless magic-link login is in design.Can I customise the portal per client?
Branding is per-organisation (i.e., per-MSP), not per-client of the MSP. We are explicit about that scope.What about white-labelling on a custom domain?
Custom domain support post-GA. Today, every portal lives on a sub-domain of opsmerge.cloud.Can clients see other clients?
No. Row-level security enforces tenant isolation at the database layer.What is a VIP contact?
A contact flagged for priority handling. Future-state: VIPs get priority queue placement, distinct SLA rules, and escalation paths.