Featured image of post Apogee - I Built A Desktop Radio Player for IPTV Streams

Apogee - I Built A Desktop Radio Player for IPTV Streams

Cross platform player

Introduction

I have Dispatcharr setup and it is amazing. Some sources I have come across have internet radio streams, including Sirius XM. I wanted an easy way to listen to this on my computer, and I wanted to know what was playing.

As a continuation of my earlier post on coding with AI tools, I am breaking down the full process to create this app, from concept to ongoing support.

Concept

I started by looking at existing radio web players by popular services and concepts I found online. What did I like about them, what didn’t I like.

I then drew sketches of what I wanted it to look like on my iPad. This is something I started doing on paper years ago for web design. Just a rough sketch of the general layout of what I’m making. Once I got an update they became digital and in color, but not any nicer looking.

Initial sketch done in the Concepts app using my iPad

I started talking about this on the Dispatcharr Discord and got in touch with @jstevenscl. He created https://stellartunerlog.com/ , an API for Sirius XM data including information, pictures, now playing info, and more. It’s exactly what I needed for this project. I worked with him and looked through the documentation for it to see what all I would want to use.

I have a rough idea of the layout of the app and I have a source for information. How do I make this data usable for Claude Code to actually build the app? Claude Design is perfect for this.

I explained what I was making, the style I wanted for the app, and explained the sketch I created. After some back and forth we had an entire design system for Claude and myself to work off of.

This app was initially going to be called Pulsar but was changed due to conflicts with related projects.

Colors and Fonts

The Playback Bar, the core of the app, everything exists around this

Layout of how navigation will work

Home Page and the channel cards concept

Initial App

At this point time to actually start coding. I grabbed the handoff prompt from Claude Design and gave it to Claude Code. I gave the prompt to Opus , and had it create a detailed plan file to create what we planned.

Then I cleared context and told Opus to read the plan file and design docs, then use sub agents to do each task one at a time. Using sub agents keeps context windows from overflowing.

Each task gets its own context window and the main agent has an overview of the entire project. The main agent knows exactly what to tell the sub agent for each step because it knows what was done and what needs to happen. Sub agents also let us save some costs by using cheaper models, because this is gonna be a lot of code.

The app is extremely close to the initial concept, but there are already a lot of areas can improve

Improvements

Taking a look at our initial build, things are progressing well. It looks just like our plans, and if conditions are perfect, it plays a steram. We can improve.

I added better stream handling so the app can recover from interuptions. The UI was tweaked and tuned so make things more readable and fix glitches. We also added a list view to channels so we can display now playing artist info.

The list view was a huge improvement to the app

Fixed logos and some more polish brought us to this: Yay working logos

If you noticed in the above screenshot, the app now has a logo! Claude Design also helped with that. In a new session I gave it the app’s colors and themeing/vibe I was looking for and it presented some concepts.

Once we finalized on one I downloaded it as SVG, and gave it to Claude Code. Since an SVG is a vector format, we can make a copy at any resolution.

Logo concepts, you can see the one I picked.

Features

Once I got the app working, I asked myself, what else can we do? So I started adding in my favorite features from other apps I’ve used in the past.

Music Visualizer

I have always thought music visualizers look so cool. I created a loopback device in the app to capture the audio from it and create a real visualizer that reacts to the actual audio.

Last.FM Scrobbling

Supports Now playing and Traditional Scrobbling

Alerts

You can follow Tracks and Artists, and get alerts in the app, and in your OS, when they are playing on any channel.

Alert System

Equalizer

10 Band EQ to adjust sound

Discord Integration

I wanted it to match the styles of other music apps that integrate with Disocrd so it doesn’t look out of place.

Discord User List

Discord User Profile

Final Notes

There are plenty more steps after this but I did not want this post to be too long. I might expand in the future.