cd /news/artificial-intelligence/building-a-12-language-ai-product-se… · home topics artificial-intelligence article
[ARTICLE · art-110017] src=dev.to ↗ pub= topic=artificial-intelligence verified=true sentiment=· neutral

Building a 12-language AI product search on the edge: what actually broke

The developer behind OneFindMe, an AI product-search front end for AliExpress, detailed three major technical challenges encountered while building the service. The issues included the LLM producing fluent but useless translations, hallucinated category IDs, and high latency on cold searches. The developer shared the fixes, such as prompting for keyword-style noun phrases, using an allow-list for category IDs, and optimizing perceived latency.

read4 min views9 publishedAug 25, 2026

I run OneFindMe, an AI product-search front end for AliExpress. You describe what you want in plain language — in any of 12 languages

— or upload a photo, and it returns the product, similar items, and cheaper

alternatives. It runs entirely on a Cloudflare Worker with an LLM doing the

language work.

This isn't a launch post. It's the three problems that were genuinely hard, the

wrong first solutions I shipped, and what actually fixed them. If you're putting

an LLM in front of a marketplace search API, you'll hit all three.

The core loop is: take a natural-language query in any language → turn it into a

clean marketplace search term → hit the affiliate search API → rank and filter →

return. The interesting failures are all in the "turn it into a clean search

term" step.

The first version asked the model to "translate this shopping query to English."

It did — beautifully, fluently, and uselessly.

A user searching for a שמלת ערב

(evening dress) got back an elegant formal gown suitable for evening occasions

. Grammatically perfect.

It also returned almost nothing from the marketplace, because nobody titles a product listing in fluent prose. Marketplace sellers write

Women Elegant Evening Party Dress Sexy Backless

— keyword soup, not sentences.The fix was to stop asking for translation and start asking for the 2-3 word noun phrase a seller would put in a title. The prompt changed from "translate"

Lesson: when an LLM feeds a keyword system, you don't want its best language.

You want the language of the target index. Prompt for that explicitly.

To narrow results, I let the model suggest an AliExpress category ID alongside

the keywords. Category-constrained search returns cleaner results — when the ID

is real.

The model would confidently return category IDs that did not exist. Not

often, but often enough. And a nonexistent category ID doesn't error — it returns

an empty or garbage result set, which then replaced the perfectly good

keyword-only results the same query would have produced. The hallucinated

constraint silently beat the honest fallback.

Two things fixed it. First, a hard allow-list: category IDs the model proposes

are checked against a map of known-good IDs and dropped if unrecognised. Second,

and more important, the keyword search always runs; the category is an

optional refinement layered on top, never a replacement. If the category path

returns nothing, the keyword results are still there.

Lesson: never let a model's optional enrichment silently override your

deterministic baseline. Layer it, gate it, and make the baseline win by default.

An uncached search does real work: an LLM call to build the query, the

marketplace API round trip, ranking, filtering. Cold, that's 6-8 seconds. Users

don't wait 6-8 seconds. The single biggest driver of bounce wasn't relevance —

it was latency on the first search.

The cache helps enormously: every search result is cached in KV for up to 30

days, so a warm search returns in ~200 ms. But you can't cache a query nobody has

run yet, and the first person to search a term pays the full cost.

Two moves cut the perceived wait to near zero without making the search

actually faster:

Neither makes the cold path faster. Both make it invisible. That distinction —

optimising perceived latency instead of actual latency — moved the metric that

mattered more than any relevance tuning did.

Lesson: on a search product, the empty-state-while- is a feature, not a gap. Show something instantly and backfill.

A subtle one, because it looks like success: don't trust the marketplace's own "is this product available" signal in isolation. The affiliate API would report

The engine runs in 12 languages now, and every one of those bugs showed up

identically in each. If you're building anything that puts an LLM between a human

sentence and a structured search index, you'll meet all four. Happy to compare

notes in the comments — especially if you've found a better answer to the

cold-search problem than "show bestsellers and pray."

I build OneFindMe — AI product search for AliExpress by text or image, in 12 languages. It's free; it runs on affiliate commission at no extra cost to the buyer.

── more in #artificial-intelligence 4 stories · sorted by recency
── more on @onefindme 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/building-a-12-langua…] indexed:0 read:4min 2026-08-25 ·