MenuClose

Block Process Steps — React Page Block

Three-to-four step process with numbered badges and a connector line that draws itself in on scroll; vertical timeline on narrow screens, replaceable media per step.

View source
PreviewReact
Starting live preview

Usage

import { BlockProcessSteps } from "@/components/BlockProcessSteps";

export function HowItWorks() {
  return (
    <BlockProcessSteps
      title="From install to insight in an afternoon."
      steps={[
        { title: "Connect your repos", text: "One OAuth flow, automatic indexing." },
        { title: "Describe a release", text: "The graph assembles itself." },
        { title: "Ship and watch", text: "Staged rollouts with auto-pause." },
      ]}
      action={{ label: "Read the quickstart", href: "/docs" }}
      {...{
        title: "Your next release starts here.",
        accent: "#d5ed9a",
        scheme: "dark"
      }}
    />
  );
}
Implementation notes & API

Purpose: process/how-it-works steps. Copy it, ship it — every string, link and color arrives through props. Runtime: pure DOM + CSS. No WebGPU, canvas, animation library or external assets; SSR-safe on first render. Theming: root custom properties (--vb-bg, --vb-fg, --vb-accent, --vb-border, --vb-radius, --vb-container) or the accent/scheme/className/style props. scheme flips the dark default to light. Guardrails: responsive via container queries down to 320px; interactive behavior degrades on touch; prefers-reduced-motion drops entrance/scroll motion while content stays complete. The connector draws once when the section enters the viewport (IntersectionObserver + CSS transform); reduced motion shows the finished line and settled layout immediately.

PropertyTypeNotes / default
eyebrow / title / descriptionReactNodeSection header
stepsreadonly ProcessStep[]{ title, text, media?, label? } — 3-4 recommended
action{ label, href } | nullCall to action under the steps
scheme"dark" | "light"dark
accentstring (hex)Sets --vb-accent for the whole block
className / stylestring / CSSPropertiesApplied to the section root
childrenReactNodeReplaces the default content entirely
View source on GitHubFree for commercial projects · MIT