When you pay what
Buying off plan spreads the price over the build. Type a home price to see each stage worked out for that home; the shares stay the same across every type at Alder Row.
Total paid
$640,000
Figures are a guide for the price typed above and exclude legal fees, stamp duty and the service charge.
A payment schedule for an off-plan development: a price field, then a stacked proportional bar whose segments (10% on exchange, 10% at structure complete, 80% on completion) grow one after another, each labelled below under a hairline with its share, a spring figure for the typed price, a title and a line; a total figure, a button to the payment estimator and a note close the section.
A payment schedule for an off-plan development: a price field, then a stacked proportional bar whose segments (10% on exchange, 10% at structure complete, 80% on completion) grow one after another, each labelled below under a hairline with its share, a spring figure for the typed price, a title and a line. A total figure, a button to the payment estimator and a note close the section.
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/realestate39?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://beste.dev/r-base/realestate39?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/realestate39.tsx plus the badge24 rule eyebrow, the button25 quiet pill used for the estimator button, and the shadcn/ui button and input primitives behind it and the price field.
The installed file exports realestate39Demo alongside the block: the exact props behind the preview above. Spread it to get a working section in one line.
import { Realestate39, realestate39Demo } from "@/components/beste/block/realestate39";
export default function Page() {
return <Realestate39 {...realestate39Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Realestate39 } from "@/components/beste/block/realestate39";
export default function Page() {
return (
<Realestate39
eyebrow="When you pay what"
heading="Three payments, most of it at the very end"
description="Type a home price to see each stage worked out for that home."
price={640000}
currency="USD"
locale="en-US"
stages={[
{ title: "On exchange", share: 10, description: "Paid within 28 days of reservation." },
{ title: "At structure complete", share: 10, description: "Due when the frame tops out in autumn 2026." },
{ title: "On completion", share: 80, description: "The balance, paid on legal completion in spring 2027." },
]}
labels={{ price: "Home price", total: "Total paid", share: "of the price" }}
note="Figures exclude legal fees, stamp duty and the service charge."
button={{ label: "Estimate the monthly payment", href: "/estimator" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Short line above the heading, rendered through badge24. |
heading | string | – | Section heading. |
description | string | – | Intro paragraph beside the heading on wide screens. |
price | number | – | Starting home price, editable in the price field; without it the field is left out and the figures read zero. |
currency | string | – | ISO currency code for the figures, USD when omitted. |
locale | string | – | Locale for number formatting, en-US when omitted. |
stages | Stage[] | [] | The payment stages in order; each share is a percentage of the price and sets the width of its bar segment. |
labels | Labels | {} | Captions for the price field, the total figure and the word after each share. |
note | string | – | Disclaimer beside the button. |
button | { label: string; href: string } | – | Button beside the total, typically to the monthly payment estimator. |
className | string | – | Extra classes merged onto the section. |
type Stage = {
title: string;
share: number;
description: string;
};
type Labels = {
price?: string;
total?: string;
share?: string;
};stiffness 90, damping 22) so retyping the price makes the amounts count towards the new values; with prefers-reduced-motion they show exact values at once.Intl.NumberFormat and no decimals.