v0.19.0 — visual overhaul (Quiet Expert)
·
190 commits
to main
since this release
A six-turn redesign of every admin UI surface under the Quiet Expert design language. Calm, dense, professional — Stripe Dashboard / Linear / Vercel discipline applied to every page.
No backend change. Every Rust handler, route, model, SQLx query, and migration is identical to 0.18.x. The diff is CSS / templates / JS / one new icon.
New design primitives
| Primitive | Role |
|---|---|
.rio-section |
Page-level content rhythm — eyebrow label + counted title + body |
.rio-empty-state |
Icon + headline + lead + CTA — replaces one-paragraph .rio-empty |
.rio-confirm (+ --danger / --neutral) |
Block for every destructive / mutating action — left-edge stripe + icon badge + lead + items list |
.rio-env-chip |
Env / version metadata next to a page title |
.rio-page-actions__group |
Secondary-button cluster next to a primary CTA on the page header |
Refined .rio-card |
Lighter shadow ambient + --quiet / --elevated opt-ins |
Unified across every page
- Page header pattern: breadcrumb · title · primary action · lead — every list / form / detail / settings / admin-tool page now uses one shape.
- Stat tiles: drop the cycling pastel background fills (festive) for one consistent white surface + 3-px accent rail (semantic). Color is reserved for SEMANTIC meaning now, not per-tile decoration.
- Empty states: every
.rio-emptyparagraph upgraded to a proper.rio-empty-stateblock. - Confirmation flow: every delete / bulk-confirm / lock / disable-MFA / password-change success uses the same
.rio-confirmblock. Cancel button moved to the left of the action row so the destructive primary doesn't sit next to the cursor's natural arrival point. - Section wrapping: list pages all use
.rio-sectionwith eyebrow + counted title (e.g. "All groups · 3 groups").
Per-page work
| Turn | Templates |
|---|---|
| 1 — Foundation + Dashboard | index.html, cards.css, dashboard.css |
| 2 — List pages | list.html, users_list, groups_list, log_entries, notifications |
| 3 — Form + confirm | form.html, user_{new,edit,view}, group_{new,edit}, confirm_delete, user_confirm_delete, group_confirm_delete, lock_user, bulk_confirm_{delete,action}, confirm_admin_action |
| 4 — Settings + auth | account_sessions, password_change, mfa_{enroll,disable,regenerate,enroll_complete,regenerate_complete}. MFA settings pages migrated from the auth-style .rio-login centered shell to the in-chrome settings pattern — sidebar shows correctly now. |
| 5 — Admin tools | docs_index, apis_index, feature_flags, db_browser, object_history, csv_import_result |
| 6 — Polish | user_view final empty-state polish, version bump, CHANGELOG |
What rolls into this release
Two earlier in-progress passes (v0.18.6 polish + bug-fix bundle) ship together with the visual overhaul as one minor bump:
- 0.18.6 polish (committed under
a875ec4): topbar search trigger goes wide (flex:1), list-toolbar 2-row reflow, per-row kebab dropdown, dashboard greeting trimmed, smooth area-chart sparkline. - 0.18.6 bug fixes (committed under
2a43d59as pre-tested drop-in files):--rio-z-*ladder, kebab JS via<details>+ JS upgrade to escape table overflow, shared_row_actions.htmlpartial, focus-visible polish, post-seed demo rows.
Compatibility
- Library, macros, CLI public surface: unchanged.
- Projects that override
--rio-*tokens in their own stylesheet: no change, overrides still cascade. - Templates that depend on the dropped
.rio-dashboard-greeting*or.rio-dashboard-section-*selectors need to switch to the unified.rio-page-header/.rio-section. None of the framework's own templates still emit them. .rio-emptyis kept in the cascade for back-compat but the framework's own templates all use.rio-empty-statenow.- MSRV: 1.88 (unchanged).
See CHANGELOG.md for the full per-section record.