add the app generation function