The work
SalesReal estate

Estate agents no longer answer the same five questions about a property, because the tour answers them itself.

a 3D property tour platform
Property assistant
Inside the 3D tour
How many bedrooms does it have?

There are four bedrooms across the two floors, each with its own bathroom. Ask me about any of them and I can be more specific.

Listening…
Never quotes a priceanswers in the language it was asked in

Asked out loud, answered from the property's own file.

The situation

How this used to work

A 3D property tour is a good way to look around and a bad way to ask anything. You can walk through every room and still not know how many bedrooms there are, when it was built, or whether the thing you are standing in front of is included.

The questions are always the same handful, they arrive at whatever hour somebody is browsing, and the answers all exist already. They are just sitting in a listing document that the person in the tour is not reading.

So the choice was between a person being available to answer the same five questions forever, and the tour being able to answer them itself.

What we built

The system

A chat panel that lives inside the tour, injected into the page rather than bolted onto the side of it. It sits alongside the 3D viewer rather than inside it, which is the detail that makes the rest possible: from there it can reach the microphone and call out to its own service, neither of which it could do from inside the embedded viewer.

It listens as well as reads. The visitor can type, or press the microphone and speak, using the browser's own speech recognition set to accept either language. If a browser does not support it, the microphone button is not drawn at all rather than offered and broken.

It talks back, optionally. A speaker toggle, off by default, sends the answer to a voice service which picks the voice by detecting the script the answer is written in.

There is no vector database and no retrieval step. The whole property fits in a single structured file that is handed to the model with every question, which for one building is both simpler and more accurate than chunking it up and hoping the right piece comes back.

How it works

The pipeline, step by step

01 / Ask

Typed or spoken, either language

The question goes in by keyboard or by voice. Speech recognition is configured for both the local language and English, and a final transcript submits itself, so speaking a question is one press rather than press, wait, read, confirm.

02 / Answer from the file

Only what the property actually says

The model is given the entire property record and told to answer from it and to say when it does not know. There is nothing else in its context, so an answer about this building cannot drift into a general fact about buildings.

Property recordOne file
bedrooms4
bathrooms4
floors2
year_built2018
heatingunderfloor
parking2 covered
Handed over whole, every question
No vector database. No retrieval step. For one building, both simpler and more accurate.

One file, handed over whole with every question. No retrieval step at all.

03 / Match the language

Reply in the language you were asked in

The instruction is explicit, and it matters for a listing that gets looked at from more than one country. An assistant that silently answers in English has decided who the buyer is.

04 / Refuse the price

The one subject it will not discuss

It is forbidden from discussing the price and told to hand the question to the agent instead. That is the correct boundary for a listing: a number said confidently by a chat window is a number somebody will hold you to, and it is not the software's to give.

05 / Keep it short

Three sentences, and no formatting

Answers are capped at around three sentences. Any markdown the model produces anyway is stripped out afterwards by the server rather than trusted not to appear, because the panel renders what it is given and a stray asterisk would show. Instructing and enforcing are two different things and this does both.

Before it reaches the panel~3 sentences
The visitor sees
Four bedrooms, each with its own bathroom.
What the server stripped
**Four bedrooms**, each with its
own *bathroom*.
Instructing and enforcing are two different things

What the visitor gets, and the formatting the server took out of it.

06 / Speak, if asked

Off by default

Spoken answers are opt in. The voice is chosen by looking at the characters in the answer, so a reply in the local language is read by a local voice rather than by an English one working through unfamiliar words.

What changed

The result

It is live. The widget is serving inside the real tour today, which is worth saying precisely because the project's own notes still describe it as built and waiting to be installed. That note was out of date and only opening the page showed it.

The tour it is running on is a duplicated copy rather than the public listing, and there is no analytics of any kind in the project, so nothing is claimed here about visitors, questions asked, or enquiries generated. What is demonstrated is that it answers, correctly, from the property's own record.

The thing that made this cheap is the thing most projects skip. There is no retrieval layer, no database and no framework. One building's details fit in one file, and the whole client side is a few hundred lines of plain JavaScript with no build step, because it has to be pasted into somebody else's page without breaking it.

The stack

In the page

  • vanilla JavaScript
  • no build step
  • Web Speech API
  • shadow-free IIFE

Service

  • Node serverless
  • Claude Sonnet
  • single structured property file

Voice

  • ElevenLabs multilingual
  • script-detected voice selection
  • opt in

Boundaries

  • answers from the file only
  • no price
  • three sentences
  • markdown stripped

Free 30 minute call

Let's find where AI fits in your business

A 30 minute call, free, no commitment. You leave with two or three things worth building, whether or not you work with us.

Free, no commitmentYou own everything we buildNo slide deck