Customer Portal
Status: Concept · Last Updated: 2026-05-15
A branded self-service portal the customer accesses on any device — phone, tablet, or desktop. No app download required. Customers can track their technician in real time, review all their documents, manage payments, schedule new work, and see their recurring service calendar without ever calling the office.
This is the customer's window into their relationship with the contractor. Everything they need is here. Nothing the contractor doesn't want them to see is exposed.
Portal Sections at a Glance
| Section | Description |
|---|---|
| Technician Tracker | Live map showing technician location and ETA when dispatched. Push notification when they're on the way and when they arrive. |
| Projects | Customer-visible job history and active project status — photos, milestones, and progress. Internal notes, costs, and margins are never shown. |
| Invoices & Estimates | All invoices with payment status, open estimates awaiting approval, and the ability to pay directly from the portal. |
| Contracts | Signed contracts and any pending documents awaiting signature. Full signing flow available inline — no separate DocuSign portal needed. |
| Payment Methods & History | Cards on file, ability to add or remove payment methods, and complete transaction history across all jobs. |
| Schedule & Recurring Services | Upcoming appointments, the ability to request new work, and a view of all recurring service plans — frequency, next visit, and history. |
| Communication History | Full timeline of every message, email, call, and notification exchanged with the contractor — searchable, filterable by channel or project. |
Technician Tracker — Live Map
When a technician is dispatched for a job, the customer receives a push notification and SMS with a link to the live tracker. The map updates in real time as the technician travels to the job site.
Live Tracker — Example States
| State | Message |
|---|---|
| Scheduled | "Your appointment is confirmed for Thursday, May 22 between 9am–11am." |
| Dispatched | "Mike is on his way. Estimated arrival: 23 minutes." Map shows technician moving in real time. |
| Arrived | "Mike has arrived at your location." Tracker closes, replaced by job status view. |
What the Map Shows
- Technician pin — live GPS location updating every 30 seconds
- Customer pin — the job site address
- Route line — estimated path and live ETA
- Technician name and photo — so the customer knows who's coming
- Call / text button — tap to contact the technician directly if needed
Notification Triggers
| Event | Customer Notification |
|---|---|
| Appointment confirmed | SMS + email — date, time window, technician name |
| Technician dispatched | SMS with tracker link — "Mike is on his way" |
| Technician 10 min away | Push notification — "Mike is almost there" |
| Technician arrived | Push notification — arrival confirmed |
| Job complete | SMS — "Work is complete. Here's your invoice." |
Projects — Customer View
Customers can see their active and past projects, but only the information relevant to them. Internal job costing, margins, contractor notes, and team communications are never exposed.
What Customers Can See
| Field | Visible to Customer |
|---|---|
| Project name and address | YES |
| Current phase / status | YES |
| Progress photos (selected by contractor) | YES |
| Before / after photos | YES |
| Final walkthrough video | YES |
| Milestones and completion dates | YES |
| Linked estimates, invoices, contracts | YES |
| Internal contractor notes | NO |
| Job costing / materials cost / margins | NO |
| Team PTT messages and transcripts | NO |
| AI inspection report (raw) | NO |
| Lead score or CRM tags | NO |
Contractors can optionally share specific photos or notes from inside the CRM with a toggle — "Share with customer." Nothing is visible to the customer by default unless explicitly enabled.
Invoices
All invoices across every job, with current payment status, are visible in one list. Customers can pay outstanding invoices directly from the portal without calling or mailing a check.
Invoice List Shows
- Invoice number and date
- Project it belongs to
- Amount due / amount paid
- Status badge — Draft, Sent, Viewed, Approved, Paid, Overdue
- Pay Now button — charges the card on file or lets customer choose a payment method
- Download PDF — for their records
Estimates
Open estimates awaiting the customer's decision are surfaced prominently. The customer can review the full scope, ask a question, or approve directly from the portal — triggering the onboarding flow automatically.
Estimate Actions
- Review line items — full scope of work, materials, and pricing
- Approve estimate — one tap; triggers invoice creation and onboarding flow
- Decline — with optional reason; contractor gets notified
- Ask a question — sends a message directly to the contractor
Contracts
All contracts — signed and pending — are accessible here. Customers can sign pending contracts inline without any third-party portal.
Contract States Shown
| Status | What the Customer Sees |
|---|---|
| Pending signature | Full contract text with a "Sign Now" button — inline e-signature |
| Signed | Completed contract with signature date — downloadable PDF |
| Expired | Contract marked expired — contractor can re-send if needed |
Payment Methods
Customers manage their cards on file here. This is the same card used for the onboarding $1 authorization and all future charges.
- View cards on file — last 4 digits, expiry, card type
- Add a new card — secure card entry form (Stripe Elements or equivalent)
- Remove a card — only allowed if no outstanding invoices tied to it
- Set default card — which card gets charged for automatic payments
Payment Transaction History
A full ledger of every charge across all jobs — what was charged, when, for which invoice, and the result.
| Column | Description |
|---|---|
| Date | Date and time of the transaction |
| Description | What was charged — Invoice #, project name |
| Amount | Dollar amount |
| Payment method | Last 4 of card used |
| Status | Succeeded, Failed, Refunded, Pending |
| Receipt | Download link for their records |
Schedule — Upcoming & Past Appointments
A calendar view of all appointments — past visits, upcoming scheduled work, and any windows where the contractor is expected on-site. Customers can see what's coming without having to call.
Schedule Views
| View | What's Shown |
|---|---|
| Upcoming | All future appointments in date order — service type, date, time window, technician assigned |
| Past Visits | Historical appointments — date, what was done, technician who came |
| Calendar | Monthly calendar view with appointments marked — tap any date for details |
Requesting New Work
- Customer taps "Request New Service" — Simple form: describe the work needed, preferred date range, and any notes. No phone call required.
- Contractor receives the request — Appears in the CRM as a new lead task tied to the existing contact. No duplicate contact created.
- Contractor books the appointment and sends an estimate — Customer gets a notification — appointment confirmed or estimate ready to review in the portal.
- Customer approves and it's done — No phone tag. No hold music. The whole booking loop happens inside the portal.
Recurring Service Schedules
For contractors who provide recurring work — pest control, HVAC maintenance, lawn care, cleaning, gutter cleaning — the portal shows the customer's full service plan in one view. They can see exactly when their next visit is, what service is included, and a history of every past visit on that plan.
Example plan cards:
- Quarterly Pest Control — Interior & Exterior — Active since March 2024 · 6 visits completed — Next visit: June 15, 2026 (Every 3 months)
- Annual HVAC Tune-Up — Active since October 2023 · 2 visits completed — Next visit: October 8, 2026 (Annually)
Each Recurring Plan Shows
- Service name and scope — what's included in each visit
- Frequency — weekly, monthly, quarterly, annually, custom
- Next scheduled visit — with date, time window if confirmed, and technician if assigned
- Visit history — every past visit on this plan with date, technician, and any notes shared by the contractor
- Plan status — Active, Paused, Cancelled
- Pause or cancel option — customer can pause the plan; contractor gets notified and can follow up
What Recurring Looks Like vs. One-Off
| One-Off Job | Recurring Plan | |
|---|---|---|
| How it appears | Single project with timeline | A plan card with visit history underneath |
| Invoice cadence | Per-project invoice | Per-visit or monthly billing (configured by contractor) |
| Scheduling | Customer requests → contractor books | Auto-scheduled — customer notified ahead of each visit |
| Can customer reschedule? | Yes — via request form | Yes — tap to request a different date for the next visit |
Communication History
Customers see a complete, chronological record of every interaction they've had with the contractor — texts, emails, calls, voicemails, and AI receptionist conversations — all in one scrollable timeline. Nothing is hidden except internal notes the contractor marks as private. Customers can also send a new message directly from this view.
Example thread (May 14–22, 2026):
- Acme Roofing → Sarah (SMS, 9:02 AM): "Hi Sarah! This is Mike at Acme Roofing. Your estimate for the roof repair is ready — you can view and approve it in your portal: [link]"
- Sarah → Acme Roofing (SMS, 9:47 AM): "Looks great, just approved it. When can you start?"
- Acme Roofing → Sarah (SMS, 10:15 AM): "We can start Thursday May 22nd — crew will be there between 8–10 AM. You'll get a reminder the day before!"
- System Event (10:16 AM): "Estimate #2041 approved by Sarah Chen — job scheduled for May 22."
- Acme Roofing → Sarah (Email, May 21 4:00 PM): "Appointment Reminder — Your Acme Roofing crew arrives tomorrow (May 22) between 8–10 AM. Mike will text you when he's 30 minutes away. View your portal for live tracking."
- Acme Roofing → Sarah (SMS, May 22 7:34 AM): "Mike is on the way! ETA ~26 minutes. Track him live in your portal."
- Sarah called Acme Roofing (Call, 8:12 AM): Duration: 3m 12s · Connected to Mike Santos
- System Event (2:45 PM): "Project 'Roof Repair — May 2026' marked complete. 14 photos added to your portal."
- Acme Roofing → Sarah (SMS, 3:00 PM): "The crew just wrapped up — hope everything looks great! We'd love your feedback: [review link]. Your invoice is also ready in your portal."
Reply box is available at the bottom to send a message to the contractor. Internal contractor notes are not visible here.
What Customers Can See
| Communication Type | Visible to Customer | Notes |
|---|---|---|
| SMS messages (both directions) | Yes | Full text of every message sent and received |
| Email messages (both directions) | Yes | Subject + body; attachments linked |
| Inbound/outbound call log | Yes | Date, time, duration, who answered — no recording exposed |
| Voicemail (left by customer) | Yes | Transcription shown; audio playback optional |
| AI receptionist conversations | Yes | Full transcript of AI chat, labeled "AI Receptionist" |
| System events (estimate approved, job scheduled, etc.) | Yes | Shown as timeline events, not messages |
| Internal contractor notes | No | Marked private by contractor; never surfaced to customer |
| Internal team messages | No | Contractor-to-contractor chat never shown |
| Cost, margin, job costing data | No | Financial internals never shown |
Filter & Search
- By channel: All, SMS, Email, Calls, System events
- By project: Filter the thread to only show messages related to a specific job
- By date range: Narrow to a specific period
- Search: Full-text search across all message content
Replying from the Portal
Customers can send a new message directly from the communication history view. The message routes to the contractor's CRM inbox as an inbound SMS or email (depending on the customer's preferred channel) — the contractor sees it in their unified conversations view alongside all other customer communication.
Portal Access & Authentication
The portal is accessed via a unique link sent to the customer — no username or password required by default. For returning customers, a magic link or SMS verification code gets them back in without friction.
| Access Method | When Used |
|---|---|
| Magic link (email) | Sent automatically when: estimate ready, invoice due, appointment confirmed, contract pending |
| SMS verification code | Customer opens portal on mobile — enters phone number, gets a code |
| Saved session | If customer bookmarks the portal, they stay logged in on that device for 30 days |
Notification Preferences
Customers control exactly what the contractor's CRM sends them — from within the portal itself. This respects customer autonomy and reduces opt-out complaints. The contractor sets the account defaults; customers override for their own account.
| Notification Type | SMS | Notes | |
|---|---|---|---|
| Appointment reminders (Day before + morning of) | Toggle | Toggle | Can also choose 48h advance notice |
| Technician on the way (Dispatched notification with ETA) | Toggle | Toggle | Links to live tracker map in portal |
| Project status updates (Started, milestone reached, completed) | Toggle | Toggle | Customer can choose email-only for these |
| Invoice ready (New invoice or upcoming payment due) | Toggle | Always on | Email always sends; SMS is optional |
| Payment confirmation (Receipt after successful charge) | Off | Always on | Cannot be disabled (legal requirement) |
| Estimate ready for review | Toggle | Toggle | At least one channel must be on |
| Contract needs signature | Toggle | Toggle | At least one channel must be on |
| Upcoming recurring service (Reminder before each scheduled visit) | Toggle | Toggle | Default: 48h advance SMS + email |
| Review request (After job completion) | Toggle | Toggle | One-click unsubscribe in every message |
| Newsletter & project examples (Marketing emails, testimonial videos) | Off by default | Opt-in only | CAN-SPAM compliant unsubscribe required |
Quiet Hours
Customers can set a do-not-disturb window. SMS and push notifications are held outside of business hours if the customer configures it. Email is not affected by quiet hours. Emergency communications (payment failure, safety-related) always go through.
How Preferences Are Set
- Customers access their preferences from the Account section of the portal.
- The contractor's account-level defaults apply until the customer makes a change.
- The contractor can see per-customer notification preferences but cannot force opt-in to marketing — that's always customer-controlled.
- Bulk opt-out (e.g., "unsubscribe all") immediately stops all non-transactional messages.
Open Questions
- GPS tracking for the technician tracker — does the mobile app share location automatically when dispatched, or does the technician have to opt in each time?
- What mapping provider — Google Maps, Mapbox, Apple Maps?
- Can customers see photos before the contractor explicitly shares them, or is everything gated behind contractor approval?
- Inline e-signature for contracts — integrate a provider (Dropbox Sign, DocuSign) or build custom?
- Payment processing for the Pay Now button — Stripe, Square, or other?
- Is the portal a subdomain of the contractor's website (portal.acmeroofing.com) or a generic Merchant Protocol hosted URL?
- Can customers add multiple properties (addresses) to their account for contractors who serve the same customer at different locations?
- Recurring plan billing — handled through the portal's payment method or a separate subscription processor?
- What happens when a customer wants to cancel a recurring plan — immediate, or end of billing period?