PR details now open in a slide-in drawer, preserving scroll position
Clicking any PR or commit in the feed now opens a portal-rendered side drawer instead of navigating away. The feed stays frozen in place; closing the drawer returns you exactly where you were. The panel is deep-linkable and works with the browser back button.
Clicking a link in a feed typically means losing your place. A page navigation starts, the feed resets, and finding where you were requires either a good memory or a scroll-wheel sprint.
The feed now intercepts clicks on /pull/ and /commit/ links and opens a slide-in drawer from the right instead. The panel renders the same article content — meta row, subtitle, story body — that the full page would show, just in a portal overlay. The underlying feed freezes at its current scroll position via CSS. When the drawer closes, window.scrollY is restored to the pixel.
URL state is synced via history.pushState, so ?story=pr-9 or ?story=commit-abc1234 works as a deep link. Refresh and you land with the panel open. Browser back closes it, as do ESC, backdrop clicks, and the close button. Cmd-click, Ctrl-click, and middle-clicks pass through — "open in new tab" behaves as expected.
The same drawer handles both pull requests and direct-push commits. Status badges render "Merged" (green) for PRs and "Pushed" (amber) for commits. The architecture was generalized from the start so commit detail will follow in a later effort.
In the @gitpulse/site package, a provider holds the state and manages scroll restoration. The panel is a separate component rendered via portal at the layout level, so it overlays any page. CSS keyframes drive the slide animation (350ms in, 250ms out with a custom easing curve); users with prefers-reduced-motion get instant transitions.
Older PR stories that predated the prTitle field now get backfilled on next data sync, so the subtitle shows the full title rather than just "#NN".