feat(layout-v2): sidebar rail iteration — icon system, drag hardening, streak polish - #6393
Open
tsahimatsliah wants to merge 1 commit into
Open
feat(layout-v2): sidebar rail iteration — icon system, drag hardening, streak polish#6393tsahimatsliah wants to merge 1 commit into
tsahimatsliah wants to merge 1 commit into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
tsahimatsliah
force-pushed
the
feat/layout-v2-iterations
branch
from
July 30, 2026 06:46
0438302 to
11c2727
Compare
tsahimatsliah
force-pushed
the
feat/layout-v2-iterations
branch
from
July 30, 2026 06:51
11c2727 to
6b8be07
Compare
tsahimatsliah
force-pushed
the
feat/layout-v2-iterations
branch
from
July 30, 2026 07:21
3387b8d to
d9884c6
Compare
tsahimatsliah
force-pushed
the
feat/layout-v2-iterations
branch
from
July 30, 2026 07:48
d9884c6 to
9555a8b
Compare
…, streak polish
Rail
- Fold the daily.dev logo and Home into one control: logo at rest, crossfading
to the home glyph on hover/focus. The glyph is grey while inactive and white
on direct hover (matching Search), filled only on the feed itself.
- New post joins the tabs as a reorderable item persisted in sidebar_rail_order,
but is excluded from the foldable set so it never collapses into "More".
- One shared icon scale (RAIL_ICON_SIZE + railGlyphBoxClass) sizes every rail
glyph — tabs, Home, Search, bottom utilities, "More" and the shortcuts dock —
replacing ~30 hard-coded sizes. Hit areas are untouched; New post keeps its
own size.
- Optical normalisation, measured rather than eyeballed: the avatar is smaller
than the outline glyphs (a solid photo carries more mass), the compass gets a
5% overshoot (a hollow circle reads small), and the streak ring matches the
compass's drawn diameter.
Drag and drop (rail + shortcuts dock now share one architecture)
- Rail tabs drag via DragOverlay: the real element parks as a slot skeleton
while a pointer-events-none ghost follows the cursor. This is what makes the
Notifications tab safe — its live anchor is never under the pointer at
release, so the browser cannot natively follow the href. `draggable={false}`
and a consume-based click guard back it up.
- The slot skeleton reorders live (onDragOver) so it tracks the landing
position, and the drop commits synchronously to avoid a frame of stale order.
- Translate-only transforms: dnd-kit's scale distorted glyphs of differing
heights.
- Shared glass ghost + slot treatment (sidebarDragGhostClass / SlotClass).
- Dock: dropping past the last icon now lands, driven by the same geometry as
its indicator.
Streak
- Circular badge whose ring always takes the colour of the flame inside it —
grey unread, pink read, blue on a frozen rest day — ring and flame going white
together on hover. Ring stroke matches the icon set's weight; the flame is
nudged 0.5px to correct for artwork that is off-centre in its own viewBox.
- Weekend auto-freeze tooltips restored on the 30-day calendar.
- Freeze row follows the panel guidelines: title, subtitle, neutral button.
Panels
- Quest rows route to the surface where each quest can be completed, via a
reusable destination mapping extracted from QuestButton.
- "Hot Takes" no longer false-highlights on the feed (it is a modal launcher).
- /daily resolves to the same panel as the feed, so switching does not reshuffle
the sidebar.
- Drop the duplicate "Get API Access" CTA, plus Jobs and DevCard (both reachable
from settings); Feed settings takes the filter icon; concentric radius on the
profile pill.
- Notification count is a square badge growing rightward so wide values stay
inside the rail.
Storybook: adds a Rail icon set story with an Audit variant that outlines each
glyph box, and the StreakBadge stories now supply `group/streaktab` so hover
states are reviewable.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
tsahimatsliah
force-pushed
the
feat/layout-v2-iterations
branch
from
July 30, 2026 08:04
9555a8b to
f4cfd02
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.
Iteration pass on the production layout v2 rail (on top of #6240).
Rail
sidebar_rail_order) but excluded from the foldable set, so it never collapses into "More" on short viewports.RAIL_ICON_SIZE+railGlyphBoxClass— sizes every rail glyph (tabs, Home, Search, bottom utilities, "More", shortcuts dock), replacing ~30 hard-coded sizes. Hit areas unchanged; New post keeps its own size.Drag and drop
The rail and the shortcuts dock now share one architecture.
DragOverlay: the real element parks as a slot skeleton while apointer-events-noneghost follows the cursor. This is what makes the Notifications tab safe to drag — its live anchor is never under the pointer at release, so the browser can't natively follow thehref(the cause of the page reloads).draggable={false}and a consume-based click guard back it up.onDragOver) so it tracks the landing position, and the drop commits synchronously — no frame of stale order (the flicker).Streak
Panels
QuestButtoninto a reusable module./dailyresolves to the same panel as the feed, so switching between them doesn't reshuffle the sidebar.Storybook
Auditvariant that outlines each glyph box so ink coverage stays measurable.group/streaktab, so hover states are reviewable (they previously couldn't be).Known gap (not addressed here)
The in-panel feedback widget is still hidden on the home feed — a separate regression from #6240, since that PR made the feed resolve to the Profile panel while the widget only renders on the Explore panel. It remains reachable via the rail's "?" button.
🤖 Generated with Claude Code
Preview domain
https://feat-layout-v2-iterations.preview.app.daily.dev