Account Settings, with a photo

The personal level is now called Account Settings, and its Profile card takes a photo — the picture the rail, the popover trigger and a conversation thread draw for you instead of your initials.

7 Sept 2026 · branch account-avatar · captured against propflow-stage · at 5841e54bce+local

Data note. Every name and balance below comes from propflow-stage, which is anonymized by construction (ADR-0097/0110 — phones in the impossible +1000 NPA, emails @example.test). The identical capture against prod would carry real tenants' names and balances and is not safe to attach anywhere, which is why the generator refuses to run against one.

1 · BEFORE — User Settings, initials only

On origin/main the personal level is titled User Settings and the Profile card is name, email, phone, role and the time-zone row. The rail's account row at the bottom-left is a blue disc with the person's initials, and there is no way to put a face on it.

Asserted in the captured DOMUser Settings · Profile · Name · Email · Phone · Time zone. The old title and the five profile fields, asserted in the DOM on origin/main. No 'Photo' label exists on this page.

BEFORE — User Settings, initials only
origin/main: /settings/account as User Settings ⚠ Provenance. Captured from commit ad990d3cb5 plus uncommitted changes, read from the worktree the server was started from (/Users/miniclaw/code/PropFlow/propflowai) — the server could not report its own commit, so this is the weaker of the two sources. ⚠ That is the current tip of origin/main. If this section is labelled a BEFORE, it is not one — it is showing today's main, which already carries the change.

2 · Account Settings — the Profile card takes a photo

Same route, renamed in the top bar's centre and the h1 (Gera, 2026-09-08: "maybe we should change it to account settings rather than user settings"). The Profile card opens with a Photo row: the current picture at 56px — initials until there is one — an Upload photo button, and the rule in plain words. The picker accepts JPG, PNG, WebP or GIF up to 8 MB; the server normalises whatever arrives to a 256px square WebP, so every avatar in the product is the same shape. A photo saves on pick, outside the Save bar, because it is chosen rather than typed.

Asserted in the captured DOMAccount Settings · Profile · Photo · Upload photo · JPG, PNG, WebP or GIF up to 8 MB · Name · Email · Phone · Time zone. The new title, the Photo label and its Upload button, the file rule, and the five unchanged profile fields — all in the DOM on the branch. The rail at the bottom-left still shows initials because this account has not uploaded yet; the upload round trip is on the companion page.

Account Settings — the Profile card takes a photo
branch: /settings/account as Account Settings, Photo row first in Profile

3 · The popover header row is now labelled Account settings

The ⋯ popover's name/email header row — the one affordance for the person's own settings since #7324 — keeps its gear and its link to /settings/account; its accessible name follows the rename. The trigger itself is now the same UserAvatar the account page draws, so once a photo exists it shows here too.

Asserted in the captured DOMAccount Settings · Sign out. The popover is open (its Sign out row is in the DOM) on the renamed page.

The popover header row is now labelled Account settings
branch: the rail's ⋯ popover open above the account row

What this page does not show, and where it is

The upload itself — choose a file, see the photo land in the Profile card and in the rail without a reload, open a conversation thread, then Remove and watch it fall back — is an interaction the evidence spec cannot drive (no file-upload action), so it lives on the companion page pr-7335-account-photo-round-trip, captured against the same branch dev server with DOM assertions per step.

PropFlow Docs