Inspiration

Picture an afternoon visit. A daughter sits beside her mother, who has dementia. The conversation stalls after "How are you feeling?" The daughter knows her mum loved Elvis Presley once. But what else? What came next? What might bring back a memory, not just a blank look?

Reminiscence, talking through the music, films and places of someone's past, is a common activity in dementia care. The hard part is the material. Caregivers know one or two favourites; they rarely have a whole era at their fingertips.

My own dad loves Lonnie Donegan. Ask a generic chatbot for "more like Lonnie Donegan" and you get a list. Reminisce gives you Billy Fury, Michael Holliday and Tommy Sands, each on a card that says "Because Dad likes Lonnie Donegan", with a prompt to start the conversation. That's what I built this for.

What it does

  1. Tell it about the person: a name, the year they were born, where they grew up, and one to three things they loved. Reminisce works out the years they were 15 to 30, the "reminiscence bump" where memories are densest, and asks Qloo what their generation and their hometown loved.
  2. Look over the deck: a "Session ready" screen shows eight to ten cards grouped by kind: songs, films, television, places to eat, landmarks and trips. Each card carries the Qloo line that chose it. Drop any card, swap one, shuffle the order, then start.
  3. Talk: each card comes with a gentle, open conversation prompt ("Did you ever listen to Bobby Darin? What was your favorite song of his?"). Cards chosen near a favourite say "Because Frank likes Frank Sinatra", so the caregiver knows why it's there.
  4. "They lit up": tap it when something lands. The deck moves on at once, and in the background the agent feeds that card back into Qloo and replaces up to three of the cards still to come, never the one in front of you. Those cards say "Because Frank lit up at Bobby Darin".
  5. Session complete: the end screen collects the moments that lit up, with each card's prompt, as a memory summary to print or save as a PDF, to keep or to hand to family and other carers.

Two demo people are built in so you can try it in seconds:

  • Frank: born 1945, Chicago, loved Frank Sinatra. Today Qloo dealt him Bobby Darin, Paul Anka and Louis Armstrong, American films and television of 1960 to 1975, Millennium Park, a Chicago restaurant and a trip to Rome.
  • Michiko: born 1950, Osaka, loved Hibari Misora, Japan's best-loved postwar singer. Today Qloo dealt her Ayumi Ishida, Kitajima Saburo and Aki Yashiro, Japanese pop and enka stars of her era, Japanese films and a Japanese TV series of 1965 to 1980, Osaka Castle, a place to eat in Osaka and a trip to Kobe.

