Skip to content

feat(settings): add /settings and move the dashboard onto a sidebar - #911

Merged
SomethingNew71 merged 7 commits into
mainfrom
feature/settings-page
Sep 29, 2026
Merged

SomethingNew71 merged 7 commits into
mainfrom
feature/settings-page

Conversation

@SomethingNew71

Copy link
Copy Markdown
Collaborator

Summary

  • New /settings page, open to every visitor:
    • preferences (public): language and currency. It is the only language and currency control on the site.
    • membership: the member-management card, extracted from /membership.
    • notifications: moved from /dashboard. It stays behind the marketplace flag.
    • api-keys: moved from /dashboard.
    • security: passkeys and the delete-account link, moved from /profile/edit.
  • /dashboard uses a grouped sidebar (<AccountShell>) instead of the 12-tab strip. /dashboard and /settings share one sign-in gate (<AccountSignInGate>).
  • MainNav:
    • The account menu gets Settings. It loses Membership, "API & Dev Tools" and the language picker.
    • The signed-out header gets a globe link to /settings/preferences.
    • The mobile drawer gets Dashboard and Settings.
  • /membership stays the public sales and checkout page. Members see a link to /settings/membership.
  • The saved currency is now read back after hydration (initUserCurrency was never called). A choice made while the profile read is in flight wins.
  • /dashboard/api-keys and /dashboard/notifications 301 to /settings/*. These redirects are permanent: transactional emails and the MCP README link to the old paths.

Design: docs/plans/2026-09-28-settings-page-and-dashboard-sidebar.md. Rules: .claude/rules/account-settings.md.

Test plan

  • bun run test: 6413 / 6413 pass. New tests cover the shell, the gate, the settings page, the membership section, the currency select and the currency race.
  • Typecheck matches the baseline, and the shadowed auto-import sweep is clean.
  • NITRO_PRESET=cloudflare_module bun run build succeeds.
  • Dev server, signed out:
    • /settings returns 302 to preferences.
    • The old paths return 301.
    • A language switch persists across a reload (i18n_redirected=de).
    • A currency choice persists across a reload.
    • An account section shows the sign-in card.
    • At phone width there is no sideways overflow.
    • There are no hydration warnings.
  • Signed in (no local test account): the settings sections, the member card, and the dashboard sidebar at desktop and phone width.

After merge

  • Run scripts/sync-tme-zone-redirects.py. The TME /settings/* targets changed.
  • In classicminidiy-supabase, repoint the email links to /settings/notifications.

🤖 Generated with Claude Code

…ications, API keys and security into it

Work in progress: MainNav, link updates, rules/docs and test updates still pending.
…the move

- MainNav: account menu gets Settings and loses Membership, API & Dev Tools and
  the language picker; signed-out header gets a globe link to
  /settings/preferences; drawer gets Dashboard and Settings.
- AccountSignInGate shared by /dashboard and /settings; the AccountShell
  nav-footer now shows below lg too.
- /settings/membership waits for the profile before choosing member or join.
- useCurrency: a choice made while the profile read is in flight wins.
- Repoint /dashboard/api-keys and /dashboard/notifications references,
  the listing wizard's change-currency link, EMAILED_PATHS, route crawler
  expectations, rules (new account-settings.md) and invariants.
- Tests: ManageCard suite split out of membership.test.ts; new shell, gate,
  settings page, currency select and currency race tests; E2E specs drive the
  language switch through /settings/preferences.
@SomethingNew71
SomethingNew71 merged commit c6919ec into main Sep 29, 2026
8 checks passed
SomethingNew71 added a commit that referenced this pull request Sep 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant