# Self-Service Profile Page Design ## Overview Add a `/manage/profile` page where authenticated users can view and edit their OIDC profile fields. This completes the self-service user management story alongside the existing `/manage/credentials` page. ## Editable Fields | Field | Input type | Validation | |-------|-----------|------------| | `given_name` | text | max 255 chars | | `family_name` | text | max 255 chars | | `preferred_username` | text | max 255 chars | | `email` | email | HTML5 + server-side format check | | `phone_number` | tel | optional, no strict format | | `picture` | url | optional, valid URL check | | `locale` | text | optional, max 20 chars | Read-only: `username` (login identity, displayed but not editable). ## Architecture ### Routes Add to `manage/routes.py`: - `GET /manage/profile` — render profile form pre-filled with current user data - `POST /manage/profile` — validate and update user, return HTMX partial response Auth guard follows existing pattern: `get_session_user(request)` with redirect to `/login`. ### Templates Create `manage/base.html` extending `base.html` with a nav bar containing links to Profile and Credentials. Both manage pages extend this instead of `base.html` directly. ``` templates/ base.html (unchanged) manage/ base.html (NEW - adds nav) credentials.html (CHANGED - extends manage/base.html) profile.html (NEW - profile form) ``` ### Navigation The `manage/base.html` template adds a `