Skip to content

feat(desktop): projects overview v2 — aggregate rail, PR review flow, commit detail, and straighter layout - #1677

Merged
thomaspblock merged 14 commits into
mainfrom
projects-v2
Jul 9, 2026
Merged

feat(desktop): projects overview v2 — aggregate rail, PR review flow, commit detail, and straighter layout#1677
thomaspblock merged 14 commits into
mainfrom
projects-v2

Conversation

@thomaspblock

Copy link
Copy Markdown
Contributor

Summary

Full projects-v2 line of work, including the layout iteration merged in #1672:

  • Projects overview aggregate rail: languages and repository totals aggregated across repos into a right-hand rail; local checkouts preferred for the repo snapshot scan; polished contribution card and rail headings.
  • PR review flow: draft/ready toggle, reviewer requests, and approvals, with a flattened review card that highlights approval state.
  • Commit detail page: parent diff and full breadcrumbs.
  • Compact project list rows with inline stats and activity.
  • Layout v1 (style(desktop): straighter projects layout with unified cards and divider lines #1672): unified rounded cards with internal divider lines across the overview, PR detail, and issue detail views; right-hand meta rails for PRs/issues; inset segmented activity bars on project cards (PRs = primary, commits = primary tint, issues = orange) with hover tooltip; full-bleed list dividers; wider contribution graph spacing.

Screenshots of the final look are in the #1672 comment: #1672 (comment)

Test plan

  • just ci
  • E2E: project-commit-detail.spec.ts, project-pr-review.spec.ts
  • Visual review of overview, grid/list, PR detail, issue detail, commit detail

…overview

Add Top Languages and Repositories summary cards to the overview's main
column, aggregated across every repository instead of a single one. A new
throttled useProjectsRepoSnapshotsQuery fans out blobless repo snapshots
(3 at a time, cached 15 minutes, only while the overview header is
visible) to feed the language tally, file/contributor totals, and latest
commit. Language helpers move to a shared lib so the single-project rail
and the workspace overview share one implementation.
… rail

Place the aggregated Top Languages and Repositories sections under People
in the overview's right rail, matching the single-project detail rail,
instead of as standalone cards in the main column.
Remote git storage can be empty or unreachable (staging relay repos have
no refs), leaving the overview language and repository aggregates blank.
Scan local checkouts under the workspace repos dir first — no network,
no clone — and only fall back to a remote blobless clone for projects
without usable local data.
…dings

Drop the redundant caption from the contribution activity header, swap
the heatmap cells' native title text for the shared tooltip, and restyle
the overview rail headings from uppercase labels to regular text.
…crumbs

Clicking a commit in the Commits tab now opens a detail view with the
commit header and its diff against the parent, reusing the PR files-changed
panel. Breadcrumbs on all work item detail pages (PR, issue, commit) now
render the full trail (Projects > project > category > title) with each
segment stepping back exactly one level.
…regate-rail

# Conflicts:
#	desktop/playwright.config.ts
…, approvals

Adds GitHub-style review capabilities to the PR detail view, grounded in
what the Buzz protocol supports: draft/ready via NIP-34 status kinds
(1630/1633, same shape as `buzz pr status`), and reviewer requests +
approvals as labeled kind:1 comments (t=review-request / t=approval)
since NIP-34 has no dedicated review kinds. A review card in the
conversation flow (above the composer) shows reviewers, review state,
and the Approve / Ready-for-review / Convert-to-draft actions, gated to
the PR author or repo owner per the existing trusted-actor rules.

Also includes earlier UI polish from this branch: grayscale activity
heatmap, icon-only view toggles, breadcrumb + tab restructure (Code
first, branch picker + local/remote toggle in panel headers), viewer
git-identity commit avatar matching, and StatPill label cleanup. Splits
hooks.ts and ProjectRepositoryPanel.tsx to stay under the file-size
guard. Mock bridge now accepts repo-scoped publishes so PR comments,
approvals, and status changes work in e2e; adds project-pr-review spec.
…regate-rail

# Conflicts:
#	desktop/playwright.config.ts
#	desktop/src/features/projects/ui/ProjectCommitDetailPanel.tsx
#	desktop/src/features/projects/ui/ProjectDetailFeedPanels.tsx
#	desktop/src/features/projects/ui/ProjectDetailScreen.tsx
#	desktop/src/features/projects/ui/ProjectOverviewPanel.tsx
#	desktop/src/features/projects/ui/ProjectPullRequestsPanel.tsx
#	desktop/src/features/projects/ui/ProjectWorkspaceTabs.tsx
#	desktop/src/features/projects/ui/ProjectsOverviewPanel.tsx
#	desktop/tests/e2e/project-commit-detail.spec.ts
@thomaspblock

Copy link
Copy Markdown
Contributor Author

🤖 Screenshots of the layout changes in this PR.

Projects overview + grid

Unified overview card (header, stat boxes, contribution graph, repository rail with dividers), and project cards with the inset segmented activity bar (PRs = primary, commits = primary tint, issues = orange) and left-aligned people avatars under the description.

01-projects-grid

Projects list view

Horizontally aligned rows with full-bleed dividers and relative-time-only updated labels.

02-projects-list

Project detail — overview

Single rounded card for the project overview with the meta rail split by dividers.

03-project-overview

Pull request detail

Header, sub-tab menu (text-width underlines), and conversation unified into one rounded card, with status/branches/activity/review pushed into the right meta rail.

04-pr-detail

Issue detail

Same unified-card treatment with the meta rail keeping focus on the conversation.

05-issue-detail

@thomaspblock
thomaspblock marked this pull request as ready for review July 9, 2026 16:17
@thomaspblock
thomaspblock requested a review from a team as a code owner July 9, 2026 16:17
@thomaspblock
thomaspblock merged commit 58fe938 into main Jul 9, 2026
25 checks passed
@thomaspblock
thomaspblock deleted the projects-v2 branch July 9, 2026 16:24
thomaspblock added a commit that referenced this pull request Aug 7, 2026
…g, activity feed polish (#5073)

## Summary

Follow-up batch on the Projects overview (continues merged #1677):

- **Repository access restrictions** — repositories the viewer can't
reach are surfaced with a reason instead of failing silently.
Channel-ACL denials (which arrive as the same 404 as a missing repo, for
anti-enumeration) are re-classified using the repository's channel
binding and the viewer's memberships (`useRepositoryAccess.ts`,
`projectRepoAvailability.ts`).
- **Projects loads in seconds instead of minutes** — enumeration no
longer crawls every kind:5 deletion event on the relay. It fetches
project/repo announcements first, then queries deletions scoped to those
coordinates via chunked `#a` filters (3 queries instead of hundreds on
staging).
- **Activity feed layout polish** — bare event-type glyph beside the
headline (no badge circle), timeline spine runs through the avatars
connecting consecutive cards, linkable actor/project names are bold in
theme foreground, rounded hover state, alignment fixes.
- **Create button pinned** — the "+" create menu is pinned to the pane's
top-right corner (equal 16px insets) and no longer scrolls away with the
page header.
- **List controls as a table header** — the scope selector (left) and
sort + layout toggle (right) render as the first row of the list
container on the Projects/Repositories/PRs/Issues tabs; in card view the
identical bar stands alone with the cards below
(`ProjectsListHeaderBar.tsx`).
- **Repository rows show the git location** — subtitle is
`github.com/org/repo` for external repos or `owner/repo` (resolved
profile name) for Buzz-hosted ones, instead of repeating the project
name (`repositoryDisplayPath`).
- **Uniform work-item row heights** — issue rows previously ran the
author chip in inline flow, letting the 20px avatar grow the line box
~3px taller than PR rows; both lists now share the same flex subtitle.

📸 Screenshots: [feed layout / pinned
button](#5073 (comment))
· [list header / repo subtitles / row
heights](#5073 (comment)).

Note: two empty `chore: retrigger CI` commits exist on the branch from
working around the Aug 6 GitHub Actions incident; happy to drop them
with a signoff rebase before undrafting if preferred. Latest `main` is
merged in (`a0cc35220`).

## Test plan

- [x] Desktop unit tests (4,493 pass after merging main), Biome, tsc
- [x] New unit tests for scoped deletion enumeration and repo
availability re-classification
- [x] New unit tests for `repositoryDisplayPath` (external, Buzz-hosted,
unresolvable)
- [x] Screenshot verification of feed layout, connector spine, and
pinned button (top + scrolled states) — posted to the PR
- [x] Screenshot verification of the list header row (list + card), repo
subtitles, and matching PR/issue row heights — posted to the PR
- [ ] Manual pass against staging (projects list load time,
restricted-repo states)

---------

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
41fred pushed a commit to 41fred/buzz that referenced this pull request Aug 9, 2026
…g, activity feed polish (block#5073)

## Summary

Follow-up batch on the Projects overview (continues merged block#1677):

- **Repository access restrictions** — repositories the viewer can't
reach are surfaced with a reason instead of failing silently.
Channel-ACL denials (which arrive as the same 404 as a missing repo, for
anti-enumeration) are re-classified using the repository's channel
binding and the viewer's memberships (`useRepositoryAccess.ts`,
`projectRepoAvailability.ts`).
- **Projects loads in seconds instead of minutes** — enumeration no
longer crawls every kind:5 deletion event on the relay. It fetches
project/repo announcements first, then queries deletions scoped to those
coordinates via chunked `#a` filters (3 queries instead of hundreds on
staging).
- **Activity feed layout polish** — bare event-type glyph beside the
headline (no badge circle), timeline spine runs through the avatars
connecting consecutive cards, linkable actor/project names are bold in
theme foreground, rounded hover state, alignment fixes.
- **Create button pinned** — the "+" create menu is pinned to the pane's
top-right corner (equal 16px insets) and no longer scrolls away with the
page header.
- **List controls as a table header** — the scope selector (left) and
sort + layout toggle (right) render as the first row of the list
container on the Projects/Repositories/PRs/Issues tabs; in card view the
identical bar stands alone with the cards below
(`ProjectsListHeaderBar.tsx`).
- **Repository rows show the git location** — subtitle is
`github.com/org/repo` for external repos or `owner/repo` (resolved
profile name) for Buzz-hosted ones, instead of repeating the project
name (`repositoryDisplayPath`).
- **Uniform work-item row heights** — issue rows previously ran the
author chip in inline flow, letting the 20px avatar grow the line box
~3px taller than PR rows; both lists now share the same flex subtitle.

📸 Screenshots: [feed layout / pinned
button](block#5073 (comment))
· [list header / repo subtitles / row
heights](block#5073 (comment)).

Note: two empty `chore: retrigger CI` commits exist on the branch from
working around the Aug 6 GitHub Actions incident; happy to drop them
with a signoff rebase before undrafting if preferred. Latest `main` is
merged in (`a0cc35220`).

## Test plan

- [x] Desktop unit tests (4,493 pass after merging main), Biome, tsc
- [x] New unit tests for scoped deletion enumeration and repo
availability re-classification
- [x] New unit tests for `repositoryDisplayPath` (external, Buzz-hosted,
unresolvable)
- [x] Screenshot verification of feed layout, connector spine, and
pinned button (top + scrolled states) — posted to the PR
- [x] Screenshot verification of the list header row (list + card), repo
subtitles, and matching PR/issue row heights — posted to the PR
- [ ] Manual pass against staging (projects list load time,
restricted-repo states)

---------

Signed-off-by: Thomas Petersen <thomasp@squareup.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant