I'm not a programmer. I run a YouTube channel about electronic music (634K subs) and I DJ psytrance.
I built a web app that solves a real problem I kept running into. Here's what happened.
The Problem
Every DJ using Rekordbox (in my case) knows this: you can sort playlists by key OR by BPM, but not both.
And the key sort is alphabetical - A, Ab, Am, B — which has nothing to do with harmonic compatibility. Pioneer's own forum has a feature request for this sitting there for years.
With 20 tracks, there are 2.4 quintillion possible orderings. No one's doing that by hand.
What I Built
HarmonySet — upload your Rekordbox playlist (.txt), get the mathematically optimal track order for harmonic mixing and energy flow (Serato and Traktor coming soon).
The algorithm:
- Calculates harmonic distance between every track pair using the circle of fifths
- Solves it as a Traveling Salesman Problem (Held-Karp DP for ≤20 tracks, greedy + 2-opt for larger)
- Three energy modes: Ramp Up, Ramp Down, Wave Runs client-side — files never leave your browser
The Stack
- Next.js 16, TypeScript, Tailwind
- Supabase for auth and saved playlists
- Vercel for hosting
- Monthly cost: $0
How It Got Built (Without Me Coding)
I used Claude Code as my development tool. Not autocomplete — the actual developer. I described what I wanted, reviewed output, tested, iterated.
Phase 1: Python prototype on Streamlit. Ugly. Proved the algorithm worked.
Phase 2: Full rewrite in TypeScript/Next.js. Proper UI, accounts, freemium tiers.
Phase 3: SEO. The site was live for a month and completely invisible to Google — no robots.txt, no sitemap, the 404 page was injecting noindex on every unmatched URL. Fixed all of it in one session.
Numbers
- 99 tests passing (didn't write any of them)
- Optimization runs in under 1 second
- 0 files sent to any server
- 512 Google impressions in the first week of indexing
- ~7,300 words of guide content for DJs
- Running cost: $0/month
Mistakes I Made
Fell into the vibe coding aesthetic trap. My first version looked like every other AI-generated landing page — purple gradients, radial glows, generic SaaS template energy. I didn't realize how much that was killing credibility until I saw a viral post about how "vibe coding floods the web with purple AI sites." DJs would take one look and bounce. I had to scrap the design and rebuild it to look like an actual pro-audio tool, not an AI demo. Lesson: if your site looks like AI made it, your target users won't trust it — especially in a niche like DJ software where aesthetics signal legitimacy.
Underestimated parsing. The algorithm was maybe 20% of the work. Making the tool handle every weird Rekordbox export format — UTF-16LE encoding, tab delimiters, five different key notation systems — that's where most of the debugging went.
Started with the wrong tool for the job. The first version was a basic Python script I built with Gemini. It worked, but out of curiosity, I brought it to Claude Code to see if it could improve the algorithm. It rebuilt the whole thing from scratch in TypeScript — better architecture, better optimization, proper test coverage. And the differences were dramatic.
What I Learned
- AI tools don't replace understanding. I can't write TypeScript, but I know the architecture. When something broke, I described the problem accurately because I understood what the code was supposed to do.
- Domain expertise is your moat. I knew harmonic mixing was a real pain point because I live it. That same expertise told me the purple gradient design was wrong — no real DJ tool looks like that. You can't prompt your way into either insight.
- A non-programmer can ship a real product in 2026. Not a toy. 99 tests, structured data, SEO, auth, database. The bar for "you need to be a developer" has moved.
Try It
harmonyset.com — upload a playlist, see what happens. If you use Rekordbox specifically, there's a step-by-step guide for exporting and optimizing.
Code is on GitHub.
Two things I'd like feedback on:
If you're a DJ, do the energy modes feel right for your sets?
If you're a builder using AI tools, what is it that you found that needs to improve?
Top comments (0)