Load newest albums and complete song pages, add a Songs view, bundle FFmpeg, persist credentials securely, and serve the managed library on the LAN

Hop-State: A_06FNEJ4B52YWW6V4DQKVHXR
Hop-Proposal: R_06FNEJ37KHGP1VCKVNTV95R
Hop-Task: T_06FNEEBRXR47KT7H71N5H68
Hop-Attempt: AT_06FNEEBRXS5YEZ0KZ4MTDZG
This commit is contained in:
2026-07-12 10:03:19 -07:00
committed by Hop
parent 0168767819
commit 73c4eb1857
17 changed files with 1191 additions and 58 deletions
+14 -15
View File
@@ -6,17 +6,17 @@ Resonant is a desktop-first music player for personal collections. The desktop a
## What works in v0.1
- A responsive library home with albums, tracks, favorites, search, and queue management
- A responsive library home with paginated newest albums, a complete Songs view, favorites, search, and queue management
- Functional playback controls with seek, volume, previous, and next actions
- An offline demo library with locally synthesized audio, so the app is useful immediately after cloning
- OpenSubsonic token authentication, connection testing, album loading, random-track loading, artwork, and streaming URLs
- A managed Navidrome 0.61.2 sidecar bound to `127.0.0.1`, with native folder selection, first-user setup, process lifecycle control, and app-private server data
- OpenSubsonic token authentication, connection testing, complete album/song pagination, artwork, and streaming URLs
- Managed Navidrome 0.61.2 and FFmpeg sidecars, with native folder selection, first-user setup, transcoding, LAN access, process lifecycle control, and app-private server data
- Official release download and SHA-256 verification for Apple Silicon/Intel macOS, x64/ARM64 Linux, and x64 Windows desktop builds
- A charcoal and onyx interface with coral reserved for active state and primary action
- A Tauri 2 desktop shell for macOS, Windows, and Linux development
- Keyboard-visible controls, reduced-motion support, semantic labels, and a WCAG 2.2 AA target
The server password is held only in memory. Resonant remembers the server address and username locally, but secure credential persistence is intentionally deferred until the desktop keychain integration is added.
Local and remote server passwords are stored through the operating system credential store. Resonant restores the selected library automatically on the next desktop launch.
## Run it
@@ -33,7 +33,7 @@ To run the desktop shell with the bundled server:
npm run desktop:dev
```
The first desktop run downloads the pinned official Navidrome binary for the current Rust target, verifies its release digest, and places it in Tauri's ignored sidecar build directory. The binary is bundled into packaged apps, not committed to this repository.
The first desktop run downloads the pinned official Navidrome binary for the current Rust target, verifies its release digest, and prepares the platform's pinned FFmpeg static binary. Both executables and their license notices are bundled into packaged apps, not committed to this repository.
The generic Tauri entry point also prepares the sidecar automatically, so `npm run tauri dev` and `npm run tauri build` are supported as well.
@@ -47,10 +47,10 @@ npm run check
Open the library control in the lower-left corner.
- **This computer:** choose a music folder and a local password. Resonant starts its bundled Navidrome process on `127.0.0.1:4533`, stores the Navidrome database under the app data directory, and stops it when Resonant closes. The app clears its demo content while Navidrome scans and waits for real indexed tracks before showing the library.
- **This computer:** choose a music folder and a library password. Resonant starts its bundled Navidrome process on port `4533`, stores the Navidrome database under the app data directory, and stops it when Resonant closes. It shows the LAN address other computers can use, clears demo content while scanning, and waits for real indexed tracks before showing the library.
- **Existing server:** enter the URL and credentials for a Navidrome or OpenSubsonic server you already run.
The local password and remote server password are held only in memory. Browser development can preview the interface and connect to servers that allow the development origin, but native folder selection and the managed server require the Tauri desktop app.
Passwords are saved in Keychain on macOS, Credential Manager on Windows, or Secret Service on Linux. Browser development can preview the interface and connect to servers that allow the development origin, but secure credential persistence, native folder selection, and the managed server require the Tauri desktop app.
## Architecture
@@ -65,7 +65,8 @@ Resonant desktop client
└── Tauri shell
└── managed Navidrome sidecar
├── official, pinned, checksum-verified binary
├── loopback-only HTTP server
├── bundled FFmpeg transcoder
├── private-network HTTP server
└── app-private database and logs
Navidrome or another OpenSubsonic server
@@ -76,19 +77,17 @@ Navidrome or another OpenSubsonic server
The protocol boundary is deliberate. Resonant owns the product experience without forking the media engine, and the server can be replaced as long as it speaks OpenSubsonic.
## Current boundaries
## Network boundary
- Navidrome is bundled; FFmpeg is not yet bundled. Native browser-supported audio formats play directly, while formats that require transcoding still need FFmpeg available on the system.
- The local server is intentionally reachable only from this computer. Listening from another device will be a separate, explicitly enabled feature.
- Credentials are session-only until OS keychain integration lands.
The managed server is reachable by devices on the same LAN and is protected by the library password. It intentionally does not configure routers, public DNS, certificates, or internet exposure. Do not forward port `4533` directly to the public internet; remote access should use a trusted VPN or a TLS reverse proxy.
## Next milestones
1. Move remote requests into Tauri's HTTP plugin and store credentials in the OS keychain.
2. Add album and artist detail routes with deterministic library pagination.
1. Move remote requests into Tauri's HTTP plugin for stricter native networking control.
2. Add album and artist detail routes.
3. Persist the queue, favorites, and playback position, then synchronize favorites back to the server.
4. Add native media keys, system now-playing metadata, ReplayGain, and gapless transition support.
5. Add an explicit remote-access flow without weakening the local-only default.
5. Add a guided VPN/TLS remote-access flow without silently exposing the library to the internet.
Product direction and accessibility principles live in [`PRODUCT.md`](./PRODUCT.md).
Third-party licensing and source links live in [`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md).