Inspiration

LLM agents can reason and plan, but when you ask them what someone would actually love, they guess. Keyword search can find "jazz" or "animation" — it can't tell you that people who love a Studio Ghibli film also cluster around a specific pianist, a novel, and a Brooklyn restaurant. That connection lives in Qloo's taste graph.

What it does

TasteCast is an agentic casting desk. You type a sentence ("I love Spirited Away and rainy-day jazz — cast me a weekend") and an agent plans which Qloo calls to make, runs them, and returns a board of recommendations across domains: film, TV, artists, books, places, destinations, and podcasts.

  • Every card is a real Qloo entity, with its affinity score and the shared tags that tied it to what you named. No LLM-invented picks.
  • Live plan status shows the agent working: searching entities → resolving tags → pulling insights → casting.
  • Refine in one tap: "Swap the movie", "More places", "Keep music darker" — each triggers a new Insights call.
  • Honest failure: when an entity type is unavailable in the hackathon API (e.g. video games), the board says so instead of inventing results.

How Qloo powers it

  1. GET /search resolves names (e.g. "Spirited Away") to Qloo entity IDs.
  2. GET /v2/tags turns words like "jazz" or "cozy" into real tag IDs (Insights ignores freeform strings).
  3. GET /v2/insights runs once per target domain (filter.type = movie, artist, book, place, destination, tv_show, podcast…), signaled by those entity and tag IDs. Parameters are whitelisted per entity type, since Qloo silently ignores invalid ones. Place casts use filter.location.query. The key stays server-side in Next.js Route Handlers (X-Api-Key), and responses are cached privately in memory for ~10 minutes. Without Qloo, TasteCast has nothing to show — the planner decides which lookups to run, but every recommendation comes from the taste graph.

How we built it

Next.js App Router + TypeScript on Vercel. /api/cast streams newline-delimited JSON (status lines, then the result) so the UI can show the plan as it runs. The planner uses an OpenAI-compatible model when a key is set, and falls back to a rule-based multi-step planner otherwise — so the demo always works end to end and always calls Qloo.

Challenges

  • Silent parameter dropping: wrong params return 200 with empty entities, so we built a per-type parameter whitelist.
  • Tag resolution: mapping loose words to valid tag IDs before Insights.
  • Some entity types (video_game) are rejected by the hackathon API; we surface that clearly instead of hiding it.

Accomplishments

A full product loop — landing, guided input, live agent plan, cast board, refine — where a single Spirited Away prompt returns e.g. Howl's Moving Castle (0.97 affinity, shared tag "Curious"), plus artists, books, and destinations that share the same taste signal.

What we learned

Cultural grounding beats clever prompting: a small planner plus a real taste graph produces recommendations that feel personal, explainable, and checkable.

What's next

Saved taste profiles, shareable cast boards, group casting (blend two people's tastes), and location-aware weekend itineraries.

Built With

Share this project:

Updates

Submission history