/** * Gaze per-subdomain downloads page โ `gaze.freno.me/downloads`. * * Public browser path `/downloads`; vercel.json host rewrites serve this * from the internal `/gaze/*` route prefix while keeping the URL clean. * * Mirrors the download surface already exposed on the Gaze landing page: * - Direct signed-S3 DMG download via `downloads.getDownloadUrl({ asset_name: "gaze" })`. * - macOS App Store listing link. */ import { A } from "@solidjs/router"; import { createSignal } from "solid-js"; import { PageHead } from "~/components/PageHead"; import { EdgeCacheHeaders } from "~/components/EdgeCacheHeaders"; import SubdomainHeader from "~/components/SubdomainHeader"; import DownloadOnAppStoreDark from "~/components/icons/DownloadOnAppStoreDark"; import Button from "~/components/ui/Button"; import { useDarkMode } from "~/context/darkMode"; import { useSite } from "~/context/SiteContext"; import { downloadAsset } from "~/lib/download-asset"; const GAZE_APP_STORE_URL = "https://apps.apple.com/us/app/gaze/id6757759498"; const GAZE_MIN_MACOS = "14.6"; export default function GazeDownloadsPage() { const site = useSite(); const { isDark } = useDarkMode(); const [loading, setLoading] = createSignal(false); const brandColor = () => isDark() ? (site().brandColorDark ?? site().brandColor) : site().brandColor; const handleDownload = () => { if (loading()) return; setLoading(true); import("~/lib/api") .then(({ api }) => downloadAsset({ api, assetName: "gaze", onError: (error) => { console.error("Gaze download error:", error); alert("Failed to initiate download. Please try again."); } }) ) .finally(() => setLoading(false)); }; return ( <> Download Gaze Eye and posture health reminders for your Mac menu bar. Direct download gaze.dmg macOS {GAZE_MIN_MACOS}+ ยท signed macOS build App Store Also available on the Mac App Store. โ back to Gaze > ); }
Eye and posture health reminders for your Mac menu bar.
โ back to Gaze