The task
The owner of an independent shop restocks based on sales. But sales only show what is already on the shelf. If someone comes in for a record that is not there, they leave quietly, and no report ever shows it. We called this “demand the till never sees”. Meanwhile the shopper struggles to choose a gift: they know what the person likes, but not which of the things in this shop are close to it.
Qloo, the company behind a taste database (people who like X also like Y, across music, film, books and games), opened a brief for AI agents on top of its API. Video and pitch optional, Ukraine eligible. We wanted three things: to test ourselves on a real agent, where the model decides which tool to call and when to stop; to measure honestly whether it beats plain Claude; and to get a portfolio piece with a live site and open code.
Why, and what the idea was
The idea: put an agent in the shop that reads a shopper’s request in plain words (“a gift for my brother, loves Joy Division, under $40”), goes to Qloo, scores the whole catalog against that taste, checks budget and age, and pulls three things off the shelf. Under each one, a fact from Qloo on why it fits. And everything the shelf did not have goes to the owner in the morning as a list: which records to reorder. So the shop finally sees what walked out.
Two decisions were revised along the way. At first we wanted “AI for any online store”, but Qloo recognized only about 30% of random Amazon products. We narrowed the niche to a culture shop: records, books, films, games, shows. Second: my first design plan (a name, three storefront styles, generated images) was unanimously rejected by a council of five AI advisors. The project’s main point of difference was the owner’s screen, and it was not in the plan. We built what the verdict said.
How it went
| Stage | What happened |
|---|---|
| Day 1 | Registration, request for a Qloo key. A skeleton on stubs while there was no key. First surprise: Qloo scores a brand, not a product |
| Day 3, morning | The key arrived. Live Qloo calls, first measurement, “AI for any store” dropped. Niche chosen: a culture shop |
| Day 3 | Two design councils. The whole site redone as a “late-night record shop”, covers as the main material. 72 commits in a day |
| Day 4, 00:11 | Entry submitted |
| Day 4 | Final council: five independent AI advisors judged the work as a panel, their whole plan carried out. Code review found 5 agent bugs, fixed, everything re-measured. New video, new gallery |
| Three weeks later | Live agent switched on, the judges’ link checked |
94 commits in total, 4 working days to submission.
Tools and method
The agent: Claude Haiku 4.5 with tool use. 6 tools, 4 of them call Qloo: entity search, insights filtered by the shop’s catalog with an explanation of which taste produced the match, taste tags, demographics for gifts by age, a city’s taste via signal.location. The model decides the order of calls itself, capped at 6 turns and 25 live Qloo requests per shopper request.
Code: Next.js 16, TypeScript, Vercel, about 2,500 lines in the agent core and pages. Catalog: 384 items, covers and data from the iTunes Search API and Open Library, age ratings from official sources, cover art generated in Higgsfield. Spending guard: while the live agent is closed, the public site shows recorded runs, the judges have a separate pass. A ceiling on Claude of $3 a day for everyone and $10 for judges, a separate Qloo quota reserve. If the limit runs out, the site does not fall over but shows the closest recorded example. One shopper request costs about $0.015 on Claude.
The measurements were blind. A separate agent that saw only the catalog wrote and labeled 40 shopper requests before any tuning. We tuned on the odd ones only, the even ones were never touched. After all tuning another blind agent wrote 30 new ones. We compared against the same Claude given the whole catalog as text but no Qloo. A second blind judge scored every disputed pick from both sides without knowing whose was which. Statistics in Python: bootstrap and the sign test.
Result
A live site with three pages. Shopper (/live): you type a request, on the right you watch the agent work step by step, below it the answer from Claude without Qloo to the same request, for comparison. Owner (/owner): the morning note “three records to order” with cover, artist and how many shoppers wanted each, below it the gaps on the shelf. Real shops (/real): the public catalogs of Waterloo Records (Austin) and Josey Records (Dallas) run through Qloo: how many of the city’s 50 favorite artists are on the shelf and what shoppers look for that the shop does not carry.
Numbers on 50 requests we never tuned on: top-3 hits 0.43 for our agent, 0.32 for Claude without Qloo; wins and losses 25 to 9. With the second judge 0.57 to 0.48 and 21 to 12. Budget: on 70 requests Claude without Qloo put an over-budget item in its top 3 fifteen times, our agent never did.
We published the weak spots too: with the second judge the gap is smaller and not statistically decisive, and one early test showed the opposite altogether. We publish the latest run, not the best one. The results of the brief have not been announced yet; we will add them when they come.
Mistakes and what we took from them








