Staaarter

Kanban Roadmap Board

A product roadmap laid out as a static kanban board with three swim lanes: Shipped, In Progress, and Planned. Every card carries an icon, a title, a short summary, and a status-colored tag that matches its lane.

By Staaarter Team
Feature
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/kanban-roadmap-board.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/feature/feature99.tsx instead.

Usage

The file also exports feature99Demo, 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 { Feature99, feature99Demo } from "@/components/blocks/feature/feature99";

export default function Page() {
  return <Feature99 {...feature99Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringundefinedSmall label above the heading; omitted entirely when unset.
headingReactNodenoneSection heading.
descriptionstringundefinedSupporting copy under the heading.
columnsRoadmapColumn[]noneOrdered swim lanes, each with its own status and cards.
classNamestringundefinedExtra classes for the outer section element.

Types

type RoadmapStatus = "shipped" | "in-progress" | "planned";

type RoadmapCard = {
  icon: number; // index into a fixed built-in icon set
  title: string;
  summary: string;
};

type RoadmapColumn = {
  status: RoadmapStatus;
  title: string;
  cards: RoadmapCard[];
};

Behavior notes

  • This block has no real interactivity to implement: the brief describes a static kanban layout with no drag-and-drop, so it's a plain Server Component (no "use client", no useState) rather than a client component, and its demo props live in the same file as the component rather than a split .demo.tsx sibling, matching the About category's convention for non-interactive blocks.
  • Each card's `icon` is a numeric index into a fixed, built-in array of lucide-react icons (CheckCircle2, Rocket, Zap, ShieldCheck, Layers, Sparkles, GitBranch, Bell) rather than accepting an icon component as data, consistent with this repo's rule against passing component references as block props.
  • The status tag's color is derived from the column's `status` field against a small fixed lookup table of semantic chart-N tokens (chart-3 for shipped, chart-4 for in progress, muted for planned), not literal color classes.
  • Columns stack to a single column on small screens and lay out as three side-by-side lanes from the md breakpoint up.