refactor: marketplace release polish

Sprint 28, scoped to admin/* (user decision — full marketplace audit
declined in favor of a bounded pass over the 8 admin features from
Sprints 20-27).

- a11y: aria-label added to every bare <select> not already inside a
  <label> across categories/products/orders/transactions/users/monitoring
- loading states: app-skeleton rows/cards added to list pages that
  previously rendered blank during the initial fetch (categories, orders,
  transactions, users, monitoring's event feed, analytics summary cards)
- admin-dashboard-card's custom shimmer CSS replaced with the shared
  SkeletonComponent (same visual result, one less duplicated animation)
- bundle-size budget warning (~198kB over) confirmed pre-existing —
  present at Sprint 20's first build before any admin/* code existed,
  and new admin pages are all lazy-loaded — documented as out of scope
  for this pass rather than chased

docs/ADMIN.md + docs/SPRINT-PLAN.md updated with the scope decision and
what was explicitly not done (Lighthouse, animations, SEO/sitemap,
storefront/editor a11y).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
sdarbinyan
2026-07-16 00:14:46 +04:00
parent 1db63ac99d
commit 576f2600a5
27 changed files with 223 additions and 127 deletions

View File

@@ -416,6 +416,36 @@ routes at all, this is a net-new admin section.
- **Export**: CSV of the sales series (client-side `Blob` download, same
pattern as Orders/Transactions).
## Sprint 28 - Marketplace Polish (scoped to admin/*)
Scoped down (user decision) from a full marketplace-wide audit to the 8
admin features built in Sprints 20-27, since those were the newest and
least-reviewed surface. Not a rewrite - targeted fixes only:
- **Accessibility**: every bare `<select>` across `admin/categories`,
`admin/products`, `admin/orders`, `admin/transactions`, `admin/users`,
and `admin/monitoring` that wasn't already inside a `<label>` (which
provides implicit association) now has an explicit `aria-label`. Selects
already nested in `<label>` (e.g. product form's category/stock-status
selects, category form's parent select) were left as-is - already
correct.
- **Loading states**: list pages that previously rendered a blank table
during the initial fetch (categories, orders, transactions, users,
monitoring's event feed, analytics' summary cards) now show
`app-skeleton` rows/cards while `loading()` is true, falling through to
the existing empty-state or populated table after. `admin/products` and
the media library already had this from earlier sprints.
- **Bundle size**: the `700 kB` initial-bundle budget warning (~198 kB over)
predates every admin sprint in this plan - it was already present at
Sprint 20's first build, before any of `features/admin/**` existed, and
the new admin pages are all lazy-loaded (they don't touch the initial
chunk). Confirmed out of scope for an admin-only polish pass; would need
a main-bundle/core-module audit to actually fix.
- Explicitly **not done** here (would require the "full marketplace audit"
scope the user declined): Lighthouse run, animations, responsive fixes
outside admin/*, SEO/meta/social-preview/robots/sitemap, and a full a11y
audit of the public storefront/Project Editor.
## Known gaps / backend needs
- **Dashboard metrics endpoint.** Categories/Products counts are computed