Professional Portfolio Web Applications and Software I made for others

2008-2009: FriendShopper

ASP.Net 2.0, JavaScript, AJAX, Comet, Custom-made Chat Server, MySQL


FriendShopper is a social shopping site, allowing you to shop in real-time with your friends. It is essentially a web chat application, that lets you see several items in their original sites and discuss them with your friends.

Each participant in a chat session can see all the items shared in the chat, and which item each of his friends is looking at right now. The site has a tabbed interface to let users view several items at the same time. The site also has a bookmarklet that, when executed on any site, will extract the main image and title for the product being viewed and will add it to the site.

Everything is coordinated between the client and the server using a long-polling connection, to keep very low latency and make the site extremely responsive (this was in the times before WebSockets).

FriendShopper was present at the TechCrunch 50 Conference, in 2008, showing the site at the DemoPit.


  • Multi-threaded custom chat server written from scratch, including long-polling (ie, lots of simultaneous connections that stay open for a long time) non-blocking IO (connections not tied up to threads), and pretty complex logic for conversations. WebSockets were in their infancy when we made FriendShopper, so we had to roll our own solution, which scaled to thousands of concurrent users without breaking a sweat in a pretty lightweight server.
  • Over 20k lines of object-oriented JavaScript code to handle all the tabbed UI, messaging and chat.
  • Extensible messaging system for the chat server: This chat allows users to do much more than simply send text messages. There are over 20 different types of messages, and it's pretty easy to add new ones.
  • Cross-domain requests, to be able to separate chat servers from web servers, since long-polling implies chat servers will have a very special connection pattern (this was way before Cross-domain requests were a feature in HTML5).
  • Synchronization of all client state with the chat server. If the user navigates away from the site and then comes back, or if he refreshes the page, everything is reconstructed to look exactly as it was. The server always knows (in memory), all that's happening in the UI.
  • Very complex bookmarklet to grab product data from shopping sites and import it into FriendShopper.
  • Merchant panel giving extra features to merchants that participated in the site.

What the client said about my work

Josh Bochner CEO, Friend

"Working with Daniel has been the best out of 40+ development experiences. His ability to manage is impeccable. His insights into the technical aspects of the project are very deep, addressing issues ahead of time that may have been unforeseeable. And we have lots of fun brainstorming the creative vs. the analytical mind."

About the creation of

Back to Professional Portfolio