demo app from Hartl, ch. 2