Skip to content

feat: faster boards, native inbox, overdue filters, and grouped builds - #411

Open
grootbro wants to merge 3 commits into
croffasia:mainfrom
grootbro:feat/native-inbox-filters
Open

grootbro wants to merge 3 commits into
croffasia:mainfrom
grootbro:feat/native-inbox-filters

Conversation

@grootbro

@grootbro grootbro commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

What

The work-items board is faster in four places:

  • GET /projects/:projectKey/issues/board no longer ships markdown descriptions. Cards, rows, and filters never rendered them; GET /issues/:id still returns the full body.
  • React Compiler is on, with Turbopack's Rust compiler path, so the board tree is memoized without an extra Babel pass.
  • Hovering a card prefetches the issue route. Opening an issue uses a View Transition; the issue panel stays mounted with React Activity so a typed description is not thrown away.
  • The sidebar cookie is a Suspense hole, so the project layout does not wait on the cookie store before painting the shell.

The default inbox is assignment, mention, and comment — the unread badge uses the same set. Saved views gain overdue / today / next-N-days on date fields and $currentUser for assignee. Clicking a dashboard stat widget opens the board with that widget's filter.

On an issue, merge requests stay as cards. CI, stage, build, deploy, release, and hotfix branches, plus links titled like Pipeline #123, collapse into a native Builds section grouped by repository. A pull request's source branch is not listed again. The heading tally reads like 2 · 13 builds.

Why

Boards were downloading every issue's markdown (including embedded data URIs) on every load, then paying for a cold navigation into the issue. Inbox mixed status-change noise with work that needs a reply. Stat widgets showed a number you could not open. Linked CI branches sat next to merge requests as equal cards, so an issue with a few MRs and many pipelines became a wall.

How to test

  1. Open a project board: cards still list. In the network tab, /issues/board has empty descriptions. Hover a card, then open it — the issue route is already warm and the swap animates.
  2. Inbox with a fresh project key: the type chips default to Assigned / Mentioned / Commented (not every state change). The sidebar unread count matches that set.
  3. Filter a view: Due date → Overdue; Assignee → Current user. Both persist on the saved view.
  4. Dashboard: click a Stat widget. The board opens with that widget's filter applied.
  5. Open an issue that has merge requests and many CI/stage branches. MRs stay as cards; the CI branches sit in a Builds disclosure grouped by repo, with one CI badge for the worst status. The source branch of a linked MR is hidden.

Checklist

  • bun run typecheck passes
  • bun run lint and bun run format:check pass
  • Tests added or updated for the changed behaviour
  • Database schema changed: migration generated with bun run db:generate and committed
  • New environment variables documented in .env.example
  • Docs updated (README.md or the relevant AGENTS.md)

Screenshots

N/A — grouping is easiest to judge on an issue with several merge requests and a pile of ci/ / stage/ branches.

Keep the default inbox on assignment, mention, and comment, drop issue
descriptions from the board payload, turn on React Compiler and view
transitions, and collapse CI branches under Builds on the issue.
@grootbro
grootbro requested a review from croffasia as a code owner September 17, 2026 05:18
React 19's details types have open/onToggle, not defaultOpen, so the
production typecheck failed on the grouping panel.
@grootbro
grootbro force-pushed the feat/native-inbox-filters branch from d6885c5 to 7825d7f Compare September 17, 2026 05:55
@grootbro grootbro changed the title feat: native inbox, overdue filters, and grouped development builds feat: faster boards, native inbox, overdue filters, and grouped builds Sep 17, 2026

This branch has not been deployed

No deployments
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