Viewer as web app implementation