Aubade, the sunrise lamp
Aubade fills the room with slow, drifting color for 30 minutes before your alarm, follows the sun through the day and settles into amber at night.
A full-bleed product hero over the mesh-gradient background component: six soft color fields drift, warp and blend under a fine film grain, and the field swells toward the cursor. A row of mood chips below the buttons swaps the palette, and the gradient fades through to the new colors while the text and primary Arrow Pill switch between dark and light ink to stay readable. An oversized headline sits beside a short intro and an underline link. Every gradient setting passes through the gradient prop, and each mood carries its own colors and ink.
A full-bleed hero over the mesh-gradient component: soft color fields drift and warp under a film grain while a row of mood chips swaps the palette, fading the gradient through to the new colors and switching the text between dark and light ink.
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/hero261?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero261?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero261.tsx plus the mesh-gradient background and the button23 and button2 buttons it uses.
The installed file exports hero261Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero261, hero261Demo } from "@/components/beste/block/hero261";
export default function Page() {
return <Hero261 {...hero261Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero261 } from "@/components/beste/block/hero261";
export default function Page() {
return (
<Hero261
eyebrow="Aubade, the sunrise lamp"
heading="Wake to a softer kind of morning."
description="Aubade fills the room with slow, drifting color for 30 minutes before your alarm."
buttons={[
{ label: "Pre-order for $189", href: "/pre-order" },
{ label: "How it works", href: "/how-it-works" },
]}
moods={[
{ label: "Dawn", colors: ["#fde7df", "#ffb4a2", "#ff7f6e", "#c9b8ff"], ink: "dark" },
{ label: "Night", colors: ["#070b1f", "#1a2458", "#34307a", "#ff9b52"], ink: "light" },
]}
gradient={{ distortion: 0.6, grain: 0.2, transition: 1.8 }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small line above the headline |
heading | string | – | Oversized headline, rendered as the page h1 |
description | string | – | Intro in the right column |
buttons | ActionButton[] | [] | The first renders as an Arrow Pill in the current ink, every later one as a Button2 underline link |
moods | Mood[] | [] | Palettes to switch between; the first is shown on load, and the chips only appear with two or more |
moodsLabel | string | "Change the colors" | Accessible name for the mood chips |
gradient | Omit<MeshGradientProps, "className" | "children" | "colors"> | – | Forwarded to the MeshGradient component: speed, scale, distortion, swirl, softness, saturation, grain, grain size, grain motion, bands, transition, seed and interactive |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};
type Mood = {
label: string;
colors: string[]; // 1 to 6 colors, any CSS color
ink?: "dark" | "light"; // text color over this palette, dark by default
};colors to MeshGradient, which crossfades every field over gradient.transition seconds. The ink, the primary pill and a bottom veil (white under dark ink, black under light ink) fade along with it over one second.radiogroup; each chip shows a small swatch of its first colors.text-black for dark ink and text-white for light ink. The first pill uses the primary tone under dark ink and the light tone under light ink.interactive on, the gradient swells toward the cursor.IntersectionObserver and on hidden tabs and respects prefers-reduced-motion: the copy then renders without its rise and palettes swap without fading.max(640px, 100svh - 78px) with the copy anchored to the bottom.