feat(settings): section off the user settings page with a sticky nav (LC-345) #360

Merged
nrupard merged 1 commit from feat/lc-345-settings-sections into main 2026-06-18 22:18:40 +02:00
Owner

What

User settings was one long flat scrollable page of 15 blocks with no grouping. This sections it into 5 labeled groups with a sticky in-page nav of jump links:

  • Profile - account info, profile (avatar / name / email / bio)
  • Appearance - language, theme / density / text size
  • Notifications & Activity - preferences, highlight words, Do Not Disturb
  • Privacy & Security - active sessions, blocked users, API tokens
  • Data & Account - storage, data export, delete account, about

Approach

Mirrors the admin sectioning with the lightest faithful mechanism (per the chosen option): a sticky <nav> of anchor links jumping to <section id> groups on the same page, with scroll-mt-* so the heading clears the sticky bar. Single route, no JS, no new view fields.

All existing block markup, forms, scripts (text-size init), and partials (keyword list) are preserved verbatim - only the grouping/order, the section wrappers, and the nav are new. New settings-section-* + settings-sections-nav i18n keys in en + es.

Test

  • ./dev/cargo check + just check (clippy/fmt) clean; Askama validates the template + that every referenced key exists.
  • just test + just test-saas pass; i18n_catalog confirms en/es parity for the new keys.
  • No Rust changes (template + 2 locale files only); no migration.

Closes LC-345.

## What User settings was one long flat scrollable page of 15 blocks with no grouping. This sections it into 5 labeled groups with a sticky in-page nav of jump links: - **Profile** - account info, profile (avatar / name / email / bio) - **Appearance** - language, theme / density / text size - **Notifications & Activity** - preferences, highlight words, Do Not Disturb - **Privacy & Security** - active sessions, blocked users, API tokens - **Data & Account** - storage, data export, delete account, about ## Approach Mirrors the admin sectioning with the lightest faithful mechanism (per the chosen option): a sticky `<nav>` of anchor links jumping to `<section id>` groups on the same page, with `scroll-mt-*` so the heading clears the sticky bar. Single route, no JS, no new view fields. All existing block markup, forms, scripts (text-size init), and partials (keyword list) are preserved **verbatim** - only the grouping/order, the section wrappers, and the nav are new. New `settings-section-*` + `settings-sections-nav` i18n keys in en + es. ## Test - `./dev/cargo check` + `just check` (clippy/fmt) clean; Askama validates the template + that every referenced key exists. - `just test` + `just test-saas` pass; `i18n_catalog` confirms en/es parity for the new keys. - No Rust changes (template + 2 locale files only); no migration. Closes LC-345.
feat(settings): section off the user settings page with a sticky nav (LC-345)
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 5s
check-secrets / Kingfisher (pull_request) Successful in 4s
check-secrets / TruffleHog (pull_request) Successful in 4s
Check / clippy + fmt + tests (pull_request) Successful in 2m22s
Create release / Create release from merged PR (pull_request) Has been skipped
check-secrets / Nosey parker (pull_request) Successful in 5s
2d516ba630
User settings was one long flat scroll of 15 blocks. Group them into 5 labeled <section> anchors - Profile, Appearance, Notifications & Activity, Privacy & Security, Data & Account - with a sticky in-page nav of jump links at the top (mirrors the admin sectioning; plain anchors + scroll-mt offsets, no JS, single route). All existing block markup, forms, scripts, and partials are preserved verbatim; only grouping/order and the section wrappers + nav are new. New section-title i18n keys in en + es.

#LC-345

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
nrupard deleted branch feat/lc-345-settings-sections 2026-06-18 22:18:40 +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!360
No description provided.