Case study for chapter 6 of Web Programming Step-by-Step