/* ============================================================================ Newsletter — band (reused on home) + full subscribe view ========================================================================== */ function NewsletterBand({ showPattern = true }) { const [email, setEmail] = React.useState(""); const [done, setDone] = React.useState(false); return (
{showPattern &&
}
Newsletter

Leave with something you can use.

One essay every other week — an idea worked all the way down to a next action you can take. No noise, no funnels. Unsubscribe in one click.

{done ? (

↳ Thanks — check your inbox to confirm. You're subscriber № 2,481.

) : (
{ e.preventDefault(); if (email) setDone(true); }}>
setEmail(e.target.value)} />

2,480 readers · No spam · ≈ 2 emails / month

)}
); } function SubscribeView() { return (
Newsletter

The notebook, delivered.

I keep this site as a slow archive of what I actually thought. The newsletter is how I send the best of it to people who'd rather not check back — finished thinking, with a clear next step attached.


{[ ["Every other week", "Two essays a month, never more. Sent Sunday mornings."], ["One idea, worked down", "Each issue ends with something to do, not just something to feel."], ["Yours to leave", "One-click unsubscribe. I export nothing, sell nothing, track nothing."], ].map(([t, d]) => (
{t}
{d}
))}
); } function NewsletterInline() { const [email, setEmail] = React.useState(""); const [done, setDone] = React.useState(false); if (done) return

↳ Confirmed soon — welcome aboard.

; return (
{ e.preventDefault(); if (email) setDone(true); }}>
setEmail(e.target.value)} />
); } Object.assign(window, { NewsletterBand, SubscribeView, NewsletterInline });