Staaarter

Culinary Journey Timeline

Vertical timeline with alternating content, year badges, milestone images, and connecting line. Perfect for chef stories and restaurant history pages.

By Staaarter Team
Food
Docs
Live preview

Docs

Installation

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

npx shadcn add https://staaarter.com/r/culinary-journey-timeline.json

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

Usage

The file also exports food24Demo, 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 { Food24, food24Demo } from "@/components/blocks/food/food24";

export default function Page() {
  return <Food24 {...food24Demo} />;
}

Props

PropTypeDefaultDescription
headingReactNodenoneSection heading.
descriptionstringundefinedSection intro text.
milestonesMilestoneItem[]noneTimeline entries rendered in array order, alternating sides on desktop starting with the left.
classNamestringnoneExtra classes for the outer section element.

Types

type MilestoneItem = {
  year: string;
  title: string;
  description: string;
  image?: MediaSlotImage;
};

Behavior notes

  • Milestones alternate sides by array index (even indexes lead with text on the left, odd indexes flip the columns via a `sm:[&>*:first-child]:order-2` utility) on sm and up; every entry stacks text-above-image on mobile.
  • The connecting vertical line and per-entry dot markers are decorative and hidden below the sm breakpoint, since the stacked mobile layout has no side to connect.
  • Each milestone's image uses MediaSlot, falling back to a placeholder gradient when image is omitted.
  • There is no date logic here: `year` is a plain display string supplied per milestone, not derived from the real clock.