Bento Grid

Responsive masonry-style grid with staggered scroll-reveal, pointer-follow spotlight, hover lift and shadows, optional spin borders, and spring micro-interactions per cell.

UniqueUI CLI

npx uniqueui add bento-grid

shadcn CLI

npx shadcn@latest add https://uniqueui-platform.vercel.app/r/bento-grid.json -y

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

Features

Variant 1 of 4
import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";
import { Sparkles, Zap, Shield, Globe } from "lucide-react";

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid>
        <BentoCard
          icon={<Sparkles className="w-5 h-5" />}
          title="Beautiful animations"
          description="Every interaction is crafted with spring-physics Motion.dev animations."
          cta="Explore components"
          className="col-span-2"
          spinBorder
          spinBorderColors={["#E2CBFF", "#393BB2"]}
        />
        <BentoCard
          icon={<Zap className="w-5 h-5" />}
          title="Lightning fast"
          description="Copy-paste components with zero runtime overhead."
          spinBorder
          spinBorderColors={["#a3e635", "#065f46"]}
        />
        <BentoCard
          icon={<Shield className="w-5 h-5" />}
          title="Type-safe props"
          description="Fully typed with TypeScript for confidence at scale."
          spinBorder
          spinBorderColors={["#67e8f9", "#1e3a5f"]}
        />
        <BentoCard
          icon={<Globe className="w-5 h-5" />}
          title="Zero lock-in"
          description="You own the code. No external runtime dependency."
          cta="Get started"
          className="col-span-2"
          spinBorder
          spinBorderColors={["#fda4af", "#9f1239"]}
        />
      </BentoGrid>
    </div>
  );
}

Showcase

Variant 2 of 4

Magnetic pull

Spring-physics cursor attraction.

Spotlight effect

Radial light that follows your mouse.

import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid>
        <BentoCard
          title="Aurora vibes"
          description="Layered animated gradients that feel alive."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-violet-700/30 via-fuchsia-600/15 to-cyan-600/20 animate-pulse" />
          }
          cta="View component"
          className="col-span-2"
        />
        <BentoCard
          title="Magnetic pull"
          description="Spring-physics cursor attraction."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-rose-700/25 to-orange-600/20" />
          }
        />
        <BentoCard
          title="Spotlight effect"
          description="Radial light that follows your mouse."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-sky-700/25 to-indigo-700/20" />
          }
        />
        <BentoCard
          title="Meteor storm"
          description="Shooting star particles raining through cards."
          background={
            <div className="absolute inset-0 bg-gradient-to-br from-emerald-700/25 to-teal-600/20" />
          }
          cta="Try it"
          className="col-span-2"
        />
      </BentoGrid>
    </div>
  );
}

Stats

Variant 3 of 4
24
24

Components

Production-ready animated components

0
0

Zero dependencies

No UniqueUI runtime in your bundle

~3s

Install time

Seconds from CLI to working component

✓

Tailwind compatible

v3 and v4 supported

import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid className="auto-rows-[160px]">
        <BentoCard
          title="Components"
          description="Production-ready animated components"
          background={
            <div className="absolute top-4 right-4 text-6xl font-black text-white/[0.06] select-none">24</div>
          }
          icon={<span className="text-2xl font-black text-violet-400">24</span>}
        />
        <BentoCard
          title="Zero dependencies"
          description="No UniqueUI runtime in your bundle"
          background={
            <div className="absolute top-4 right-4 text-6xl font-black text-white/[0.06] select-none">0</div>
          }
          icon={<span className="text-2xl font-black text-emerald-400">0</span>}
        />
        <BentoCard
          title="Install time"
          description="Seconds from CLI to working component"
          icon={<span className="text-2xl font-black text-sky-400">~3s</span>}
        />
        <BentoCard
          title="MIT License"
          description="Open source forever. Fork it, extend it, ship it."
          cta="View on GitHub"
          className="col-span-2"
        />
        <BentoCard
          title="Tailwind compatible"
          description="v3 and v4 supported"
          icon={<span className="text-2xl font-black text-cyan-400">✓</span>}
        />
      </BentoGrid>
    </div>
  );
}

Team

Variant 4 of 4
AK

Alex Kim

Lead Engineer

Motion →
SC

Sara Chen

Design Systems

Tailwind →
JL

Jordan Lee

DX Engineer

CLI →
MP

Maya Patel

Animations Lead

Motion.dev →
RW

Ryan Wu

Accessibility

ARIA →
PS

Priya Shah

TypeScript Infra

TS 5.x →
import { BentoGrid, BentoCard } from "@/components/ui/bento-grid";

const members = [
  { name: "Alex Kim",   role: "Lead Engineer",    tag: "Motion",     color: "#a855f7" },
  { name: "Sara Chen",  role: "Design Systems",   tag: "Tailwind",   color: "#6366f1" },
  { name: "Jordan Lee", role: "DX Engineer",      tag: "CLI",        color: "#ec4899" },
  { name: "Maya Patel", role: "Animations Lead",  tag: "Motion.dev", color: "#10b981" },
  { name: "Ryan Wu",    role: "Accessibility",    tag: "ARIA",       color: "#f59e0b" },
  { name: "Priya Shah", role: "TypeScript Infra", tag: "TS 5.x",    color: "#3b82f6" },
];

export default function Example() {
  return (
    <div className="p-8 w-full">
      <BentoGrid className="auto-rows-[180px]">
        {members.map((m) => (
          <BentoCard
            key={m.name}
            title={m.name}
            description={m.role}
            background={
              <div
                className="absolute bottom-0 right-0 w-24 h-24 rounded-tl-full opacity-10"
                style={{ backgroundColor: m.color }}
              />
            }
            icon={
              <div
                className="w-8 h-8 rounded-full flex items-center justify-center text-xs font-bold text-white"
                style={{ backgroundColor: m.color + "33", border: `1.5px solid ${m.color}66` }}
              >
                {m.name.split(" ").map((n) => n[0]).join("")}
              </div>
            }
            cta={m.tag}
          />
        ))}
      </BentoGrid>
    </div>
  );
}

Props

PropTypeDescription
titlestringHeadline text displayed at the bottom of the card.
descriptionstringSupporting body text shown beneath the title.
iconReact.ReactNodeIcon element rendered inside a pill at the top of the card.
backgroundReact.ReactNodeOptional decorative layer (image, gradient, SVG) rendered behind the content.
ctastringCall-to-action label that slides up into view on hover.
hrefstringWhen supplied the card renders as an anchor element.
classNamestringGrid span and sizing classes forwarded to the cell wrapper, e.g. col-span-2 or row-span-2.
spinBorderbooleanEnable the spinning conic-gradient border effect (same technique as the hero button). Replaces the static border.
spinBorderColors[string, string]Two hex/CSS color values for the conic gradient. Defaults to ["#E2CBFF", "#393BB2"] (purple–indigo).
interactiveSpotlightbooleanWhen true (default), a violet radial highlight follows the pointer inside the card on fine-pointer hover.
theme"light" | "dark"Surface and text colors; injected by BentoGrid on each child.