Implement a single abstract viewer + log viewer component