HTML 5 Canvas, RxJS, and a custom "Spoke-Graph" algorythm.