node-based terminal UI