Repository navigation
feat: add collapsible side rails to the feed - #72
Merged
Merged
Conversation
dimslaev
force-pushed
the
feat/rails-shell
branch
from
October 10, 2026 08:19
0353905 to
dff46cc
Compare
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.
Session 1 of 4: the rail shell only. The registry (
components/Rails/panels.ts) is empty, so the page looks the same as today.What's in it
components/Rails/:RailsProvider: open state per side below 1360px, collapsed state per panel, the panel registry, and the[/]/ Esc keys.Rail,RailPanel,RailStrip.RailsLayout: the grid, the inline rails, the mid-size overlay and the phone sheet.RailToggles: the header buttons.ScoreMarks:MiniRailandScoreBars, both built onscoreFractionandSCORE_STANDOUT.components/Common/PageColumn.tsx: themx-auto max-w-3xl px-4column, moved out of the_layout.tsxmain._layout.tsxmountsRailsProvidernext toFiltersProviderand passesRailTogglesto the header next toUserMenu.rail_toggle {side, open, via}andrail_panel_toggle {panel, open}.Behaviour by width
[/]do nothing. Panels inside a rail still collapse one by one.[/]opens a rail as an overlay over the feed edge. Esc or a click outside closes it.agentique.rails.v1holds only{collapsed: {panelId: true}}. Every read and write is wrapped in try/catch.Where I changed the plan, and why
left/rightstate. Rails are now always open there, and the savedleft/rightstate is gone.PageColumnfrom the layout by default. The feed route opts out withstaticData: { wide: true }and sets its own width throughRailsLayout. This means admin, developers and profile stay unchanged, and an error or empty page inside the layout keeps the column. The other way was wrapping every page by hand.minmax(52px,1fr), as on design board A. The feed column only narrows when the viewport is under about 872px. With no panels nothing changes.rail_toggleevent, becauseviaonly allows key, button or strip. Esc is sent asvia: "key". Focus goes back to the trigger on Esc or a button press, but not on an outside click.panels.ts(RAIL_TITLES): "People and topics" and "Stories". The panel sessions can rename them.ui/is untouched.Verified
bun run lint(biome) andbun run buildpass. Lint also reformatsvite.config.js/vite.config.d.ts, the same as on master, so I left those files out of the commit.vite preview, and mocked the API with Playwright using the same fixture articles. I took full-page screenshots at 1440, 1000 and 390 of/,/developersand/login, and of/,/profileand/adminlogged in (mockedusers/me). All 18 pairs are byte-identical PNGs. I re-ran this after the follow-up commit.aria-expanded=false,aria-controlspoints at the panel body, and the collapse survives a reload. The saved value is{"collapsed":{"who-wrote":true}}.[opens the left rail and a click on the feed closes it. A header button opens and closes it.[opens a sheet and Esc closes it.agentique.rails.v1key throwing on read and write, the page renders and the rails work. With all localStorage throwing, the page crashes on master as well. The cause is the unguardedaccess_tokenreads inuseAuthandanalytics.send, which are outside this PR.🤖 Generated with Claude Code
https://claude.ai/code/session_01EL8QWwpqLcAfQ2uN5vqj5T