Product· 2026· ongoing

MuSynk

MuSynk concept illustration with a pink media ribbon connecting an Android phone and Mac laptop

A personal music system connecting a Mac-managed collection with everyday Android listening, visible sync decisions, and a trail back to music worth hearing again.

My contribution

Solo product design and development: cross-device workflow, Android listening experience, macOS sync companion, and listening-history integration.

Project snapshot
  • Timeline: August 2026–present
  • Apps: MuSynk A for Android · MuSynk M for macOS
  • Status: In daily personal use; closed-source and not publicly distributed
  • Cover: Product concept illustration; body screenshots show the running applications

One collection, two places to use it

My music library is managed in Music.app on a Mac, but I listen on an Android phone. Keeping the files on both devices is only part of the problem. Playlists change, ratings accumulate, and lyrics become part of the collection. Those decisions need a route back, not just a one-way copy.

MuSynk began with that personal workflow. I designed and developed two complementary applications: MuSynk A is the daily player; MuSynk M is the library and synchronization companion. Listening history adds another perspective—what I actually return to, not only what I own.

The aim is continuity across these different activities, without requiring the phone and Mac to become identical applications.

ManageMusic.app

The existing Mac collection

SyncMuSynk M

Select, preview, transfer, review

ListenMuSynk A

Local playback and library

Last.fm ↔ Music Trail

Optional listening history and summaries on Android—not a requirement for playback.

A shared collection, with different platform roles. Listening history is a separate layer.

The system keeps two kinds of information distinct. Files, playlists, and preferences move through the device sync. Last.fm supplies an optional listening-history layer. Losing that connection must not interrupt local playback or library access.

A library built around listening

On Android, the library keeps songs, artists, albums, and playlists together. Global search reaches across those categories, so finding a song does not require remembering where it was filed. The same collection leads into the full player rather than a separate streaming catalogue.

Library: browse the local collection without a network dependency.
MuSynk A local library with songs, playlists, artists and albums, plus a mini-player above the bottom navigation

Library: browse the local collection without a network dependency.

One search entry across the library.
MuSynk A search results grouped into playlists and songs, with category filters above

One search entry across the library.

Now Playing: listening controls and personal preferences share one surface.
MuSynk A full player with album artwork, playback progress, preference control and five-star rating

Now Playing: listening controls and personal preferences share one surface.

The player supports local files, lyrics, a queue, Love / None / Dislike, and a separate five-star rating. Keeping preference and rating distinct matters: a quick reaction is not necessarily the same as an assessment of a track.

High-resolution ALAC playback is supported; project device testing reached 24-bit / 192 kHz. That is a result on the tested device, not a claim about every Android audio setup.

Control without losing your place

Browsing should not mean losing contact with the current song. The mini-player keeps essential controls nearby, while the dock changes with scrolling. The queue is treated as a place to work: see what comes next, reorder it, and return to the position last browsed.

Queue: current listening status stays connected to what comes next.
MuSynk A queue showing the current scrobble status above upcoming tracks and preference marks

Queue: current listening status stays connected to what comes next.

Dock: playback remains within reach while browsing.
MuSynk A library view with the glass mini-player and navigation dock over the scrolling list

Dock: playback remains within reach while browsing.

Lyrics: word-level timing brings the text into the listening experience.
MuSynk A lyrics view showing successive word-level highlights above the playback controls

Lyrics: word-level timing brings the text into the listening experience.

These are connected interaction decisions rather than a list of extra features. A persistent route back to the player, a queue that remembers its place, and lyrics that follow the song each reduce the need to reconstruct context.

The artwork-derived background gives the player and its surrounding surfaces a shared visual atmosphere. The controls remain recognizable as the collection changes.

Music Trail: a way back into the collection

The history tab, Music Trail (乐迹), turns past listening into something browsable. Week, month, and year views compare periods and show frequently played artists, albums, and tracks.

Music Trail: a period overview, with the previous period as context.
Music Trail monthly overview with listening counts, previous-period comparison and top artists

Music Trail: a period overview, with the previous period as context.

Top lists connect listening history to tracks and albums available locally.
Music Trail top tracks and albums with listening counts and local play controls

Top lists connect listening history to tracks and albums available locally.

The counts are not the endpoint. When an item can be matched to the local library, it can lead back to an artist or album page, or let a track be queued next. The design question becomes what can this history help me hear again?

