Repository navigation
feat(mobile): phone shell, step 4 (reading drawer, app bridge), tabs and chips, three phone fixes - #6895
Draft
tsahimatsliah wants to merge 10 commits into
Draft
feat(mobile): phone shell, step 4 (reading drawer, app bridge), tabs and chips, three phone fixes#6895tsahimatsliah wants to merge 10 commits into
tsahimatsliah wants to merge 10 commits into
Conversation
4.1, the reading drawer (chapter 6b). Inside a wrapper that can show an article, Read keeps the member on the post: the wrapper opens the page behind this web view and the post page sinks into a drawer at the bottom. The drawer is the document itself, a transparent band above it, so its heights (bar, card, post, full) are scroll positions and pulling it up is scrolling the post. The capsule stays where it stands; the controls (close, the domain with the page menu, reload) ride 10px above the drawer. Reading down the article folds the title line, a nudge up brings it back. The drawer owns one history entry, so back (the block's button, the Android key) closes it before it leaves the post. The wrapper hands touches above the drawer to the article, except over our own sheets and toasts. Without the bridge, or with "Open links in the app" off (Appearance, client-only flag), Read opens the link as before. 4.2, the bridge behaviours (chapter 8): a light impact on a tab change, an upvote and a bookmark, a success one when the streak goes up (the iOS handler, navigator.vibrate in the Android app); the wrappers' pull to refresh refetches what is on screen through window.dailyNative.refresh instead of reloading; the status bar turns light over a cover; Reduce Transparency turns the floating material solid; window.dailyNative.back closes the drawer or the top sheet first, the Android back contract. Every message is silent until a wrapper registers its handler, so the mobile web and today's app builds are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
It filled the row between close and reload whatever the domain; it now takes the domain's width, centred between the two squares, and a long domain still truncates. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chapter 6b's metric is the share of article opens that end with a reaction or a return to the post. The drawer now logs `open reading drawer` and `close reading drawer` (with duration_ms, the time on the article, and closed_by: close, back, link or leave), and every event the post page logs while the drawer is open carries reading_drawer: true, so an upvote, a bookmark or a comment made while reading is told apart from one on the post. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a Read click outside a feed, useOnPostClick marks the post read in every cached list feed. A feed query that is in the cache without data (never fetched, or failed) has no pages, so findIndexOfPostInData threw "Cannot read properties of undefined (reading 'pages')" as an uncaught promise rejection on every Read from a post page. Those feeds are skipped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wice The phone edit page replaced itself with the post permalink after a save, so an edit opened from the post page left the history as post, post: one back press showed the same post again. When the entry before the editor is this post, saving now steps back to it, as closing without saving already does; opened from anywhere else, a save still lands on the post. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Step 3 hid the whole header block of /squads/new below tablet, so a phone opened straight on "Squad details" with no word on what a squad is. The explanation is back on phones, one line on the 16px gutter under the top bar; the title stays desktop-only (the bar already says "New squad") and so does the illustration, which pushed the form below the fold. Desktop and tablet are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 14, 2026
Tabs switch to content that is different altogether; chips narrow the list the page already holds (Tsahi, 16 Oct; Storybook chapter 4h). Tabs: a 48px row edge to edge with a hairline, 15px labels, bold when lit and medium otherwise. Every label reserves its bold width, so lighting a tab never moves the row. One 32 x 3px bar, centred under the lit label, slides to the tapped tab. A tab takes an equal share while every tab fits and its own width once they do not, so the row scrolls instead of truncating. A tab with more choices (Happening now) shows a 12px chevron whether lit or not; a tap on the lit tab opens its sheet. Chips: the Small button's shape, 32px with 10px corners and 14px medium text, in a 48px row; lit filled, others on the float surface. Rows that drew their own buttons on phones follow the rule too: Messages (Chats, Requests) and Tools are tabs, Achievements' filters are chips. Tablet and desktop keep their navbars and buttons. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s edge The phone Home row had a filter icon and a sort menu beside the tabs, and the new-feed plus sat in the tab list. Feed settings already lives in the You drawer, so the row keeps tabs only: a tap on the lit For you (or a lit custom feed) opens a sheet with the order (Recommended, By date, when sorting is on and the feed can be sorted) and Edit feed, like Happening now's channels. Row items now carry their own `menu`, replacing Segments' menu/onMenu props, so any tab can own a sheet. The plus is a square button pinned at the right; the tabs scroll under it and fade over their last 24px so a cut label reads as more to scroll. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…me row The feed sheet's link reads Feed settings with the filter icon, the same name and icon the You drawer uses for the same page. The new-feed plus drops the floating square's material, which read as one of the top header's buttons; it keeps the 38px target and sits in the tabs row in the unlit tab color. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A chevron on every tab with a sheet made the row busy and, on Home, cut Following short. Only the lit tab carries it now, since that is the tab a tap opens the sheet from. It hangs in the tab's side padding instead of widening the label, so lighting a tab still moves nothing (label offsets measured identical across a switch) and the bar centers on the text. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch was successfully deployed
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.
Step 4 of the phone shell plan (Storybook, Mobile UX / 10. The build): 4.1 the reading drawer and 4.2 the bridge behaviours. Steps 0 to 3 are on main (#6765, #6767, #6801, #6813, #6826, #6852, #6855).
The native half is dailydotdev/ios
claude/reading-drawer. Every message here is silent until a wrapper registers its handler, so the mobile web and today's app builds are unchanged.4.1 The reading drawer (chapter 6b)
Inside the app, Read keeps the member on the post. The app opens the article behind the web view, and the post page sinks into a drawer at the bottom, as X does.
4.2 Bridge behaviours (chapter 8)
navigator.vibrate.window.dailyNative.refresh(), which refetches what is on screen and answers when done, instead of reloading the page.window.dailyNative.back()closes the drawer or the top sheet first and reports whether it used the press.nav-statetells the wrapper where the page is. Android has no bridge yet;DailyAndroidis the contract it will implement.useBookmarkPostgained three type fixes the strict check asks for once the file is touched. They change no behaviour.Measuring it
Chapter 6b's metric is the share of article opens that end with a reaction or a return to the post.
open reading drawerfires when Read opens the drawer.close reading drawerfires when it closes, withduration_ms(the time on the article) andclosed_by:close,back,linkorleave.reading_drawer: true, so an upvote, bookmark or comment made while reading can be told apart from one made on the post.The domain capsule above the drawer now takes the domain's width instead of filling the row.
Also in this PR: three small phone fixes
These were separate PRs (#6897, #6898, #6902), folded in so there is one web PR to review.
reading 'pages'error when a cached feed had never loaded; those feeds are skipped (useOnPostClick, with a spec).posts/[id]/edit.tsx,previousShellPathinshellNav, with a spec)./squads/new; the title and the illustration stay desktop-only.Also in this PR: tabs and chips on every phone row
Tabs switch to content that is different altogether; chips narrow the list the page already holds (Storybook chapter 4h). Phones only; tablet and desktop keep their navbars and buttons (checked at 768 and 1280px).
ShellRow+Segments): a 48px row with a hairline, 15px labels, bold when lit and medium otherwise. Every label reserves its bold width, so lighting a tab never moves the row (label positions measured identical before and after a switch). A 32 × 3px bar slides to the tapped tab. Equal widths while every tab fits, scroll otherwise.ShellRow kind={ShellRowKind.Chips}+Chips): the Small button's shape, 32px with 10px corners, 14px medium, in a 48px row. Notifications and the Squads directory.Verified
claude/reading-draweragainst this branch:trueback, with no page reload.🤖 Generated with Claude Code
Preview domain
https://claude-mobile-step4.preview.app.daily.dev