completed app v1. TODO: organize files, add an integration spec?