Approach
I built a music recommendation engine that’s source data is built solely from the personal and intentional recommendation of certain users I call ‘tastemakers’. They not only listen to music, but actively select a track to be included in the database. The engine randomly selects tracks from this curated database, weighted towards the music most recently added. This engine pulls in a spotify iFrame for convenience, but the website is not a listening platform. For discovering new music, it gives the user no input on the matter. They are presented with a track and they are forced to form their own opinion on it.
Process
I wanted to create a music recommendation engine that feels more akin to the ‘staff recommendations’ wall at a local record store than any infinite, algorithmically generated big-data, database.
For creating site, I decided to go with a client-side javascript (and jQuery) solution, as I figured many of the libraries for interacting with services would already exist, and a website makes an easy platform for an audience. Just go to a url, and listen to ‘good’ music. No barriers. After dealing with a lot of API dead-ends and, I ended up pulling music from a curated database through google spreadsheets, and the engine - which now requires human effort to keep updated - was born very quickly after this point. The design and development stage a breeze once I knew which tools I could easily work with. Almost all of the time spent was spent frustratedly trying to decipher various API documentation.
Outcome
I created a website that, on every page load, shows you a random artist from a curated database. View it at listentothis.hdyar.com. It is built with JQuery, Miso Project, and IFTTT. I used Skeleton as a framework for the html and the css.
The algorithm that re-assigns weight based on how recently the track was added has yet to be implemented, although it’s an easy process once I figure out the spreadsheet math. There are a lot of changes I would like to make, eventually removing the random component, so the weighting isn’t a high priority.
Next Steps
My next step is to remove the randomness feature, and just let the website work it’s way through the database (at a generated pace that roughly matches the pace music is being added), theming it feel like a record store’s staff wall of ‘check this music out’ in design and in function. This will force viewers to respect the recommendation, and not just refresh their way through a lot of artists, judging the music by it's album art.
I also would like to remove the ‘effort’ from maintaining the database, which would basically involve rewriting the whole thing - in effect, I made a statement about big data by avoiding big data, but I would like to pull automatically from tastemakers all over the country, then analyze what they are listening to. if I can figure out which users are tastemakers outside of my personal community and follow them (on spotify or last.fm, or music blogs, or wherever). The current implementation is ‘small data’, but I would like the data perhaps being a bit bigger. Not big data big, but a much larger selection of tastemakers.