Follow Dragon draws Earth as a Three.js globe and puts the current position and orbital track of Dragon and the ISS onto it. The position feed is proxied through the server, so the browser never talks to the upstream source directly.
One scene: a textured globe, a camera you can move, and the spacecraft where it actually is. The orbital trail is drawn with a custom vertex and fragment shader pair so the line can fade along its own length — a per-vertex alpha attribute carried through to the fragment stage, which is not something the stock line material gives you.
A loading screen reports real progress rather than spinning, because the Earth textures are large enough that a blank canvas would read as a broken page.
The position data comes from an upstream endpoint, and the browser never calls it. The server fetches it, and the response is passed through as JSON from this origin.
That keeps the upstream host out of the page source, avoids a cross-origin request the browser would have to be granted, and gives one place to fail gracefully — a transport error becomes a 500 from this application rather than an unhandled rejection in the render loop. The same availability flag used elsewhere can take the page offline with a structured message instead of a broken globe.