From 5dd1014af702b876dc6c2db51a782482382afb5f Mon Sep 17 00:00:00 2001 From: zlshames Date: Fri, 18 Sep 2026 08:58:44 -0400 Subject: [PATCH 1/3] Add a macOS version picker to the Pro feature list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- src/data/pricing.ts | 18 +++++++ src/pages/pricing/index.astro | 95 ++++++++++++++++++++++++++++++++++- 2 files changed, 111 insertions(+), 2 deletions(-) diff --git a/src/data/pricing.ts b/src/data/pricing.ts index 7820463..45a21f8 100644 --- a/src/data/pricing.ts +++ b/src/data/pricing.ts @@ -154,3 +154,21 @@ export const FREE_FEATURES: readonly string[] = [ 'Managing groups', 'Find My', ] as const; + +/** macOS releases the Swift server runs on. + * + * Names and numbers come from the server's own `docs/MACOS_COMPATIBILITY.md`. + * The floor is 14: `Package.swift` declares `.macOS(.v14)`, so there is nothing + * below it to offer. Note the numbering jumps 15 -> 26; Apple moved to + * year-based versions, and 16 through 25 do not exist. + */ +export interface MacOSRelease { + version: number; + name: string; +} + +export const MACOS_RELEASES: readonly MacOSRelease[] = [ + { version: 14, name: 'Sonoma' }, + { version: 15, name: 'Sequoia' }, + { version: 26, name: 'Tahoe' }, +] as const; diff --git a/src/pages/pricing/index.astro b/src/pages/pricing/index.astro index 36ac8ed..24df19a 100644 --- a/src/pages/pricing/index.astro +++ b/src/pages/pricing/index.astro @@ -16,7 +16,7 @@ */ import BaseLayout from '@layouts/BaseLayout.astro'; import PageHeader from '@components/PageHeader.astro'; -import { PLANS, PRO_FEATURES, FREE_FEATURES } from '@data/pricing'; +import { PLANS, PRO_FEATURES, FREE_FEATURES, MACOS_RELEASES } from '@data/pricing'; import { LINKS } from '@data/site'; --- @@ -69,10 +69,38 @@ import { LINKS } from '@data/site'; minimum macOS version, shown alongside it.

+
+ + +

+
+