What it does

The tool takes a small set of seed tastes a person names in four lanes: a book, a film, a musician, and a place. It uses Qloo's Taste AI API to map that person's taste across all four domains: from the favorites they named, it surfaces the books, films, artists, and places Qloo's affinity data connects to them, with match scores and the favorite each recommendation connects to most strongly.

It is built accessibility-first for voice use. The entire experience is spoken sentences: four short questions, one at a time, then a taste map that reads top to bottom as plain language. A person who cannot see a screen, or who works entirely by voice, gets the whole product. Nothing is locked inside a table, a chart, or a visual layout.

The story

Most recommendation tools assume you can see. They hand you a grid of posters, a scatter of charts, a wall of covers. If you work by voice, the map of your own taste is drawn in a medium you cannot use.

This project starts from the opposite end. It asks what a taste map looks like when it is built for the ear first: one question at a time, answers you can dictate, and results that arrive as sentences a person can follow, question, and act on. Qloo's taste data is the engine, because taste does not respect categories: the book you love is genuinely connected to films, music, and places, and a good map should cross those lines the way a person's taste already does.

The builder of this tool works by voice herself. The accessibility here is not a compliance layer. It is the product.

How it was built

  • Python 3, standard library only for the client (urllib), so it runs anywhere with no install step.
  • GET /search resolves each spoken name to a Qloo entity ID, scoped by lane type: urn:entity:book, urn:entity:movie, urn:entity:artist, urn:entity:place.
  • GET /v2/insights is called once per target lane with filter.type set to that lane and signal.interests.entities set to the combined seed IDs, so each lane's results reflect the whole taste profile, not one favorite at a time. feature.explainability is enabled so the output can say which favorite each recommendation connects to most.
  • Robustness: if Qloo rejects the combined signal, the tool retries seed by seed and merges by best affinity. Empty lanes and unfound names are reported in plain sentences, never as silent gaps.
  • Output rendering turns each result into a spoken sentence: an ordinal, the name, a one-sentence note when Qloo provides one, the affinity as a score out of 100, and the strongest connecting favorite when known.
  • The API key is read from the environment at runtime and appears in no file and no output, per the hackathon key terms. All calls use the hackathon base URL, https://hackathon.api.qloo.com, with the key in the X-Api-Key header.

What it uses

  • Qloo Insights API (/v2/insights): cross-domain affinities across books, movies, artists, and places.
  • Qloo Search API (/search): name-to-entity resolution per lane.
  • Qloo explainability data: per-recommendation seed attribution.

Built With

  • python
  • qloo-explainability-data
  • qloo-insights-api
  • qloo-search-api
Share this project:

Updates

Submission history