Inspiration
Independent shops and market traders stock by habit and supplier pressure. They can't see what the neighborhood around them actually wants, or how that differs from the next street, while chains buy exactly that kind of taste and location data. That blind spot ties scarce cash to the wrong goods. ShelfSense gives a single merchant location-specific taste insight and an explanation they can act on, without a data team or a data budget.
What it does
A shop owner enters a location, categories and a current range (a simple CSV, with optional weekly sales). ShelfSense then:
- reads the area's taste profile from Qloo, per product category, with the shop's location as a signal;
- compares it against a reference area (e.g. the wider city) to find what is distinctive here;
- maps those taste signals onto the shop's own range to find gaps, poor-fit lines and nearby venues to partner with;
- returns a ranked list of what to add, what to reduce and who to partner with, each with a plain-language reason that cites the Qloo evidence behind it (for example, "Glossier is the #1 beauty brand in Brooklyn but only #3 across New York").
Changing the location changes the answer: Brooklyn surfaces Glossier, Great Jones and Cap Beauty, while Harlem surfaces The Cut Life, Pat McGrath and Carol's Daughter. A side-by-side panel shows the same shop answered by a plain LLM with no Qloo data: generic advice, with no evidence behind it.
How we built it
- Agent: Claude drives a tool-calling loop over four tools:
get_area_taste,compare_to_reference,check_range_coverageandsubmit_recommendations. Every submitted recommendation is validated against what the tools actually returned (an "add" must cite a real gap signal, a "partner" a real venue, a "reduce" an exact range item), and anything ungrounded is rejected and sent back to the model to fix. If the agent fails, the app falls back to a deterministic pipeline. - Qloo: the Insights API (
/v2/insights) with a location signal for brands, filtered by Qloo brand genre tags (found through/v2/tags) per shop category, plus a place query for partner venues. Responses are cached. - Catalog mapper: matches taste signals to the merchant's own range at brand and category level.
- Stack: Next.js, TypeScript and the Anthropic SDK, deployed on Vercel. The agent loop, mapper, engine and live Qloo parser are covered by unit tests.
Challenges
- Qloo's location-based brand results are cultural brands (magazines, museums), not things a shop stocks. Filtering by brand genre tags per category fixed that.
- Affinity scores saturate near 1.0 for top results, so a ratio against a reference area was always about 1. We switched the comparison to rank-based: a brand's rank here versus its rank in the reference area.
- Qloo returns brands, venues and tags rather than product SKUs, so recommendations work at brand and category level.
What we learned
Grounding the LLM matters more than prompting it better: validating every recommendation against tool results kept the reasons honest, and the plain-LLM comparison shows how generic advice looks without Qloo.
What's next
Trending-based promotion timing, weekly re-runs per shop, and a richer SKU-level catalog mapper.
Built With
- anthropic
- claude
- next.js
- qloo
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.