switched to iframe implementation to allow backend to be hosted separately