Reports — page chrome + the fixed-report template (PRESCRIPTIVE — Sales Analytics arc, design-ahead)
What it is: dealerships get a seeded set of fixed reports at setup, and we author additional bespoke reports server-side per tenant — they simply appear for that store. The dealer configures nothing. The law this establishes: navigation never lives inside a data card — a card's controls act on that card; anything that takes you elsewhere lives in the page chrome.
1 · The control — a labeled chip in the pagehead, after a group divider
Closed — the resting state.
Standard reports
Built for Galleria BMW
Open. The chip lives in the header because these reports are destinations, not page content. The .sb-mseldiv before it marks it as a different class of control from the filters to its left — those act on the page you are looking at; this one takes you somewhere else. Navigation never lives inside a data card: a card's controls act on that card, and anything that leaves lives in the page chrome.
2 · The menu — two groups: seeded standards, then what we built for this store
Standard reports
Built for Galleria BMW
Every store gets the standard set at setup. The second group is authored by us server-side for that tenant — the concierge moment: the report with their weird three-table join carries their name. The four Activity reports are seeded standards in this menu. A menu scales cleanly from 1 to 20 entries, where a permanent shelf of chips would starve at two and overflow at twelve.
3 · The fixed-report template — one view every report renders through
Lease Maturity + Equity
CustomerVehicleLease EndPayoffEst. EquityAssigned
Marcus Lee2023 BMW 530i09/14/26$31,480$4,210Karla Sellers
Priya Nair2022 BMW X310/02/26$27,905$2,860Jenna Marsh
Devon Brooks2023 BMW X510/28/26$44,120−$1,940Karla Sellers
Rachel Rowen2022 BMW 330i11/09/26$24,660$5,375Taylor Bertrand
Alex Chen2023 BMW i412/01/26$38,240$1,105Jenna Marsh
5 rows
The date range is the only knob a dealer gets — no column picker, no builder, no save. The report definition (query, columns, default range) lives server-side per tenant, so shipping a new report is a config row rather than an app release. This is deliberately the opposite of the audience builder: flexibility moved from the dealer to us.
4 · States — a store with standards only · the template's empty range
Standard reports
Standards only — no bespoke group header at all.
Lease Maturity + Equity
No rows in this range
0 rows
Empty range — the date chip stays, because changing it is the fix.
A store with no bespoke reports shows one group and no second header — an empty "Built for" heading would advertise an absence. The template's empty state keeps its chrome so the dealer can widen the range without leaving.
5 · How a report gets made
Dealers never build reports. Authoring happens on our side, in the launch portal — the internal admin surface — where a report definition is captured: the query and its joins, the columns, the default date range, and the display name. Every report carries a scope. It can be published to the whole tenant, so everyone at that dealership finds it in their Reports menu, or to specific users, so a report built for one GM or one desk manager appears only for them. Whoever it is scoped to simply finds it in the menu — nothing tells the dealer whether a report is seeded, tenant-wide, or built for them personally. It is just their list. Because the definition lives in config rather than in the app, shipping a new report to one store — or to one person at one store — is a config change, not a release. The mechanism is deliberately not pinned down. Whether authoring is a form, a query builder, or a prompted agent inside the launch portal is an open question. What is settled is the output contract — a definition plus a scope — and that the dealer-side UI never changes to accommodate a new report.