Release Pill

The "New" badge above your headline, made useful. Hover it and the pill grows into a small changelog with your last few releases, then folds back into the pill when you leave.

  • Badge
  • Hover
  • Changelog

Uses motion, clsx, tailwind-merge

Open in ChatGPTOpen in Claude

The agent that does the busywork

Hand it the weekly report, the expense chasing and the calendar tetris. It plans the steps, does them, and checks its own work before it tells you.

Installation

Add the component on its own with the CLI, or copy the file in by hand.

The CLI writes components/ui/release-pill.tsx and installs motion, clsx and tailwind-merge. It needs the @keyframeui registry in components.json; add it once per project.

npx shadcn@latest add @keyframeui/release-pill

Examples

Finished sections built with Release Pill. Each one installs whole, with the component included.

Launch Week

The closed pill cycles through the week's announcements. Opened, it lists the days and ends on a dimmed, locked Day 4 row with a live countdown.

One new thing, every morning

Launch week is here. Three days in, three things shipped, and the best one is still to come.

Remind me tomorrow

Version Bump

A dark developer-tool hero: monospace versions with a Feature, Fix or Breaking tag on each row, and a last row with the upgrade command whose copy button turns into Copied.

Builds that finish before you look away

Acme runs your tasks as a graph, caches what hasn't changed, and tells you why when something does.

Props

releasesRequired

TypeRelease[]

The releases, newest first; the first is the latest. Each one is { version, title, date?, href?, summary?, label? }. version is shown as written ("v2.4", "Day 3") and its digits roll from the previous release's on first view. summary is the line under the latest title, and label is a small node, like a Feature tag, shown with the release in the open card.

tag

TypestringDefault"New"

The small tag at the start of the pill.

changelogHref

Typestring

Adds a "View changelog →" link at the bottom of the open card.

peek

TypebooleanDefaultfalse

About 2s after the pill first scrolls into view, open just far enough to show the second row, then close. Once per page view; a pointer cancels it. Skipped with reduced motion.

cycle

Typeboolean | numberDefaultfalse

Step the closed pill through the latest releases every 4s, each title sliding up as the next arrives. A number sets how many releases; true is 3. A pointer or focus stops it, and opening brings the latest back.

align

Type"center" | "start"Default"center"

Where the card grows from: out of the pill's middle (above a centered headline) or out of its left edge.

children

TypeReact.ReactNode

An extra row at the end of the list, after the releases: an upgrade command, a locked next release.

className

Typestring

Extra classes for the wrapper. Set the open card's width with [--release-pill-width:26rem] (default 22rem).