That I even need and have made a diagram of the infrastructure for this site speaks to how over-engineered it is. Yet, while it is ostensibly a personal site, it's a personal site that's replaced many services that I previously used.
Navidrome released plugin support a few weeks ago and I've been working on implementing a plugin that scrobbles my listens to my own API endpoint. This has replaced my previous approach of regularly polling a private endpoint that sat unused in Navidrome 's UI. It works better and uses a properly supported mechanism to meet my needs.
I've nearly entirely rewritten my site over the past few months. First, I refactored the frontend into a Laravel application that leveraged the same postgREST endpoints that my long-running 11ty site used. Next, I wrote a new administrative application in Filament and migrated off of Directus . If I did this right, the changes went largely unnoticed.
I've been using Navidrome to stream music for a bit now. It's lightweight, snappy, stable and does everything I need. It lets me stream my own music, mark things as favorites and track my listening habits . It's decidedly nerdy — you need to self-host it (or pay someone to manage it — I assume that's an option somewhere) and I sync new music up to it using rclone .
Migrating from Plex to Jellyfin to Navidrome has meant refactoring how I record listens at each step. Much of the code architecture has remained the same — error reporting, inserting tentative artist and album records, but the data retrieval and recording has shifted.