Lots more integration between the web app and backend, the MVP is starting to feel close now.
I've created placeholder audio for each track using a text-to-speech tool (it just says the name of the track at the moment) and it's all served from Google's cloud storage. Very neat.
The audio player is working as a basic implementation, it auto plays tracks and matches activities to channels and plays the appropriate audio. No user controls over transport/volume yet, but that shouldn't be too awkward.
I'm still working on the implementation for the browser extension, currently exploring a couple of different methods for passing data around. Needs more thought.