BUILD XPACE
FREE ESTIMATE

Know what your space
will cost — before you commit.

Tell us which pieces you need, roughly how big they are, and your budget — we'll work out a cost estimate on the spot, plus a free 3D VR preview of your new space.

500+ PROJECTS BUILT FREE 3D VR PREVIEW NO OBLIGATION
Takes about two minutes. No payment or sign-up required.
PROJECT

What are we building?

Pick the space you're planning to renovate.

ROOMS

Which rooms need work?

Select every room you'd like priced — you'll measure each one's pieces next.

PIECES

Which pieces do you need?

Select everything you'd like priced — you can pick more than one.

MEASUREMENTS

Give us the size & style for each piece

Measure the wall run in millimetres — a tape-measure estimate is fine, we'll confirm exactly on-site.

AREAS

Which areas are part of this project?

Select all that apply.

SCOPE

What's the scope of work?

This tells us whether to plan around structural work.

BUDGET

What's your budget for this project?

There's no wrong answer — this just helps us recommend the right finish.

TIMELINE

When are you hoping to start?

This helps us prioritise your callback.

Drafting your estimate…

Reading your measurements
YOUR ESTIMATE

Your estimate is ready.

Enter your details to unlock the full range and book your free 3D VR preview.

ESTIMATED RANGE (RM)
RM 00,000 – RM 00,000
LOCKED
Please tell us your name.
Please enter a WhatsApp number we can reach you on.
No file selected
No file selected
Rough estimate only — your final quote follows a free on-site or virtual measurement.
ESTIMATE UNLOCKED

Here's your rough estimate

RM 00,000 – RM 00,000
  1. A design consultant reviews your answers, usually within a few hours.
  2. We WhatsApp or call you to confirm details, within 24 hours.
  3. Your free 3D VR walkthrough is booked at a time that suits you.
Chat on WhatsApp Now
For your sales team — how leads are scored

Every submission arrives already tagged, so your team can call the best-fit leads first instead of working the list top to bottom.

Hot — completed the flow and unlocked the estimate. Arrives with the full brief: every room and piece selected, each measured length in mm, the design/finish chosen per piece, scope, stated budget and timeline.
Warm — used "skip the questions" or closed the tab partway through. Arrives with only name and WhatsApp number — needs a qualifying call.
Not captured — left without submitting either form. No contact is stored; nothing to call.

Full Home Renovation leads now walk through every room they pick — kitchen, wardrobe, study, living, entrance — measuring pieces in each one, so a "full house" enquiry arrives as an itemised, near-quote-ready brief instead of a single rough number.

The stated budget is also compared against the calculated estimate: if a lead's number comes in above what they said they'd spend, the unlocked screen shows them a heads-up, and your team sees it as a talking point for the first call rather than a surprise mid-negotiation.

For your developer — connecting the real Xpace Calculator

Pricing comes from one function, estimateProject(), near the top of the script below. It sums rate_per_mm × length_mm for every piece across every room the lead added (one room for Kitchen / Wardrobe & Bedroom / Study / Living, several for Full Home Renovation), using the rate tables in PIECE_CATALOG. "Something Else" is the one exception — it has no defined room, so it sums a package range per selected area from AREA_PACKAGE_RANGE instead.

These rates are placeholders derived from the public vsbuild.com.my example (rows flagged REF below trace directly to a real line item there; the rest are interpolated to fill gaps). Replace every rate value in PIECE_CATALOG and every range in AREA_PACKAGE_RANGE with your real figures once the Excel rate list is available — the structure and the rest of the funnel don't need to change.

Multi-room navigation (Full Home Renovation) is driven by a flat, dynamically-built list of steps in state.virtualOrder — built once the lead picks their rooms, then walked forward and back by state.vPos. If you change which project types get itemised vs. the lighter area-based path, look at buildOrderForType() and extendOrderForRooms().

PieceStandard specVariantRM / mm
Base CabinetD600 · H850Standard laminate top1.378
Base CabinetD600 · H850Quartz stone top REF1.912
Wall CabinetD350 · H1200Standard0.722
Wall CabinetD350 · H1200With LED lighting REF0.886
Full-Height WardrobeD600 · H3000Standard swing door1.476
Full-Height WardrobeD600 · H3000With end panel & drawer set REF1.877
Base/Shoe CabinetD400 · H850Standard REF0.706
Base/Shoe CabinetD400 · H850With curve corner REF1.290

Full rate list, all rooms/pieces/variants, is in PIECE_CATALOG in the script.