# v1.4.15 — Empty-states audit Date: 2026-05-09 Owner: Stage C5 work-stream (parallel with C1 + C4). Primitive: `src/components/ui/empty-state.tsx` (already shipped earlier in v1.4.15; sweep below tracks adoption). The audit walks every list / table / tile surface a brand-new user hits, classifies the empty path, and records the fix. "Useful" means icon + title + description + (where it makes sense) a primary action, not a single grey sentence floating in a card. ## Findings | Route / surface | Component | State before | What was wrong | What changed | | ----------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `/admin/users` | `UserManagementSection` | Loading-only — when `users` resolved to `[]` the table simply rendered an empty `
` with the header still visible. | Empty case never specified; on a fresh deployment with one admin self-row it never reproduced for the live tenant, but the `admin/user` filter did regularly. | New `No backups recorded yet.
`. | No icon, no CTA, no signal that the "Run backup now" button at the top is what to click. | Replaced with `No entries found.
` (filter-dependent). | When "Failed only" is selected on a healthy installation the user sees nothing — looked like a bug. | `No API tokens found.
`. | Doesn't tell admins that tokens are issued at login from native clients — they wonder if they need to create them somewhere. | `No feedback in this category.
` per tab. | OK as text but the tab strip already shows `0` badges; the inner panel deserves the same compactness as other admin sections. | `No recent audit entries.
`. | Compact but icon-less — visually inconsistent with the audit-table fixes. | `` | "no data" when `user.heightCm == null`. | The user might wonder why the BMI section is empty. | ` No achievements unlocked yet. {t("common.noData")}