Haven Estates is an AI property search website for Saudi Arabia, built by SyntaxWise. People search in plain words and ask an AI assistant about real listings, with one n8n workflow doing the work behind it.
Real Estate3 weeksClient project

The 60-second film, narratedClick to play with sound
Introduction
- Year
- 2026
- Industry
- Real Estate
- Timeline
- 3 weeks
- Client
- Client project
- Scope of work
- AI Automation (n8n)RAG Chat AssistantSemantic SearchWeb App DesignWeb App DevelopmentData Pipeline & API
Challenge
Property search is slow and vague. Search boxes want exact filters, listings are hard to compare, and a simple question can take days to answer.
The brief was a property site that feels calm and premium, and that answers people the way an agent would. Visitors should be able to browse real listings on a map, type what they want in plain words, and ask an assistant follow-up questions. The assistant could only answer from the listings database, never from the model's imagination, and it had to stay inside a free-tier Gemini quota.
At a glance
Landing page
A calm, editorial home page that gets people searching straight away.
Light serif headings, a sand-and-green palette and an arched courtyard photo set the tone. The hero search bar is the main call to action, and a live 'just listed' card and a city marquee show the data is real.
The whole home page, top to bottom. Hover to hold, click to read it at full size.
List view
Real listings, filtered in a click, next to a live map.
City, district, type, rent or sale, price, area and bedrooms all filter in one bar, and the URL updates so a search can be shared. Results sit beside a clustered Leaflet map with price pins. Every listing has its own page with a gallery, details, a location map and similar homes.
Smart search
Type “villa riyadh” and the matching homes appear. No chatbot needed.
The hero search sends the text to an n8n webhook. Known words become filters (city, district, type, rent or sale, '3 bed', 'under 60k'), then one Gemini embedding call ranks the matches in Supabase. No chat model is involved, so it's fast and cheap, and the modal links straight to the full results.
Words become filters, then one embedding call ranks what’s left.
n8n, section E: the website-search webhook. No chat model anywhere in it.
AI assistant
Ask in your own words. Get real property cards back.
The assistant is an n8n AI agent on Gemini. It decides when to search, writes a query plus filters, and calls a listing-search sub-workflow (Gemini embeddings matched in Supabase pgvector). It can also search near a place using OpenStreetMap geocoding.
Conversation memory lives in Postgres, and when a visitor wants an agent, it collects their contact details in the chat.
Every card it shows is read from the listings database, so prices and details are never made up.
n8n, section C: the chat webhook and the AI agent, with Postgres memory and its tools.
Mobile
The full experience, sized for a phone.
Filters wrap into chips, the map stays above the results, and the chat opens full height, so browsing and asking work just as well on a phone.
Powered by n8n
One workflow, five jobs.
- AIngestA webhook upserts listings into PostgreSQL.
- BEmbedding syncEvery 15 minutes, new and changed listings are embedded in batches with Gemini (one call per 50, paced for the free tier) and swapped into Supabase in one transaction.
- CChatThe chat webhook runs the AI agent.
- DListing searchA sub-workflow serves the agent’s search tool.
- EWebsite searchA webhook powers the hero search.
The real workflow: 52 nodes, sections A to E. Click to zoom in.
PostgreSQL stays the single source of truth; Supabase holds only the vectors.
Outcome
- Real data.
- Instant answers.
- Fully automated sync.
Listings flow from the database to search and chat without manual steps: add or change a listing and it is searchable by meaning within 15 minutes. The hero search answers without a chat model, and the assistant only answers from real listings.
Built with
- React 19
- Vite
- Tailwind CSS 4
- React Router
- Leaflet
- FastAPI
- PostgreSQL
- n8n
- Google Gemini
- Supabase pgvector
- OpenStreetMap Nominatim
