Music Streaming

Beato

A self-hosted music streaming app for the albums I actually own. Mobile-first, background playback, no subscription required.

TypeScriptReact

Why I Built This

I’ve been collecting music for years — buying CDs of artists I love, hunting for indie releases, building a library of albums I genuinely paid for and care about. Once I ripped them into digital files, though, there was nowhere good to play them. No beautiful interface, no streaming experience — just a file browser and a media player.

I tried Plex. It worked, but it was built for video. The music side always felt like an afterthought — bloated, slow, and clearly not where the team’s focus was. Worse, the mobile web didn’t work, and the app was paid. I just wanted to play my own music on my own phone without paying someone else for the privilege.

So I built Beato.

What Beato Does

It’s a self-hosted music streaming server designed around one idea: play what you own, beautifully.

I designed playlists, a most-played ranking that surfaces the songs I keep coming back to — because I’m the type who listens to favorites on repeat, not someone who chases new releases. I added an equalizer because every pair of headphones sounds different, and a visualizer because I wanted to see the music, not just hear it.

The whole thing is mobile-first. I designed the web interface as a responsive app, then wrapped it in a Flutter-based WebView to get a native feel with background playback. No app store subscription, no paywall — just my music, always available.

What I Learned

Building an audio player taught me things that tutorials never cover. Gapless playback, audio buffering strategies, how EQ filters actually work at the Web Audio API level. Every “simple” feature turned out to have layers of complexity underneath.

But the bigger lesson was about scope. I didn’t need to compete with Spotify. I needed something that plays the 200+ albums I’ve collected over the years the way I want. That constraint — building for exactly one user — kept the project focused and shippable.

Still Playing

Beato runs on my home server right now, streaming the same albums I’ve been collecting for years. It’s not trying to be Spotify — it’s just the best way I know to listen to music I actually own.