This is fairly simple - new code goes on branches, master is always deployable (when clean), and
deploy/productionalways contains whatever’s on production.
My book talks about bootstrapping new applications, and my recommendation is to set up continuous deployment. If you’ve ever worked on a release schedule, you’ll know that continuous deployment is a pure joy. It’s also a boon to the users, who get the features and fixes as fast as possible.