Hey everyone, author here.
My experience is that customers will always want more features than they initially ask for. That's why I make sure to tell them my hourly rate, then give them an estimate. For example, I can say $5000 for a 1 month project. Here I'll break down the average time I will work a week as a courtesy.
This helps me justify charging them again when we are at month 3 and the project is not done. I learned this the hard way, charging a flat fee and continue to work long after I had spent all my earnings.