A greeting by time of day, five KPI cards, and ten sections the owner can drag into their own order — upcoming tasks, active projects, pipeline by stage, stage status, planned vs actual duration, revenue by building type, top delay reasons, crew comparison and their own milestone ladders. Everything is derived from live pipeline, stage and task data.
Also called: home screen · my dashboard · overview screen · business at a glance
- 1Contacts, stages and tasks come from app state; stage logs and delay reasons are fetched on mount.
- 2Section order is persisted per browser and validated on load, falling back to the default order if it does not match the known set.
- 3Charts use themed tokens so they render correctly in light and dark.
- 4Every widget is crew-scoped: a user without permission to view all crews only sees their own crew's projects.
- 5Demo leads seeded for a training tour are excluded from money KPIs and deal counts.
Several fixes are recorded in the file. The KPI variance line used to read 'NaNd behind avg' because the denominator was the count of completed stages rather than the count that actually carried a variance — 'it's possible to have completed stages where none carry a variance_days value… → 0/0 = NaN'. The greeting reads from the real identity first because the legacy cache fell back to the role string, 'which then surfaces as "Good afternoon, worker." on a fresh sign-in'. And the data load stopped swallowing errors: the old silent catch meant 'the dashboard would render its empty states ("No active delays", "All on track") with no indication that the load actually failed.'
- Owners had to visit five screens to get a sense of the week.
- A failed data load looked identical to having no data.
- Dashboard widgets leaked other crews' work to crew-scoped users.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →