add tests, client, and consolidate app into one file