Live demo: reach-6o5x.onrender.com (press Guided tour, top right) · Code: github.com/soroorgh93/reach
A grandmother may forget a name. She rarely forgets the song she fell in love to.
That's the idea behind Reach, a music companion I built for people living with dementia, autism or hearing loss. You tell it who someone loves and what they need (sleep, calm, focus or memory), and it plays a calm session made from their music, in their culture and language.
The problem: everyone gets the same "calm playlist"
Music measurably helps with anxiety, pain and sleep. Cochrane reviews have found it again and again. But in hospitals and sleep apps, everyone gets the same calm playlist: Enya, Max Richter, rain sounds.
A Persian grandmother who loves Hayedeh, a student who loves Jay Chou and a dancer who loves David Guetta all get the same list. They switch it off. Music only works as medicine if people keep listening, and people keep listening to music that is theirs.
I also tried simply asking a chatbot. I asked a language model for Persian sleep songs. It named eight, and none of them could be found in the Deezer or iTunes catalogues. It invented them.
How Reach works
A small council of agents builds each session:
- Listener understands what you typed or said
- Taste asks Qloo's taste graph for the artists closest to your favourites
- Clinician picks an evidence-graded protocol (for sleep: a tempo that starts at your pace and slows down)
- Composer writes the timeline: tempo, a gentle pulse, a safe volume
- Guardian checks the safety rules (child limits, hearing, never while driving)
- Gate refuses if the evidence or the Qloo data is missing
Qloo is the heart of it, not a lookup at the end
For a sleep session for someone who loves Hayedeh, the Taste agent asks Qloo for artists that fit both her taste and the texture of sleep:
GET /v2/insights ?filter.type=urn:entity:artist &signal.interests.entities=<Hayedeh's Qloo id> &filter.tags=urn:tag:genre:music:ambient,...acoustic,...classical,...piano &filter.exclude.tags=...metal,...edm,...hip_hop,...punk A second call adds signal.location.query=Tehran, the city MusicBrainz says Hayedeh comes from, to get a pool from her own culture.
Reach uses eight Qloo surfaces in total: entity search, artist insights, the location signal, tag insights, demographics, podcasts, movies and TV (the visual mode for deaf users), and places and books (a gentle next step "after the music"). Without Qloo, Reach refuses to make a session.
Only entity ids, tag ids, an age bucket and a city are ever sent to Qloo. Never the words "I can't sleep."
The hardest part: culture, not country
My first version put Turkish pop singers in a Persian listener's sleep playlist, because Qloo ranked them higher. One early reply even said "from Iran", which felt wrong to the person testing it.
So I removed country labels entirely and replaced them with measurement:
- the language of each artist's own song titles
- where MusicBrainz says the artist is from
- slots shared out per favourite, so a Shakira + Aznavour fan gets both Latin and French picks
- diversity, so it isn't ten songs by one singer
There's no country table anywhere in the code. The same logic now serves Persian, Mandarin, Afrobeats, K-pop and Mexican listeners.
A sand plate in three.js
My favourite part: a 3D plate where each frequency (2 Hz deep sleep up to 40 Hz) draws its own figure in sand, like a Chladni plate. The sand gathers where the plate stays still. Each band also shows its evidence grade, and the experimental ones (like 40 Hz) say so clearly.
It listens back
With the camera turned on, Reach reads a face and one hand on the device with face-api.js and MediaPipe. Nothing is uploaded. Two fingers play the next song, a thumbs-down changes it, and a smile moves the mood dial.
For people who can't hear, Reach switches to a visual protocol: a breathing light at six breaths a minute, vibration on the beat, and captioned films that Qloo picks from their taste.
Does it beat a plain chatbot?
I gave the same ten listeners to three systems: a generic playlist, a language model (llama 3.1 8B) and Reach, all using live Qloo.
| Reach | Plain chatbot | Generic playlist | |
|---|---|---|---|
| Songs that really exist | 100% | 60% | 100% |
| From the person's own culture | 92% | 89% | 36% |
| Calm when they need calm | 96% | 70% | 100% |
The chatbot invented four songs in ten. The generic playlist was real and calm, but the same for everyone. Ten people is a small test: it shows a pattern, not a clinical result.
What I learned
Cultural intelligence isn't a nice extra for health; it's what makes people keep listening. And only real taste data, not a model's guess, can tell you what that music is.
Reach is a wellbeing tool, not a medical device. Every claim in the app shows its evidence grade and source.
Built with
Python and Starlette on the server, three.js and Web Audio in the browser, Qloo, MusicBrainz, Deezer and iTunes previews, face-api.js, MediaPipe, and fourteen languages (Persian and Arabic right to left). It's one Docker container on Render, with no account and no database.
Try it: reach-6o5x.onrender.com. Start with the Guided tour.
Code (MIT): github.com/soroorgh93/reach
I'd love your feedback, especially if you work in care or music therapy. 💛







