←︎ All projects

03 / PERSONAL IOS PROJECT

On my iPhone

Music9.

Some things are worth bringing back.

MY ROLE
Personal project creator
PLATFORM
iOS · Personal device
BUILT WITH
Objective-C, UIKit & MediaPlayer
AN OLD FEELING, MADE NEW
Music9 For You discovery screenMusic9 full-screen player with edge-to-edge album artwork
A little nostalgia, in your pocket.

My first iPod touch stayed with me.

My first Apple device of my own was an iPod touch 5. I loved the colourful interface, the big edge-to-edge album covers, and how much care seemed to fit into such a small object.

It reminds me of a simpler time, and of how supportive my family has been. Music9 began as a way to bring a little of that feeling back: the classic iOS 9 music experience, shaped into something I can use today.

A familiar feeling, with a few things of my own.

The Now Playing screen is my favourite part. I wanted the album artwork to feel generous, with its colour reflected in the surrounding interface. I also added lyrics, so a swipe left brings the words into view.

Music9 brings together Apple Music discovery and local music in an interface inspired by the older app. I direct the experience and try the result on my own phone, with AI assistance for implementation.

FROM MY PHONE

A little look
around Music9.

A short, silent recording of the player, albums and artist views. Recorded on my personal device.

24 seconds · Tap play to watch

The right lyrics, even when the song changes.

The problem. Opening the lyrics view more than once can trigger duplicate requests. If a listener skips a song while a lookup is running, a late response must not be treated as the new song’s result.

The implementation. A shared lyrics loader lets views join an existing request. It checks an in-memory cache and offline storage before fetching, and uses a request generation counter to ignore obsolete callbacks after a track change.

The trade-off. Caching reduces repeated work but adds invalidation rules. The cache key includes the track and lyric selection; changing a selection clears cached results. Unsuccessful lookups are cached briefly so repeated opens do not immediately retry.

The evidence. The source includes simulator checks for shared requests, cached reopening and late responses from an old track. The device captures show the user-facing lyrics experience; they do not establish that every network or playback edge case is covered.

My role and AI assistance

I chose the swipe-to-lyrics experience and review it on my phone. The loader and checks were developed with AI assistance. I’m learning how request state and caching support that experience, rather than claiming independent authorship of every implementation detail.

Made for my pocket. Still growing.

Music9 is running on my personal device. I’m continuing to refine it and working towards a TestFlight release; it is not currently available on TestFlight or the App Store.

For now, these screenshots and the recording show the experience I’ve been building and using.

THE THREAD THROUGH IT ALL

I wanted to make listening to music feel a little more like it did when I first fell in love with it.

Music9 is a personal project inspired by iOS 9. It is not affiliated with Apple. Album artwork and artist imagery belong to their respective owners.

KEEP EXPLORING

Glance

Everyday controls and useful information, brought together in one considered macOS panel.