added a reload button, error messages, and loading spinner