feat(ui): inbox redesign — workspace clustering, dual view, prose typography, hidden editor tabs#374
Merged
Conversation
…abs by default Inbox detail pane: - Docs render as collapsed attachment cards (filename + 2-line text preview) above the comment, so a long comment can't push them off-screen; expand renders the live file in full. Comment-less entries default their docs expanded. - Refresh stale copy: EmptyState + inbox-store header now describe the live `inbox_push` MCP write path instead of "still being designed / seed-only". Typography: - Give `.markdown-content` a 15px prose base (single knob for chat / inbox comment / doc preview / file viewer) — markdown was inheriting the 16px browser default and reading oversized next to UI chrome. Not yet semantic-ized; sizes still being tuned. Editor tabs: - TabStrip hidden by default behind a persisted `showEditorTabs` preference; opt back in via Settings › Appearance. Navigation is ActivityBar/sidebar-driven (tmux-style); the strip was low-use and accumulated forgotten tabs. i18n: documentsSection / docExpand / docCollapse / docNoPreview + settings.appearance.* across en/zh/zh-Hant/ja. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The inbox was a flat per-push notification stream. Cluster the pushes by workspace (our durable unit — we have no Issue layer) so a workspace's updates read as kin instead of scattering, while keeping selection and detail PER-PUSH: a workspace's pushes are usually unrelated topics, so merging them into one combined timeline read badly. - New `groupThreads` helper buckets the feed by workspaceId, ordered by latest push (a workspace bubbles to the top on new activity). - Sidebar gains two view modes, toggled from the header (persisted): - Workspace — clustered, label header + a rail of its message rows. - Time — flat chronological feed, date-bucketed (the prior behavior). j/k and default-select follow the displayed order in either mode. - Detail renders the single selected push (docs above comment, reply bar jumps into the workspace); selection/read stay per-entry. i18n: viewTime / viewWorkspace across en/zh/zh-Hant/ja. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A round of Inbox UX work plus two app-wide chrome tweaks, all frontend:
inbox_pushwrite path..markdown-contentgets a 15px base (single knob for chat / inbox / doc preview / file viewer); markdown was inheriting the 16px browser default and reading oversized next to UI chrome.TabStripis gated behind a persisted preference (Settings › Appearance); navigation is sidebar-driven.Test plan
npx tsc -b(ui) cleanlocalhost:5173— both inbox views, doc expand/preview, tab toggle, prose sizingpnpm testnot run (UI-only, esbuild doesn't enforce types anyway)Boundary touch
None — frontend only (the one
src/change is a doc comment ininbox-store.ts).🤖 Generated with Claude Code