--- type: User Story title: Manage linked accounts from the dashboard description: Authenticated users maintain their profile and active Java Edition accounts. tags: [player, dashboard, minecraft, profile] timestamp: 2026-08-01T22:04:17Z story_id: US-005 status: verified --- # User Story As a registered player, I want to manage my profile and linked Minecraft accounts, so that my whitelist identity remains current. # Acceptance Criteria - [x] Given an authenticated user, then only their own profile, accounts, and IP observations are visible and mutable. - [x] The user can update their preferred name. - [x] The user can add Mojang-verified or explicitly confirmed accounts from an allowed network. - [x] The user can soft-remove an active account. - [x] The user can choose exactly one active primary account. - [x] Removing a primary account promotes another active account when one exists. - [x] Name and primary changes preview the expected Discord nickname and require explicit confirmation before either profile mutation occurs. - [x] The dashboard shows recent portal and game IP observations with classification and available location. - [x] The user can revoke the current session by signing out. # Implementation - [`apps/web/src/app/account/page.tsx`](../apps/web/src/app/account/page.tsx) - [`apps/web/src/app/account/actions.ts`](../apps/web/src/app/account/actions.ts) - [`apps/web/src/app/auth/actions.ts`](../apps/web/src/app/auth/actions.ts) # Validation Server actions verify the current session, constrain every account lookup by the authenticated user ID, and require the explicit Discord confirmation field before name or primary-account mutations. Confirmation parsing is covered by [`apps/web/src/lib/dashboard-change-confirmation.test.ts`](../apps/web/src/lib/dashboard-change-confirmation.test.ts). # Related Stories - [Synchronize Discord nicknames](us-006-discord-nickname.md) - [Enrich login IPs](us-007-ip-intelligence.md)