User: "inbox is really really bad. So I want all possible ways to
search for an email that we can do... realtime for everything and the
dashboard to show our latency... show how much unread emails." Plus a
follow-up: "I don't like how the emails looks like because they have
that blue gradient, I want dashboard style good one."
Inbox:
- Wired the backend search endpoint (GET /unibox with from/subject/
unseen/since/until/cursor/limit) — was implemented server-side but
the frontend was never calling it. Inbox now actually reflects
server data.
- New UniboxSearchParams model + searchIncoming client + infinite
useUniboxSearch hook that drops null rows defensively.
- ConversationList: SearchInput (subject substring) + quick-filter
strip (All / Unread / Today / This week). Unread count surfaces
in the SectionBar header AND on the Unread chip. Skeleton +
explicit error block with retry; "Load more · N shown" when more
pages are available.
- UniboxFilterSheet (advanced filters in the right-side panel):
free-text query, sender substring, account picker pulled from
the user's connected mailboxes, status toggle (Any/Unread/Read),
since/until date pickers with toggle, newest/oldest sort. Draft
state mirrors parent until Apply.
LivePanel telemetry (sidebar):
- Real WS roundtrip latency. SocketProvider stamps performance.now()
per heartbeat ref; phoenix phx_reply with that ref computes the
delta and publishes via setWsLatencyMs. LivePanel colour-codes
the latency text: <100ms emerald, <300ms amber, ≥300ms red, "—"
when disconnected.
- Unread count row reads from useAppStore.unseenCount.
- Status label: OFFLINE / CONNECTING / LIVE (with pulse) / IDLE,
tied to connectionStatus + active mailbox count.
Transactional emails (no more blue gradient):
- base.go rewritten as dashboard chrome: cream #f5f6f8 background,
white card with hairline #e2e8f0 border, 8px radius, slate-900
text. Logo monogram in slate, no decorative haze, no gradients.
- login_code / registration_code: tiny uppercase eyebrow + 18px
bold heading + neutral body + monospace code pill in a hairline-
bordered box. No serif type.
- reset_password / welcome: same chrome. Slate-900 primary button
replaces the sky-gradient one. Plaintext link below for accessible
fallback.
- Template tests updated against the new markup; all green.