PowFinder was born from my frustration with existing ski weather forecasting tools. Previously, planning a ski tour required manually cross-referencing multiple weather variables: snowfall but also over the intevening days, temperature, wind, cloud cover. I wanted a single intuitive visualization that combined all these factors into one glanceable map. And while SQH finds powder the attenuation from skiability makes it very clear - the pink splotches are where powder & sun are to be found together.
Initially, I built a fully client-side prototype that ran a detailed snowpack model directly in JavaScript. While the snowpack physics and modeling logic were robust, the client-side approach was slow, ugly, and impractical. I kept the snowpack physics and rebuilt the pipeline properly as a Python-based backend, which now runs efficiently on my laptop. The entire pipeline—fetching data, interpolating, running snowpack physics, generating visualizations, and compressing outputs—completes in under an hour for the entire Tirol region. The compressed outputs are then uploaded directly to AWS S3 for hosting.
The pipeline consists of these main steps:
Every three hours, I fetch weather data from the Open-Meteo API, which provides point-based forecasts across Tirol. Variables include:
I interpolate each weather variable from sparse API points onto a 100m resolution grid covering Tirol using inverse-distance weighting (IDW) interpolation. Specifically:
To efficiently interpolate weather data from sparse API points onto my 100m-resolution grid, I build a K-D tree spatial index of all API points. For each grid cell, I query the nearest neighbors using the K-D tree and perform inverse-distance weighting interpolation. Elevation adjustments (lapse rates, orographic enhancements) are applied after interpolation.
The snowpack model integrates snowfall, temperature, radiation, and wind over time, creating a four-dimensional snowpack state (3D spatial + time). At each timestep, the previous snowpack state is updated:
This approach closely resembles a simplified 1D snowpack model applied spatially across Tirol, providing realistic powder evolution.
These layers are computationally expensive but rarely change, so they're precomputed and cached.
The Snow Quality Heatmap (SQH) combines snow depth (opacity) and snow quality (color):
The Skiability index further attenuates SQH based on real-time weather conditions (wind, visibility, precipitation):
This intuitive visualization simplifies ski trip planning dramatically.
When a user clicks the map:
Currently, interpolation uses physics-based extrapolation methods. In the future, I plan to train a neural network to predict real-world station data from Open-Meteo inputs. This neural network will: