Dusk Hero, Photo First

The brick warehouse and the concrete wing seen from across the river at dusk, windows lit

Alder Row, Riverside

Evenings start on the river walk and end on a terrace that looks back at the lights.

Homes still available across the two buildings
15 of 24
Walk to Mill Lane station along the river
6 min
Two bedroom homes from
$640,000
About this block

Dusk Hero, Photo FirstPRO

A development hero that leads with the picture: a wide 21:9 dusk photograph at the top, unveiled from the top edge once loaded and drifting slowly against the scroll, then a two-column text row with a rule eyebrow, a large sans statement and two pill buttons on the left and three figures under hairlines on the right.

Realestate17: Dusk Hero, Photo First

A development hero that leads with the picture: a wide 21:9 dusk photograph at the top, unveiled from its top edge once loaded and drifting slowly against the scroll, then a two-column text row with a rule eyebrow, a large sans statement and two pill buttons on the left and three light figures under hairlines on the right.

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://beste.dev/r/realestate17?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/realestate17.tsx plus the badge24 rule eyebrow, the button25 pill behind both buttons, and the shadcn/ui button primitive they build on.

Quick start

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

tsx
import { Realestate17, realestate17Demo } from "@/components/beste/block/realestate17";

export default function Page() {
  return <Realestate17 {...realestate17Demo} />;
}

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

tsx
import { ArrowRight } from "lucide-react";
import { Realestate17 } from "@/components/beste/block/realestate17";

export default function Page() {
  return (
    <Realestate17
      eyebrow="Alder Row, Riverside"
      heading="Evenings start on the river walk and end on a terrace that looks back at the lights."
      buttons={[
        { label: "Book a viewing", href: "/viewings", icon: ArrowRight },
        { label: "See the price list", href: "/prices", tone: "outline" },
      ]}
      facts={[
        { value: "15 of 24", label: "Homes still available" },
        { value: "6 min", label: "Walk to Mill Lane station" },
        { value: "$640,000", label: "Two bedroom homes from" },
      ]}
      image={{
        src: "https://oud.pics/b/realestate/alder-river-dusk.webp",
        alt: "The warehouse and the concrete wing seen from across the river at dusk",
      }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Short line above the statement, rendered through badge24 on mount.
headingstring–The statement, rendered as an h1.
buttonsActionButton[][]Pill buttons under the statement, rendered through button25; tone defaults to dark.
factsFact[][]Figures stacked under hairlines in the right column.
image{ src: string; alt: string }–The wide photograph at the top of the hero.
classNamestring–Extra classes merged onto the section.
ts
type ActionButton = {
  label: string;
  href: string;
  tone?: "dark" | "outline" | "primary" | "neutral";
  icon?: LucideIcon;
};

type Fact = { value: string; label: string };

Behavior notes

  • The photograph is gated on its own load event (or the cached complete flag): the frame stays clipped until then, opens from the top over 1.6 seconds while the image settles from a 1.18 to a 1.12 scale, and drifts from -6% to 6% as the frame crosses the viewport.
  • The text row follows the picture on mount: the eyebrow's rule draws at 0.4 s, the statement rises at 0.5 s, the facts and their hairlines from 0.65 s in order, and the buttons at 0.75 s.
  • The frame is 4:3 on small screens and 21:9 from the md breakpoint; the facts column aligns to the bottom of the statement column so the figures sit level with the buttons.
  • Each fact is a dt/dd pair rendered figure first with flex-col-reverse, keeping the markup valid while the number leads visually.
  • With prefers-reduced-motion every entrance, the clip reveal and the parallax are disabled and the hero renders in its final state.

More Real Estate blocks

View all Real Estate
PRO

realestate18

Statement Hero without Photo

PRO

realestate10

Development Hero with Fact Bar

PRO

realestate13

Split Hero with Register Form

Get Pro