/** * InputHalo per-subdomain downloads page — `inputhalo.freno.me/downloads`. * * Public browser path `/downloads`; vercel.json host rewrites serve this * from the internal `/inputhalo/*` route prefix while keeping the URL clean. * * Mirrors the download surface already exposed on the InputHalo landing page: * - Direct signed-S3 DMG download via `downloads.getDownloadUrl({ asset_name: "inputhalo" })`. * - macOS App Store listing link (paid variant — currently a placeholder URL). */ 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 { api } from "~/lib/api"; import { INPUTHALO_APP_STORE_URL, INPUTHALO_ICON_DARK, INPUTHALO_ICON_DEFAULT, INPUTHALO_MIN_SYSTEM_VERSION, performInputHaloDownload } from "~/routes/inputhalo/download"; export default function InputHaloDownloadsPage() { const site = useSite(); const { isDark } = useDarkMode(); const [loading, setLoading] = createSignal(false); const iconSrc = () => isDark() ? INPUTHALO_ICON_DARK : INPUTHALO_ICON_DEFAULT; const brandColor = () => site().brandColor; const download = () => { if (loading()) return; setLoading(true); performInputHaloDownload( (input) => api.downloads.getDownloadUrl.query(input), (url) => { window.location.href = url; }, () => { alert("Failed to initiate download. Please try again."); } ).finally(() => setLoading(false)); }; return ( <> Download InputHalo Show every keystroke, click, and scroll on macOS. Direct download inputhalo.dmg macOS {INPUTHALO_MIN_SYSTEM_VERSION}+ · auto-updates via Sparkle App Store Paid App Store variant coming soon. ← back to InputHalo > ); }
Show every keystroke, click, and scroll on macOS.
← back to InputHalo