Desert Dunes Hero

Sand & Silence, a desert camp at the edge of the Erg Chebbi

Nothing to do but watch the light.

Twelve tents, one long table and dunes in every direction. Mornings start before sunrise, evenings end under more stars than you knew were there.

About this block

Desert Dunes HeroPRO

A hero for a desert camp over the dune-field background component: a photoreal desert at golden hour, raymarched in a shader, with sharp-crested dunes, long soft shadows tinted by the sky, wind ripples and a warm haze toward the horizon. The camera glides slowly over the sand and turns gently with the cursor, and the light comes up out of the dusk on arrival. A large headline, an intro, an Arrow Pill and an underline link sit low on the left over a soft shade. Every desert setting passes through the desert prop.

Hero245: Desert Dunes Hero

A full-bleed hero over the dune-field component, a desert at golden hour raymarched in a WebGL shader with sharp-crested dunes, sky-tinted shadows, wind ripples and warm haze, where the camera glides slowly over the sand and turns with the cursor; a large headline, an intro and two buttons sit low on the left over a soft shade.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/hero245?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/hero245?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/hero245.tsx plus the dune-field background and the button23 and button2 buttons it uses.

Quick start

The installed file exports hero245Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.

tsx
import { Hero245, hero245Demo } from "@/components/beste/block/hero245";

export default function Page() {
  return <Hero245 {...hero245Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { Hero245 } from "@/components/beste/block/hero245";

export default function Page() {
  return (
    <Hero245
      eyebrow="A desert camp at the edge of the Erg Chebbi"
      heading="Nothing to do but watch the light."
      description="Twelve tents, one long table and dunes in every direction."
      buttons={[
        { label: "Plan your stay", href: "/stay" },
        { label: "See the camp", href: "/camp" },
      ]}
      desert={{ sandColor: "#d9a066", skyColor: "#6d8fbf", sunHeight: 0.25, sunAngle: -32, ripples: 0.6 }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Small line above the heading
headingstring–Headline, rendered as the page h1
descriptionstring–Intro under the heading
buttonsActionButton[][]The first renders as a light Button23 arrow pill, the rest as Button2 underline links
desertOmit<DuneFieldProps, "className" | "children">–Forwards the DuneField component's props: sandColor, skyColor, hazeColor, sunColor, sunHeight, sunAngle, scale, ripples, speed, grain, interactive, paused
classNamestring–Extra classes for the outer <section>
ts
type ActionButton = {
  label: string;
  href: string;
};

Behavior notes

  • On arrival the light comes up out of the dusk over 2.6 seconds, and the copy rises in from 0.3 seconds so it lands as the scene brightens.
  • Text is a fixed white (text-white with opacity steps) over a black/60 to transparent gradient from the bottom, so it reads over bright sand in both themes. The desert is a lit scene, like a photograph, so it does not follow the theme.
  • The view turns with the cursor when interactive is on; touch input is ignored.
  • The render loop pauses offscreen or in a hidden tab, with the pixel ratio capped at 1.5.
  • With reduced motion, the desert holds one fully lit still frame and the copy skips its rise-in. Without WebGL, a painted gradient of sky, haze and sand stands in.

More Hero blocks

View all Hero
PRO

hero242

Cloud Flight Hero

PRO

hero259

Ocean Horizon Hero

PRO

hero237

Wheat Field Hero

Get Pro access