Its a text based search and I'm working on some simple query expansion to resolve SF / Bay Area / San Francisco type queries as the same. There are still a few open questions for implementing proximity search ...
A simple approach is to just geocode all the locations to a lat/lon and do a proximity search using WGS84. If someone has a location entry in their profile that fails geocoding, put up a warning the next time they login telling them that their location was not resolved and they should update it.
Don't worry about queries like "SF" or "Bay area"... if it's not good enough for the geocoder to resolve the location, just return an error message.