Making a shared music room
I wanted listening online to feel like being in the same room. The idea was that someone puts on a song, everyone hears it at the same moment, and you can see who likes it.
I built MusicRoom with Replit Agent over a few days in September 2025. The starting references were Spotify for the music and Discord for the room. The song playing gets the most space, followed by the queue, DJ controls and people.

The room works like this. You create a room and get a six-character code. There are two DJ slots, and the two DJs take turns choosing songs from YouTube, so the music goes back and forth between two people instead of one person's playlist. Everyone else is a listener and can react to the song that is playing.
I mostly used screenshots to show the agent what needed to change. I sent nine between the night of September 12 and the following night.
I wanted a reaction to be more than a counter. The person who reacted should keep moving on screen, the way you would see it across a real room. On September 13 the notes record that the avatars were "restored" to "shake/vibrate instead of just pulsing", and that anyone who reacts keeps that vibration "until the song ends". Now you can look at the room and see who is into it.

The same day was about timing. Songs were ending early and the queue jumped ahead, so a song now has to be near its real end before the next one starts. Listeners were drifting from the DJ, so the sync tolerance went down to one second. Browsers were blocking autoplay for the next song, so the DJ's player now starts it itself.
On September 14 I changed how the room moves to the next song. Until then the room only moved on when the DJ's browser said the song had ended. So if the DJ left, the room went quiet. The end of a song moved to a timer on the server, so the room keeps going without the DJ. The notes say it "ensures songs continue playing even when all browsers are closed." The first song added to an empty room also starts on its own now, so nobody has to press play to begin.
The small details helped it feel like a shared room: an avatar that moves when someone reacts, and music that doesn't stop when one person closes a tab. More about the finished piece is on the project page.
Sources
- Replit app JukeBoxSocial,
replit.md(overview, "Recent Updates" for September 13 and 14, 2025) - Replit app JukeBoxSocial,
design_guidelines.md(Spotify/Discord reference, visual hierarchy) - Replit app JukeBoxSocial,
attached_assets/(ten screenshots dated September 12 to 13, 2025) - An earlier copy of the app on Replit,
server/routes.tsandclient/src/components/PlayerBar.tsx(advance only on the DJ's ended event) - Replit app JukeBoxSocial,
server/song-timer.ts,server/routes.ts,client/src/components/RoomDashboard.tsx(server timer, DJ position updates every second) - Portfolio, content/projects.json, jukebox-social (images, video, room rules, "Reactions as presence", the teaching idea)