AI search for second-hand products
I built a full-stack application that finds similar second-hand items from an image or a text description. It combines a CLIP model I fine-tuned on product data I collected myself with a searchable PostgreSQL database. The application and its backend run on my own Linux server.
From product data to a fine-tuned model
I collected product information and images through web scraping, then used that data to fine-tune CLIP ViT-B/32. CLIP connects images and text through embeddings: numerical representations that allow both kinds of input to be compared. Fine-tuning adapts the model to the product images and descriptions used in this project.
How image and text search work
Product images are processed into embeddings and stored alongside the product information in PostgreSQL. When someone uploads an image or enters a description, the backend uses the model to create a query embedding. Comparing it with the stored product embeddings produces a list of similar items, with images and links to the source listings. This makes it possible to search by visual similarity rather than relying only on matching words in a product title.
The application and infrastructure
The frontend uses React and Vite, the backend uses Flask, and PostgreSQL stores the product data. I administer the Linux environment that hosts them, including the Nginx routing, HTTPS and service management. The project brings together data collection, model training, database search, web development and production hosting.
This is a portfolio project using collected second-hand listings. Product availability can change after the data was collected.