viewer: add exercise submission handling