efrain.fm

efrain.fm

efrain.fm is a personal music discovery interface. You arrive at a chat window, ask for a song by mood, genre, decade, whatever — and get a Spotify embed with my commentary on it.

You get my actual written notes on the song, nothing AI-generated. The collection spans 1930s jazz to contemporary electronic, all personal favorites. Friends and family can get my recommendation whenever they want one.

Reflections
Reflections
Reflections

But what if they type…

The harder design work wasn't the interface, I got a prototype up in 20 minutes. The challenge was the conversation design. A chat interface can feel magical and free but there are many questions to answer:

  • When do you offer choices, when do you go quiet? 

  • What happens when your input has no matches? 

  • How do you prevent too many misses in a row? 

  • What happens when everything matching has already played? 

These answers shaped the feeling of the experience, maybe even more than the visuals.

The system redirects instead of guessing. Because no match feels better than the wrong match.

The matching system went through two rewrites. The final version uses a weighted trait vocabulary scored locally in JavaScript — because a binary tag system doesn’t capture intensity or contrast. A song can be mostly something, or barely something, and that difference matters. Claude Haiku extracts intent from free text, scores it against the traits, and a minimum threshold keeps weak matches from surfacing. 

Take me to the bridge…

Some connections can't be scored by a model, they're just stored as bridges in code. Kanye samples Gil Scott-Heron, and Gil Scott-Heron samples him back. "Disco Infiltrator" by LCD Soundsystem has a section that sounds unmistakably like "The Great Curve" by Talking Heads. Some Bright Eyes songs sit remarkably at home next to The Cure. These bridges make the automatic responses feel more human, because I put them there and an algorithm never would.

This one was genuinely fun to build — and I'm still building it. The voice messages are next.