web interface powered by Flask