← Back to Posts

Opening a modern music streaming app often feels like walking into a crowded airport terminal. Between algorithmic recommendations, podcast banners, promotional pop-ups, and endless menus, the simple act of listening to music gets buried under layers of noise.

I wanted something different: a calm, focused space to play my favorite tracks without distractions, paired with the tactile visual charm of an analog vinyl record.

So, I built MRPS MUSIC (project details). Here are my personal thoughts on why I built it, the experience of crafting it, the technical choices behind it, and what I learned along the way.


1. Missing the Intentionality of Vinyl

There is a timeless feeling to physical vinyl records. You pick an album, place it on the turntable platter, pull the tonearm over, and watch the needle gently settle into the groove. It turns music listening from passive background noise into an intentional experience.

On modern screens, everything has been flattened into tiny play/pause buttons and generic progress bars.

When building MRPS Music, I wanted to bring that tactile magic to the browser: - An animated picture-disc turntable that rotates in sync with the track playback rate. - A mechanical tonearm that physically swings across to the outer rim of the record when you hit play, rests on the grooves, and returns home when paused. - Subtle tracking wobble animation (armTrackingWobble) and needle suspension compliance (needleCompliance) that mimic real turntable mechanics.

Watching the turntable spin while a track plays gives the web player a warm, analog heartbeat that generic audio apps simply lack.


2. Road Trips & the Real-World Driving Test

Music belongs on the road. One of my biggest motivations was having a clean player I could use during highway drives without wrestling with clunky mobile interfaces.

When you are driving, you cannot fiddle with touchscreens or tiny icons. It has to just work with your vehicle’s physical controls. To achieve this, I tapped into the browser’s W3C Media Session API:

// Registering physical vehicle controls
if ('mediaSession' in navigator) {
  navigator.mediaSession.metadata = new MediaMetadata({
    title: currentTrack.title,
    artist: currentTrack.artist,
    artwork: [
      { src: currentTrack.art96,  sizes: '96x96',   type: 'image/jpeg' },
      { src: currentTrack.art512, sizes: '512x512', type: 'image/jpeg' }
    ]
  });

  navigator.mediaSession.setActionHandler('nexttrack', () => playNext());
  navigator.mediaSession.setActionHandler('previoustrack', () => playPrev());
  navigator.mediaSession.setActionHandler('seekforward', (details) => seekRelative(details.seekOffset || 10));
  navigator.mediaSession.setActionHandler('seekbackward', (details) => seekRelative(-(details.seekOffset || 10)));
}

By continuously feeding live elapsed time and duration into navigator.mediaSession.setPositionState(), the vehicle’s infotainment progress bar illuminates and scrubs in real time. Combined with the Screen Wake Lock API (navigator.wakeLock.request('screen')), the display never sleeps while cruising on the highway.

Taking this out on the road and having steering wheel controls effortlessly change tracks over Android Auto felt magical—all running from a static web page without needing a bulky native app.


3. The Beauty of Zero Frameworks & WebGL Shaders

We live in an era where people install hundreds of megabytes of node_modules just to center a button or play an audio file.

For this project, I stuck to a simple philosophy: vanilla HTML, modern CSS, and clean client-side JavaScript.

There is no build pipeline, no bundler, and no server backend. It runs instantly anywhere—on my laptop, my phone, or in a car browser.


Final Thoughts

Building tools tailored to your own personal taste is one of the most rewarding parts of technology. You don’t have to worry about engagement metrics, monetization, or pleasing algorithms. You simply create something you enjoy using every day.

Whenever I put on a playlist now, watch the virtual needle drop, and let the track play, it reminds me of why I love building things in the first place.


Code & Repository


← Back to Posts