sample app from chapter 3 Michael Hartl