Skip to content

Add a macOS version picker to the pricing page - #38

Merged
zlshames merged 3 commits into
masterfrom
pricing-macos-filter
Sep 18, 2026
Merged

zlshames merged 3 commits into
masterfrom
pricing-macos-filter

Conversation

@zlshames

Copy link
Copy Markdown
Member

Pro features carry macOS minimums from 14 to 26, so what a subscriber actually gets depends on their server Mac. This adds a picker that answers it directly.

Choosing a release highlights the features it can run, dims the rest, and reports a count.

Cumulative, as it should be

A release includes everything introduced at or below its version — Tahoe gets the Sequoia and Sonoma features too. Verified in the browser, each tier a strict superset of the one before:

Selection Available
Sonoma (14) 5 of 10
Sequoia (15) 7 of 10
Tahoe (26) 10 of 10

Where the options come from

14 Sonoma, 15 Sequoia, 26 Tahoe, taken from the server's own docs/MACOS_COMPATIBILITY.md.

  • Nothing below 14 — Package.swift declares .macOS(.v14), so the server does not run there
  • Nothing between 15 and 26 — Apple's move to year-based versions means 16–25 do not exist

Accessibility

State is not carried by colour alone. Each card gains a ✓ Included or Needs macOS 26 line, and the count is an aria-live region, so the answer survives greyscale and a screen reader.

Nothing is selected by default, so the list reads normally until someone asks the question.

🤖 Generated with Claude Code

zlshames and others added 3 commits September 18, 2026 08:58
Pro features carry macOS minimums ranging from 14 to 26, so "what do I
actually get" depends on the server Mac. A picker now answers that
directly: choosing a release highlights the features it can run, dims the
rest, and reports a count.

Releases are cumulative, which is the whole point of the control: a
release includes everything introduced at or below its version, so Tahoe
gets the Sequoia and Sonoma features too. That is a <= on the major
version, with the catalogue's minimums as the only input. Verified in the
browser: Sonoma 5 of 10, Sequoia 7 of 10, Tahoe 10 of 10, each a strict
superset of the one before.

Names and numbers come from the server's docs/MACOS_COMPATIBILITY.md --
14 Sonoma, 15 Sequoia, 26 Tahoe. There is no option below 14 because
Package.swift declares .macOS(.v14), and none between 15 and 26 because
Apple's year-based renumbering means those releases do not exist.

State is not carried by colour alone: each card gains a "✓ Included" or
"Needs macOS 26" line, and the count is a live region, so the answer
survives greyscale and a screen reader. Nothing is selected by default, so
the list reads normally until someone asks the question.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The picker opened unselected, so the feature list read as plain until
someone used it, and the first real selection a Sonoma user made reported
5 of 10 on a page asking for money. It now opens on the newest release --
Tahoe (26), 10 of 10 -- with the older versions still a click away.

The default is derived from MACOS_RELEASES rather than hardcoded, so
adding macOS 27 moves it automatically.

The default state is rendered server-side: the selected option, each
card's data-state, its verdict line and the summary count are all in the
HTML. The page is therefore correct before the script runs and without it,
and there is no flash of unstyled state on load. The script now only
handles changes, and the empty-selection branch is gone with the
placeholder option.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The native arrow sits inside the select's right padding, and on a
rounded-full pill the 18.5px corner radius curves in over exactly where it
renders, so it read as jammed against the edge.

Replaces it with appearance-none and our own chevron: 16px, vertically
centred to the pixel, 14px clear of the right edge and 10px clear of the
text, with right padding raised from 16px to 40px to make room. It reuses
the FAQ accordion's chevron path, so the two controls now match, and it
inherits text-muted so it themes -- which the native arrow did not.

Checked that making it non-native did not break the control: the chevron is
pointer-events-none so a click over it still lands on the select, the
select remains keyboard focusable, change still filters correctly (5 / 7 /
10 for Sonoma / Sequoia / Tahoe), and the chevron picks up the right colour
in both themes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@zlshames
zlshames merged commit a67d7f0 into master Sep 18, 2026
1 check passed
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