We're talking about a $780 invoice. The invoice was generated before written contracts were completed because... it's a $780 invoice. The project was worth so little to the client and was so trivial to the vendor that it was able to commence with neither a full spec, nor a master agreement, nor a simple statement of work.
This isn't about "pick great clients"; it's about avoiding the rats nest of potential projects where there will always be a temptation to work under fly-by-night terms like this.
And once again, every time someone says "pick better clients", someone here has to come out of the woodwork to preach the gospel of the freelancer- who- makes- a- great- living- servicing- small- clients- and- we- can't- all- be- Patrick- Mckenzie. Well, with all due respect to my friend Patrick, but I have hung out with him many times and I can assure you he has not been bitten by any radioactive spider, at least so that I can perceive it. The guy built a bingo card generator --- a kind of Platonic minima for value derivable from software --- and parlayed it into his current business.
For cripes sake, you're on the same message board as he is; do what he did, get better clients. Stop complaining when people in very similar situations as you, or who started in very similar situations to you, tell you how to do better. Look at the advice you're getting: none of it involves kissing the ass of some financier at a VC firm. (1) Pick a specialization more narrow than "software development" so you're not competing on oDesk; (2) Segment your market so you can identify the most lucrative clients; (3) Tailor what you get good at to that market; (4) Be choosier; (5) Get paid. More.