← Work
Web Apps 2026

Sortify

Friends & Family

Parents and teachers shouldn't have to manually audit hundreds of songs to build a clean playlist. Sortify connects to Spotify, scans every track for explicit content and custom keyword matches, and automatically splits the playlist into clean and flagged versions — no manual review required.

Role
Lead Engineer
Timeline
2 weeks
Stack
Angular Node.js Express Spotify API Genius API LRCLIB Tailwind CSS
sortify

Overview

Sortify is a full-stack web app built for anyone who manages music for kids, classrooms, or family settings. Users authenticate with Spotify via PKCE OAuth, select a source playlist, configure a custom word filter, and let the app do the rest. It fetches lyrics from three separate providers — LRCLIB, Genius, and lyrics.ovh — with intelligent fuzzy matching and fallback logic to maximize coverage. Clean and flagged tracks are written directly back to the user’s Spotify account as two new playlists, with real-time progress shown throughout. To be clear, this wasn’t built for thousands of users. It’s a small, focused tool made to share with friends and family and it does that job well.

You can view the Sortify app here: sortifyit.com

Why it's notable

The hardest part wasn’t the UI — it was making lyrics lookup reliable at scale. A single playlist might require hundreds of API calls across three providers, and each provider has different rate limits, response formats, and match quality. Sortify normalizes artist names and track titles, scores candidate results, and waterfalls across providers only when needed. On the server, a serial Genius request queue prevents rate limit violations, and an in-memory cache avoids redundant lookups within a 24-hour window. The result is a scan that’s both fast and accurate without hammering external APIs.

Unique challenges

  • Lyrics attribution accuracy: Track names on Spotify rarely match exactly what a lyrics API expects — remixes, featured artists, live versions, and punctuation all break naive lookups. Sortify builds multiple normalized search variants per track and scores results by artist + title similarity before accepting a match.
  • Rate limiting across three providers: LRCLIB, Genius, and lyrics.ovh each have different throttling behavior. The server serializes Genius calls through a queue with a minimum interval, caps concurrent requests per IP, and short-circuits to cached misses so retries don’t compound the problem.
  • Censored lyrics detection: Profanity is often written as f*** or s--t in lyrics sources. Sortify preprocesses lyrics to decode common censorship patterns before running the filter, so masked words don’t slip through.
  • Single-server deployment: The app needed to run on Namecheap shared hosting with no Docker, no reverse proxy, and one Node.js app slot. A single Express server now serves both the API and the Angular build, with the production build wired to relative API paths so it works on any domain without configuration changes.