(Live decks follow Qloo's data, so the exact names move as it does.)

Why it only works with Qloo

Without Qloo this is a chatbot guessing. With Qloo it's grounded in real cultural taste:

  • It connects tastes across categories. One favourite singer seeds the films, the television, the places to eat and the trips on the deck, through Qloo's taste graph rather than keyword similarity. Hibari Misora leads to Japanese films of the 1960s and 70s; Lonnie Donegan leads to A Hard Day's Night and Panorama.
  • It uses when and where the person grew up. The 15-to-30 window becomes Qloo's release-year filters; the hometown becomes a location signal and filter for places to eat, landmarks and trips, and a country filter for films and television. Michiko's deck is Japanese singers and Japanese films, not a Western default.
  • It explains every pick. "Show the call" on any card opens a Why Qloo panel: the exact request, the affinity score, the rank Qloo returned it at, and Qloo's own explainability of which seed pulled it in. Every card says "live Qloo API". You can see, card by card, that this isn't an LLM making things up.
  • It re-tunes live. "They lit up" sends that card back to Qloo as a new interest signal and the upcoming cards adapt during the session, in about six seconds.

The LLM (Claude Haiku 4.5) only writes the conversation prompts, after the deck is dealt. Qloo decides what goes in the deck, and the agent can only play cards that Qloo returned in this session.

How it works (the agent loop)

  1. Profile: caregiver enters name, birth year, hometown and favourites.
  2. Ground: the agent resolves the favourites to Qloo entities and the hometown to a Qloo locality.
  3. Ask Qloo, all at once: six Insights calls (artists, films, TV, places to eat, landmarks, destinations) with the favourites as interest signals, the hometown and age bucket as signals or filters, and the youth window as release-year filters. Thin answers are widened one step at a time, never past the era.
  4. Curate: the agent deals eight to ten cards across at least three kinds, attaching each card's source ("Because…") and its Qloo explanation ("Why Qloo").
  5. Prompt: Claude Haiku 4.5 writes a short, warm conversation starter for each card, in the session's language. The template prompts are already on the cards, so a slow model never holds up the caregiver.
  6. Observe and adapt: "They lit up" goes back in as a new seed; the agent re-queries Qloo and replaces up to three upcoming cards.
  7. Summarise: at the end, the lit-up moments become the Session complete screen and a printable memory summary.

Every card comes from a Qloo answer in that session, and the Why Qloo panel shows the call. A deck is ready in a few seconds; a re-tune moves the deck on in under a second and lands its new cards a few seconds later.

For the technical judges. Three documented hackathon endpoints: GET /search (favourites and hometown to entities), GET /v2/tags (restaurant and landmark tag ids) and GET /v2/insights for every recommendation, with signal.interests.entities, signal.location.query, signal.demographics.age, filter.release_year.min/max, filter.release_country, filter.location.query, filter.tags, filter.exclude.entities and feature.explainability=true. Because Qloo silently ignores unsupported parameters, every parameter is validated against Qloo's per-entity-type tables before it is sent, and anything dropped is reported in the trace. A limiter keeps the key under its rate limit, every live answer is cached, a daily budget bounds the public demo's spend, and the two presets are snapshotted once a day. About 250 unit tests and a Playwright suite cover the parameter building, the planner, adaptation, the session state machine and both presets end to end; a live smoke script checks the real API before a release.

Privacy. Sessions live in the browser. Nothing personal touches a server: Qloo only ever sees entity ids, a city name and an age bucket.

Languages. English, Spanish and Japanese, for the whole session, not just the prompts.

Who it's for

Over 55 million people live with dementia worldwide (WHO, 2023), and most are cared for at home by family, or in care homes where activity coordinators run reminiscence sessions with whatever material they can find. Reminisce gives both a deck in seconds, for anyone, from any culture, with the reason for every card. It is a conversation aid, not treatment, and says so on every page.

Try it

Open https://reminisce-pi.vercel.app, tap Try Frank's session or Try Michiko's session (or make one for someone you love), press Start the session, then press "They lit up" on any card and watch the upcoming cards re-tune. No account needed.

How I built it

Next.js 16 (App Router) and React 19 in TypeScript, hosted on Vercel; the Qloo Insights API for entity search, tags and every recommendation; Claude Haiku 4.5 through the Anthropic SDK for the conversation prompts; Upstash Redis for the daily budget and preset snapshots. Built by Mike Sewell (Sonic Pixel), directing AI coding agents for much of the implementation. Open source under MIT: https://github.com/maikunari/reminisce

Challenges I ran into

  • Learning Qloo's data from the live API, not from fixtures. Qloo puts the audience tag "Mature" on nearly every classic Japanese film, so a well-meant adult-content filter emptied Michiko's film deck and let Star Wars in; and the hometown signal drowns a niche favourite (Lonnie Donegan plus London returned Dolly Parton and Dave Davies). Seeded artist calls now carry the seed alone, and era and country come back in as filters and tie-breaks.
  • Relevance you can trust. Generic "similar artist" results aren't enough for a caregiver; each card needed a visible reason. That's why the "Because…" line and the Why Qloo panel exist.
  • Speed at the bedside, on a public demo. Qloo is asked by fixed rules so the deck is on the table before the model is called; the model only rewrites prompts afterwards. A daily budget, a cache and preset snapshots keep the demo up for the whole judging window.

Accomplishments I'm proud of

  • My dad's Lonnie Donegan profile returns Billy Fury, Michael Holliday and Tommy Sands (checked on the live site today), picks that feel right to someone who lived through that music.
  • Every card explains itself; nothing is a black box.
  • A complete session flow, from intake to Session ready to the printable memory summary, in three languages, not just a recommendation list.

What I learned

Taste data is the difference between "a list of songs" and "a list of their songs". The LLM is good at warm wording; it's not where the knowledge should come from. And live Qloo and your own fixtures will disagree; check the real thing before you ship.

What's next

  • Testing with real caregivers and care staff, and getting their feedback on prompts and pacing.
  • Photos and audio previews on cards, and sharing sessions between family members.
  • More languages for prompts, building on the Japanese and Spanish work.
  • Remembering what lit up across visits so each session starts warmer.

Built With

  • anthropic
  • claude-haiku-4.5
  • next.js
  • playwright
  • qloo-api
  • react
  • typescript
  • upstash-redis
  • vercel
Share this project:

Updates

Submission history