Part 8 — Building an Android Needle Player

There comes a point in every personal project where reality taps you on the shoulder and politely asks:

This is all very impressive, mate… but can you actually use it?

That moment arrived shortly after I finished building the Needle backend and web player.

Everything worked beautifully.

The desktop app talked to the backend.
Playback syncing worked.
The library was accessible remotely.
Album art loaded nicely.
The metadata system behaved itself for once.

Life was good.

There was only one tiny issue.

I don’t carry my Mac mini around in my pocket.

Which, apparently, is considered “normal” by society.

So naturally, the next logical step was obvious:

I had to build an Android app.

Not because I wanted to “expand the platform ecosystem” like some venture-capital-powered startup founder in a black turtleneck.

No.

I simply wanted to listen to my own music while outside.

A shocking concept in 2026, I know.

And honestly? This was the moment Needle started feeling less like a side project and more like an actual platform.

Suddenly, I could:

  • browse my own music library from anywhere

  • continue playback from another device

  • access my carefully curated metadata

  • enjoy the same familiar UI concepts from the desktop app

  • stream music directly from my own infrastructure

Without monthly subscriptions.
Without ads.
Without algorithms aggressively trying to convince me I secretly want to listen to “Lo-fi Viking Jazz for Studying.”

Just my music.
My library.
My mess.

Exactly how I wanted it.

Now, one thing worth mentioning here:

The Android app is not some glorified web wrapper awkwardly pretending to be a native application.

It is a proper Android app built in Android Studio using Kotlin and Java.

And yes — I had help.

A lot of help, actually.

Claude and GPT-5.4 became heavily involved throughout the process and, honestly, I think it would be silly to pretend otherwise.

Without modern AI tooling, Needle would probably still be:

“that desktop app I occasionally work on whenever motivation, caffeine, and planetary alignment happen to cooperate.”

Instead, the project suddenly accelerated into something much bigger.

Not because AI magically “built the app for me.” That narrative falls apart the moment you try building anything remotely complex.

The architecture, backend, UI consistency, debugging, deployment, design decisions, playback logic, infrastructure, and overall direction still had to come from somewhere.

But what AI did dramatically reduce was the friction.

The endless:

  • boilerplate

  • platform-specific quirks

  • documentation archaeology

  • repetitive debugging

  • “why does Android require seventeen sacred configuration rituals just to play audio correctly”

…kind of work.

And that changes everything.

Because suddenly a single developer with a mildly unhealthy music obsession can realistically build:

  • a desktop app

  • a backend

  • a web player

  • an Android app

  • and now an iOS app

…without disappearing into a cave for the next five years.

The funny part is that once the backend architecture already existed, the Android app itself came together surprisingly quickly.

At that point it mostly became a matter of:

  • adapting the UI

  • dealing with mobile playback quirks

  • handling connectivity properly

  • making the app feel at home on a phone instead of like a cramped desktop interface squeezed into a tiny screen

Which, admittedly, is harder than it sounds.

There is something deeply humbling about mobile UI design.

On desktop, you feel powerful.
You have space.
You have hover states.
You have sidebars.
You have freedom.

On mobile?

You are fighting for survival against approximately eleven available pixels and a keyboard that appears whenever it feels emotionally ready.

Still, after enough tweaking, resizing, rearranging, and occasional muttering at Android Studio, things finally started clicking into place.

And then came the dangerous moment.

The “holy crap” moment.

I was outside, opened Needle on my phone, hit play, and suddenly realised:

Holy crap, this actually works.

Not “works for a hobby project.”
Not “works if you ignore three broken buttons and restart it twice.”

No.

Properly works.

And that is an incredibly satisfying feeling when the entire ecosystem was built piece by piece from absolutely nothing.

Of course, now that the Android app exists, there is an unavoidable problem looming on the horizon.

The iPhone.

Because apparently I enjoy suffering and have decided that one platform-specific headache per month is simply not enough.

So yes.

Part 9 begins now:
Building an iOS Needle Player.

Pray for me.