Case study · Information retrieval
A catalogue that answers, without a language model
Internal search tool for customer service at a manufacturer of shower screens, shower trays and taps. It understands queries with typos, opening sizes and natural language questions, and gives the answer instead of a list.
The problem
Customers describe the product in their own way: with an incomplete code, the model misspelt, the size of their opening instead of the nominal size, or a sentence like “the tap is leaking”. The information needed to answer was spread across catalogues, spreadsheets, PDF product sheets and the management system, and finding it depended on each agent's experience.
The goal: a single text box that understands the query and, when it can, gives the answer.
What it does
- Price and stock per variant, with buttons to narrow it down.
- Opening instead of nominal size. A 118 cm opening is covered by the 120 size thanks to its adjustment range; if no size covers it, it suggests other models.
- Spare parts with a finish wildcard: it shows only the finishes that exist, with price and stock.
- Clickable exploded view and tray ↔ screen compatibility in both directions.
- FAQ with industry synonyms and an assistant with memory that fills in what is missing from the previous question.
Answer before list
You type “cierso 120 negor”. It replies: “Understood: price · model CIERZO · size 120 cm · finish matte black”, and shows that it corrected “cierso” and “negor”.
- No backend, no language model. Everything runs in the browser. It is deterministic, costs nothing per query and works offline.
- Explainability. Every answer says what it understood and which typos it corrected. The agent spots a misinterpretation instantly.
- Simple techniques, well combined. An inverted index with field weights, bounded Damerau-Levenshtein for typos and BM25 with synonym groups. The FAQ threshold requires two terms or a recognised concept, so it does not answer on a single stray word.
- Data separate from code. The catalogue is a generated JSON file; updating it does not touch the program.
What is real and what is demo
| Part | In the demo | Detail |
|---|---|---|
| Catalogue, prices and stock | Synthetic | 270 products, 88 spare parts and 28 FAQs generated with a fixed seed. |
| Company, models and sales reps | Synthetic | Fictitious brand; .test emails and 000 phone numbers. |
| Interpreter, index, FAQ and assistant | Real | Same logic, written from scratch for the demo. |
| ERP integration, real-time stock and usage logging | Not included | They exist in the original. |
Results
I do not publish usage or performance metrics for the original tool.
Limitations and next steps
- The interpreter is rule-based: a very different sentence falls back to general search.
- Next step: evaluation with a set of labelled queries (intent precision and MRR) and synonyms learnt from queries with no results.
- When it needs to go beyond the structured catalogue, add semantic search over documents.
Demo screenshots
All with synthetic data. The demo interface is in Spanish.







