import { PageHead } from "~/components/PageHead"; import { EdgeCacheHeaders } from "~/components/EdgeCacheHeaders"; import SubdomainHeader from "~/components/SubdomainHeader"; import FeatureCollage from "~/components/nook/FeatureCollage"; import FeatureBreakdowns from "~/components/nook/FeatureBreakdowns"; import IslandExtras from "~/components/nook/IslandExtras"; import PhoneBeta from "~/components/nook/PhoneBeta"; import Button from "~/components/ui/Button"; import Input from "~/components/ui/Input"; import { createSignal, Show } from "solid-js"; import { useDarkMode } from "~/context/darkMode"; import { useSite } from "~/context/SiteContext"; /* * Downloads are logged and resolved server-side. `/api/the-nook/download` * records the click in the analytics buffer, then 302s to the latest * release dmg the appcast names. Pointing the button straight at the * enclosure would skip the funnel's second step entirely. */ function downloadNook() { window.location.href = "/api/the-nook/download"; } export default function NookLanding() { const site = useSite(); const { isDark } = useDarkMode(); const brandColor = () => isDark() ? (site().brandColorDark ?? site().brandColor) : site().brandColor; const [resendEmail, setResendEmail] = createSignal(""); const [resendSending, setResendSending] = createSignal(false); const [resendSent, setResendSent] = createSignal(false); const [resendError, setResendError] = createSignal(false); const resendLicense = async () => { if (resendSending()) return; const email = resendEmail().trim(); if (!email) return; setResendSending(true); setResendSent(false); setResendError(false); try { const res = await fetch("/api/the-nook/resend-license", { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ email }) }); if (!res.ok) throw new Error("resend failed"); setResendSent(true); } catch { setResendError(true); } finally { setResendSending(false); } }; return ( <> {/* ── Hero ─────────────────────────────────────────────────────── */} {/* -mt-14 pulls the hero under the sticky header; pt-14 re-clears content, so the gradient fills the full viewport incl. the bar */}
The Nook App Icon
The Nook

Manage your coding agents and your Mac

Follow your agents, respond to requests, and manage cooling, charging, and audio from the top of your screen.

macOS 14.2+ · 14-day free trial · up to 3 devices

Beta pricing · 33% off

$15{" "} $10 one-time

{/* ── Feature collage ─────────────────────────────────────────── */} {/* ── Feature breakdowns: the features in action ─────────────── */}

In action

What you can do with The Nook

{/* ── Everything else: marquee + live module bento ───────────── */} {/* ── iPhone + Watch companion, TestFlight beta ──────────────── */} {/* ── CTA ──────────────────────────────────────────────────────── */}

Try it free for 14 days

The trial includes every module. After 14 days, a one-time purchase lets you keep using The Nook on up to three of your Macs. There is no subscription.

The beta price is $10. The regular price will be $15. One license covers up to 3 of your own Macs.

{/* ── Resend license ─────────────────────────────────────────── */}

Lost your license?

Enter the email you purchased with and we'll resend your key.

{ e.preventDefault(); resendLicense(); }} > setResendEmail(e.currentTarget.value)} />

If a license is registered to that email, we'll send you the key.

Something went wrong. Please try again.

); }