Contact page has working data model.

Closes #27, #15, #17, #19, #21