feat(enclave): standardize branding page to the redesigned shell (LC-469) #447

Merged
longjacksonle merged 2 commits from feat/enclave-branding-redesign into main 2026-06-25 04:57:39 +02:00

What

Standardizes the enclave Branding page (/enclave/{id}/branding) to the redesigned enclave-settings shell. Ref data/ref-enclave-branding.png. It was the last enclave surface still on the old flat, full-width, un-carded style with a plain breadcrumb. Closes LC-469.

Changes

  • Header: title + a "Back to settings" affordance, replacing the breadcrumb - matches the redesigned pages. Kept as a separate page (multipart logo upload + its own route) rather than folding it into the settings Customization tab.
  • Cards + max-width: content grouped into Colors, Logo, and Login page copy as .lc-set-cards, centered.
  • Color pickers: a styled .lc-swatch native color input + an editable hex field, two-way synced, with a live preview applying the chosen primary/accent to a header bar + button.
  • Logo upload: the profile-avatar treatment - styled Choose-image button, shows the chosen filename, live preview, validates PNG/JPEG/WebP/GIF + ≤1 MiB before submit with an inline error; the current logo is shown as the preview.
  • Save feedback: a success toast on the post-save reload (?saved=1); validation errors render a styled banner; the Save button shows a "Saving..." working state.
  • Inputs/buttons standardized to .input / .btn; explanatory copy kept as muted .lc-set-help; light/dark via tokens.

A self-contained branding.js (gated on [data-lc-branding]) handles the swatch↔hex sync, preview, logo validation, and save toast, so the page does not depend on the enclave-settings redesign.

Scope / safety

Template + JS + CSS + i18n only - no change to the branding handler, data model, validation limits, routes, or hx-swap-oob targets.

Note on history

This branch was cut before #446 (LC-463, enclave settings) merged to main, so I merged current origin/main in (no force-push) to absorb it and resolved the append-point conflicts (base.html, main.css, en/es enclave.ftl) by keeping both sides. The PR diff is now branding-only (6 files).

Verification

just build-css, just check (clippy + fmt clean), just test, just test-saas all green (branding 19/19, enclave-nav 10/10, coyote 7/7). just verify built the release binary clean; its server-up harness lacks the mandatory LETS_CHAT_BUNYIP_SSO_* startup vars, so the standalone server cannot boot to serve /login in this sandbox (environmental, not a regression).

🤖 Generated with Claude Code

## What Standardizes the enclave Branding page (`/enclave/{id}/branding`) to the redesigned enclave-settings shell. Ref `data/ref-enclave-branding.png`. It was the last enclave surface still on the old flat, full-width, un-carded style with a plain breadcrumb. Closes LC-469. ## Changes - **Header**: title + a "Back to settings" affordance, replacing the breadcrumb - matches the redesigned pages. Kept as a separate page (multipart logo upload + its own route) rather than folding it into the settings Customization tab. - **Cards + max-width**: content grouped into Colors, Logo, and Login page copy as `.lc-set-card`s, centered. - **Color pickers**: a styled `.lc-swatch` native color input + an editable hex field, two-way synced, with a live preview applying the chosen primary/accent to a header bar + button. - **Logo upload**: the profile-avatar treatment - styled Choose-image button, shows the chosen filename, live preview, validates PNG/JPEG/WebP/GIF + ≤1 MiB before submit with an inline error; the current logo is shown as the preview. - **Save feedback**: a success toast on the post-save reload (`?saved=1`); validation errors render a styled banner; the Save button shows a "Saving..." working state. - **Inputs/buttons** standardized to `.input` / `.btn`; explanatory copy kept as muted `.lc-set-help`; light/dark via tokens. A self-contained `branding.js` (gated on `[data-lc-branding]`) handles the swatch↔hex sync, preview, logo validation, and save toast, so the page does not depend on the enclave-settings redesign. ## Scope / safety Template + JS + CSS + i18n only - no change to the branding handler, data model, validation limits, routes, or `hx-swap-oob` targets. ## Note on history This branch was cut before #446 (LC-463, enclave settings) merged to main, so I merged current `origin/main` in (no force-push) to absorb it and resolved the append-point conflicts (base.html, main.css, en/es enclave.ftl) by keeping both sides. The PR diff is now branding-only (6 files). ## Verification `just build-css`, `just check` (clippy + fmt clean), `just test`, `just test-saas` all green (branding 19/19, enclave-nav 10/10, coyote 7/7). `just verify` built the release binary clean; its `server-up` harness lacks the mandatory `LETS_CHAT_BUNYIP_SSO_*` startup vars, so the standalone server cannot boot to serve `/login` in this sandbox (environmental, not a regression). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(enclave): standardize branding page to the redesigned shell (LC-469)
All checks were successful
check-secrets / Nosey parker (push) Successful in 7s
check-secrets / Kingfisher (push) Successful in 8s
check-secrets / TruffleHog (push) Successful in 9s
8662e71d1a
The enclave Branding page was the last enclave surface still on the old flat, full-width, un-carded style with a plain breadcrumb. Brought it in line with the redesigned enclave settings.

- Header matches the redesigned pages: title + a "Back to settings" affordance, replacing the breadcrumb. Kept as a separate page (multipart logo upload + its own route) rather than folding it into the settings Customization tab.
- Content wrapped in standardized .lc-set-card cards with a centered max-width, grouped into Colors, Logo, and Login page copy.
- Color pickers: a styled .lc-swatch native color input + an editable hex field, two-way synced, with a live preview applying the chosen primary/accent to a header bar + button.
- Logo upload: the profile-avatar treatment - styled Choose-image button, shows the chosen filename, live preview, validates PNG/JPEG/WebP/GIF + <=1 MiB before submit with an inline error; the current logo is shown as the preview.
- Save feedback: a success toast on the post-save reload (?saved=1); validation errors render a styled banner; the Save button shows a "Saving..." working state.
- Inputs/buttons standardized to .input / .btn; explanatory copy kept as muted .lc-set-help; light/dark via tokens.

A self-contained branding.js (gated on [data-lc-branding]) handles the swatch<->hex sync, preview, logo validation, and save toast, so the page does not depend on the still-open enclave-settings redesign (#446). Template + JS + CSS + i18n only: no change to the branding handler, data model, validation limits, routes, or hx-swap-oob targets. Verified with just build-css, just check, just test, just test-saas (branding test 19/19). just verify built the release binary clean; its server-up harness lacks the mandatory LETS_CHAT_BUNYIP_SSO_* startup vars so the standalone server cannot boot to serve /login in this sandbox (environmental).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into feat/enclave-branding-redesign
All checks were successful
check-secrets / Nosey parker (push) Successful in 3s
check-secrets / Kingfisher (push) Successful in 4s
check-secrets / TruffleHog (push) Successful in 4s
Check / clippy + fmt + tests (pull_request) Successful in 5m47s
check-secrets / Nosey parker (pull_request) Successful in 6s
check-secrets / Kingfisher (pull_request) Successful in 8s
check-secrets / TruffleHog (pull_request) Successful in 10s
Create release / Create release from merged PR (pull_request) Has been skipped
077e2624b1
# Conflicts:
#	server/assets/main.css
#	server/locales/en/enclave.ftl
#	server/locales/es/enclave.ftl
#	server/templates/base.html
longjacksonle scheduled this pull request to auto merge when all checks succeed 2026-06-25 04:52:39 +02:00
longjacksonle deleted branch feat/enclave-branding-redesign 2026-06-25 04:57:39 +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!447
No description provided.