
Alder Row, Riverside
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.
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.
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://beste.dev/r/realestate17?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
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.
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.
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:
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",
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Short line above the statement, rendered through badge24 on mount. |
heading | string | – | The statement, rendered as an h1. |
buttons | ActionButton[] | [] | Pill buttons under the statement, rendered through button25; tone defaults to dark. |
facts | Fact[] | [] | Figures stacked under hairlines in the right column. |
image | { src: string; alt: string } | – | The wide photograph at the top of the hero. |
className | string | – | Extra classes merged onto the section. |
type ActionButton = {
label: string;
href: string;
tone?: "dark" | "outline" | "primary" | "neutral";
icon?: LucideIcon;
};
type Fact = { value: string; label: string };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.md breakpoint; the facts column aligns to the bottom of the statement column so the figures sit level with the buttons.dt/dd pair rendered figure first with flex-col-reverse, keeping the markup valid while the number leads visually.prefers-reduced-motion every entrance, the clip reveal and the parallax are disabled and the hero renders in its final state.