feat(admin): analytics dashboard
Sprint 27. New features/admin/analytics/ module + net-new /:lang/backoffice/analytics route + Dashboard Quick Action. - revenue/orders/avg-order-value/sales-over-time/top-products computed by composing AdminOrdersLocalGateway (Sprint 23's seeded mock orders) - real aggregation over mock data, not a separate fabricated dataset - products/categories counts from AdminProductsLocalGateway/ AdminCategoriesLocalGateway - visitors/funnels/heatmaps render pending-backend badges (no analytics pipeline exists anywhere in this system) rather than fabricated numbers, same convention as the Sprint 19 dashboard's pre-Sprint-23 Orders/Revenue cards - plain div-bar chart (no charting library), 7/30/90-day range toggle, CSV export docs/ADMIN.md + docs/BACKEND.md (new item 16) updated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -391,6 +391,31 @@ routes at all, this is a net-new admin section.
|
||||
audit and Sprint 25's per-user audit. No consolidation attempted - they
|
||||
track different things.
|
||||
|
||||
## Sprint 27 - Analytics
|
||||
|
||||
`features/admin/analytics/`, net-new `/:lang/backoffice/analytics` route
|
||||
+ Dashboard Quick Action.
|
||||
|
||||
- **Real, derived data**: revenue/orders/avg-order-value/sales-over-time
|
||||
chart/top-products are computed by composing the existing
|
||||
`AdminOrdersLocalGateway` (Sprint 23's seeded mock orders) - not a
|
||||
separate fabricated dataset. Products/Categories counts come from
|
||||
`AdminProductsLocalGateway`/`AdminCategoriesLocalGateway`. All of this is
|
||||
still ultimately backed by mock order/product/category data (per those
|
||||
sprints), but the *aggregation* is real arithmetic over that data, not
|
||||
invented numbers.
|
||||
- **Visitors, funnels, heatmaps**: no analytics/tracking pipeline exists
|
||||
anywhere in this codebase, so these render an explicit
|
||||
"Awaiting backend integration" (`pending-backend`) badge, same convention
|
||||
as the Sprint 19 dashboard's Orders/Revenue cards before Sprint 23 -
|
||||
not fabricated numbers, not a generic empty state.
|
||||
- **Chart**: a plain inline `<div>`-bar chart driven by `[style.height.%]`,
|
||||
no charting library pulled in - reasonable for one sales-over-time series
|
||||
at this scale; revisit if more chart types are actually needed.
|
||||
- **Date ranges**: 7/30/90-day toggle filters orders by `createdAt`.
|
||||
- **Export**: CSV of the sales series (client-side `Blob` download, same
|
||||
pattern as Orders/Transactions).
|
||||
|
||||
## Known gaps / backend needs
|
||||
|
||||
- **Dashboard metrics endpoint.** Categories/Products counts are computed
|
||||
|
||||
Reference in New Issue
Block a user