mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-21 08:42:39 +00:00
The homepage download CTA was chosen by a client-only hook that started at "mac-silicon" and corrected itself in an effect, so the server-rendered HTML said "Download for Mac" for every visitor and only became right after hydration. On a phone that window is long enough to photograph. Worse, the detection had no mobile branch at all: Android user agents also say "Linux", so once hydration did land, a Pixel was offered an AppImage. Resolve the platform from the request user agent during SSR instead, so the first paint is already correct. Mobile visitors get the App Store or Play Store as the primary action and a link to /download for the desktop build, rather than a .dmg they cannot open. The markup now varies by user agent, so HTML and server-function responses carry `Cache-Control: private, no-store` and `Vary: User-Agent`. An absent cache-control is not no-store — a shared cache may assign heuristic freshness, and turning on Workers Cache would store a headerless 200 for two hours under a key that ignores the user agent, letting one Android visitor pin the Play Store button for every Mac visitor after them. Also tighten the mobile layout the wrong CTA was sitting in: the primary action gets its own row so the icon buttons stop orphaning one of themselves, provider cards drop to a two-column grid, and the hardcoded mobile line break in the phone showcase gives way to a balanced measure.