I dragged a 2017 office jukebox into 2026, rewired it, and it still keeps the room moving.
The Echo Nest Days
Back in 2014, The Echo Nest had a problem every office has: who controls the music? We built Prosecco, a web-based jukebox where anyone could add songs to a shared queue. No fighting over the aux cord. No Spotify account sharing. Just a URL and democracy.
It worked well enough that when Spotify acquired us, a few of us forked it internally and kept it running. We called the fork "Andre" - if Prosecco is the fancy bubbly, Andre is the cheaper stuff you grab at the corner store. It was a quick and dirty fork, and the name fit. The project has since been rebranded to EchoNest, which felt like the right way to stitch the nostalgia back to the company that birthed it.
The Rules
Every new employee (and guest) got a welcome email with the rules. I still have it saved somewhere. The gist:
- Put things on the playlist. We want to hear what you like.
- Variety is fun. One or two songs by a given artist, a handful in a genre, then give someone else a turn. Weirdness is fine, but short weirdnesses are more readily appreciated than long ones.
- Don't skip a song once it starts playing. Somebody picked it and has been waiting for it to come on.
- Anyone can lower the volume for any reason. If it's been down for a while, feel free to turn it back up.
- When in doubt, put on your headphones.
There were also some "special occasion" buttons that played specific songs. The email always said "you probably shouldn't push those." People pushed them anyway.
Bender Mode
Bender mode solved the dreaded empty queue problem. Named after the Futurama character (bite my shiny metal ass), it watches the queue and auto-fills when things get quiet.
When I resurrected the project, I upgraded Bender with a "time capsule" feature. We kept play logs from November 2017 through May 2018 - about 11,600 plays across 95 days. Bender now uses these as a recommendation source, surfacing songs that were played on the same day of the week. If it's Monday, you might hear what we listened to on a Monday in 2017.
It filters out Benderbot's own plays (to avoid feedback loops) and shuffles the results. The effect is strange and wonderful. Songs I haven't thought about in years suddenly playing again. The stuff we listened to while debugging recommendation algorithms, the tracks that got us through late nights before launches. Some of them make me cringe now. Most of them make me smile.
The airhorns were inevitable. Every office jukebox eventually gets sound effects. Ours has the classic airhorn, a sad trombone, and a few others I won't spoil.
The Architecture
One thing that confuses people: EchoNest is a shared queue, but individual playback. Everyone sees the same queue. Everyone can add songs and vote. But each person connects their own Spotify account and plays along on their own device. EchoNest is the DJ, not the speaker.
┌─────────────────────────────────────┐
│ Web Browser │
│ (Backbone.js + WebSocket client) │
└───────────────┬─────────────────────┘
│
┌───────────────▼─────────────────────┐
│ Flask App (app.py) │
│ - OAuth (Google + Spotify) │
│ - REST API │
│ - WebSocket (gevent) │
└───────────────┬─────────────────────┘
│
┌───────────────▼─────────────────────┐
│ Redis │
│ - Queue data │
│ - Votes & jams │
│ - Session state │
└───────────────┬─────────────────────┘
│
┌───────────────▼─────────────────────┐
│ Background Worker (master_player)│
│ - Tracks playback timing │
│ - Bender recommendations │
│ - Broadcasts queue updates │
└─────────────────────────────────────┘
The background worker is the interesting part. It runs continuously, tracking when songs should end and advancing the queue. When the queue empties, it kicks off Bender mode to pull recommendations. All queue changes get broadcast over WebSockets so everyone's view stays in sync.
The Modernization
The original codebase was Python 2 with Flask and SQLite, and it showed every year of tech debt.
The resurrection started with the basics:
- Migrated everything to Python 3 (goodbye
unicodelandmines) - Replaced SQLite with Redis to match the real-time queue model
- Swapped the old polling loops for gevent WebSockets so the UI stays in sync
- Rebuilt the Google and Spotify OAuth flows
- Added the throwback time-capsule feature for Bender
- Containerized the whole stack and dropped it on a $6 DigitalOcean box with Caddy handling TLS
Once that foundation held, the recent sprints have focused on making it feel modern again:
- Pasting Spotify albums, playlists, or YouTube playlists now fans out the tracks with one "add all" click (bulk queueing without copy/paste gymnastics)
- Podcasts have their own search lane and play nicely with the queue, including smarter skip behavior and tests to keep it from regressing
- SoundCloud is back--now authenticated via server-side OAuth so the streams still resolve after their API changes
- Syncing audio is clearer with a dedicated button, and local mute/volume controls no longer fight the server settings or other listeners
- Spotify rate-limit handling, WebSocket message flow, and Bender's seed logic all got hardened so a single 429 or long podcast can't stall the party
- Redis now runs with auth and protected mode, plus a security checklist to keep the droplet from becoming an open jukebox on the internet
- Multi-room Nests replace the one-room limit: hit Build a Nest, share a five-character code or slug like
echone.st/friday-vibes, and every room gets its own queue, voting, jams, and Bender - The backend now scopes every Redis key by nest, tracks live listeners with heartbeats, caps pop-up nests at 25 songs, and lets the master player garbage-collect idle rooms without touching the Main Nest
The UI already has the nest bar, copy-link button, and modal flows for building or joining; the roadmap still has nest history, creator controls, and fine-grained Bender weights waiting in the wings.
It's still a jukebox, not a SaaS product. But it ships features again, stays online, and keeps the room honest about its music taste.
Try It
EchoNest is live at echone.st. You'll need Spotify running somewhere to hear the music, but you can browse the interface and see how it works.
There's also a project page with more details on the features and tech stack.