› content/projects/villa-agent-ai.md — typed by Claude, passed by Omri
A villa-rental marketplace you talk to — describe the trip you want, or draw a circle on the map.
Booking a villa normally means filters. Bedrooms, price, a date range, a checkbox for a pool — and then forty tabs, because none of that captures what you actually want. Villa Agent AI lets you say it instead: somewhere quiet for two families in August, walkable to a beach, with a chef. Or draw a circle on the map and ask what's inside it.
An AI concierge answers with the villas that fit and tells you why each one fits, and when you've chosen, the payment happens in the same conversation. You never leave the chat to go and fill in a form.
The database does the searching. The model does the talking. The shortlist is found before any AI is involved — an ordinary SQL filter, then a vector search that compares the meaning of your request against each villa's stored description. Only once there is a shortlist does the concierge get called, and it gets called exactly once per turn: one round-trip, one reply. Search that way is fast, cheap and repeatable; a model asked to search a database is none of those things.
The cheap model answers, the expensive one is the exception. Every turn is handled by the small fast model. When it comes back unsure of itself, that turn — and only that turn — is escalated to the larger one. Most conversations never need it.
Paying is one transaction, not a hand-off. Choosing a villa creates the booking and the payment session together, atomically, so there is no window where a guest has been charged for something that isn't reserved or has reserved something they haven't paid for. The money is split to the villa owner by the payment platform rather than passing through an account of ours.
It used to be eight agents. Now it's one. The first version was a swarm: separate agents for parsing intent, geography, ranking, matching, booking and memory, passing work down a chain. It worked and it was slow, and most of the handoffs existed to serve the architecture rather than the guest. The rewrite does the same job with one orchestrator and one model call, and the old path is still in the tree behind a flag, switched off, waiting to be deleted. That sequence — build the elaborate version, learn from it, replace it with the simple one — is most of what I now think this kind of work is.
✓ approved · Omri Nahum · this card, as it reads today
NextStarcamp →