Ripple

Luminous orbs that drift slowly across the viewport — a liquid nebula hero background with warm, organic colour blooms.

UniqueUI CLI

npx uniqueui add ripple

shadcn CLI

npx shadcn@latest add https://uniqueui.com/r/ripple.json -y

shadcn path expects @/lib/utils (run shadcn init first). Same source file is installed to components/ui/.

Preview

Maison de Parfum

Aurore.

A scent composed at the edge of dawn — rose, oud, and liquid amber woven into silence.

Usage

"use client";
import { Ripple } from "@/components/ui/ripple";

export default function Hero() {
  return (
    <section className="relative h-[500px] w-full flex items-center justify-center overflow-hidden bg-[#0c0608]">
      {/* Animated nebula background */}
      <Ripple mainCircleSize={90} mainCircleOpacity={0.55} numCircles={7} duration={10} />

      {/* Radial vignette so centre text stays readable */}
      <div
        className="absolute inset-0 pointer-events-none"
        style={{
          background:
            "radial-gradient(ellipse 55% 60% at 50% 50%, transparent 0%, rgba(12,6,8,0.75) 60%, rgba(12,6,8,0.97) 100%)",
        }}
      />

      {/* Hero content sits above the orbs */}
      <div className="relative z-10 flex flex-col items-center gap-4 px-6 text-center max-w-sm">
        <p className="text-[10px] uppercase tracking-[0.35em] text-rose-300/70">
          Maison de Parfum
        </p>
        <h1 className="text-6xl font-light italic text-white" style={{ fontFamily: "Georgia, serif" }}>
          Aurore.
        </h1>
        <p className="text-xs leading-relaxed tracking-wide text-stone-400">
          A scent composed at the edge of dawn — rose, oud, and amber woven into silence.
        </p>
        <button className="mt-1 border border-rose-300/30 px-7 py-2.5 text-xs tracking-[0.18em] uppercase text-rose-200/80 transition-colors hover:border-rose-300/70 hover:text-rose-100">
          Discover the collection
        </button>
      </div>
    </section>
  );
}

Props

PropTypeDescription
mainCircleSizenumberControls orb diameter — each orb renders at mainCircleSize × 4.5 px.
mainCircleOpacitynumberPeak opacity for every orb (0–1). Individual orbs shimmer around this value.
numCirclesnumberNumber of orbs to render. Capped at 8.
colorstringPin all orbs to one colour (hex or rgba). Omit to use the built-in warm palette.
durationnumberBase drift-cycle length in seconds. Each orb is staggered so they never move in sync.
classNamestringExtra classes on the wrapper div.