feat(admin): redesign shell (grouped sidebar) + Settings page (LC-510, PR1) #477

Merged
longjacksonle merged 3 commits from feat/LC-510-admin-redesign-shell-settings into main 2026-06-28 05:15:54 +02:00

PR1 of the Admin panel redesign (LC-510). Foundation + the Settings page, matching the redesigned Settings / enclave-settings / room-Manage vocabulary. Askama + HTMX + Tailwind, no new deps.

Structural fix: grouped left sidebar

The old shell was a single horizontal tab strip (LC-219) that could not hold 17 tabs and overflowed under the version chip. Replaced with a grouped left sidebar (anchor links styled with the existing .lc-set-tab):

  • Overview: Analytics
  • People: Users, Invites
  • Spaces: Rooms, Enclaves
  • Safety: Reports, Quarantine, Mod log, Anti-spam, Link filter
  • Integrations: Commands, Bots, Webhooks, Bridges
  • System: Settings, Backup, Branding

The version string now lives in the sidebar footer (no more collision). Collapses to a horizontal scroll rail under 48rem. A standardized page header (title from the active section) sits above the content column. Because every admin page extends this shell, all 19 pages get the sidebar immediately; their inner content is restyled tab-by-tab in follow-up PRs.

Settings page standardized

  • Each section (Maintenance, Outbound email/SMTP, Email ingress/IMAP, ingress health, Uploads, new-user defaults, Retention status) is now a bordered .card/.lc-set-card with a centered max-width.
  • The bare "Enable maintenance mode" / TLS / enabled / digest checkboxes become the standardized .lc-toggle.
  • The SMTP and IMAP info blocks are clean muted callouts with monospace env-var names; all explanatory copy is kept verbatim.
  • Inputs/labels/help use .input + .lc-set-field/.lc-set-label/.lc-set-help; Save buttons are .btn .btn-primary with a spinner.

No silent saves

Maintenance, IMAP, email-digest-default, and the two Uploads actions now detect htmx (is_hx) and return the shared SettingsFeedback fragment (inline .lc-set-status + a toast), with the existing full-page redirect as the no-JS fallback (the LC-454 dual-mode pattern). IMAP error paths (missing LETS_CHAT_SECRET_KEY, bad port) surface inline instead of an error page.

Follow-ups (tracked on LC-510)

PR2 People/Spaces tables; PR3 Safety; PR4 Integrations + Branding/Backup; plus a cross-cutting pass for table styling, empty states, and destructive-action confirmation (ban/delete/quarantine).

Checks

just check, just test, just test-saas (incl. en/es i18n parity), just build-css all pass.

PR1 of the Admin panel redesign (LC-510). Foundation + the Settings page, matching the redesigned Settings / enclave-settings / room-Manage vocabulary. Askama + HTMX + Tailwind, no new deps. ## Structural fix: grouped left sidebar The old shell was a single horizontal tab strip (LC-219) that could not hold 17 tabs and overflowed under the version chip. Replaced with a grouped left sidebar (anchor links styled with the existing `.lc-set-tab`): - Overview: Analytics - People: Users, Invites - Spaces: Rooms, Enclaves - Safety: Reports, Quarantine, Mod log, Anti-spam, Link filter - Integrations: Commands, Bots, Webhooks, Bridges - System: Settings, Backup, Branding The version string now lives in the sidebar footer (no more collision). Collapses to a horizontal scroll rail under 48rem. A standardized page header (title from the active section) sits above the content column. Because every admin page extends this shell, all 19 pages get the sidebar immediately; their inner content is restyled tab-by-tab in follow-up PRs. ## Settings page standardized - Each section (Maintenance, Outbound email/SMTP, Email ingress/IMAP, ingress health, Uploads, new-user defaults, Retention status) is now a bordered `.card`/`.lc-set-card` with a centered max-width. - The bare "Enable maintenance mode" / TLS / enabled / digest checkboxes become the standardized `.lc-toggle`. - The SMTP and IMAP info blocks are clean muted callouts with monospace env-var names; all explanatory copy is kept verbatim. - Inputs/labels/help use `.input` + `.lc-set-field`/`.lc-set-label`/`.lc-set-help`; Save buttons are `.btn .btn-primary` with a spinner. ## No silent saves Maintenance, IMAP, email-digest-default, and the two Uploads actions now detect htmx (`is_hx`) and return the shared `SettingsFeedback` fragment (inline `.lc-set-status` + a toast), with the existing full-page redirect as the no-JS fallback (the LC-454 dual-mode pattern). IMAP error paths (missing `LETS_CHAT_SECRET_KEY`, bad port) surface inline instead of an error page. ## Follow-ups (tracked on LC-510) PR2 People/Spaces tables; PR3 Safety; PR4 Integrations + Branding/Backup; plus a cross-cutting pass for table styling, empty states, and destructive-action confirmation (ban/delete/quarantine). ## Checks `just check`, `just test`, `just test-saas` (incl. en/es i18n parity), `just build-css` all pass.
The 17-tab horizontal strip (LC-219) could not fit and collided with the
version chip. Replace it with a grouped left sidebar (Overview/People/Spaces/
Safety/Integrations/System) reusing .lc-set-tab styling, a standardized page
header, and the version string pinned in the sidebar footer. Collapses to a
horizontal rail under 48rem. Adds the six group-heading strings (en+es).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Maintenance, IMAP, email-digest-default, and the two uploads actions now detect
htmx (is_hx) and return the shared SettingsFeedback fragment (inline status +
toast), with the existing full-page redirect as the no-JS fallback. IMAP error
paths (missing secret key, bad port) also surface inline instead of an error
page. Adds admin-saved / admin-uploads-regenerated / admin-uploads-purged (en+es).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(admin): card-based Settings page with toggles + env-var callouts (LC-510)
All checks were successful
check-secrets / Nosey parker (push) Successful in 3s
check-secrets / Kingfisher (push) Successful in 5s
check-secrets / Nosey parker (pull_request) Successful in 3s
check-secrets / Kingfisher (pull_request) Successful in 5s
check-secrets / TruffleHog (push) Successful in 5s
check-secrets / TruffleHog (pull_request) Successful in 6s
Check / clippy + fmt + tests (pull_request) Successful in 2m58s
Create release / Create release from merged PR (pull_request) Has been skipped
15f97b32ca
Wrap each section (Maintenance, SMTP, Email ingress, ingress health, Uploads,
defaults, retention) in standardized .card/.lc-set-card with centered max-width;
replace bare checkboxes with the .lc-toggle pattern; style the SMTP/IMAP info
blocks as muted callouts with monospace env-var names; wire every save form to
hx-post + a .lc-set-status slot. All explanatory copy preserved.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
longjacksonle deleted branch feat/LC-510-admin-redesign-shell-settings 2026-06-28 05:15:54 +02:00
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
psa-systems/lets-chat!477
No description provided.