Supermarket shopping-list linkage

The goal of this project is to turn a free-text shopping list into concrete supermarket catalog products. You paste one product per line (or upload a .txt), choose a store and postal code, and the system returns the best SKU match per line — preferring price per kilogram when it exists, computing how many packs you need, and exposing exportable product links.

Matching follows a multi-stage hybrid pipeline rather than a single score: heuristics catch exact or token-subset name matches, blocking narrows candidates, multilingual MiniLM embeddings recover semantic neighbors, and Jaro–Winkler distance acts as a final referee before price/kg ranking. Quantity fulfillment runs after the winner is chosen, so pack size does not bias which product is selected.

The architecture splits a Streamlit master (UI, submit, poll, export) from a FastAPI worker (catalog fetch, embeddings, linkage jobs). The UI never loads the embedding model or calls the store API directly. v1 supports Mercadona live; DIA and Carrefour are reserved in the UI for later.

Try the live demo: Lista → catálogo.

Source: