Moved the "wantsJSON" detection out to the site-wide data middleware.
Enabled "trust proxy", since the site is running behind nginx
Added site.js to the watch config
Wrote the vote handling code for the server side.
Refactored some code duplication with populating soundcloud data.
Session handling refactored into standalone middleware.
Rewrote graceful shutdown so that modules can listen for when the server is done and hook in to indicate their shutdown completion.
comments
Refactored main route to use new localsResolver middleware.
New custom error handler
Mongoose' query.exec return a promise, I can ditch all this wrapper cruft.
Added stringification to the logger and created a callback creator for save actions that we don't need to wait for.
Whoops
Addressing things pointed out by linter.
Upgrading to express 4.
Totally new vote system approach.

Every site visitor is now assigned a visitor id cookie when they load the main page. Without that cookie, visitor votes are denied. Visitor id is tied to a trust record, new ids are untrusted until user has voted on multiple tracks after 12 hours.

If the same IP keeps getting new untrusted visitors, those visitors votes become vestigial and stop effecting ranking.
Adding vote UI to track list
Added voting to track list and songbar.