import { Section } from "../ui/Section"; import { SectionHeading } from "../ui/SectionHeading"; import { ButtonLink } from "../ui/ButtonLink"; import { Reveal } from "../ui/Reveal"; import { Newsletter } from "../forms/Newsletter"; import { PostFeature } from "../devblog/PostFeature"; import type { DevblogPost } from "@/lib/devblog"; type Props = { /** The single most recent post, or null while the devblog is empty. */ latest: DevblogPost | null; }; /** * The last band before the footer, and the only conversion point on the page. * * It replaces the old "follow the journey" block, which framed a full section * — eyebrow, display title, lead, button — around a list that currently holds * one entry, and so read as an empty section. Here the latest post is a single * deliberate panel next to the newsletter form: it looks intentional with one * post, and stays correct once there are twenty. */ export function Dispatch({ latest }: Props) { return (
One mail per major update. No launch countdowns, no noise, just the build as it happens.