This is my first program in several years, so I'm eager for feedback. If you have comments, please include them on the Hacker News thread - I'll read every one. Seriously :).
There are two steps: calculate time & distance, then determine rates using rate tables.
1) Calculate time & distance - I used Google Maps API because it calculates both and didn't require end user to download any apps. I've observed that Google Map's time estimates tend to be a little bullish, so I may add a drag factor.
2) Determine rates - I used San Francisco's UberX, Lyft, and Taxi rate tables to calculate cost. UberX & Lyft surge pricing was done with simple multiplier off entire fare. I'm confident this is how Lyft's works, but unclear yet whether UberX multiplier applies to entire fare or not.
I also added an extra feature - auto population of your current location. I'm amazed this is built into HTML5 - my how far we've come :). Google Maps then provides reverse address lookup based on HTML longitude/laditude.
Next features - I want to build in a feedback mechanism to increase the accuracy of estimates. Adding more cities would also be obvious improvement. But, ultimately depends on how much response this gets!