redoing bookapp, but following best practices