This is a personal, vibe-coding project: a native Music Player Daemon (MPD) client for the Apple ecosystem, which I named Melo. I designed it and built it using Claude to plan the work and Claude Code to write the code.

Problem

I keep a collection of hi-fidelity audio files (FLAC, DSD, and the like) served from a local MPD server, and controlling playback has always been a compromise. The MPD clients on the App Store today feel outdated, clunky, visually inconsistent, or all of the above. I wanted something that felt native and considered, and that worked the way I actually live with my music at home.

Defining the constraints

  • Multi-device. Anyone in the house, on the local network, should be able to control the music from whatever device is closest.
  • Apple-only. Scoped to the Apple ecosystem to keep the surface area manageable and the experience consistent.
  • Time-boxed. One weekend.

Approach

I started with the iOS app to get a feel for how the workflow would go. I used Claude to plan the architecture and feature set up front, then Claude Code for the actual development. Once the iOS client was working, I extended that same foundation out to the rest of Apple’s platforms, reusing the patterns and design language across each one.

For the design decisions that mattered, I didn’t leave it to chance. I created layout mockups in Figma and shared them with Claude Code to implement, so the interface matched a deliberate design rather than whatever the model defaulted to.

Melo on iPhone
Melo on iPhone

Solution

A small family of native apps that share one design language:

  • iOS runs on both iPhone and iPad
  • tvOS is a living-room experience for browsing and playback
  • macOS handles playback, plus library management when a local MPD server is running
  • watchOS gives you quick playback controls from the wrist

Key learnings

  • Planning beats one-shotting. Investing in a clear plan with Claude before prompting saved a lot of rework later, far more than trying to get everything right in a single prompt.
  • AI gets you functional; design gets you finished. Claude Code handled the functionality well, but UI styling and interaction details still needed a designer’s eye. The polish is where most of my time went, and it’s the part that separates a working prototype from something I’d actually want to use every day.

Beyond the practical takeaways, it was genuinely fun to see what decisions Claude made when I handed it intentionally vague prompts, and where my own direction was needed to steer it back toward the experience I had in mind.