Villa Market search, led by Jev
Search that understands the shopper
Shoppers type a dish, an occasion or a need, not only a product name. Jev reads what they mean, together with what the shop knows about them, and chooses the products. There is no keyword search underneath.
01
Today, the right product gets lost after the search
On 53% of 247 test searches with results, the shop's page shows a different first product from the one its search engine ranked first. The storefront re-sorts the results after the search.
- 21.9% not sold at the branch, or alcohol
- 16.6% out of stock, and sorted last
- 14.2% a best-seller or new-arrival badge jumps ahead
- 47.4% the same first product
02
One search, five steps
The first four are Jev's judgments. Code only fetches what Jev chose, and puts the page in order.
- UnderstandThe search, with the shopper's context: basket, history, likes, allergies, behaviour.
- ShelvesJev chooses the shelves and sub-shelves worth reading.
- ProductsA quick yes or no for each product on them, up to 1,200.
- GradeEXACT, STRONG, RELATED or NOT. Diet and allergy checks only remove.
- OrderBy grade, then stock, then Jev's own score. Every move says why.
03
Every search knows the shopper, within rules
The same search gives different pages to different shoppers, and each product says why it moved. Four rules hold every time:
- Context changes how the search is read, and the order within a grade.
- A product the shopper named is never hidden or pushed down. If it clashes with an allergy, it stays, with a warning.
- On a search that does not name it, a disliked product counts one grade lower for that shopper.
- Diet and allergy rules only ever remove products.
04
Measured, not claimed
261 test searches in Thai and English, each scored on what shoppers see at the Sukhumvit 33 branch: today's shop, against Jev-led search on the same products.
The first result is relevant
| Measure | Today's shop | Jev-led search |
|---|---|---|
| First result relevant (243 judged) | 82.3% | 88.1% |
| First result relevant, Thai (46) | 71.7% | 95.7% |
| First result relevant, English (197) | 84.8% | 86.3% |
| Named product first (37) | 75.7% | 91.9% |
| Relevant share of the first screen (11) | 0.845 | 0.880 |
| Searches with an empty page | 5.4% | 3.1% |
A new search takes about 1.5 s with no shopper profile (up to about 3 s), and 2 to 5 s with a full profile. Repeated searches come from a cache. English gains are small (84.8% to 86.3%); Thai gains most.
05
Try it: each story opens the demo
Synthetic shoppers only. Each link opens the demo on that shopper and search.
06
What the demo shows
07
Villa Market's own product data
- Names, brands, sizes, categories and branch availability come from Villa Market's product API, fetched only when a new version is published.
- Stock, promotions and images come from the shop's own feeds, read-only.
- Next: Jev places every product on the right shelf. Testing showed why: one brand's oat milk is filed under plain milk, so a search that reads the plant-milk shelf misses it.
08
What it does not do yet
| Alcohol is hidden | As today's shop hides it from search |
| Recipes come from a library of 28 dishes | Other dishes run as intent searches |
| "What to eat for Christmas" shows no turkey | Read as a turkey dinner, but the branch sells no whole turkey online |
| Pages can shift if the product list's order changes | The scores hold; being measured and fixed |
| Shopper context is not in the evaluation yet | Shown in the demo; test cases come next |
| English gains are small | The English test labels get checked before more tuning |
09
Four decisions for Villa Market
The demo uses synthetic shoppers only. No real customer data is used anywhere, and nothing is written to Villa Market.