hands on single page apps