For your points 2 and 3 specifically: if you go the Icecast route (AzuraCast also uses Icecast under the hood), Icecast can require a username and password per mount point, so the stream URL alone is useless to anyone who stumbles on it, and you can give the mount a bland name. Put it behind HTTPS on your reverse proxy so the password isn’t sent in clear text.
For point 4 (genres at certain times), AzuraCast’s playlist scheduling handles that from the web UI. If you build it yourself instead, Liquidsoap can switch playlists by time of day, but it’s a scripting language with a learning curve.
If what you really want is your own library rather than one stream everyone hears at the same time, the Navidrome suggestion is simpler: separate logins and plenty of Subsonic apps on Android.




The tube that turned out not to be PTFE is a nasty surprise. On the fan side, if you run Klipper:
heater_fanonly switches the fan on above a temperature, it can’t tell that the fan is unplugged. A fan with a tachometer wire andtachometer_pinset at least shows you the RPM, and you could add a macro that pauses the print if it reads zero while the hotend is hot.The low-tech version is to look at the heatsink fan spinning after any toolhead work, before the first heat-up. Cheap habit compared to rebuilding a melted toolhead.