Skip to content

Advertise the Linux desktop app on the landing page - #3426

Merged
SawyerHood merged 2 commits into
mainfrom
bb/can-we-open-a-pr-that-advertises-the-linux-deskt-thr_i5b9png8zw
Sep 10, 2026
Merged

Advertise the Linux desktop app on the landing page#3426
SawyerHood merged 2 commits into
mainfrom
bb/can-we-open-a-pr-that-advertises-the-linux-deskt-thr_i5b9png8zw

Conversation

@SawyerHood

@SawyerHood SawyerHood commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator

Human comments

What was wrong

The desktop-latest release has published a Linux x64 AppImage and a desktop-version-linux.json feed since desktop 0.42, but getbb.app only advertised "Download for macOS" everywhere and told Linux visitors to use npx. There was no Linux download redirect on the site at all.

What changed

  • apps/web/src/landing/site.ts: a DesktopPlatform type and a DESKTOP_DOWNLOADS table (labels, installer extension, version feed URL, redirect path) replace the macOS-only constants. downloadHref(platform, placement) replaces downloadMacosHref.
  • apps/web/src/landing/endpoints.ts: handleDownload(platform, ...) generalizes the macOS redirect. It fetches the platform's feed, picks the first asset with that platform's installer extension, and falls back to the release page. The PostHog event keeps its per-platform name (landing_download_<platform>_clicked) and download_target, so the existing macOS dashboards keep working.
  • apps/web/src/routes/download.linux.tsx: new /download/linux route. /download/macos now calls the shared handler.
  • apps/web/src/landing/desktop-platform.ts: detectDesktopPlatform reads client hints, navigator.platform, and the UA string. It returns linux for X11 Linux (not Android or ChromeOS), macos for Macs (not iPads reporting MacIntel), and null otherwise. useDesktopPlatform applies it after hydration with macOS as the SSR default.
  • Hero, nav, and footer download links follow the detected platform. The hero shows an "Also for macOS" / "Also for Linux" link under the primary button, and the npx note now reads "Windows (via WSL), Intel Macs & remote machines". The Linux button uses a new inline LinuxIcon carrying the CC0-licensed Tux glyph from Simple Icons, since hugeicons free has no Linux icon.
  • Windows and mobile visitors see the same page as before (macOS button plus npx).

Design note: this is the "detect the visitor's OS, primary button follows it, other platforms as a secondary link" pattern that VS Code, Cursor, Zed, and Warp use. Two alternatives were mocked up and rejected: side-by-side macOS and Linux buttons (three CTAs crowd the hero), and a static macOS button with an "Also available: Linux AppImage" line beneath (buries the Linux path for Linux visitors).

How you verified

  • New tests: desktop-platform.test.ts covers client hints, X11 Linux, Android, ChromeOS, macOS, iPad-as-MacIntel, and Windows. endpoints.test.ts adds Linux feed resolution, a guard that a Linux request never returns a .dmg, and asserts the tracked event name, download_target, and placement. site-chrome.test.tsx asserts the SSR nav href stays /download/macos?placement=nav.
  • pnpm exec turbo run typecheck test lint --filter=@bb/web passes (23 files, 124 tests).
  • Manual, against vite dev: curl -I /download/linux returns a 302 to bb-0.42.1-x86_64.AppImage; /download/macos still returns the 0.42.1 dmg. In headless Chrome on Linux the nav and hero show "Download for Linux" with hrefs to /download/linux; with a macOS UA and MacIntel platform emulated they show "Download for macOS". Checked the 390px dark-mode layout as well.

🤖 Generated with Claude Code

AGENT GENERATED

SawyerHood and others added 2 commits September 10, 2026 18:26
The desktop-latest release has shipped a Linux x64 AppImage alongside the
macOS dmg since desktop 0.42, but getbb.app only ever offered "Download
for macOS" and pointed Linux visitors at npx.

Add a /download/linux redirect that resolves the AppImage from
desktop-version-linux.json the same way /download/macos resolves the dmg,
and generalize the download endpoint over a DesktopPlatform so both
routes share the feed parsing, fallback, and PostHog tracking. The
tracked event name keeps its per-platform shape
(landing_download_<platform>_clicked) so existing macOS dashboards are
unaffected.

The hero, nav, and footer now detect the visitor's platform after
hydration and label the primary button accordingly, with an "Also for
macOS/Linux" link under the hero button for the other platform. Server
rendering keeps macOS as the default so Windows and mobile visitors see
the same page as before.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Replaces the hand-drawn penguin with the CC0-licensed Linux icon from
Simple Icons so the button reads as Tux at 16px.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@SawyerHood
SawyerHood marked this pull request as ready for review September 10, 2026 18:39
@SawyerHood
SawyerHood merged commit a8181f5 into main Sep 10, 2026
16 checks passed
@SawyerHood
SawyerHood deleted the bb/can-we-open-a-pr-that-advertises-the-linux-deskt-thr_i5b9png8zw branch September 10, 2026 18:42
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