Analytics & ROI
Analytics & ROI
Track spending, rental trends, and equipment ROI
Overview
The Analytics feature provides data-driven insights into your equipment usage and spending. Two dashboards give you visibility into rental costs and the return on investment for equipment you own.
Requirements
Functional Requirements
| ID | Requirement | Acceptance Criteria | Priority | Source |
|---|---|---|---|---|
| REQ-ANA-001 | The system shall aggregate rental cost data across all user projects | Navigate to Analytics → total spend matches sum of all project rental costs; empty projects excluded | Must | features/analytics |
| REQ-ANA-002 | The system shall calculate per-item ROI as (revenue − total cost) ÷ total cost, where total cost is purchase price × quantity plus logged maintenance | Item earning 1,500 against a 1,000 cost → ROI = 50%; an item with no cost recorded reports 0%, not an error | Must | ownGearROI |
| REQ-ANA-003 | The system shall display spending-over-time line chart, category distribution donut chart, and provider comparison bar chart | All 3 charts render; hover shows tooltip with values; empty data shows placeholder message | Must | features/analytics |
| REQ-ANA-004 | The system shall allow filtering analytics by date range, provider, and equipment category | Apply filter → charts update immediately; clear filter → full data restored; combined filters intersect | Must | features/analytics |
| REQ-ANA-005 | The system shall project how many further rental days an item needs to pay for itself, at its list day rate | Item part-way paid off → a day count; already paid off → "Paid off"; no day rate to project at → an em dash | Should | ownGearROI |
| REQ-ANA-006 | The system shall show a per-item table with cost, revenue, days rented, projects and ROI percentage | Table lists all owned items; every column header sorts and reports aria-sort; the empty state links to Owned Gear | Must | OwnGearROIDashboard |
| REQ-ANA-007 | The system shall update analytics data reactively when projects, owned gear, or provider assignments change | Add rental cost to project → Analytics page reflects change without manual refresh | Should | features/analytics |
| REQ-ANA-008 | The system shall total owned-gear investment, revenue and average utilisation across all projects | Analytics → the ROI cards show Total Invested, Total Revenue and Avg Utilization; values update on project changes | Must | useOwnGearROI |
Data Requirements
- Source data: Projects (rental costs, shoot days), owned gear (purchase price, purchase date), provider assignments
- Persistence: Computed at render time from IndexedDB project and owned-gear stores — no separate analytics table
- Sync: Underlying project and owned-gear data syncs via cloud; analytics are always derived client-side
Constraints & Limits
- Analytics are available to all tiers (Free and Pro)
- Chart rendering depends on at least one project with cost data; empty states show placeholder messages
- An item with no purchase price recorded reports an ROI of 0%, not "N/A" — there is no not-applicable state in the table
Offline Behavior
- Fully available offline — all data is local-first
- Charts render from IndexedDB without network dependency
Dependencies
- Requires: Projects (REQ-PRJ-001) — cost data aggregated from projects
- Requires: Owned Gear (REQ-OWN-001) — purchase price and usage data for ROI
- Requires: Provider System (REQ-PRV-001) — provider breakdown data
- Required by: None
Accessing Analytics
There is no longer a standalone Analytics sidebar entry — the /analytics route now redirects to /production-dashboard, reachable via Production Dashboard in the sidebar (or Cmd/Ctrl + K → "Dashboard"). The spending, rental-trend, and owned-gear ROI insights described below surface there.
Rental Analytics
The Rental Analytics dashboard aggregates cost data across all your projects.
Key Metrics
| Metric | Description |
|---|---|
| Total Rental Spend | Sum of all rental costs across selected projects |
| Average Cost/Project | Mean rental spend per project |
| Top Categories | Equipment categories with highest rental volume |
| Provider Breakdown | Spend distribution across rental houses |
| Monthly Trends | Month-over-month spending pattern |
Filtering
- Date range: Filter by project dates to focus on a specific period
- Provider: Isolate spending by rental house
- Category: View costs for specific equipment types
Charts
- Spending Over Time: Line chart showing monthly rental costs
- Category Distribution: Donut chart breaking down spend by equipment category
- Provider Comparison: Bar chart comparing costs across rental houses
Own Gear ROI Dashboard
Track what the equipment you own has cost you and what it has earned back.
ROI Calculation
The dashboard is an earnings model, not a savings one. Every figure comes from what an item has actually earned — billed sub-rental days plus project rental days — not from what renting the equivalent would have cost you.
- Total cost — the purchase price times the number of units, plus every maintenance cost logged against the item. Maintenance is part of what the item has cost you, so it is part of what the item has to earn back.
- Revenue — what the item earned. A fixed-price sub-rental is split across its lines by what each line is worth; project rentals count beside sub-rentals.
- ROI —
(revenue − total cost) ÷ total cost × 100. An item that has earned nothing shows −100%; an item with no cost recorded shows 0%. - Break-even — how many further rental days the item needs to clear the balance, divided at its list day rate. Once revenue reaches cost the item reads Paid off.
Metrics
| Metric | Description |
|---|---|
| Total Invested | Purchase cost of all owned gear — the fleet total, so a 6-unit item counts 6 units, plus logged maintenance |
| Total Revenue | What the gear earned — billed sub-rental days plus project rental days. Not a saving; the card is labelled Total Revenue |
| ROI Percentage | (Revenue − Total cost) / Total cost × 100 |
| Rented | Days that earned: billed sub-rental days plus project rental days |
| Break-even | Further rental days to pay the item off, projected at its list day rate |
| Avg Utilization | Share of the committed span an item was tied up for — days-based, and it counts own productions and maintenance |
Rented days and committed days are different numbers. Own productions and maintenance tie an item up without earning; those are committed days and they feed Avg Utilization, not Rented. Hover a Rented cell to see the committed total alongside it. Break-even hovers to show the day rate it was projected at.
The table and the Owned Gear → Financials modal run the same engine. A fixed-price sub-rental is split across its lines by what each line is worth (components included at any depth), and project rentals count as revenue beside sub-rentals — so the two surfaces cannot report different money for the same item.
Per-Item Breakdown
Each owned device shows:
- Purchase date and price
- Times used across projects
- Cumulative revenue earned
- Individual ROI percentage
Gear Sets and Component-Linked Items (#600)
Gear sets are counted through their members, not as a set. Adding a set to a sub-rental expands it into one line per member, so each member collects its own usage days and its own share of the money. The set itself is a bundle, not a fleet asset — you will not find a row for it in the ROI table.
A component-linked item collects days but no revenue of its own. Gear you have linked as a component of another item (a cage on a camera, a top handle on the cage) is never offered as its own sub-rental line, because that would bill it twice. It therefore:
- earns the days it was out with the item it hangs off, at any depth in the chain — a cage that spent 200 days on a camera reads as 200 days used, and it counts toward Fleet Utilization;
- shows €0 revenue on purpose — the money is booked on the line it rode out on, where the component's own worth already increased that line's share. Crediting it twice would double-count;
- is listed apart from "Idle" and "Underperformers", marked Component of … instead. Neither label is true of it: it has been working, and it was never given a revenue stream of its own.
Untick a component on a sub-rental line and it stayed on the shelf — it collects nothing for that deal. To have an accessory earn on its own, unlink it and add it to sub-rentals as its own line.
Tips
- Log owned gear accurately: Purchase price and dates drive ROI calculations
- Assign providers consistently: Provider-based analytics rely on correct assignments
- Review monthly: Spot trends early to optimize future rentals
- Compare ROI items: Focus on buying equipment with the highest usage frequency
Related Documentation
Last Updated: 2026-09-10 Version: 0.790.2
