Wavelength
A version-control system for music producers. Two years of nights, four hundred paying users at peak, and one licensing wall I couldn't talk around.
- Year
- 2023
- Duration
- 2021 — 2023
- Role
- Founder · FE
- Client
- Independent
- Stack
- SvelteKit · Rust · Postgres
- Status
- archived
Producers don't commit. They save thirty-two copies of a project file with names like final_v7_mastered_REAL.logicx and trust that one of them is the right one.
I spent the back half of 2020 watching a friend try to recover a mix she'd worked on for six months. Her hard drive hadn't died — it had just gotten messy in a way Logic Pro had no way to help her clean up. There was no diff. No log. No "what changed between Tuesday and Friday." Producers had been living through the same software dark age engineers escaped in 2008.
Wavelength was the answer to a smaller question: what if you could see a song the way you can see a codebase? Not literally — a waveform is not a source file — but the same shape of question. What changed. When. By whom. And could I go back to before.
The hard part isn't the UI. The hard part is the binary diff. A Logic project is not a text file — it's a directory of opaque proprietary blobs, signed plugin chains, sample references, and a master XML that changes every time you so much as click on a track. Diffing two project files naively gives you "everything is different" every time.
I spent six months in Rust writing a structural differ that understood the shape of a Logic project well enough to say "you added a reverb to bus 3 and moved the snare back four ticks" instead of "9.4 MB changed." It worked. It was the best code I've written. It was also, eventually, the thing that ended the project.
The product had a small but real economy attached to it. Forty-eight dollars a year. Four hundred paying users at peak. Word of mouth among producers good enough that I never paid for an ad. The technical answer was right. The business answer was someone else's.
Logic Pro plugins are signed. They have to be — Apple has to know the audio coming out of your machine isn't a vector for someone else's code. The signature is per-machine, per-install, per-version. When I diffed a project file and tried to reconstitute it on another machine, the plugin chain didn't survive the trip.
There were workarounds. None of them were clean. I spent four months trying to get a conversation with Apple's pro-apps licensing team. I got two replies, both polite, both versions of we don't do that. Apple's position was reasonable; they didn't owe me a partnership. Mine was that the product I was building couldn't exist at full size without one. Both could be true.
I shipped what I could ship. Single-machine version history worked beautifully. Cross-machine collaboration — the actual product — was a partial story. Users were generous, but every support ticket eventually became some variation of "why won't my plugin show up on the other person's machine," and the honest answer was always "because Apple won't let it."
I wound Wavelength down in March 2023. Four hundred users got a refund and a tarball of their project history. The Rust differ is on a private GitHub I look at twice a year. The marketing site is still up because I haven't had the heart to take it down.
I learned more in those two years than in any job I've had. I learned that the technical answer is the easy part. I learned that good code is not a business. I learned how to write a refund email that doesn't sound like a defeat. The part I'm proudest of is the wind-down — it was clean, it was honest, and the users I still hear from say they understand.