# UJ-112 View analytics and churn

Audience: AI coding agents first.

- Actor + entry point: Staff operator; `/dashboard`, `/plugins/{plugin}/analytics`, `/plugins/{plugin}/churn`.
- Priority: CARRY-OVER-CANDIDATE.
- Preconditions: Create accounts, jobs, subscription changes, and cancellations through public APIs.
- Test layer: L3.

## Steps

1. Open dashboard/analytics → cross-plugin metrics load from admin analytics endpoint (`admin-panel/src/pages/MetaDashboardPage.tsx:43-85`, `admin-panel/src/pages/AnalyticsPage.tsx:24`).
2. Open churn and activate customer row → `/users/{userId}` opens (`admin-panel/src/pages/ChurnPage.tsx:145`).
3. Change period → visible metric values update to seeded API-derived totals.

## Failure branches

- Auth failure → no metrics.
- 429/backend failure → visible unavailable state; zeros MUST NOT impersonate live totals.

## Backend touchpoints

`GET /v1/admin/analytics/dashboard`; churn analytics endpoint.

