This is a piece of software I wrote to allow someone to find passes of satellites based on more than one position. It allows a different minimum AoA for each point on the Earth, based on their terrain. Elevation above sea level is found through Google's API, but will always remain positive, to account for boats in the ocean.
Check it out here: ham.scd31.com
The server is nothing more than Nginx. The entire program runs on the client now, with cron jobs updating the databases used. At the heart of the software is the calcSatellite function, which is what actually determines viable satellites. It's terribly, terribly unoptimized. For each satellite, it advances by 30 seconds at a time, up to a week in the future. This will need to be rewritten soon, as it takes upwards of 5 seconds(!) to run. I intend to estimate how long in the future the satellite will pass by based on its current orbit and elevation, and then advance that far into the future.
This code is distrubuted under the GNU GPL v3 license. See the LICENSE.md file.