compartmentalize chat into ChatView component, use property for assigning

and fix some layout stuff in it.