In-store music
A platform for the music businesses play on their premises. Each location gets a player device, and one admin panel decides what every device plays and when. We led the backend and worked on the admin panel and the first version of the React Native player app.
- Industry
- Music
- Client
- A digital agency and its client, not named
- Our role
- Led the backend, with work on the admin panel and the first player app
- When
- November 2024 to March 2025
A player nobody is standing next to.
Music in one shop is a playlist. Music in many locations is a fleet: every player has to know what to play and when, and someone has to be able to change it without driving there.
The player is also a device with no keyboard and nobody beside it. It has to prove who it is with no one typing a password, and take an order like skip or turn it down from a panel in another city, in the moment.
of the backend written by us, 307 of 316 commits
API endpoints, from customers and devices to schedules and media
kinds of media content a player can be sent
What we built.
The API behind everything
About 130 endpoints for customers, their members, devices, device groups, packages, schedules and more than a dozen kinds of media content. We wrote nearly all of it.
Sign-in for people and for devices
People sign in with roles that decide what they can see and change. A player signs in by trading a device code for a token of its own, so devices and people go through the same checks on the server.
Remote control in real time
Play, pause, skip, pick a song or a playlist, change the volume. The panel writes the command to the device record, the player is already listening to that record, and it acts at once. A heartbeat shows which players are alive.
Media storage
Uploads go to object storage and are handed out through links that expire in minutes. Files are browsed as folders, imported playlists pick up their cover art from a search index, and encrypted streams are supported.
What it runs on
Node.js and Express on Firestore, with Firebase Authentication for people and devices. Media on S3-compatible storage, search on Meilisearch, streams over HLS. React, TypeScript and Vite for the admin panel, React Native with Expo for the player app.
One panel. Every speaker.