In-app error reporting, more graceful failures

will report error and re-render UI
will not infinite loop if UI rendering is what is failing