Skip to content

Shower Radio

  • Status: Planned

Shower Radio is the second appliance use for the phone: a simple player for a large DRM-free music collection and a basic Bluetooth speaker. It is not a Spotify client and it does not attempt to extract or copy Spotify's protected offline downloads.

Product shape

The useful first version is intentionally small:

  • index music copied to app-accessible storage;
  • play local tracks reliably without Internet access;
  • reconnect to the already-paired speaker using normal Android behavior;
  • provide very large play/pause, previous, next, volume, and return-to-clock controls; and
  • recover honestly after Bluetooth loss, a pause, or process restart.

Controls must work at arm's length with wet hands. Decorative clock sounds mute while Bluetooth A2DP is connected or music is active, so a Nixie crackle never leaks into the speaker or competes with a track.

Storage direction

Local synchronized copies are preferred for the shower because they survive a Wi-Fi problem. A future server playlist can expose metadata and immutable, bounded URLs; Nginx can serve audio with range requests from a dedicated, backed-up Moto media directory. The API container itself stays replaceable and stateless.

flowchart LR
    Library[DRM-free library] -->|copy or synchronize| Phone[Phone storage]
    Library -->|optional curated playlist| Media[Dedicated VPS media]
    Media -->|manifest plus range-capable URLs| Phone
    Phone --> Player[Android playback service]
    Player --> Bluetooth[Paired shower speaker]

Decisions still required

Implementation will need explicit decisions for Android 5.1 storage access, supported codecs, media-session behavior, audio focus, indexing cost, album art, playlist persistence, and modern-Android permission differences. Nothing should auto-play at boot or after an unexpected reconnect.

Internet radio is a possible later source. It should not delay the local library, which is simpler, private, and independent of third-party client support.