Refactoring project from my blog post series.