Repository navigation
Make Share the leading filled action and explain rejected shares - #39
Merged
Merged
Conversation
Share creation fell from about 20% to 3.7% of new generations when the Oct 12 release made Share a small secondary button after Copy. Share is now the compact filled button placed first; Copy stays secondary and the privacy notice is unchanged. Rejected shares now show readable messages instead of raw details or "[object Object]", and phones keep the short label while a link is being created so the toolbar no longer scrolls sideways at 320px.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Why
Share creation dropped in one step at the Oct 12 release (602e077). Before the release, about 20% of new generations led to a share link. Since then it has been about 3.7%. Share requests themselves still work. After the release:
What changed is how many people try to share. The release turned the only filled button on mobile ("Share snapshot", which was also full-width on desktop) into a small borderless "Share" button. It now sits after an equally weighted "Copy" button. Sharing fell 80% on mobile and 86% on desktop.
Metric: distinct new share links per uncached
GET /v1/lp200 (latency ≥ 3 s). The Oct 8–10 outage is excluded, and repeated clicks on the same snapshot count once.What changes
Share leads as the filled primary button. It now comes before Copy and stays compact: 110 px on desktop and 65 px on phones. The toggle and both actions still fit on one row at 320–390 px. Copy stays secondary. The "Anyone with the link can view a copy of this path." notice and its
aria-describedbylink are unchanged.Readable share errors. The new
shareErrorMessageinclient/src/util/shareSnapshot.jsmaps errors to messages:{error}, notdetail)TypeErrortextThe message says "Copy" because that is the button's label on phones.
No sideways scroll on small phones while a link is created. "Creating link..." is still shown on wider screens. Phones keep the short "Share" label during the request; the button is disabled with
aria-busy, and its accessible name is "Creating link...". Before this, the label pushed a 320 px page to 352 px wide during the request. That bug predates this PR, but this PR sends more people through that state.Unchanged:
createShareSnapshotoutput is byte-identical.Verification
npm run testshareErrorMessagecasesnpm run buildnpx playwright testChanges to the e2e tests:
share action stays compact…, nowshare leads as a compact filled action…). It now also checks that Share is filled, that Copy is secondary, that Share sits left of Copy, and that Share's accessible description is the notice. It still requires Share to be under 200 px.Expected: 320, Received: 393.detailshows the readable message, no "[object Object]", and Share is enabled again.Checked in a real browser at 1440, 768, 390, 375 and 320 px, in light and dark themes:
Reading the result
Use the existing backend logs and Firestore, so no new telemetry is needed:
learning_path_shares(or dedupedPOST /v1/shares201s) ÷ uncachedGET /v1/lp200 (latency ≥ 3 s).