-
-
Same code, three people. Qloo reads each culture from two artist names. Nobody enters an ethnicity.
-
A popular list ignores the person. A chatbot mostly echoes the names it's given. With Qloo, 16 of 24 songs go beyond them; without, 9.
-
Why this song: Qloo's own measure of which named artist pulled it in (Vicente Fernandez 52%, Jose Jose 48%).
-
The player: one song at a time, with a 30-second preview, and a callout for the Qloo feature at work.
-
The Memory Book for family and care staff: what worked, what to avoid, their cultural profile, every song on a timeline.
-
What Memory Lane takes from Qloo: search, insights with explainability, artist properties, year filters, destinations.
-
Tell the agent: the caregiver types what they see, and the agent goes back to Qloo to re-plan. The trace is the real run.
-
After the re-plan: ten items became eight, and every pick was checked again in code.
The problem
Picture a daughter playing "oldies" for her father, who has dementia. He gets songs he never heard. About 55 million people live with dementia (WHO), and music from roughly ages 10 to 30 can stay familiar when much else fades. The evidence is thinner for dementia than for healthy adults (Kaiser and Berntsen, 2022), but it points the same way. Families have no good way to find those songs.
The obvious tools fall short. In my eval, a popular list fit a person's youth 17% of the time, and 83% of its top six carried a lyrical theme that can upset. It was also the same list for everyone. A chatbot with no Qloo mostly repeated the artists I gave it: 9 of 24 songs went beyond the two I named, against 16 of 24 with Qloo. (Both name real artists: 23 and 24 of 24. That one is a tie.)
What it does
You give a birth year and one to three artists the person loved. That's all. Nobody enters an ethnicity. Qloo reads the culture from the artists: Ranchera, Mariachi and Mexican folk for one test person, Laiko and Entehno for another, Playback Singing and Hindi for a third.
- The agent works through Qloo's taste graph, and its real trace streams on screen.
- The player shows one song at a time with a 30-second preview, the year, and a "Why this" drawer. The drawer shows which named artist pulled the song in, in Qloo's own numbers (Vicente Fernandez 52%, Jose Jose 48%).
- The caregiver taps Smiled, Okay or Upset. Upset swaps the song and bans that artist.
- "Tell the agent": type what you see ("they love to dance, so nothing slow. Skip the film."). The agent goes back to Qloo and re-plans. In the demo, ten items became eight.
- The Memory Book is for family and care staff: what worked, what to avoid, the culture as Qloo read it, every song on a timeline of their years. You can print it, share it or delete it.
How Qloo is used
I call the Qloo API directly from a Cloudflare Worker, on the hackathon host, not through the harness or MCP. The key stays on the server.
I use Search (name-checked, because Qloo's search is fuzzy), Insights over artists, movies, TV, books, destinations and places, explainability, release-year and publication-year filters, location and cuisine tags, and artist properties (scenes, influences, origin). Every call is checked against a per-type parameter allowlist, because Qloo silently ignores a parameter that doesn't apply to a type.
Without Qloo there is no way from "Nana Mouskouri" to Laiko, Entehno and Manos Hadjidakis. If Qloo fails, the app says so. It never falls back to a generic list.
From request to result
- Search resolves each artist the caregiver named. A result is accepted only when its name agrees with the one typed.
- Insights over artists takes those ids as signals, with explainability on. It returns nearby artists with their active years, familiarity, lyrical themes and notable songs, plus the scene, influences and origin that become the cultural profile. Artists that fit the person's years and pass the safety rules become the next signals, for up to three rounds.
- Insights per domain uses the named artists plus up to four found ones. Films and TV take a release-year range (birth year plus 10 to 30), books take a publication-year range, destinations take signals only. Explainability gives the "closest to" shares in the Why drawer.
- Dining, only if a city is given: Tags finds a cuisine tag from the culture Qloo returned (for example "Greek"), and Insights for places takes the city and that tag.
- The agent chooses from those results. Code checks years, familiarity, themes and audio before anything plays.
Qloo receives artist names, entity ids, year ranges and the city if one is given. It never receives the first name or the notes.
Who decides what
Qloo finds the candidates. An LLM agent (Workers AI, gpt-oss-120b) chooses from them and says why, but its submit_plan tool rejects any id Qloo didn't return. Plain code decides everything that has to be right: their years (birth year plus 10 to 30), familiarity, gentle themes, audio, and what a reaction changes. Films, shows and books are screened for violence, war, tragedy and adult titles. If the model is unavailable, the closest Qloo result in each domain is used, and the Memory Book says so.
How I built it
A Cloudflare Worker with D1, a React and Vite front end, the Vercel AI SDK for the tool loop, and iTunes for previews. There are 32 unit tests, a browser test that walks the whole flow on desktop and mobile, and an eval script with eight personas. Every number here comes from a command in the repo.
What changed during the hackathon
I started on Oct 22 with a Discord planner (still on the v1-discord branch). Judges couldn't try it without a server and a bot invite, so I rebuilt it as a web app. That meant a new product, an agent over Qloo evidence in six domains, a cultural profile read from Qloo, a safety engine, and the evaluation.
What went wrong
- A null end year became 0, so every active artist looked retired. A unit test caught it.
- Qloo's search results carry no era data, so my first build dropped Frank Sinatra as "not active". Named artists are now dated through iTunes.
- The agent sometimes wrote a title where the tool wanted an id, and the session quietly fell back to the simple plan. The tool now accepts an exact name and maps it to the Qloo id.
- Qloo returned an adult-titled film for one persona and my screen let it through. I added those terms and a test.
- iTunes rate-limits requests from Cloudflare, which left songs without audio in production. The one-tap examples are now cached and kept warm.
Limits
Songs found through Qloo have no per-song year, so the app shows the ages the artist was active. Films, shows and books are weaker matches than music. Qloo describes what groups of people tend to like, not what one person will do, so the caregiver decides what to play. No caregiver has reviewed the picks, so I can't say yet that they're the right songs for a real person. A custom artist on the live site can come back with songs that have no audio when iTunes rate-limits. The agent runs on Cloudflare's free AI allowance, and past it the app falls back to Qloo's ranking and says so. This is an activity planner for caregivers. It is not therapy and makes no medical claims.
Try it
Live demo, no login: https://memory-lane.encore-tanishmisra9.workers.dev (tap "Mexico, 1950"). Code, MIT licensed: https://github.com/tanishmisra9/memory-lane
Built With
- cloudflare-d1
- cloudflare-workers
- framer-motion
- itunes-api
- playwright
- qloo-api
- react
- tailwindcss
- typescript
- vercel-ai-sdk
- vite
- workers-ai
- zod
Log in or sign up for Devpost to join the conversation.