separated web app and node input functions