Redesign main/hamburger menu #99

Closed
opened 2026-08-18 02:09:30 +00:00 by Grandiras · 2 comments
Owner

It's becoming too crowded and too hard to grasp. Draft and implement a new design. Also iterate on the design of the release notes and its advertisements.

It's becoming too crowded and too hard to grasp. Draft and implement a new design. Also iterate on the design of the release notes and its advertisements.
Collaborator

🤖 On it — follow along in the action run; the reply will link the full session transcript.

📜 Live transcript — updating every ~5 minutes while the task runs.

🤖 On it — follow along in [the action run](https://git.grandiras.net/Grandiras/claude-bot/actions/runs/270); the reply will link the full session transcript. <!-- claude-run:comment --> 📜 [Live transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/issue-99/run-270.md) — updating every ~5 minutes while the task runs.
Collaborator

Pushed as claude/issue-99.

What the menu is now

The header's right corner held three controls — a sparkle button for the release notes, an account chip that looked pressable and wasn't, and a hamburger — and the menu behind the third was two stacked pill blocks plus three differently-shaped full-width buttons in no particular order. The rule now is one door, one row shape, four groups.

  • The avatar is the button (.nav-menu-toggle). The chip is gone; the identity is said once, at the top of the menu it belongs to, with a role line for an admin (which is why the pages under it exist).
  • .nav-menu-row is the one shape for everything the menu does — Share, What's new, Install: icon, word, and whatever the row has to say on the right. ShareButton takes it as its CssClass, so one component is a square icon button in the card dialog and a row here.
  • Theme and language are one line each, label left and choice right, instead of four rows of label-over-pills.
  • The version moved to the foot, beside Sign out — it's what a bug report needs, not a second line under a row whose label already said everything.
  • There is deliberately no default style for buttons in .board-user any more; each control says what it looks like once, and the :not(…) specificity war the stylesheet kept warning about goes with it.

Desktop: three controls and a stack of blocks, versus one avatar and four groups

On a phone it's the bottom sheet the board switcher already is — within reach of the thumb, dimmed backdrop, grab handle — and the admin pages fold the way they're folded into one flyout on a desktop. Before: 13 rows with Sign out below the fold. After: the whole menu fits on a 390×780 screen.

Phone: the sheet, with the admin pages folded

The release notes and their advertisement

One dot instead of two nudges. It stands for everything unseen in the menu — a release nobody has read about or the offer to install — and the row inside says which, with a "New" badge. The two halves are still marked seen at different moments, deliberately: opening the menu is seeing the install offer, and is not reading the release notes, so the dot can survive an open and still mean something.

The dialog is a timeline. Nine equally-weighted filled panels made the one entry a reader came for a tint away from the eight they'd read; now the newest is open at the top, the ones behind it sit on a rail, and everything older than the last few is behind one press — which takes focus back when it fires, or Escape would stop closing the dialog with the button gone.

Release notes: nine equal panels versus a timeline

Both locales and both themes are covered (German fits the menu; dark takes ink on the light brand fills, not white). A 2.7.0 entry describing all of this went into Services/Changelog.cs, and the affected sections of CLAUDE.md were rewritten, including a new The account menu section.

Verified

  • dotnet build clean; 282 unit tests pass (translation parity, changelog copy rules included).
  • E2E against a locally built stack (dotnet + Postgres in this container): mobile, boards, changelog, install, prefs, i18n, share, board, filter all pass — specs updated for the new selectors, including install.spec.js now marking the release notes read so the shared dot is unambiguous, and mobile.spec.js dismissing the sheet by clicking the dimmed board above it (there is no gutter beside a full-width sheet).
  • The full run was 110 passed / 23 failed. Every failure is either PDS-dependent (no PDS container here) or in the calendar cluster — and I re-ran those on unmodified main in the same container: the same 9 calendar/boards tests fail identically, so they are environmental, not from this change.
  • Screenshots above are the real app running at localhost:8090, before and after, on the same board.

⏱ 58m 7s · 220 turns · tokens: 323.1k in / 112.6k out (+48805.3k cache-read)
📜 Full session transcript
→ Opened PR: #102

Pushed as `claude/issue-99`. ## What the menu is now The header's right corner held **three** controls — a sparkle button for the release notes, an account chip that looked pressable and wasn't, and a hamburger — and the menu behind the third was two stacked pill blocks plus three differently-shaped full-width buttons in no particular order. The rule now is **one door, one row shape, four groups**. - **The avatar is the button** (`.nav-menu-toggle`). The chip is gone; the identity is said once, at the top of the menu it belongs to, with a role line for an admin (which is why the pages under it exist). - **`.nav-menu-row` is the one shape** for everything the menu *does* — Share, What's new, Install: icon, word, and whatever the row has to say on the right. `ShareButton` takes it as its `CssClass`, so one component is a square icon button in the card dialog and a row here. - **Theme and language are one line each**, label left and choice right, instead of four rows of label-over-pills. - **The version moved to the foot**, beside Sign out — it's what a bug report needs, not a second line under a row whose label already said everything. - **There is deliberately no default style for buttons in `.board-user` any more**; each control says what it looks like once, and the `:not(…)` specificity war the stylesheet kept warning about goes with it. ![Desktop: three controls and a stack of blocks, versus one avatar and four groups](https://git.grandiras.net/attachments/0a40ee74-0c3f-43b7-8906-8c98bbbf7401) **On a phone it's the bottom sheet the board switcher already is** — within reach of the thumb, dimmed backdrop, grab handle — and the admin pages fold the way they're folded into one flyout on a desktop. Before: 13 rows with Sign out below the fold. After: the whole menu fits on a 390×780 screen. ![Phone: the sheet, with the admin pages folded](https://git.grandiras.net/attachments/3c8a3026-78e5-4073-ac69-a14bed7ade41) ## The release notes and their advertisement **One dot instead of two nudges.** It stands for everything unseen in the menu — a release nobody has read about *or* the offer to install — and the row inside says which, with a "New" badge. The two halves are still marked seen at different moments, deliberately: opening the menu *is* seeing the install offer, and is *not* reading the release notes, so the dot can survive an open and still mean something. **The dialog is a timeline.** Nine equally-weighted filled panels made the one entry a reader came for a tint away from the eight they'd read; now the newest is open at the top, the ones behind it sit on a rail, and everything older than the last few is behind one press — which takes focus back when it fires, or Escape would stop closing the dialog with the button gone. ![Release notes: nine equal panels versus a timeline](https://git.grandiras.net/attachments/a1ff12b2-f9c5-48c0-be54-98e525e16f0e) Both locales and both themes are covered (German fits the menu; dark takes ink on the light brand fills, not white). A `2.7.0` entry describing all of this went into `Services/Changelog.cs`, and the affected sections of `CLAUDE.md` were rewritten, including a new *The account menu* section. ## Verified - `dotnet build` clean; **282 unit tests pass** (translation parity, changelog copy rules included). - E2E against a locally built stack (dotnet + Postgres in this container): **`mobile`, `boards`, `changelog`, `install`, `prefs`, `i18n`, `share`, `board`, `filter` all pass** — specs updated for the new selectors, including `install.spec.js` now marking the release notes read so the shared dot is unambiguous, and `mobile.spec.js` dismissing the sheet by clicking the dimmed board above it (there is no gutter beside a full-width sheet). - The full run was 110 passed / 23 failed. Every failure is either PDS-dependent (no PDS container here) or in the calendar cluster — and I re-ran those on **unmodified `main` in the same container: the same 9 calendar/boards tests fail identically**, so they are environmental, not from this change. - Screenshots above are the real app running at `localhost:8090`, before and after, on the same board. --- ⏱ 58m 7s · 220 turns · tokens: 323.1k in / 112.6k out (+48805.3k cache-read) 📜 [Full session transcript](https://git.grandiras.net/Grandiras/claude-bot/src/branch/claude-logs/transcripts/Grandiras/Ponente/issue-99/run-270.md) → Opened PR: https://git.grandiras.net/Grandiras/Ponente/pulls/102
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Grandiras/Ponente#99
No description provided.