project reimplemented using angularjs