DaRoms.com is my oldest personal project that is still alive. Launched back in 2007, the site has gone through a bunch of different design revisions, but has finally come full-circle. If you look at the first sketches of the initial DaRoms design, you'll see more than a few common elements that still exist today, down to the 768 pixel width content wrapper1.
I wrote about the history of DaRoms.com in another post, so I won't talk about it any further.
Fast, contextual search
A big design goal was to have an effective method to search search for exactly what a user wants. Searching without first picking a category will perform a site-wide search, sleuthing through the nearly 50,0002 ROMs available for download. Pick a category before performing a search and you'll only see results within that category. Easy right?
The search API actually powers the entire browsing experience throughout the site. Lexicographical sorting is performed by searching for a single character, A-Z, or for the what's hot term to return the most popular downloads.
Protected, friendly download links
The download links themselves are generated on the fly with a unique, per-result key that is passed to the download server for authentication before the download can commence. These links are time-sensitive, so they'll expire after a certain amount of time. This conquered the ongoing issue of hot-linking without the need for captchas or annoying countdown timers.
Two or three clicks is all it takes
Grabbing a popular game from within a category only takes two clicks. Useful information is provided to get the user headed in the correct direction for emulation and if they want to read up on the history of the original device.
Heavily caching search results means popular searches and category browsing are lightning-fast. Round-trip times are about 150ms, though content-heavy sections such as m in the MAME section can take about 1s just to get the data transferred.
Deferred resources make the DOM appear quickly with the stylesheet and jQuery loading soon after. Small animations are used while navigating between categories with the API calls often completing before the animations. This leads the user to believe the navigation is instantaneous.