mirror of
https://github.com/block/buzz.git
synced 2026-11-05 08:51:10 +00:00
The Canvas preview sat above the message timeline as a fixed 25.2/28.8rem
strip, so it ate the top of every project channel's chat: the timeline
started below the fold, and a "Chat preview boundary" marker had to be
drawn across the full Canvas to show authors where that fold landed.
Put the preview in a right-hand pane instead. Chat keeps its full height,
and the Canvas gets a tall column, which suits a dashboard of stacked
widgets far better than a letterbox.
- `ChannelViewOverride` gains `mainColumnHeaderPlacement`
("top" | "right", default top). `ChannelPaneMainColumn` lays the header
out as a sibling column (`order-last`, `clamp(24rem, 38%, 28.8rem)`)
when it is "right" and keeps the existing `contents` pass-through
otherwise, so no other channel view changes. `ProjectChannelHome` asks
for "right" on the chat tab and "top" on the canvas tab, where the
surface still fills the pane.
- The pane is container-queried, not viewport-queried: it appears only
once the chat column itself is at least 52rem wide, so a narrow window
shows chat at full width and users reach the Canvas through its tab.
`ChannelPane` also passes `hideRightHeader` when a split auxiliary pane
is open, so a thread, profile, or agent panel takes that space rather
than competing with it. The frame stays mounted (`display: none`), so
opening and closing a thread never reloads the package or drops its
live subscriptions.
- The preview-boundary marker goes away with the fold it described, and
"Show full canvas" becomes a tooltipped icon button pinned
bottom-right, since a full-width labelled button no longer fits a 24rem
column. It follows the existing icon-button idiom: one `aria-label` on
the button, matching tooltip copy.
The e2e spec binds the new geometry — chat and composer both end at or
before the pane's left edge and the pane is taller than it is wide; the
narrow-viewport test now asserts the pane is hidden and the full tab is
the way in; and a new 1920px test opens a thread to check the pane
yields, chat takes the width, and the frame's `src` survives the round
trip.
Verified: desktop unit suite 5987 passing, project-channel-canvas 8
passing, the project and thread layout specs 6 passing, and tsc, biome,
px-text, pubkey-truncation, and the file-size gate clean. Three specs
fail on this branch independent of this change —
project-cold-start.spec.ts:76 and :107 plus
project-empty-state-alignment.spec.ts:48 look for
`project-home-context-panel`, whose component has had no callers since
the channel-first migration.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: Matt Toohey <contact@matttoohey.com>
Buzz
Desktop chat shell with:
- Tauri + React + TypeScript + Vite
- Tailwind CSS
- shadcn/ui-ready shared components
- Biome (lint/format/check)
- Feature-driven frontend structure
Scripts
pnpm dev- run the web frontendpnpm tauri dev- run the desktop apppnpm build- typecheck and build frontendpnpm typecheck- TypeScript checkspnpm lint- Biome lintpnpm format- Biome format (write)pnpm check- Biome check
Structure
src/shared- reusable app-wide code (ui,lib,styles)src/features- feature modules (vertical slices)src/app- top-level app composition