Hero
Logo Marquee Hero
A classic SaaS hero: bold headline above two ticker rows of partner / customer logos scrolling in opposite directions. CSS mask softens the edges, reduced-motion freezes the rows, and the brand list is fully customizable.
UniqueUI CLI
npx uniqueui add hero-logo-marquee
shadcn CLI
npx shadcn@latest add https://uniqueui-platform.vercel.app/r/hero-logo-marquee.json -y
Preview
Trusted across teams
The platform shipping teams ship with.
From scrappy seed startups to public companies — UniqueUI components ship in production every day.
- Acme
- Globex
- Soylent
- Initech
- Hooli
- Umbrella
- Stark
- Wayne
- Cyberdyne
- Wonka
- Tyrell
- Aperture
- Aperture
- Tyrell
- Wonka
- Cyberdyne
- Wayne
- Stark
- Umbrella
- Hooli
- Initech
- Soylent
- Globex
- Acme
Usage
import { LogoMarqueeHero } from "@/components/ui/hero-logo-marquee";
export default function Hero() {
return (
<LogoMarqueeHero
logos={[
"Acme",
"Globex",
"Soylent",
"Initech",
"Hooli",
"Umbrella",
"Stark",
"Wayne",
"Cyberdyne",
"Wonka",
"Tyrell",
"Aperture",
]}
secondaryLogos={[
"Aperture",
"Tyrell",
"Wonka",
"Cyberdyne",
"Wayne",
"Stark",
"Umbrella",
"Hooli",
"Initech",
"Soylent",
"Globex",
"Acme",
]}
speed={32}
>
<span className="mb-5 inline-flex items-center gap-2 rounded-full border border-white/15 bg-white/5 px-3 py-1 text-xs uppercase tracking-[0.18em] text-white/70 backdrop-blur">
<span className="h-1.5 w-1.5 rounded-full bg-white/80" aria-hidden />
Trusted across teams
</span>
<h1 className="text-balance text-4xl font-semibold tracking-tight sm:text-6xl">
The platform shipping teams ship with.
</h1>
<p className="mt-5 max-w-xl text-pretty text-base text-white/65 sm:text-lg">
From scrappy seed startups to public companies — UniqueUI components
ship in production every day.
</p>
</LogoMarqueeHero>
);
}Props
| Prop | Type | Description |
|---|---|---|
children | ReactNode | Slotted hero content above the marquee rows. Pass your own headline / subhead / CTAs. When omitted, a default composition renders. |
logos | ReadonlyArray<string> | Brand names rendered as the ticker items. Defaults to a placeholder list. |
secondaryLogos | ReadonlyArray<string> | null | Optional second row. `undefined` (default) reverses the primary list; `null` hides the second row. |
speed | number | Loop duration in seconds for the primary row. The second row runs slightly slower for visual interest. |
className | string | Extra classes on the outer `<section>`. |