Monthly Payment Estimator

An open kitchen with oak cabinets and a pale stone island, the window looking onto the birch courtyard

What it costs each month

A two bedroom at Alder Row, worked out

Move the deposit and the rate to see how the monthly payment changes. The figures are a guide, and the sales team will walk you through the exact numbers with a lender.

Term
Deposit20% $128,000
Interest rate5.4%

Estimated monthly payment

$2,875a month

PrincipalTotal interest
Loan amount
$512,000
Deposit
$128,000
Total interest
$523,014
Talk to the sales team

Estimate only. Excludes service charge, insurance and taxes, and assumes a fixed rate for the whole term.

About this block

Monthly Payment EstimatorPRO

A mortgage estimator for a development's sales page: a tall photograph beside a price field, term pills and two sliders for deposit and interest rate; the estimated monthly payment is a large figure that springs to each new value, with a two-colour bar splitting principal from interest, three breakdown figures under hairlines, a sales button and a disclaimer.

Realestate12: Monthly Payment Estimator

A mortgage estimator for a development's sales page: a tall photograph beside a price field, term pills and two sliders for deposit and interest rate. The estimated monthly payment is a large figure that springs to each new value, with a two-colour bar splitting principal from interest, three breakdown figures under hairlines, a sales button and a disclaimer.

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

Base UI flavor

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

This installs the block to components/beste/block/realestate12.tsx plus the badge24 rule eyebrow, the button25 quiet pill used for the sales button, and the shadcn/ui button, input and slider primitives behind them, the price field and the two sliders.

Quick start

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

tsx
import { Realestate12, realestate12Demo } from "@/components/beste/block/realestate12";

export default function Page() {
  return <Realestate12 {...realestate12Demo} />;
}

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

tsx
import { Realestate12 } from "@/components/beste/block/realestate12";

export default function Page() {
  return (
    <Realestate12
      eyebrow="What it costs each month"
      heading="A two bedroom at Alder Row, worked out"
      description="Move the deposit and the rate to see how the monthly payment changes."
      image={{
        src: "https://oud.pics/b/realestate/alder-courtyard-kitchen.webp",
        alt: "An open kitchen with oak cabinets and a pale stone island",
      }}
      price={640000}
      deposit={{ value: 20, min: 5, max: 60, step: 5 }}
      rate={{ value: 5.4, min: 1, max: 12, step: 0.1 }}
      terms={[15, 20, 25]}
      term={30}
      currency="USD"
      locale="en-US"
      labels={{
        price: "Home price",
        deposit: "Deposit",
        rate: "Interest rate",
        term: "Term",
        years: "years",
        monthly: "Estimated monthly payment",
        perMonth: "a month",
        loan: "Loan amount",
        depositAmount: "Deposit",
        interest: "Total interest",
        principal: "Principal",
      }}
      note="Estimate only. Excludes service charge, insurance and taxes."
      button={{ label: "Talk to the sales team", href: "/contact" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Short line above the heading, rendered through badge24.
headingstring–Section heading.
descriptionstring–Intro paragraph under the heading.
image{ src: string; alt: string }–Tall 4:5 photograph beside the estimator; without it the estimator spans the full width.
pricenumber–Starting home price, editable in the price field.
depositRange–Starting deposit percentage and the slider's bounds and step.
rateRange–Starting annual interest rate in percent and the slider's bounds and step.
termsnumber[][]Term options in years, shown as pills; three fit on one row beside the price field.
termnumber–The term selected on load; falls back to the first option.
currencystring–ISO currency code for the formatted figures, USD when omitted.
localestring–Locale for number formatting, en-US when omitted.
labelsLabels{}Captions for every control and figure.
notestring–Disclaimer beside the button.
button{ label: string; href: string }–Sales button under the breakdown.
classNamestring–Extra classes merged onto the section.
ts
type Range = { value: number; min: number; max: number; step: number };

type Labels = {
  price?: string;
  deposit?: string;
  rate?: string;
  term?: string;
  years?: string;
  monthly?: string;
  perMonth?: string;
  loan?: string;
  depositAmount?: string;
  interest?: string;
  principal?: string;
};

Behavior notes

  • The payment uses the standard amortisation formula on the loan (price minus deposit), the annual rate divided by twelve and the term in months; a zero rate divides the loan evenly over the months.
  • The monthly figure is driven by a spring (stiffness 90, damping 22) so it counts towards each new value instead of jumping; with prefers-reduced-motion it shows the exact value at once.
  • The price field accepts any typed characters and keeps only the digits, displaying the result with the locale's grouping separators. All currency figures are formatted with Intl.NumberFormat and no decimals.
  • The bar under the figure splits principal and interest by their share of the total repaid, animating its widths on every change; the three figures under it are loan amount, deposit amount and total interest.
  • The result area (caption, figure, bar, breakdown, button) rises in as one group 0.5 s after the controls, so nothing under the sliders appears unanimated.
  • The photograph is gated on its own load event and on the frame being in view, opens from the top once loaded and drifts from -6% to 6% against the scroll; on small screens it moves below the estimator.

More Real Estate blocks

View all Real Estate
PRO

realestate81

Rental Yield Estimator

PRO

realestate42

Mortgage Partner Rate Table

PRO

realestate39

Staged Payment Schedule Bar

Get Pro