implement shell of UI flow