RE:play
Apple Music kept opening when all I wanted was to hear a file. So I built a music player that just plays it, for Mac and Windows, and then built everything a company wraps around a product.
- Runs on
- macOS, Windows
- Costs
- Nothing. No account, no ads.
- First build
- Four hours to v1.0
- Built with
- Swift and SwiftUI; WPF on .NET 8
I have a love/hate relationship with Apple.
I love their computers, their aesthetic, the thoughtfulness in the design, the breadth of the ecosystem. But that ecosystem has real downsides, and one of them is Apple's need to ship mediocre apps just to say they have apps.
The bane of my existence is Apple Music. It's completely unnecessary, and quite frankly it seems to exist solely as a funnel into their subscription service.
I listen to a lot of music as part of my creative process. Sometimes it's a quick spot check of a mixdown, sometimes I'm just confirming sound quality. I need to click a file and have it open, fast. That does not happen out of the box on a stock MacBook Pro. Instead the computer loads this monstrosity of a program, which immediately asks if I want to sign into Apple Music.
No. I just want to listen to the damn song I clicked on.
What's worse, the app doesn't even bother to load the song. I have to drag and drop the file in manually once Apple Music is finally up.
Now, I could go find some free player out there, but most of them are bloated with visualizers and EQs and a hundred other features I don't want. I just want an app that loads fast and plays music.
If you don't like the software, make your own.
So I added it to my long list of projects, sat down, and put together RE:play, a simple music player that runs on Mac and Windows.
The hour before the four hours
Here's the part people leave out when they tell this kind of story, and it's the part that actually matters.
I didn't sit down and start typing. When I start a project with Claude, I open the app on my phone, get on the treadmill, and talk to it. Sometimes for forty-five minutes, sometimes for an hour. And I don't ask it to help me. I tell it to act as a skeptical business partner. Challenge my design choices. Ask whether there's even a market for this. Tell me why it fails. Suggest changes to the plan that derail us.
For RE:play, it pushed back hard. It genuinely did not understand why I would build this. VLC exists. IINA exists. The market is saturated, the competition is free, and nobody is waiting for another media player.
All of which is true, and none of which was the point.
Part of it was that I wanted to be able to say I produced a real tool and handed it to the world with a pretty bow on it. Free, no account, no catch. Part of it was practice. I want to keep getting better at taking an idea out of my head and getting it built.
It's the same feeling I get when I design something in 3D and then print it. A dopamine rush. Voila, now there's a thing that exists that didn't before, and it's free, and I like it, so I'm hoping other people like it too.
So I walked, and it argued, and by the end of the walk the argument had turned into a plan.
Four hours
Then I sat down at the keyboard, in the same chat I'd just been talking into, and started the build. The plan from the treadmill became the first thing in the repo. Once it was in there, I dropped into Claude CLI and coached it through the actual implementation. Version 1.0 shipped the next morning.
And then it didn't stop
The initial working player took a few hours. I kept iterating for weeks after that.
What I added wasn't player features. It was everything a company wraps around a product. A marketing site at replay.cyburdine.com, with a hero animation built in Remotion. A feedback form fronted by Cloudflare Turnstile, and a Worker behind it. An auto-updater that checks GitHub releases on launch, so the app notifies users when there's a new version. A file-type associations pane, so you can actually make it your default player. And a basic audio visualizer.
That's a go-to-market department. For a free media player nobody asked for.
I did it because that's all part of the learning. I want to keep building products and companies, and I want to do all the parts myself. I once heard someone say that AI could let one person build the first single-employee billion-dollar company, and that has stuck with me ever since.
The loop
Somewhere in there, how I work changed.
I stopped typing what I wanted into the Claude window. Now every change gets written up as an issue first. Enhancements as I think of them, bugs as they surface. That way I don't forget them, and I can capture the thought without derailing whatever I'm in the middle of.
When I start a new session, I have Claude read through all the open issues, figure out which ones are highest priority, and see whether any of them group together. Then we pick whichever one it considers the biggest or quickest win. It does the work, writes up what it changed, closes the issue. Repeat, as I have time and attention to give. The plans themselves live in Kaku, my own notation system, instead of scattered markdown files.
Which quietly closed a loop I didn't design on purpose.
A stranger fills out the feedback form on the site. Turnstile clears them. The Worker files it as a GitHub issue and pings me in Slack. That issue lands in the same queue Claude triages at the start of the next session. The fix goes out as a release. And the app's own updater offers that release back to the stranger, silently, the next time they open it.
- Feedback formA stranger writes in from the site
- TurnstileClears them as human
- WorkerFiles a GitHub issue, pings Slack
- Issue queueClaude triages it next session
- ReleaseThe fix ships
- UpdaterOffers it back on their next launch
Someone's complaint can round-trip all the way back to their machine, and I never touch a support inbox.
Windows
Then in August I built the Windows version.
Not a port. Swift, SwiftUI, AppKit and AVFoundation have no Windows equivalent, so there was nothing to port. Every layer got re-implemented on whatever was closest and most native on that side. WPF on .NET 8 for the UI, a different playback engine, a different visualizer, a different persistence layer, a different file-association model, and an NSIS installer.
The installer is about 300 KB, because it carries no payload at all. It asks the GitHub Releases API for the newest release and downloads it. Publish a new release and every copy of that installer already out in the world picks it up without being rebuilt.
I do have a Windows machine, and that's where it was built and tested, because I wasn't going to ship something I'd never watched run. But the language, the framework, the installer ecosystem, the whole stack? None of that was knowledge I had.
That's the part I'd point at if you asked me what's actually different now.
Why not me
None of this was ever intended to be a business. But the reason I keep doing all the parts myself, the design, the site, the installer, the support loop, the port, is to learn, to iterate, and to refine the production workflow of a company. I'm genuinely curious how much a single person with AI can accomplish.
I keep coming back to that line about the single-employee billion-dollar company.
And I have to ask myself: why not me?
Get RE:play
Free for macOS and Windows. No account, no ads, no store.
replay.cyburdine.com