# Conversational recommendations across 20,000 items

> Conversational recommendations for Spinio. A person describes what they want in plain language, and a text-to-SQL engine turns the request into a query over the whole catalog and returns the few items that match.

- Client: Spinio
- Type: Conversational recommendations, text-to-SQL
- Category: AI product
- Duration: About 4 months
- Status: Delivered on web and mobile
- Stack: Text-to-SQL · Preference and tag ranking · Knowledge base · Live-service connectors · Web and mobile apps
- Role: End to end, first call to launch
- Result: 20,000 items in the catalog (The size of the catalog the text-to-SQL engine queries, not usage or active users.)
- Result: 1,000 providers behind them (The size of the catalog the text-to-SQL engine queries, not usage or active users.)
- Built by: Luka Abramović (https://lukaabramovic.com/)
- Canonical: https://lukaabramovic.com/work/spinio-recommendations/

---

## The starting point

Spinio saw an opportunity to help consumers find their way through a catalog of around 20,000 items from 1,000 providers. It wanted a product that understood what a person was after, applied their preferences and the catalog's data, and made the result easier to explore than a conventional filter interface.

## “Something like this, but…”

The catalog holds 20,000 items from 1,000 providers. The goal was recommendations from a conversation: a person says what they want in plain language and gets back the few items that match. A generic model can suggest something plausible. Useful recommendations had to come from the catalog that actually exists and from what the product knows about each person.

### Catalog

Thousands of items and providers to search and compare, without leaning on the model's memory.

### Preferences

Each person's preferences and the items' tags had to decide which results appear, and why.

### Knowledge

Knowledge-base answers and live-service information had to stay tied to the product's real sources.

## My role

I ran this end to end, from the first call through discovery, scope, solution design and leading the build with the Adamant Code team, to launch.

1. First call
2. Discovery
3. Scope & proposal
4. Solution design
5. Build lead
6. Launch
7. Iteration

<StepDiagram
  label="Illustration: a plain-language request becomes a text-to-SQL query over the catalog, which returns a few matching items"
  steps={[
    { label: 'Request', detail: 'Plain language: “Something like this, but…”' },
    { label: 'Text-to-SQL', detail: 'The request becomes a query, e.g. SELECT … WHERE tags' },
    { label: 'Catalog', detail: '20,000 items from 1,000 providers' },
    { label: 'A few matches', detail: 'The items that fit the request', tone: 'accent' },
  ]}
>
Illustration only, no real screens. The numbers are the size of the catalog, not usage or active users.
</StepDiagram>

## A conversation in front of the catalog.

With the Adamant Code team, I designed the recommendation approach, trained the text-to-SQL engine, built the web and mobile apps, and connected the knowledge and live-service layers. The aim was a complete product, not an isolated AI service.

1. The product works out what the person is looking for and the context that should shape the result.
2. The text-to-SQL engine turns the request into a structured query against the catalog.
3. The person's preferences and the items' tags rank the options for relevance.
4. The recommendation comes back inside the product, with the detail needed to keep exploring.

## More than a ranked list.

### Web and mobile

The same discovery flow on both, with the result cards and detail tabs laid out for a smaller screen on mobile.

### Result cards

Expandable cards sort provider information into clear categories, so people can inspect a result without leaving the conversation.

### Conversation history

A sidebar groups earlier chats by time, so people can pick a question back up instead of starting over.

### Knowledge and live services

A knowledge base answers questions a ranked list can't, and live-service connectors bring in outside information where a recommendation needs it.

## Delivered on web and mobile.

The recommendation platform was delivered on web and mobile, over a catalog of about 20,000 items from 1,000 providers. Those numbers are the size of the catalog the build covers, not usage or active users.

## What this proves

Text-to-SQL keeps recommendations tied to what exists: the model turns the request into a query, and the answer comes back from the real catalog.
