fix(admin): rebalance profiles page hierarchy and add per-profile icons #56

Merged
alee merged 1 commits from fix/admin-profiles-page-polish into main 2026-09-08 03:04:20 +00:00
Owner

Summary

Four polish fixes to the Profiles admin page (admin/frontend/profiles.html only):

  1. Visual hierarchy rebalanced — the distinguishing filter key:value rows are now the card-body focus (larger, brighter); the admitted/interactive counts are demoted to a compact header badge. The category-gated headline semantics (max_admitted / max_interactive_admitted) are preserved with the model-list tooltip.
  2. No prose in the UI — the locality coverage sentence is condensed to a compact categories: 2 of 11 key:value row; the full explanation moved to a hover tooltip on an info icon.
  3. Per-profile icons — four new hand-rolled feather-style SVGs (clock, map-pin, dollar-sign, shield) in the page-local icon() dict, selected by profileIcon() from the definition's dominant filter (latency_tolerance → clock, max_cost → dollar-sign, min/max_tier → shield, provider/category-gated → map-pin, no filters → generic profile icon).
  4. Layout — card grid swapped to CSS auto-fill (minmax 340px) with a centered 1200px max-width; empty/error states span the full grid width.

Tests

  • tests/test_admin_frontend.py + tests/test_admin_profiles.py: 56/56 pass
  • Full suite: 1512 passed; the 9 failures in test_classifier_backoff.py / test_classifier_modes_dispatch.py / test_gaming_mode.py are pre-existing and environment-dependent — proven identical with and without this change via a stash A/B run
  • Test-required strings preserved in the served HTML: Category-gated, for an unspecified category, category_coverage, data-action="duplicate" builtin-ternary shape
## Summary Four polish fixes to the Profiles admin page (`admin/frontend/profiles.html` only): 1. **Visual hierarchy rebalanced** — the distinguishing filter key:value rows are now the card-body focus (larger, brighter); the admitted/interactive counts are demoted to a compact header badge. The category-gated headline semantics (max_admitted / max_interactive_admitted) are preserved with the model-list tooltip. 2. **No prose in the UI** — the locality coverage sentence is condensed to a compact `categories: 2 of 11` key:value row; the full explanation moved to a hover tooltip on an info icon. 3. **Per-profile icons** — four new hand-rolled feather-style SVGs (clock, map-pin, dollar-sign, shield) in the page-local `icon()` dict, selected by `profileIcon()` from the definition's dominant filter (latency_tolerance → clock, max_cost → dollar-sign, min/max_tier → shield, provider/category-gated → map-pin, no filters → generic profile icon). 4. **Layout** — card grid swapped to CSS `auto-fill` (minmax 340px) with a centered 1200px max-width; empty/error states span the full grid width. ## Tests - `tests/test_admin_frontend.py` + `tests/test_admin_profiles.py`: 56/56 pass - Full suite: 1512 passed; the 9 failures in test_classifier_backoff.py / test_classifier_modes_dispatch.py / test_gaming_mode.py are pre-existing and environment-dependent — proven identical with and without this change via a stash A/B run - Test-required strings preserved in the served HTML: `Category-gated`, `for an unspecified category`, `category_coverage`, `data-action="duplicate"` builtin-ternary shape
alee added 1 commit 2026-09-07 23:47:29 +00:00
- promote definition key:value rows to card focus; demote admitted/
  interactive counts to a compact header badge (gated-headline logic kept)
- condense the locality coverage prose into a compact categories row
  with the full explanation on hover
- add four feather-style SVG icons (clock, map-pin, dollar-sign, shield)
  and select per profile by dominant filter, falling back to the generic
  profile icon
- swap the card grid to CSS auto-fill with a centered max-width so few
  profiles don't leave an unbalanced last row
alee merged commit b9d98b4f66 into main 2026-09-08 03:04:20 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alee/6krrt#56