Kaamos Fell Lodge, Finnish Lapland
Twelve glass-roofed cabins on a quiet fell above the Arctic Circle, with a resident astronomer, a wood sauna and a bedside alarm that rings the moment the lights begin.
A nordic lodge hero over the aurora-sky background component: folding northern-lights curtains with vertical rays drift above a twinkling starfield and two mountain ridges, leaning with the cursor like wind. A semibold headline sits over the ridges, with a ruled row below pairing the intro with an Arrow Pill and an underline link. Every sky setting passes through the sky prop; it pauses offscreen, holds a still sky for reduced motion and falls back to a CSS gradient without WebGL.
A full-height night hero over the aurora-sky component: folding aurora curtains, a starfield and 2 mountain ridges fade in over 2.4s, with a semibold headline over the ridges and a ruled row below that pairs the intro with an Arrow Pill and an underline link.
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/hero208?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero208?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero208.tsx plus the aurora-sky background and the button23 and button2 buttons it uses.
The installed file exports hero208Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero208, hero208Demo } from "@/components/beste/block/hero208";
export default function Page() {
return <Hero208 {...hero208Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero208 } from "@/components/beste/block/hero208";
export default function Page() {
return (
<Hero208
eyebrow="Kaamos Fell Lodge, Finnish Lapland"
heading="Some nights the sky rehearses in green."
description="Twelve glass-roofed cabins on a quiet fell above the Arctic Circle, with a resident astronomer and a wood sauna."
buttons={[
{ label: "Reserve a glass cabin", href: "/reserve" },
{ label: "Read tonight's sky report", href: "/sky" },
]}
sky={{
skyColor: "#020409",
lowColor: "#33ff94",
highColor: "#2e80ff",
curtains: 4,
mountains: true,
mountainColor: "#010204",
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small line above the headline |
heading | string | – | Headline, rendered as the page h1 |
description | string | – | Intro on the left of the ruled row |
buttons | ActionButton[] | [] | The first renders as a white Arrow Pill (tone="light"), every later one as a Button2 underline link |
sky | Omit<AuroraSkyProps, "className" | "children"> | – | Forwarded to the AuroraSky component: sky, horizon and aurora colors, intensity, curtains, height, rays, stars, twinkle, mountains, speed and wind |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};light tone for the same reason.AuroraSky renders in WebGL, leans its curtains with the cursor like wind, pauses through an IntersectionObserver and on hidden tabs, and holds a still sky under prefers-reduced-motion.lowColor, highColor, skyColor and horizonColor.max(640px, 100svh - 78px) and pins the copy to the bottom with mt-auto.