PParable
All components

Hero Section

Blocks & Slices

A complete marketing hero block — mono uppercase eyebrow, tracking-tight headline with one gradient-accented word, subcopy, primary/secondary CTA pair, and a mono stats row — that spring-staggers in on mount over two blurred radial glows drifting on slow keyframe orbits; under prefers-reduced-motion the content reveals instantly with no stagger and the glows hold a static frame.

Inspired by Cult Pro — marketing hero blocks (pattern) — independently built, not affiliated. Attribution policy

Parable Registry

Ship interfaces that feel alive

Production-grade motion blocks you can paste straight into any React app.

  • 12k stars
  • 400+ teams
  • 54 blocks

Installation

npx shadcn@latest add https://parable-three.vercel.app/r/hero-section.json

Runs the shadcn CLI — the component source is copied intocomponents/parable/hero-section.tsx. You own it from there.

Usage

The exact code rendering the preview above.

<div className="w-full max-w-2xl px-4">
    <HeroSection
      className="rounded-2xl border border-white/10 bg-[#0f0f10]"
      eyebrow="Parable Registry"
      title="Ship interfaces that feel alive"
      accentWord="alive"
      subtitle="Production-grade motion blocks you can paste straight into any React app."
      primaryLabel="Get started"
      secondaryLabel="Browse blocks"
      onPrimary={() => {}}
      onSecondary={() => {}}
      stats={[
        { value: "12k", label: "stars" },
        { value: "400+", label: "teams" },
        { value: "54", label: "blocks" },
      ]}
    />
  </div>

Props

HeroSectionProps extends Omit<React.HTMLAttributes<HTMLElement>, "title">

PropTypeDefaultDescription
eyebrowstringSmall mono uppercase kicker above the headline.
title*React.ReactNodeThe headline. Pass a string to let `accentWord` gradient-wrap one word.
accentWordstringSubstring of a string `title` to paint with the accent gradient.
subtitleReact.ReactNodeSupporting paragraph under the headline.
primaryLabelstringPrimary CTA text. Omit to hide the button.
onPrimary() => voidFires when the primary CTA is pressed.
primaryHrefstringRenders the primary CTA as a real `<a>` pointing here.
secondaryLabelstringSecondary CTA text. Omit to hide the button.
onSecondary() => voidFires when the secondary CTA is pressed.
secondaryHrefstringRenders the secondary CTA as a real `<a>` pointing here.
statsHeroStat[]Mono proof-point row under everything, e.g. 12k stars · 400+ teams.
accentstring"#8b5cf6"Gradient/glow start colour and CTA fill. Mirrors `--pb-violet`.
accentAltstring"#ec4899"Gradient/glow end colour. Mirrors `--pb-fuchsia`.
childrenReact.ReactNodeExtra content rendered below the actions (e.g. a screenshot or badge).

npm dependencies

  • motion
  • lucide-react