Staaarter

Scrolling Sequence Rail

A feature section whose steps sit on a horizontally scrolling card rail below a two-column header (heading on the left, description and CTA on the right). Each card carries a numbered index, a title, a paragraph, and a timing note on a hairline. Built with pure CSS scroll-snap, no client JavaScript required.

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 button dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/scrolling-sequence-rail.json

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

Usage

The file also exports feature9Demo, 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 { Feature9, feature9Demo } from "@/components/blocks/feature/feature9";

export default function Page() {
  return <Feature9 {...feature9Demo} />;
}

Props

PropTypeDefaultDescription
eyebrowstringundefinedSmall label above the heading.
headingReactNodenoneSection heading in the left header column.
descriptionstringundefinedSupporting paragraph in the right header column.
ctaFeature9CtaundefinedOptional outline button link in the right header column.
stepsFeature9Step[]noneCards rendered in the horizontally scrolling rail, in order.
classNamestringnoneExtra classes for the outer section element.

Types

interface Feature9Cta {
  label: string;
  href: string;
}

interface Feature9Step {
  title: string;
  description: string;
  timing: string;
}

Behavior notes

  • The rail scrolls horizontally with native CSS scroll-snap (snap-x snap-mandatory); no JavaScript tracks the active card or drives the scroll position.
  • Each card's index number (01, 02, ...) is derived from its position in the steps array, not a separate prop.
  • cta renders as a plain link (Button with render={<Link/>}); there is no real navigation wired up beyond the href you pass.