Skip to content

fix(web): send mobile invitees to the app stores, not GitHub releases - #3464

Open
TheSeydiCharyyev wants to merge 1 commit into
block:mainfrom
TheSeydiCharyyev:fix/web-mobile-store-links
Open

fix(web): send mobile invitees to the app stores, not GitHub releases#3464
TheSeydiCharyyev wants to merge 1 commit into
block:mainfrom
TheSeydiCharyyev:fix/web-mobile-store-links

Conversation

@TheSeydiCharyyev

Copy link
Copy Markdown
Contributor

Summary

An invite link opened on a phone offers github.com/block/buzz/releases — a list of desktop binaries. normalizeOperatingSystem folds every non-desktop user agent into unknown, assetPattern has no pattern for unknown, and resolveBuzzDownloadUrlForPlatform therefore falls back to the releases page.

That fallback was the right answer while there was no mobile app to point at. Both listings are live now, so this classifies iOS and Android as real platforms and resolves them straight to their store URL, ahead of the GitHub release lookup:

  • iOS — https://apps.apple.com/us/app/buzz-chat-with-your-hive/id6779728271
  • Android — https://play.google.com/store/apps/details?id=xyz.block.buzz.mobile

Verified both listings resolve, and that the Play Store id matches namespace = "xyz.block.buzz.mobile" in mobile/android/app/build.gradle.kts.

iPadOS in desktop mode (MacIntel + maxTouchPoints > 1) is classified as iOS rather than being discarded — the App Store listing reports iPad support. ChromeOS and Fire tablets (kindle/silk) keep the releases fallback on purpose: neither is served by the Play Store listing. Desktop detection is untouched, so macOS, Windows and Linux still resolve a release asset exactly as before, including the "which Mac do you have?" flow.

This is the store-links half of #3357 only. That issue also reports a blank render of the invite page on iOS Safari against a self-hosted relay. I could not reproduce that and it is not addressed here — the invite page renders the download link unconditionally, so the two symptoms do not share a cause.

Related issue

Refs #3357 (partial — see the scope note above). No open PR touches web/src/shared/lib/buzz-download.ts or web/tests/e2e/smoke.spec.ts; #2255 is the closest, adding a "Browse releases" link to the same invite page.

Testing

web package, node 22.17.1, pnpm 11.4.0.

The existing e2e case invite download falls back for mobile and non-desktop devices pinned the releases-page fallback for iPhone, iPadOS desktop mode, Android and ChromeOS. It now carries an expected destination per device, covers a Fire tablet too, and is renamed to invite download sends each non-desktop device where its app lives.

Reverting only the buzz-download.ts change fails it exactly as reported in the issue:

Error: iPhone Safari
expect(locator).toHaveAttribute(expected) failed
Expected: "https://apps.apple.com/us/app/buzz-chat-with-your-hive/id6779728271"
Received: "https://github.com/block/buzz/releases"

With the change, all six smoke tests pass, including the desktop download assertion and the Mac-choice dialog. pnpm check and pnpm typecheck are clean.

Platform classification was also exercised directly against real user-agent strings — iPhone Safari, iPadOS desktop mode, Android Chrome (with UA client hints) and Android Firefox (without) all classify as ios/android, while macOS, Windows, Linux, ChromeOS and Fire tablet keep their previous classification.

An invite opened on a phone offered github.com/block/buzz/releases - a list
of desktop binaries. normalizeOperatingSystem folded every non-desktop user
agent into `unknown`, assetPattern has no pattern for `unknown`, so the
resolver fell back to the releases page.

That fallback was the right answer while there was no mobile app. Both
listings are live now, so iOS and Android become classified platforms and
resolve straight to their store URL, ahead of the GitHub release lookup.

ChromeOS and Fire tablets keep the releases fallback on purpose: neither is
served by the Play Store listing. Desktop detection is untouched - macOS,
Windows and Linux still resolve a release asset exactly as before.

The existing non-desktop e2e case pinned the old fallback for all four
devices. It now asserts the expected destination per device and covers a
Fire tablet as well.

Refs block#3357. This is the store-links half of that issue; the blank mobile
render it also reports is not addressed here.

Signed-off-by: Seydi Charyyev <seydi.charyev@gmail.com>
@TheSeydiCharyyev
TheSeydiCharyyev requested a review from a team as a code owner July 29, 2026 04:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant