Staged Payment Schedule Bar

When you pay what

Three payments, most of it at the very end

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.

10%of the price
$64,000On exchangePaid within 28 days of reservation, with the $5,000 reservation fee already counted towards it.
10%of the price
$64,000At structure completeDue when the concrete frame of the courtyard wing tops out, expected in autumn 2026.
80%of the price
$512,000On completionThe balance, usually from your mortgage, paid on legal completion in spring 2027.

Total paid

$640,000

Estimate the monthly payment

Figures are a guide for the price typed above and exclude legal fees, stamp duty and the service charge.

About this block

Staged Payment Schedule BarPRO

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.

Realestate39: Staged Payment Schedule Bar

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.

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/realestate39?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
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.

Quick start

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.

tsx
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:

tsx
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" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Short line above the heading, rendered through badge24.
headingstring–Section heading.
descriptionstring–Intro paragraph beside the heading on wide screens.
pricenumber–Starting home price, editable in the price field; without it the field is left out and the figures read zero.
currencystring–ISO currency code for the figures, USD when omitted.
localestring–Locale for number formatting, en-US when omitted.
stagesStage[][]The payment stages in order; each share is a percentage of the price and sets the width of its bar segment.
labelsLabels{}Captions for the price field, the total figure and the word after each share.
notestring–Disclaimer beside the button.
button{ label: string; href: string }–Button beside the total, typically to the monthly payment estimator.
classNamestring–Extra classes merged onto the section.
ts
type Stage = {
  title: string;
  share: number;
  description: string;
};

type Labels = {
  price?: string;
  total?: string;
  share?: string;
};

Behavior notes

  • Each stage amount is the price times its share, rounded to a whole unit, and the total is the sum of those amounts; segment widths are each share over the sum of all shares, so stages that do not add up to 100 still fill the bar.
  • The bar grows segment by segment: every segment scales from the left over 0.9 s, 0.35 s after the one before it, and the stage labels under it rise on the same offsets with their hairlines.
  • Every figure is driven by a spring (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.
  • The price field keeps only the digits typed and displays them with the locale's grouping separators; all currency figures are formatted with Intl.NumberFormat and no decimals.
  • The three segments step from a light to a full foreground tint so completion, the largest payment, reads darkest; the same dots repeat in the stage labels.

More Real Estate blocks

View all Real Estate
PRO

realestate68

A Day in the Development

PRO

realestate79

Numbered Legal Disclaimers

PRO

realestate12

Monthly Payment Estimator

Get Pro