Skip to content

Site: OS-aware chrome, per-platform downloads, and nav cleanup - #88

Merged
bharathm03 merged 4 commits into
developmentfrom
site/os-aware-chrome
Sep 3, 2026
Merged

Site: OS-aware chrome, per-platform downloads, and nav cleanup#88
bharathm03 merged 4 commits into
developmentfrom
site/os-aware-chrome

Conversation

@bharathm03

@bharathm03 bharathm03 commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

The shared AppWindow bar only ever drew the Windows caption block, but the app does not: paintsWindowControls is Windows-only, and macOS keeps the real NSWindow traffic lights on the left with titleBarLeftInset reserved for them. A mac reader was being sold a window they will never see.

Both spellings now ship in the markup and a data-os attribute — stamped pre-paint by an inline script in <head> — reveals one:

  • Apple UAs (macOS, iOS, iPadOS in desktop mode) get the traffic lights and no right-side controls.
  • Linux UAs (ruled out from Android's shared "Linux" UA token) get the same Windows-style caption block the app itself paints for Linux.
  • Everything else, including Android and any no-JS render such as the OG screenshot, keeps the Windows controls.

is:inline on that script is load-bearing: Astro would otherwise defer it as a module and the swap would land a frame after paint, as a flicker in the hero. Display is toggled from unlayered CSS rather than Tailwind hidden/flex utilities, so there is no cascade-layer fight like the one that recently flattened the rail.

Per-platform downloads

The same data-os attribute now also picks the hero's download button (Windows/macOS/Linux, all three shipped and revealed by CSS — no post-load label rewrite on the primary CTA). Every download, hero and closing band alike, routes through a new /download/started?platform=<id> confirmation page instead of the raw artifact: it fires the actual download, then orients the reader (link to the setup guide, a GitHub-star ask) keyed on the platform the URL asked for rather than the visitor's own OS. get-started.astro gained anchor ids so the confirmation page's step cards land on the right instruction, and the sitemap excludes both og-card and download/started since neither is meant to be indexed.

Nav cleanup

  • Dropped Sign in and Features from the top nav — both stay reachable from the footer. Sign in served the smallest audience on the site; Features was a scroll-link into the middle of one of six home sections and was disorienting from anywhere else.
  • Renamed the CTA from "Start free" to "Download free" — there's no signup or trial to start, so "Start free" overpromised. The free plan's pricing-card CTA deliberately keeps "Start free" (the offer, not the destination, is the point there).
  • Fixed real accessibility bugs: the mobile toggle now visually reflects open/closed state, the drawer closes after following a same-page anchor inside it (which navigates without a reload) and on Escape, and the current page gets aria-current. Desktop and mobile now share one navItems array instead of two lists that could drift.
  • Removed the "See pricing" button from the closing "Get started" band — one CTA, not two competing ones.

Also

  • Footer gained the mark+wordmark lockup (previously wordmark-only) and a bare GitHub link.
  • Eyebrow labels dropped their accent rule for a neutral terminal-cursor mark that blinks once on arrival instead of announcing every section in signal color.
  • Hero subtext trimmed to "End-to-end encrypted · See all builds" (was two lines covering VPN/encryption guarantees and per-OS availability).
  • Hero's Handler line reworded for plain-language clarity: "Arm Handler to hand off a session on your instructions — it wakes you only when the call is truly yours" (was "...when you want a phase held until the evidence is there").

Verification

  • Playwright under four spoofed UAs: Windows → win, macOS → mac, Android → win, iPadOS → mac, Linux → linux; all chrome variants and download buttons visually checked.
  • bunx astro check — 0 errors, 0 warnings, 0 hints.
  • bun run build — 11 pages, clean.
  • bun run test — 68 passed.

The shared AppWindow bar only ever drew the Windows caption block, but the app does not: paintsWindowControls is Windows-only, and macOS keeps the real NSWindow traffic lights on the left with a title-bar inset reserved for them. A mac reader was being shown a window they will never see.

Both spellings now ship in the markup and a data-os attribute, set pre-paint by an inline script in the head, reveals one. Apple UAs (macOS, iOS, iPadOS in desktop mode) get the traffic lights; everything else, including Android and any no-JS render such as the OG screenshot, keeps the Windows controls.
…ework

The hero and closing band now offer Windows/macOS/Linux download buttons that reveal the reader's own build via data-os (Base.astro's OS sniff now also detects Linux), all routed through a new /download/started confirmation page that fires the actual artifact download and orients the reader (setup guide, star-the-repo ask), keyed on the ?platform= it was asked for rather than the visitor's own OS.

get-started.astro gained anchor ids so the confirmation page's step cards land on the right instruction; the sitemap excludes both og-card and download/started since neither is meant to be indexed.

Nav: dropped Sign in and Features (both stay reachable from the footer), renamed the CTA from Start free to Download free (the free plan's pricing-card CTA deliberately keeps Start free), added Escape-to-close and current-page indication, and unified the desktop/mobile item lists into one array.

Footer gained the mark+wordmark lockup (previously wordmark-only) and a bare GitHub link. Eyebrow labels dropped their accent rule for a neutral terminal-cursor mark that blinks once on arrival. Tests updated to match; get-started.spec.ts's coverage folded into contracts.spec.ts.
Below the download button: dropped the VPN/port-forwarding line (redundant with the security page's own argument) and collapsed the OS-availability sentence into a plain builds link, so the subtext reads End-to-end encrypted / See all builds.

Reworded the Handler line — 'a phase held until the evidence is there' assumed the reader already knew what a phase gate was. Now: hand off a session on your instructions, wakes you only when the call is truly yours — same honesty constraint (Handler never runs unsupervised, see Phases.astro), plainer language.
@bharathm03 bharathm03 changed the title Site: draw the mockup's chrome for the reader's own OS Site: OS-aware chrome, per-platform downloads, and nav cleanup Sep 3, 2026
@bharathm03 bharathm03 added the changelog-ignore Not user-facing: keep this PR out of the generated release notes label Sep 3, 2026
@bharathm03
bharathm03 merged commit 87cf164 into development Sep 3, 2026
3 checks passed
@bharathm03
bharathm03 deleted the site/os-aware-chrome branch September 3, 2026 15:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog-ignore Not user-facing: keep this PR out of the generated release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant