Inspiration

On a long drive, at a dinner, in a kitchen, at a party, the playlist is almost always one person's guess about what the room wants. And most people can't name a song when you ask what they like. But they can tell you a show they binge, a city they love, a dish they cook. I wanted a soundtrack shaped by what everyone in the room entered, with a clear reason for each song.

What it does

Roomtone turns what everyone in a room loves into a shared soundtrack.

  • The host talks to the DJ (a chat, not a form): "a long drive, Amsterdam to Groningen" or "a party, 10pm till late, peak around half past eleven". The DJ answers with a plan and an energy curve you can drag, then opens the room.
  • The host screen (a laptop or TV next to the speaker) shows a 3D room: every guest is a white point, every genre is a glowing lava island that grows with its guests, and the set plays through an embedded YouTube player.
  • Guests scan a QR code, with no app and no login, and type three things they love: a show, a food, a city, an artist, anything.
  • A DJ agent uses Qloo's Taste AI API to turn those cross-domain tastes into music. It gives every guest at least one song "for them", finds what the room shares, and shapes the set to the host's energy plan.
  • Every track carries a reason: "because Maria loves Ozark and Lena loves Dark". The reason is shown under the title and as ripple rings around that guest's point, so the room sees whose taste is playing.
  • The host can steer in plain language mid-party: "speeches in 10 minutes, calm it down" or "more Afrobeats". The DJ asks Qloo again with the matching mood or genre and queues new songs right after the one playing.
  • Guests can change their loves from their phone, and their page follows the set live, showing their song and how far away it is.

To try it, open the site, press Start your room, talk to the DJ, and join from a phone with the QR code.

How we built it

I built Roomtone Qloo-first. Before writing the app, I ran small experiments against the Qloo API to learn what it is good at (turning shows, places and artists into music taste) and what it quietly ignores, and I designed the DJ around those answers.

  • Qloo's Taste AI is the music brain. Every song in a set comes from a Qloo result. I use it to turn each love into artists, to find the middle ground between a guest's loves, to shape the set to the host's energy plan, and to steer when the host asks for something new.
  • Claude, through the Laravel AI SDK, is the DJ. It reads what guests typed, decides which Qloo result they meant, and balances the room. It can only choose from what Qloo returned, and my own code writes the reasons, so the model can't invent a song or a "because".
  • Laravel and React hold it together: a Laravel backend with a job queue for the slow calls, and Reverb for realtime, so guests appear on the host screen the moment they join.
  • Three.js draws the host screen: the room, the islands and the ripples, all driven by live data.
  • The YouTube player on the host screen plays each song, and a small set of rules picks the right video for it.

I worked in short loops: probe Qloo, build the smallest version, test it with a fictional room of guests, and fix what felt wrong. The backend logic is covered by automated tests, and I checked every change against real Qloo responses.

Challenges we ran into

  • Qloo's search matches words, not meaning. "Alfama" finds the Alfamart chain, "jollof rice" finds Damien Rice, and "burger" finds the city of Hamburg. I treat search results as a list of candidates for the model to choose from, never as an answer, and I added a check that a place only counts when the guest's own words name it.
  • Food isn't a music signal. I first mapped dishes to a home city, and every pork lover got German music. I removed that and tested Qloo's dish and cuisine tags instead. Qloo accepts any tag but quietly ignores most of them, so a tag only counts when its artists differ from what Qloo returns for a nonsense tag. "Beef steak" works. "Burger" honestly doesn't, and the guest page says so.
  • Mixing everyone's tastes into one request gives a muddy result that favours the biggest group. I ask Qloo about each guest separately and let the DJ balance the room.
  • The same songs for every energy level. At first the plan only reordered a set drawn from the same lists. The fix was to make the plan change the question I ask Qloo.
  • Speed. Qloo allows only a few requests at a time, and each takes a few seconds, so the slow work runs in the background and in parallel. Building a set went from 30 seconds to about 11.
  • Finding the music itself. Spotify restricts its API, and YouTube's free quota allows only 100 searches a day, which makes automated testing hard. Search results also sometimes return a podcast or a reaction video instead of the actual song.

Accomplishments that we're proud of

  • The idea worked. Three things a person loves, with no artist named, turn into music they recognise as theirs. A show, a city and a dish are enough for Qloo to find a taste that fits, and that jump across domains is the whole bet.
  • I shipped the whole experience. The chat, the 3D room, guests on their phones, live music and the DJ behind it are one working product, running live and ready for anyone to try.

What we learned

  • I started without knowing what Qloo did, and learned it by using it. I came in thinking about music and found a tool that knows what people who love one thing also love, across shows, places, books and artists. Seeing a TV show lead to songs a person actually likes was the moment the idea clicked for me.
  • Try small before building big. A quick test against the real service often showed me a feature wouldn't work before I spent days on it.
  • Limits from other services shape the product. YouTube only lets me look up about 100 songs a day, and that changed how I store songs, how I rebuild a set, and what the screen shows when a video is missing.
  • For a different night to sound different, I have to ask Qloo a different question. Reordering the same songs doesn't do it.
  • Taste data describes groups, not one person. Qloo tells me what people with a similar taste tend to love, so a suggested song can still miss for one guest.
  • Some loves are too vague, and Roomtone doesn't ask follow-up questions yet. When it can't tell what a guest means, it says so and leans on their other loves. Asking "do you mean this one?" is something I want to add.

What's next for Roomtone

  • A bigger YouTube quota, which limits new rooms the most today, and a fallback source for playback.
  • A set that never runs dry: top it up from stored results as the party goes on (a first version is built), and use more of Qloo's signals as the party moves through its energy plan.
  • Audio reactivity from the host device's microphone, so the room breathes with the music.
  • A smarter reading of food and hobbies, using more of Qloo's tag types.
  • Phone polish for guests: a richer page while the party plays.
  • Keep the soundtrack: export a room's set as a playlist after the party, and let guests see how their loves shaped the room.

Built With

Share this project:

Updates

Submission history