Product · Founder · Design + Build
AI-powered parental controls for Spotify that filter harmful lyrics without breaking the music. I founded, designed, and built it — a dual-persona product that has to serve a parent who wants oversight and a teen who wants autonomy, inside one streaming experience, without either feeling surveilled or restricted.
Streaming platforms hand parents a blunt instrument: an "Explicit Content" toggle that's all-or-nothing. Flip it on and entire songs disappear — frustrating teens who just want to listen to the same hits as their friends. Flip it off and there's no oversight at all. CleanBeats exists in the gap between those two switches: intelligent filtering that protects without restricting.
I designed and built it around two personas with directly opposing goals. The parent wants to set boundaries and trust they hold. The teen wants to own their player and not feel policed. The hard part isn't the lyric analysis — it's making one product honor both at once, so neither persona feels like the other one won.
The existing "explicit" flag is binary, and that's the whole problem. A single profanity gets a song treated the same as a track soaked in violence or substance references. Parents end up either over-blocking — and fighting their kids over it — or giving up and allowing everything. There's no middle, and the middle is where real families live.
Three tensions defined the work:
CleanBeats analyzes song lyrics and classifies them by content category — profanity, violence, substance use, mature themes — and by severity, from mild to severe. Crucially it's context-aware rather than a keyword blocklist, which is what keeps a passing mention from being treated like a chorus built around it. Parents set their comfort thresholds per category once, and the system filters or allows accordingly.
That single classification engine drives two deliberately different surfaces:
Parent
Sets comfort thresholds per category, once.
AI lyric classifier
Reads lyrics by category & severity — context-aware, not a keyword blocklist.
Teen
Just sees a normal Spotify — filtered tracks never surface.
The design philosophy came straight out of the dual-persona tension. The same backend had to power two experiences that should feel like they were built for completely different people — because they were.
It works as a layer on top of Spotify rather than a new app to learn. A Spotify OAuth connection handles playlist access, playback, and library management; when a song is filtered, CleanBeats can suggest clean versions or similar tracks that still pass the parent's criteria, so a block leads somewhere instead of dead-ending. On the build side it's Next.js 15 and React 19 on the App Router, with real-time state so the UI updates the instant content is filtered.
Building CleanBeats as a one-person team — concept, design, and code — meant every trade-off landed on my own desk. A few things stuck:
The lyric analysis was never the hard part. Making one product that a parent and a teen both feel was built for them — that's the design problem.
Next steps are dedicated mobile apps and expansion beyond Spotify to Apple Music and YouTube Music.