NEXSUM_LABS
  1. Home
  2. Work
  3. A solar installer cut 'where is my install?' calls with a customer status portal
Book a call

[ Case study ]

Residential solarNext.jsTypeScriptKanban-tool APIPostgres

A solar installer cut 'where is my install?' calls with a customer status portal

Installations run twelve weeks through survey, design, permits, and crews — and customers called weekly for status because the only tracking lived in the ops team's project tool; the office estimated a third of its phone time was status calls.

CLIENT a regional residential solar installer — FOCUS Project the kanban, don't duplicate it

Customer Portals & DashboardsCustom SoftwareCustomer Portals & DashboardsResidential solarRepresentative example
Client
a regional residential solar installer
Industry
Residential solar
Engagement
9 weeks — systems pod — engineer + automation specialist
Service
Custom Software / Customer Portals & Dashboards
Headline outcome
Households onboarded at contract signature, with stage changes visible within minutes of ops updating the board: Status calls → self-serve portal, read from Office call-log sampling

Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.

Where they started

Selling and installing rooftop solar across a single metro region, the client runs its own crews from first survey to final inspection. A typical installation moves through survey, design, permitting, and crew scheduling over about twelve weeks, crossing the installer's teams, the municipal permitting office, and the utility along the way. The company had grown past the point where the owner could personally reassure every household, yet its tracking lived inside the operations team's kanban board — a tool built for crews, not for the family paying for the roof.

What it was costing

Installations run twelve weeks through survey, design, permits, and crews — and customers called weekly for status because the only tracking lived in the ops team's project tool; the office estimated a third of its phone time was status calls.

What they could see

  • The office estimated a third of its phone time was answering where-is-my-install questions the board already answered.
  • Sales visits ended with a folder of paperwork and no single place showing where a project actually stood.
  • Permit and utility waits generated the angriest calls because staff gave dates the city never confirmed.
  • When a crew rescheduled, the customer learned of it from the crew's arrival, not from the office.
  • The ops team updated the board for its own sake; anything customer-facing had to be composed from scratch per call.

The constraints we worked inside

  • The project tool is a kanban product with a limited API; stage history must come from it, not a parallel database.
  • Customers include spouses and relatives who co-own the decision — access must be shareable without shared logins.
  • Utility and permit milestones have no reliable machine feed; status must remain honest when the only source is a human update.

What had been tried before

Trained office staff to send proactive weekly email updates from the project board.
The emails lasted six weeks and died in busy season; copy-pasting board state into customer language per project could not survive a full calendar.
Enabled the kanban tool's built-in customer-sharing feature on a handful of active boards.
It exposed internal card names and crew shorthand; customers understood less and called more, and the ops team disabled it within a month.

What we proposed

We proposed a customer status portal that projects the existing kanban board rather than duplicating it: the portal reads stage history from the project tool's API and renders it in customer language, so operations keeps one place to update and the portal can never disagree with the crew's reality. Households get per-person access tied to the project — spouses, adult children, whoever co-owns the decision — ending forwarded logins. For permit and utility stages, the portal says exactly what is true: waiting on the utility, with a plain-language explanation, instead of a fabricated percentage or a date nobody can keep.

Just as important is what we ruled out, and why:

  • A parallel project database the portal ownsTwo records of one installation means two chances to be wrong; the ops team would stop trusting one of them within a quarter.
  • Automated status emails triggered by board changesEmail answers yesterday's question; the calls the office dreaded were mid-week checks, and the kanban tool's limited API could not support rich triggers anyway.
  • A generic customer-portal SaaS fed by CSV exportsWeekly CSV exports reintroduce the staleness that caused the calls, and per-household shareable access was not something the SaaS's account model could express.

How the work ran

01Project the kanban, don't duplicate it

The portal reads stage history from the project tool's API and presents it in customer language, so ops keeps one place to update and the portal never disagrees with it.

02Shareable household access

Any household contact can be granted their own access tied to the same project, ending forwarded logins forever.

03Honest human milestones

Stages that depend on utilities or municipalities show their real nature — 'waiting on the utility' with a plain-language explanation — instead of a fake percentage.

Delivered by the systems pod — engineer + automation specialist over 9 weeks, with working increments reviewed with the client every week.

The stack, and the reasoning

Next.js
The customer view must load instantly on whatever phone a household opens it with; server rendering and a small client bundle fit that bar.
TypeScript
The stage-to-customer glossary belongs to the office staff who take the calls; typed stage definitions are the contract between their vocabulary and the portal, so a renamed stage surfaces as visible work instead of a household staring at an unexplained label.
Kanban-tool API
It is the single source of stage truth by constraint — the ops team already lives there, so integrating beats migrating a working process.
Postgres
The API's history is thin, so the portal persists every stage transition it observes; the local ledger fills gaps and powers the project timeline.
Household-scoped auth
Access had to attach to the project, not to an account someone might forward; per-contact grants with revocation matched how households actually work.

What went wrong

Obstacle

The first stage-to-customer mapping used the board's own vocabulary — what ops called a stage and what homeowners heard were different enough that preview households misread their status.

Handled: We wrote the glossary with the office staff who take the calls, rebuilt the mapping from their phrasing, and re-tested with the same preview households.

Obstacle

The kanban API exposes stage-change events only going forward — installs already in flight had no history, and those households were the angriest callers.

Handled: Ops walked the in-flight boards once with us; we seeded each active project's current stage manually and let the API take over from the next real transition.

Obstacle

Staff had been quoting permit dates the city never gave; the first honest waiting-on-the-permitting-office screens worried the owner, who feared they read as delay.

Handled: We paired each wait state with a one-line explanation of what the office is doing, and call logs showed those screens defused calls rather than inviting them.

How we worked together

Cadence
A standing Tuesday demo with the operations lead and the owner; between demos, the office tagged portal questions in their existing call log for us to review.
Client side
The operations lead owned board vocabulary and office workflow; the owner handled customer promises; one crew foreman reviewed what crews would and would not update.
Decisions
The owner settled anything touching customer promises within a day; operational choices defaulted to whatever kept the board the single source of truth.
They provided
Read-write access to the kanban workspace, anonymized call-log samples, and three households who agreed to test the portal mid-install.

What changed

The headline: households onboarded at contract signature, with stage changes visible within minutes of ops updating the boardStatus calls → self-serve portal, read from Office call-log sampling. A second check: inbound status-call volume at −58%.

The where-is-my-install calls that still arrive are about decisions now — design changes, scheduling conflicts — not about the board. Staff answer fewer of them altogether; households check the portal at dinner instead of calling at lunch, and sharing access with a spouse ended the second-call problem. The honest wait states changed the office's posture: staff no longer invent dates to end conversations, because the portal told the truth. Ops kept their board untouched — the tool succeeded because it asked the crew to change nothing.

The result was read from Office call-log sampling against the pre-engagement baseline over the stated window, with a guardrail check on inbound status-call volume. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.

What they own now

  • The portal repository, environments, and deployment pipeline under the installer's own accounts
  • The stage-to-customer glossary document the office maintains as stages evolve
  • Household-access administration guide for granting and revoking per-contact logins
  • The onboarding script that enrolls each new project's household at contract signature

What we would do differently

We would write the customer-language glossary with the ops team first — the kanban stages and what customers call them differed enough that the first mapping needed a redo.

Custom SoftwareCustomer Portals & DashboardsResidential solarNext.js

Next case study

An HOA management company moved violations, dues, and work orders into a homeowner portal