Roadmap Status Changelog
A hybrid roadmap and changelog: three stacked status sections (Shipped, In Progress, Planned), each listing items with a status dot, an optional tag, and an optional feature image. Useful for a public roadmap page that also doubles as a lightweight changelog for what's already shipped.
Docs
Installation
A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its media-slot, badge dependencies and any missing npm packages, and installs them straight into your project.
npx shadcn add https://staaarter.com/r/roadmap-status-changelog.jsonPrefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/changelog/changelog20.tsx instead.
Usage
The file also exports changelog20Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.
import { Changelog20, changelog20Demo } from "@/components/blocks/changelog/changelog20"; export default function Page() { return <Changelog20 {...changelog20Demo} />; }
Props
| Prop | Type | Default | Description |
|---|---|---|---|
| heading | string | "Roadmap" | Section heading. |
| description | string | "What we've shipped, what we're building, and what's next." | Section intro text. |
| shipped | Changelog20Item[] | [] | Items in the Shipped section. |
| inProgress | Changelog20Item[] | [] | Items in the In Progress section. |
| planned | Changelog20Item[] | [] | Items in the Planned section. |
| className | string | none | Extra classes for the outer section element. |
Types
type Changelog20Item = { id: string; title: string; description: string; tag?: string; image?: { src: string; alt: string }; };
Behavior notes
- Purely presentational: no interactive state or backend calls. Status grouping (shipped/inProgress/planned) is caller-supplied data, not computed or fetched.
- image is optional per item; MediaSlot is only rendered when an item's image is present, so most roadmap cards can stay text-only while a few carry a feature photo, per the same optional pattern used in booking7.
- Each of the three sections only renders at all when its array has at least one item, so a caller can omit a status entirely (e.g. no Planned section yet) without leaving empty heading/spacing behind.
- The In Progress status dot uses a CSS animate-pulse for a subtle always-on pulse; this is a pure CSS animation, not a timer or interval, so it has no hydration or determinism implications for static rendering.
More Changelog Blocks
View all →Split Milestone Changelog
Two-column release entries pairing milestone context with highlights and metrics.
Changelog Release Feed
Release feed cards with aligned change-type labels and an optional CTA per card.
Grouped Changelog Board
Releases grouped under bold month headings with aligned version and description columns.
Milestone Changelog Timeline
Vertical timeline of releases with a connecting line, version badges, and tone-coded change types.
Minimal Text Changelog
Ultra-plain, text-only changelog with no badges, cards, or borders.
Categorized Release Notes
Per-release changes grouped into Added, Changed, and Fixed sub-sections.