finished demo app - chapter 2