Inbox UI PRs

Repository
rubas/inbox
Pull requests
#336, #335, #333, #334, #332, all open against main
Captured
23 September 2026, 18:03 to 18:41 CEST. Chromium, local task dev with seed data.
Status
Snapshot. A round-4 fix runs now, so screens and head commits can still change. Each capture comes from round 1 or round 2 of its branch. The page does not tie a capture to one commit.

#336 Design-system foundation and card anatomy

rubas/inbox#336 · epics #143, #144 · head 11e583b feat/ui-foundation-cards (captures predate it; body read at 70ba250) · base 667d217

Search pill at 390 px

Before. The pill sits half off screen. Chromium, 390 px, main.
After. The pill starts at the 16 px gutter. Chromium, 390 px, branch round 1.

Login panel in the reader at 390 px

Before. Hand-built pills. When the panel wraps, the two 44 px hits overlap. Chromium, 390 px, main.
After. RowPill buttons with a 16 px row gap. Chromium, 390 px, branch round 2.

Reader Details at 1440 px

Before. From, To, Delivered to. Chromium, 1440 px, cropped, main.
After. Date in de-CH with weekday, seconds, and zone, then Message-ID. Chromium, 1440 px, cropped, branch round 2.

Pile count pill at 390 px

Before. Count at text-micro, 19 by 15 px. Chromium, 390 px, main.
After. CountPill at text-meta, 20 by 19 px; row height unchanged. Chromium, 390 px, branch round 2.

#335 Shell, touch targets, and mobile chrome

rubas/inbox#335 · epics #145, #150 · head 390694d feat/ui-shell-mobile · base 8cfa3fd

The list screens show no visual change, by design. The hit areas grow, and the visuals keep their size. The before and after list captures also use different seed data, so the page leaves them out. The two screens below are new.

New. The sign-in link warning for a failed-authentication GitHub mail. Cancel has focus. Chromium, 1440 px, cropped, branch round 2.
New. The folder menu with 44 px rows. Chromium, 390 px, branch round 1.

#333 Keyboard, accessibility, and realtime

rubas/inbox#333 · epics #148, #149 · head 5f9092d feat/ui-keyboard-realtime · base 8cfa3fd

Landing at 1440 px

Before. No row has focus; j skipped the first mail. Chromium, 1440 px, cropped, main.
After. The first row has focus and shows its action plate. Chromium, 1440 px, cropped, branch round 1.

Shortcut map

New. Two columns at 1440 px. Chromium, branch round 2.
New. One column at 390 px. Chromium, cropped, branch round 2.

#334 Compose recovery, copy, and empty states

rubas/inbox#334 · epics #146, #151 · head 42b6dc1 feat/ui-compose-copy · base 667d217

Failed send at 1440 px

Before. The raw 429 payload. Chromium, 1440 px, cropped, main.
After. Copy for the send limit, with Send again. Chromium, 1440 px, cropped, branch round 1.

Empty search at 1440 px

Before. A Results heading with 0. Chromium, 1440 px, cropped, main.
After. One line that names the scope. Chromium, 1440 px, cropped, branch round 1.

Short viewport, 390 by 500 px

New. Close after a failed save. Close anyway has focus; Send stays in the sheet. Chromium, branch round 2.
New. Fields and editor scroll between the fixed header and footer. Chromium, branch round 1.

#332 Search paging, scope, failure states, and recipient role

rubas/inbox#332 · epics #152, #147 (both stay open) · head 14deedb feat/ui-search-stack · base 667d217

Results heading at 1440 px

Before. Count 50, capped at one page, no scope. Chromium, 1440 px, cropped, main.
After. The full count 60 and the scope. Chromium, 1440 px, cropped, branch round 1.

The round-2 capture after2-1440.png shows a later state (9 results left after a bulk Trash). The page uses round 1 for this pair.

Recipient role at 1440 px

Before. Sender, time, preview. Chromium, 1440 px, cropped, main.
After. to you after the sender. Chromium, 1440 px, cropped, branch round 1.

New result states at 1440 px

New. Show more results under the first 50. Chromium, cropped, branch round 1.
New. One mailbox failed. A notice offers Try again, and the list does not claim Nothing matches. Chromium, cropped, branch round 2.
New. The loading skeleton under reduced motion. Chromium, cropped, branch round 2.
New. A pile dragged 130 px left arms the Trash zone. Chromium, cropped, branch round 1.

Open in the PRs

WhereWhat remainsWhyNeeds
#336The count pill loses its fill on a hovered row.The row hover fill and the pill wash have the same lightness. This already happens on main.A decision from Dominic
#335Restore actions in the folder reader (#145).DESIGN.md says star only; adding more changes the reader contract.A decision from Dominic, or the reader work
#334The bulk bar keeps the short Spam label."Mark as spam" does not fit the one-line bar at 402 px.A decision from Dominic
#332Server search in Feed, Logins, and folder views.Those rows act through the folder store and need their own mutation path. It would double the PR.A follow-up PR
#332Every inbound conversation shows as two rows.In workers/index.ts the root gets its own UUID as thread_id, and replies get the root's Message-ID.A separate PR on receiveEmail

No PR was tested in a real Safari, in Firefox for #336, on iOS, or with a screen reader. The client has no dark theme, so every capture is light only.

Click the image for actual size. Escape closes.