Living document. Status as of initial-scoping sprint; revise with every milestone close.
Ship a native desktop Jellyfin client — no Electron, no webview — that feels indistinguishable from a first-party app on each target OS. Target polish bar: Apple Music, Spotify, and Doppler. Not a music-collection-mapping tool; a daily-driver music player.
cargo test --workspace passes.SmokeTest integration verifier. End-to-end playback validated against a real Jellyfin server.M3 — macOS polish milestone.Deliverable: the macOS app is objectively within design tolerance of the prototype, with Apple Music-equivalent interactions. Every screen works end-to-end with loading/error/empty states. Menu bar populated, media keys routed, keyboard shortcut map complete. MPNowPlayingInfoCenter and MPRemoteCommandCenter surface Now Playing to Control Center and the lock screen.
Key work — see issues under milestone:M3 — macOS polish:
NavigationSplitView as the shell; full .toolbar {} and .commands {} blocks.MPNowPlayingInfoCenter + MPRemoteCommandCenter, AVQueuePlayer-based gapless.Deliverable: gh release create vX.Y.Z produces a signed, notarized, stapled Jellify.dmg that launches without Gatekeeper prompts on a clean Mac. Sparkle appcast serves updates.
Key work:
notarytool CI pipeline with Keychain-stored credentials.create-dmg packaging, universal binary via lipo.Deliverable: WinUI 3 app matches macOS MVP scope (login → library → album → play) with SMTC integration. MSIX package.
Deliverable: GTK4 + libadwaita app matches macOS MVP. MPRIS2 integration. Flatpak published to Flathub.
These tracks span multiple milestones:
area:core, area:macos, area:windows, area:linux, area:audio, area:api, area:ux, area:design, area:a11y, area:i18n, area:perf, area:reliability, area:observability, area:dist, area:ci, area:docskind:feat, kind:bug, kind:polish, kind:chore, kind:security, kind:questionpriority:p0 (blocking) → p3 (someday)S (≤ half day) · M (1-3 days) · L (1 week) · XL (multi-week)The issue set was generated from a coordinated research sprint — see Scripts/create-issues.py for the batching tool and <sub>Source: NN-*.md</sub> footers on each issue for traceability.