simple user input, event handle, feedback, and state save/load