Harbor Hall Records, out October 17
Slow Pour recorded eleven songs live to tape over four nights in Bergen. Every copy ships on marbled vinyl, so no two sleeves or discs are ever the same.
A split record release hero over the fluid-gradient background component: a large rounded cover panel on the right holds a marbled paint pour of navy, cream, orange and red under a fine film grain, drifting so slowly it looks nearly still. A play toggle on the cover sets the paint pouring faster and pauses it back to a crawl, and the paint bends softly toward the cursor over the cover. On a warm paper ground, an oversized headline, an intro, a dark Arrow Pill and an underline link sit on the left. Every paint setting passes through the fluid prop, and both speeds are props.
A split hero for a record release: a large rounded cover panel runs the fluid-gradient component, a marbled paint pour under a film grain that drifts at a crawl until a play toggle on the cover sets it pouring. An oversized headline, an intro, a primary Arrow Pill and an underline link sit beside it on the theme background.
Upgrade to Pro
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/hero265?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero265?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero265.tsx plus the fluid-gradient background and the button23 and button2 buttons it uses.
The installed file exports hero265Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero265, hero265Demo } from "@/components/beste/block/hero265";
export default function Page() {
return <Hero265 {...hero265Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero265 } from "@/components/beste/block/hero265";
export default function Page() {
return (
<Hero265
eyebrow="Harbor Hall Records, out October 17"
heading="A record you can almost see."
description="Eleven songs recorded live to tape over four nights in Bergen."
buttons={[
{ label: "Pre-order the vinyl", href: "/pre-order" },
{ label: "Hear the first single", href: "/single" },
]}
pourLabel="Pour the cover"
settleLabel="Let it settle"
restSpeed={0.3}
pourSpeed={1.6}
fluid={{
colors: ["#141b3d", "#2f5fb3", "#f1e6d2", "#f08a4b", "#c2362b"],
warp: 0.7,
grain: 0.2,
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small line above the headline |
heading | string | – | Oversized headline, rendered as the page h1 |
description | string | – | Intro under the headline |
buttons | ActionButton[] | [] | The first renders as a primary Arrow Pill, every later one as a Button2 underline link |
pourLabel | string | "Pour the cover" | Toggle label while the cover rests |
settleLabel | string | "Let it settle" | Toggle label while the cover pours |
restSpeed | number | 0.3 | Paint speed while the cover rests, 0 to 3 |
pourSpeed | number | 1.6 | Paint speed while the cover pours, 0 to 3 |
fluid | Omit<FluidGradientProps, "className" | "children" | "speed"> | – | Forwarded to the FluidGradient component: colors, scale, warp, detail, flow, stretch, repeat, contrast, sheen, saturation, grain, grain size, grain motion, transition, seed, interactive and paused |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};button with aria-pressed; it only switches speed between restSpeed and pourSpeed. The paint keeps its place when the speed changes, so the pour picks up from where it is instead of jumping.interactive on, the paint bends softly toward the cursor over the cover like a lens.bg-background, text-foreground, bg-card, bg-primary); only the paint colors in fluid.colors stay fixed.lg up.IntersectionObserver and on hidden tabs and respects prefers-reduced-motion: the cover then holds a still frame, the toggle has nothing to animate, and the copy and panel render without their entrance.max(640px, 100svh - 78px) with both columns centered vertically.