The latest updates and improvements to our platform.
Work together with your team in real-time. See cursors, selections, and changes as they happen.
We've optimized our backend to reduce API response times by 40%.
Fixed an issue where exports would occasionally fail for large datasets.
Version history cards with version badges, dates, and update type labels (Feature, Improvement, Fix). Perfect for product update pages and release notes.
Static changelog/release-notes list: a centered header sits above a stack of version cards, each showing a version badge, optional type badge, date, title, and description.
Free block
This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.
Radix flavor
npx shadcn add "https://ui.beste.co/r/saas16"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/saas16"This installs the block to components/beste/block/saas16.tsx and the badge shadcn/ui primitive it depends on.
The installed file exports saas16Demo alongside the block: the exact props behind the preview above. Spread it to get a working changelog in one line.
import { Saas16, saas16Demo } from "@/components/beste/block/saas16";
export default function ChangelogPage() {
return <Saas16 {...saas16Demo} />;
}Then replace the demo with your own props. Written out, the same setup looks like this:
import { Saas16 } from "@/components/beste/block/saas16";
export default function ChangelogPage() {
return (
<Saas16
heading="Release notes"
description="Every update, in one place."
items={[
{
version: "1.4.0",
date: "Jan 9, 2026",
title: "Faster search indexing",
description: "Search results now update within seconds of a catalog change.",
badge: { label: "Improvement", variant: "secondary" },
},
{
version: "1.3.0",
date: "Dec 20, 2025",
title: "Dark mode",
description: "The dashboard now follows your system theme.",
badge: { label: "Feature", variant: "default" },
},
]}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; icon?: React.ReactNode; variant?: "default" | "secondary" | "outline" } | – | Small badge above the heading |
heading | string | – | Section heading |
description | string | – | Section intro text |
items | ChangelogItem[] | [] | Version cards rendered in order |
className | string | – | Extra classes for the outer <section> |
type ChangelogItem = {
version: string;
date: string;
title: string;
description: string;
badge?: { label: string; variant?: "default" | "secondary" | "outline" };
};items array; there's no sorting by version or date, so the caller is responsible for ordering newest-first.Badge for its version string; the per-item badge field (e.g. "Feature"/"Improvement"/"Fix") is a separate, optional second badge shown next to it.max-w-xl, narrower than the section's max-w-5xl container, so cards stay readable even though the header block above spans wider.items renders fully at once.