Each section of the user settings page (Profile, Account, Notifications,
API Access, Data & Privacy) is now a real, linkable path
(/settings/profile, /settings/account, etc.) instead of local toggle
state, so sections can be bookmarked, shared, opened in a new tab, and
reached via the browser back/forward buttons.
- Route now matches an optional segment (settings/:section?), keeping the
single route so the shared loader/action and form submissions are
unchanged. An unknown section redirects back to /settings.
- The shared settings nav components render proper <Link>s when given a
buildHref/backHref, and keep their button/onClick behaviour for the
league settings page (which has unsaved-changes guards).
- The settings page derives the active section and mobile grid/section
view from the URL param instead of useState.
- Notifications "Account settings" link and the Discord OAuth callback
now point at /settings/account.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jt8Hhsio4bHGMaDZy7ftBs
* Add Discord account linking from settings page
Adds a "Connect Discord" button in the Account settings section that
triggers BetterAuth's linkSocial flow to attach a Discord account to
an existing user without requiring a sign-out/sign-in. After the OAuth
callback, the ?section= URL param returns the user to the Account tab.
The Notifications toggle was already gated on Discord being linked.
https://claude.ai/code/session_01UerTpTuBWjreTNEns8srkp
* Fix Discord linking error handling and section routing issues
- Reset linkingDiscord state and show error message when linkSocial throws,
so users can retry if the OAuth flow fails
- Move VALID_SECTION_IDS to module level and derive it from SECTIONS to
avoid per-render allocation and prevent the two from drifting out of sync
- Remove premature SectionId cast before the allowlist validation in
the ?section= URL param handling
- Add tests for loading state and error recovery in AccountSection
Fixes#455https://claude.ai/code/session_01UerTpTuBWjreTNEns8srkp
---------
Co-authored-by: Claude <noreply@anthropic.com>