For the most part I don't do estimates at any level of granularity with clients anymore, instead favoring establishing a budget and then simply working from a prioritized list and doing the best I can with the allotted time.
Working in the smallest possible cycles helps ensure that any failure doesn't create too many headaches, and gives us plenty of room to change directions if something seems to be taking too long or isn't a good bet.
That said, there is a really good article from a few years ago about software estimation from Dropbox which you may find useful:
This is a really good alternative for clients who don't want to pay per-hour. Fixed budget but flexible feature list.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.