Static Astro site for Givdul's macOS apps. / redirects to /zones, and each app has landing, support, and privacy pages under its slug.
Set these before production deployment:
PUBLIC_SITE_ORIGIN: final public origin, for examplehttps://apps.givdul.comPUBLIC_POLAR_ZONES_DOWNLOAD_CHECKOUT_URL: checkout link for the free PolarZonesproduct, which starts the 7-day trial.PUBLIC_ZONES_DOWNLOAD_URLis read as a fallback;scripts/setup-polar-zones.mjswrites the same link to both. Only used once the license checkout below is set.PUBLIC_POLAR_ZONES_LICENSE_CHECKOUT_URL: Polar checkout link for the paidZones Licenseproduct ($9.99 one-time, product60762fd4). The link has not been created yet. While unset, the Buy button and every Zones download button stay disabled.PUBLIC_PORTAL_DOWNLOAD_URL: legacy Frame direct-download variable; retained for configuration compatibility and does not publish FramePUBLIC_PORTAL_APP_STORE_URL: legacy Frame App Store variable; retained for configuration compatibility and does not publish FramePUBLIC_POLAR_PORTAL_LICENSE_CHECKOUT_URL: legacy Frame checkout variable; retained for configuration compatibility while commerce details remain unpublished
If a published app-specific download or checkout URL is omitted, its page falls back to support/privacy links or disabled purchase buttons instead of rendering a dead destination. Frame remains unpublished until its release and commerce details are confirmed.
Zones checks https://apps.givdul.com/zones/appcast.xml with Sparkle. The feed and every update archive are static files under public/zones/, so one Vercel deployment publishes them together. First installs still go through the Polar checkout.
public/zones/appcast.xml: the signed Sparkle feed.public/zones/updates/Zones-<version>-<build>.zip: the notarized archive from the Zones GitHub release. Archives are never replaced or deleted, so every published URL keeps working.public/zones/updates/Zones-<version>-<build>.html: release notes for that build.
To publish a release after the Zones release workflow succeeds:
- Write the release notes file for the new build.
- On the release Mac, run
scripts/publish-zones-update.sh <release-tag>, for examplev1.0-1. It downloads the archive, checks its SHA-256 againstrelease-manifest.json, signs the appcast entry with the Sparkle key in the login keychain, and verifies the signature. - Commit
public/zones/and merge tomain. - Confirm the appcast and archive URLs return 200 from a clean client.
npm installnpm run devnpm run buildnpm run preview