From Excel Reports to Live Dashboards: Operations Reporting for a Fiber-to-the-Home Builder
At a glance
- Client: A fiber-to-the-home network builder running construction across 11 markets
- Systems: Salesforce + SiteTracker, SharePoint, NetSuite (payment status via Salesforce)
- What we built: Three automated dashboards: Executive KPIs, Project Flow Chart, and Invoicing
- Scale: 11,000+ construction projects across 288 distribution areas; ~20,000 invoice lines; 22 construction and engineering vendors
- Timeline: Executive dashboard March 2026; Flow Chart May 2026; Invoicing designed and shipped in about 9 days in October 2026
The short version
A fiber builder's leadership, PMO, and finance teams were running the construction program from three hand-assembled artifacts: an Excel executive report, a static multi-page PDF of project dependencies, and an analyst-maintained invoicing workbook built on Power Query pivots. OakenCloud replaced all three with dashboards that pull directly from Salesforce SiteTracker and SharePoint on a schedule, email themselves to the right people, and keep the "double-click a number to see what's behind it" habit people already had in Excel. The invoicing dashboard also refuses to publish if its totals don't reconcile with the source data, so nobody gets a wrong number in their inbox.
What was the problem?
Building fiber-to-the-home means thousands of small construction projects: each distribution area depends on rings, permits, locates, vendor crews, and inspections that happen in a specific order. Before this work, the builder tracked all of that in three places, each assembled by hand:
- Executive reporting was an Excel report whose filters had to match logic in Power BI. Market and vendor KPIs (serviceable addresses, permit cycle time, locates, rejections, strikes, drill footage, active subscribers) were compiled for each reporting cycle.
- Project dependencies lived in a static PDF, with one page per distribution area. Answering "what's blocking this area from going live?" meant paging through the PDF.
- Invoicing was a workbook of Power Query pivots where a user double-clicked a cell to open the detail. The payment forecast was a separate workbook.
Each report was a snapshot. As soon as it went out it was out of date, and when two reports disagreed, nobody could tell which one was right.
What did OakenCloud build?
We built three dashboards inside the client's existing internal toolbox application, each focused on one audience.
Executive dashboard: vendor scorecards and market KPIs
The executive dashboard shows market-level KPIs and a vendor scorecard across 16 construction and 6 engineering vendors in 11 markets, with goals loaded from the budget template finance already maintained. It covers roughly a dozen KPI groups: serviceable addresses, permits, cycle times, locates, rejections, strikes, network availability, subscribers, and drill footage. It rebuilds whenever its data refreshes and is emailed to leadership on a schedule set by admins, with a weekdays-only option. Because the filters were rebuilt to match the existing Power BI logic, the dashboard reproduced the numbers leadership already trusted before it added anything new.
Flow chart: every project dependency, searchable
The flow chart dashboard replaced the static PDF with an interactive dependency graph covering 288 distribution areas, 103 rings, and more than 11,000 project nodes. Each node is colored by its stage on the six-stage path from Planned to Go Live. Users can search, filter by market or stage, and export to PDF or Excel. Stages are defined in configuration, so when the PMO adds a stage it's one config entry and a regenerate, with no code release.
Invoicing: drill-down that works without a server
The invoicing dashboard has eight tabs: Summary, Payment Forecast, Aging, Project Spend, Market Owner Spend, Invoice Review, Duplicate Review, and Assumptions. It covers about 19,500 approved and 1,200 pending invoice lines, and any number can be clicked through to the invoice lines behind it, then exported to Excel. Data refreshes every morning at 6 AM, with a "Refresh now" button. The dashboard is a single self-contained HTML file with the data embedded, so the copy attached to the email keeps full drill-down even offline.
How does it work?
| Layer | Choice | Why |
|---|---|---|
| Data | Direct SOQL queries to Salesforce/SiteTracker; SharePoint via Microsoft Graph (MSAL) | Querying the source directly means no copy of the data has to be kept in sync. About 24 separate Salesforce calls were combined into 3 bulk queries that run in about 2 seconds. |
| Scheduling | Celery + Redis | Hourly checks for due emails, daily data refreshes, and incremental sync for the permit matrix |
| Front end | React 19 + Vite, built to a single HTML file per dashboard | One file can be served in the app and attached to an email with no changes |
| Access | Keycloak single sign-on, with role groups for Admin, PMO, and GIS | Invoicing and report configuration are limited to Admin and PMO |
| Deployment | Docker on the client's own infrastructure | Data never leaves the client's environment |
How did we keep the numbers trustworthy?
Executives stop using a dashboard the first time it disagrees with finance. We put two safeguards in place.
- One source of truth. An audit found 15 differences between the code path that built the dashboards locally and the one that produced the emailed versions, and those differences had caused at least three production bugs. We merged them into one function, with schema checks so a structural change in the data fails loudly instead of silently showing wrong numbers.
- No publishing without reconciliation. Before each invoicing refresh goes out, the server runs the dashboard's own TypeScript checks against the new data. If totals don't reconcile, or if the check can't run at all, the refresh isn't published and the previous good version stays live.
The codebase has about 300 automated tests: roughly 200 for the dashboard front ends and 96 for the Python server.
What changed for the client?
| Before | After |
|---|---|
| Excel executive report compiled by hand to match Power BI | Executive dashboard that rebuilds when data refreshes and is emailed on schedule |
| Static PDF, one page per distribution area | Searchable, filterable dependency graph across 11,000+ projects |
| Invoicing pivot workbook plus a separate forecast workbook | One eight-tab dashboard, refreshed daily, with click-through to invoice lines |
| Reports could quietly disagree with each other | One data path and a reconciliation check before every publish |
What we'd tell another infrastructure company
- Match the numbers they already trust before improving anything. Rebuilding the old Power BI filter logic exactly is what got leadership to switch.
- Keep the Excel habits. Finance teams think in "double-click to see the detail." We kept that interaction and added export to Excel at every level.
- Email is a delivery channel, not an afterthought. A self-contained HTML file with the data embedded reaches executives who will never log in to another app.
- Block bad data from going out. A dashboard that fails visibly and keeps yesterday's good version up costs less than one that is confidently wrong.