DiscAffinity
A music discovery platform that connected 45K monthly users through personalized recommendations, soulmate matching, and custom album rankings powered by Apache Mahout.
The Beginning (2008)
I started DiscAffinity in 2008 as a simple PHP site to track my music collection and share recommendations with friends. What began as a weekend project evolved into an 11-year journey that taught me everything about building, scaling, and eventually sunsetting a product people actually used.
The Evolution
The platform grew organically. Users wanted to find others with similar taste, so I built a “soulmates” feature that matched people based on their album ratings. They wanted to create custom rankings, so I added that. They wanted to discover new music, so I integrated Apache Mahout for machine learning recommendations.
By 2013, I had outgrown PHP and migrated the entire codebase to Grails. The rewrite was painful but necessary—it gave me the foundation to scale to 45,000 monthly users and 70,000 albums without the site falling apart.
What Made It Special
DiscAffinity wasn’t trying to compete with Last.fm or Spotify. It was a community of music enthusiasts who cared deeply about albums as complete works of art. Users spent hours crafting their rankings, writing reviews, and debating in forums. The soulmate matching created real friendships—I still hear from people who met through the site.
The machine learning recommendations were surprisingly good for 2013. Apache Mahout analyzed rating patterns across thousands of users to suggest albums you’d probably never find on your own. It wasn’t perfect, but it felt magical when it worked.
Technical Challenges
The PHP to Grails migration was the hardest thing I’d done at that point. Migrating 70,000 albums, millions of ratings, and thousands of users without losing data or breaking the site required months of careful planning and late nights.
Performance optimization became critical as the user base grew. I learned about database indexing, caching strategies, and query optimization the hard way—by watching the site slow to a crawl during peak hours.
SEO was crucial for discovery. I spent countless hours optimizing meta tags, sitemaps, and page load times. It paid off—DiscAffinity ranked #1 for many album-specific searches.
Why It Ended
By 2019, the music landscape had changed completely. Streaming services dominated, and the idea of meticulously rating albums felt quaint. User growth had plateaued, and maintaining the infrastructure for a declining user base didn’t make sense.
I shut it down gracefully, gave users time to export their data, and archived the site. It was bittersweet, but the right decision.
What I Learned
Start simple, evolve based on real usage. Every feature in DiscAffinity came from actual user needs, not my assumptions about what they wanted.
Technical debt is real. The PHP to Grails migration taught me that sometimes you need to rebuild from scratch, even if it’s painful.
Community matters more than features. The soulmate matching and forums created connections that kept people coming back more than any algorithm could.
Know when to let go. Sunsetting DiscAffinity was hard, but clinging to a declining product would have been worse.
Explore archived versions on the Internet Archive.
Project Gallery

Key Metrics
Monthly Active Users
45K
Albums in Database
70K
Active Period
2008-2019
Technology Stack
Archived Project
This project is no longer active, but you can explore archived versions via the Internet Archive.
View on Web Archive