I'm in the middle of writing up a novel about my music stack since I've just about gotten it exactly where I want it. There's no one-size-fits-all answer here and it's difficult to really replicate the behavior of major streaming services.
The short version of what I have set up:
- Backend: Navidrome
- Frontends: Feishin (both desktop and hosted) and Symfonium
- Remote access: Pangolin (this does involve keeping a Navidrome rest endpoint totally exposed so Tailscale/Netbird/Wireguard are fine too, but I wanted to be sure my wife can access it from her work PC in the office)
- Library and metadata management: Lidarr, beets, and metadata-remote. Lidarr does the bulk (one instance per user/library), beets handles manual imports, and MDRM is for fine-tuning and really obscure stuff
- Searching/Downloading: Lidarr + Tubifarry + slskd. Also support smaller artists as much as possible, bandcamp purchases and merch and whatever go a long way.
- Discovery: Explo
I'll have a full beginning to end writeup pretty soon hopefully. It's still not perfect, and juggling multiple users adds a huge layer of complexity, but I'm happy with where it's at.

Navidrome even supports multiple libraries now. I was using 2 instances for a bit for my wife and I, but now it's all in one.