Customer Portal
A branded, passwordless self-service portal where customers view quotes, invoices, orders, rentals, loans, and appointments — and accept quotes, request returns, reschedule appointments, and request due-date extensions on their own.
The customer portal is a public, self-service area where your customers can see and act on everything you've shared with them — without an account password and without staff involvement. It pulls together records from across the app (Sales, Appointments, Rentals, and Inventory loans) into one branded view, scoped to the signed-in customer.
Signing in #
The portal is passwordless. A customer enters their email on the sign-in page and receives a one-time magic link that signs them in for the session. Links are single-use and expire after 24 hours.
- If the email matches an existing customer, they're signed straight in.
- If it doesn't, the email is still sent — and the customer record is only created after they click through, so a stray address never creates a contact.
Reminder emails (below) embed a magic link, so a customer can jump from an email straight into the relevant record.
Branding #
The portal and its emails are branded to the account, not to Knowledge ERP:
- The account name and uploaded logo appear on the sign-in page, the dashboard header, and outgoing portal emails. Upload a logo under Account Settings → Branding; it's stored once and resized automatically for each surface. The same logo also appears on document PDFs.
- A per-location support phone and an account welcome message / support email tell customers how to reach you.
In production each account's portal lives on its own subdomain.
The dashboard #
After signing in, the customer lands on a tabbed dashboard. Tabs appear only when
relevant — a tab shows when the account has the related module or the
customer has records there. That second rule means that if you later drop a
module, customers can still review their prior records (read-only) instead of
losing their history. Clicking a tab updates the URL (?tab=…) without a reload,
so links and the back button behave naturally.
A customer only ever sees their own records; the session is scoped to the linked customer.
Drafts are never shown. A Draft quote, invoice, or sales order has not been sent yet, so it is not visible in the portal — and for quotes and invoices the PDF is refused even over a direct link, so the list and the document itself always agree. A quote that has been Converted to a sales order is likewise hidden, since the order supersedes it. Terminal-but-already-sent records stay visible: a Declined or Expired quote, a Voided invoice, and a Cancelled order are all more useful to a customer shown than silently withdrawn.
Quotes #
Customers see their quotes with line items, total, and expiry. Each quote can be viewed as a PDF in the browser or downloaded, and a Sent quote can be accepted or declined in one click. The Quotes tab badges quotes awaiting a response.
Invoices #
Invoices list with date, amount, and status, each with view/download PDF. When an online payment gateway is connected, a customer can pay an open invoice from the portal. The Invoices tab badges any Sent or Partially Paid invoices.
Orders #
Sales orders show both their lifecycle status and their delivery status. Once an order has shipped or been delivered, the customer can request a return — choosing items and quantities (capped at what shipped), a reason, and a note. That opens a Submitted return for your staff to process; see Customer Returns.
Rentals & Loans #
Rental agreements and loan agreements are clickable to a detail page showing the return/due date and the items in the agreement (rentals also show the rate breakdown, total, and a link to the invoice PDF). From there a customer can request a due-date extension (see below). A row is flagged Extension requested while one is pending.
Appointments #
Each appointment opens to a detail page with the location's address and support phone, the requested equipment, and status-aware actions:
- Pending appointments can be cancelled, have their details edited (contact info, notes, and — when the type allows equipment selection — the requested equipment, re-held against on-hand stock), and be rescheduled directly to any open slot (validated against the same availability rules as the public booking flow).
- Confirmed appointments can be cancelled, and a reschedule becomes a request for staff to approve — or applies immediately when the location opts into auto-approval. Cancelling can notify the location's cancellation-notice email.
- Completed appointments show the records they produced — the related sales order, rental, loan, or return.
Questionnaires #
Outstanding survey questionnaires tied to the customer's appointments are listed for completion.
Due-date reminders & extensions #
Both rentals and loans support automatic due-date reminder emails and customer-requested extensions:
- Reminders. When a rental or loan is within its location's reminder window, the borrower is emailed once — with the equipment list and a magic-link button into the portal. Each agreement is reminded only once per due date (the marker resets if the due date is extended).
- Extensions. From the agreement's detail page the customer picks a length:
- Loans: 1, 2, 4, 8, or 16 weeks.
- Rentals: 1 or 2 weeks, or 1 month — with a live estimated additional cost for the chosen length. Extending a rental only moves the return date; the extra rental is billed through the normal cycle/return billing, so no separate invoice is created at extension time.
- Approval. By default an extension waits for staff approval (each module has an Extension Requests queue with a pending-count badge). With the location's auto-approve toggle on, it's applied immediately. A customer can withdraw a pending request, and approving/declining emails them the outcome.
Configuration #
Portal behavior is configured per account and per location:
| Setting | Where | Effect |
|---|---|---|
| Logo, name | Account Settings → Branding | Portal + portal emails + PDFs |
| Welcome message, support email | Account Settings → Customer Portal | Sign-in page |
| Support phone | Location → Appointments | Appointment details |
| Cancellation-notice email | Location → Appointments | Notified on portal cancellations |
| Auto-approve confirmed reschedules | Location → Appointments | Apply reschedules immediately |
| Default quote validity (days) | Location → Sales | Pre-fills a new quote's "Valid Until" |
| Loan reminder days / auto-approve extensions | Location → Loans | Reminder lead time + extension approval |
| Rental reminder days / auto-approve extensions | Location → Rentals | Reminder lead time + extension approval |
Security & audit #
Magic-link tokens are validated and consumed on use, and the session is
limited to the linked customer's data. Every portal change — cancel, reschedule,
edit, return request, extension request, quote decision — is recorded in the
change history attributed to the customer who
made it. Reminder emails are sent by the scheduled loans:send-due-reminders and
rentals:send-due-reminders commands.