feat(ui): add sidebar shell, drop daisyui #44

Open
ryan.mcgee wants to merge 1 commit from feat/ui-foundation into main
Owner

Summary

  • Replaces the top navbar and daisyUI styling with a sidebar admin shell, so the app looks and feels like a modern proxy-management dashboard. This is the foundation PR; the per-area redesigns (resource tabs, dashboard, node/org pages) follow separately.

Changes

  • Sidebar shell (Layouts.app/Layouts.admin): organization switcher, role-gated menu, breadcrumb bar with a live-connection indicator, system/light/dark toggle, slide-out drawer on small screens. Signed-out pages render a centered card.
  • daisyUI dependency removed; semantic color tokens (surface, line, muted, accent, ...) with light/dark CSS variables, orange accent, system font.
  • New badge, alert, card, divider components; button and input accept extra classes (variants primary/secondary/ghost/danger, sizes sm/md). .badge/.badge-success/.badge-error marker classes kept for tests.
  • Every LiveView and controller template migrated off daisyUI classes.
  • Menu flags offline nodes and alert channels whose last delivery failed (Nodes.count_offline/1, Alerts.count_failing_channels/1). Computed when the page mounts: node presence changes are written without a broadcast, so they are not live.
  • Login: sign-in providers first, one "Log in" button plus a "Keep me logged in" checkbox (same remember_me param as before).
  • Tenancy test now checks the page content for the other tenant data, because the switcher legitimately lists every organization the user belongs to.

Verification

  • mix format --check-formatted: ok
  • mix compile --warnings-as-errors: ok
  • mix credo --strict: no issues
  • mix dialyzer: 0 errors
  • mix test: 1774 passed (10 new navigation tests, 2 new login tests)
  • Browser smoke test on the dev server (seeded data): login, dashboard, resources list/new/show, nodes, admin overview, org switcher, light and dark theme, 390px viewport drawer open/close. No console errors.
## Summary - Replaces the top navbar and daisyUI styling with a sidebar admin shell, so the app looks and feels like a modern proxy-management dashboard. This is the foundation PR; the per-area redesigns (resource tabs, dashboard, node/org pages) follow separately. ## Changes - Sidebar shell (`Layouts.app`/`Layouts.admin`): organization switcher, role-gated menu, breadcrumb bar with a live-connection indicator, system/light/dark toggle, slide-out drawer on small screens. Signed-out pages render a centered card. - daisyUI dependency removed; semantic color tokens (`surface`, `line`, `muted`, `accent`, ...) with light/dark CSS variables, orange accent, system font. - New `badge`, `alert`, `card`, `divider` components; `button` and `input` accept extra classes (variants primary/secondary/ghost/danger, sizes sm/md). `.badge`/`.badge-success`/`.badge-error` marker classes kept for tests. - Every LiveView and controller template migrated off daisyUI classes. - Menu flags offline nodes and alert channels whose last delivery failed (`Nodes.count_offline/1`, `Alerts.count_failing_channels/1`). Computed when the page mounts: node presence changes are written without a broadcast, so they are not live. - Login: sign-in providers first, one "Log in" button plus a "Keep me logged in" checkbox (same `remember_me` param as before). - Tenancy test now checks the page content for the other tenant data, because the switcher legitimately lists every organization the user belongs to. ## Verification - `mix format --check-formatted`: ok - `mix compile --warnings-as-errors`: ok - `mix credo --strict`: no issues - `mix dialyzer`: 0 errors - `mix test`: 1774 passed (10 new navigation tests, 2 new login tests) - Browser smoke test on the dev server (seeded data): login, dashboard, resources list/new/show, nodes, admin overview, org switcher, light and dark theme, 390px viewport drawer open/close. No console errors.
feat(ui): add sidebar shell, drop daisyui
All checks were successful
Development images / images (push) Successful in 5m13s
CI / format, compile, credo, dialyzer (pull_request) Successful in 9m6s
CI / tests (SQLite) (pull_request) Successful in 4m57s
CI / dependency audit (pull_request) Successful in 41s
CI / tests (PostgreSQL) (pull_request) Successful in 4m12s
4227ccdb21
- replace the top navbar with a sidebar shell: organization
  switcher, role-gated menu, breadcrumb bar, live indicator,
  system/light/dark toggle, slide-out drawer on small screens
- same shell for system administration, with its own menu; pages
  without a user render a centered card
- drop the daisyui dependency; components use semantic color tokens
  with light and dark variables (orange accent, system font)
- add badge, alert, card and divider components; button and input
  take extra classes instead of replacing the defaults
- menu flags nodes that are offline and alert channels whose last
  delivery failed, computed when the page mounts
- login: single log in button with a keep me logged in checkbox,
  sign-in providers first
- tenancy test now looks for the other tenant's data in the page
  content, since the switcher lists every organization of the user
ryan.mcgee force-pushed feat/ui-foundation from 4227ccdb21
All checks were successful
Development images / images (push) Successful in 5m13s
CI / format, compile, credo, dialyzer (pull_request) Successful in 9m6s
CI / tests (SQLite) (pull_request) Successful in 4m57s
CI / dependency audit (pull_request) Successful in 41s
CI / tests (PostgreSQL) (pull_request) Successful in 4m12s
to 97c6c35e30
Some checks failed
CI / format, compile, credo, dialyzer (pull_request) Successful in 3m19s
Development images / images (push) Successful in 5m19s
CI / tests (SQLite) (pull_request) Successful in 2m36s
CI / dependency audit (pull_request) Failing after 38s
CI / tests (PostgreSQL) (pull_request) Successful in 2m37s
2026-10-26 13:31:53 +00:00
Compare
Some checks failed
CI / format, compile, credo, dialyzer (pull_request) Successful in 3m19s
Required
Details
Development images / images (push) Successful in 5m19s
CI / tests (SQLite) (pull_request) Successful in 2m36s
Required
Details
CI / dependency audit (pull_request) Failing after 38s
CI / tests (PostgreSQL) (pull_request) Successful in 2m37s
Required
Details
This pull request is blocked because it's outdated.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/ui-foundation:feat/ui-foundation
git switch feat/ui-foundation
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
White_Ghost_Cyber_Systems/traefik-control!44
No description provided.