Last.fm provides the history, while an app-local cache supports the interface between refreshes. Matching and history responsiveness remain areas for refinement. Local listening stays available even when online history cannot refresh.

Discovery starts with what is already there

The recommendations surface begins with the collection itself: recently added files, recent listening, and local candidates worth revisiting. Each card opens a detail view, rather than ending at a decorative overview.

Recommendations: entry points grounded in the local collection and listening history.
MuSynk A recommendation cards for recently added and played music and history-informed artists, tracks and albums

Recommendations: entry points grounded in the local collection and listening history.

A card opens a filterable list with actions for local matches.
MuSynk A recommendation detail list with songs, artists, albums and playlist filters

A card opens a filterable list with actions for local matches.

This is an early implementation, not a complete recommendation engine. Recently played uses the last 24 hours of Last.fm history. Recently added uses local file modification times as a practical proxy for arrival through sync. Current history-informed cards reuse listening signals; they are not new results from an external discovery service.

The local rediscovery rule is deliberately simple: liked or highly rated tracks with low recorded play counts. It does not yet establish that a track has gone unheard for a particular length of time.

A recommendation also needs an honest action. Locally matched music can be played or opened; an external-only result should not look like a playable file. Generating and saving new playlists from these suggestions remains future work.

Preview the sync, then see what changed

MuSynk M approaches the same collection from the Mac. It browses Music.app songs, artists, albums, and standard and smart playlists so I can choose what belongs on the phone.

MuSynk M: select music from the existing Music.app library.
MuSynk M window showing the Music.app library sidebar, artist cards and selection controls

MuSynk M: select music from the existing Music.app library.

The selected-items review makes the transfer set inspectable before proceeding. The companion works with the collection I already maintain, rather than asking me to curate a second library independently.

Review the selection: what is included, and what can be left out.
MuSynk M selected-items review listing chosen albums with category counts and removal controls

Review the selection: what is included, and what can be left out.

A preview then makes the planned changes explicit. The completion receipt closes the loop by reporting what was transferred and processed, including lyrics, artwork, and preferences. The figures in these screenshots describe one sync session, not a general performance benchmark.

Before: inspect planned additions, updates, and write-backs.
MuSynk M sync preview listing additions, retained files, preference changes, playlist changes, lyrics and transfer size

Before: inspect planned additions, updates, and write-backs.

After: a receipt makes the result visible, rather than only saying done.
MuSynk M completion receipt summarizing transferred audio, lyrics, artwork and preference changes in both directions

After: a receipt makes the result visible, rather than only saying done.

Standard playlist creation and membership changes have passed bidirectional manual testing in the project. Preferences, ratings, and lyrics also participate in the sync workflow where supported. This is not a claim that every smart-playlist rule or conflict case is solved.

The important design move is to make synchronization understandable: selection → preview → execution → receipt. Changes to a personal collection should be visible, not hidden behind an opaque progress bar.

Boundaries that shape the product

Several decisions keep the project focused.

DecisionConsequence for the experience
Keep playback localLast.fm enriches history, but is not a gate to listening.
Give each platform a clear roleAndroid is the player; the Mac currently prioritizes synchronization rather than desktop playback.
Prefer chosen or local artist artworkCustom images and album covers take precedence; Last.fm is not an artwork source.
Make sync changes inspectableA preview and receipt expose the plan and result; resetting state or deleting data is not a generic repair strategy.
Separate a suggestion from a playable fileOnly safe local matches should offer local playback.

Development began in August 2026, and the Android player and Mac sync companion are now in daily personal use. History and discovery continue to evolve. Personal use is a development feedback loop, not evidence of wider user validation.

Next steps include refining history and matching, letting rediscovery candidates become reviewable playlists, and exploring broader discovery. MuSynk M is planned for the Mac App Store, with no release date. A full Mac player is a longer-term direction, not an existing feature.

The project is built with Kotlin and Jetpack Compose on Android and SwiftUI on macOS. It remains closed-source and not publicly distributed.

Project and image notes

Solo design and development, August 2026–present. Screenshots show the running applications and a personal music collection. The cover is an author-supplied product concept illustration, not an actual application screenshot. Chinese UI labels are retained in the original screenshots and explained in the English captions. Album artwork belongs to its respective owners. MuSynk is not affiliated with or endorsed by Last.fm or Apple.

Continue exploring