My favorite time on skis or a snowboard is when there is fresh powder. At the resort, some of the deepest snow can be found when runs open at the beginning of the season.

Unfortunately, lift and trail openings are rarely announced in advance. Ski patrol works hard to avoid avalanche danger — often judging openings on the spot. How is a powder hound to know when their favorite tree run just opened?

With lift and trail status updates to their phone, of course!

Copper’s new Three Bear’s Lift is open!

Turns out, most trail status pages are powered by a simple JSON document! I wrote a quick tool named FreshPow to send Slack alerts when a lift or trail changes status — read on for details.

How It Works

When you visit a typical ski resort’s status page, your browser requests lift and trail info from the server. Javascript on the browser renders the JSON data in an attractive way for you to see. If you wanted to, you could sit at your browser and reload the status page every five minutes to check when your favorite run opens.

The FreshPow tool does the same thing — it checks the status data for changes every five minutes. When it notices a change, it fires off a Slack alert. Here’s what the raw data for a single trail looks like:

Pinball is closed, but it will hold deep powder when it opens!

You can download FreshPow for Windows, Linux, macOS, and RaspberryPi from the Github page. Run it from the command line to check things out:

./freshpow --debug Vail

You’ll need to set the SLACK_WEBHOOK and SLACK_CHANNEL environment variables to enable notifications. I chose Slack, but it’d also be easy to add support for other channels like email or text messages.

As a Colorado skier, I focused on support for local resorts, but there’s no reason we couldn’t add other areas:

$ ./freshpow -l
Supported resort names: Eldora, Steamboat, Keystone, CrestedButte, Copper, Snowshoe, Blue, Breckenridge, BeaverCreek, Dev, Stratton, Tremblant, WinterPark, Vail

A Historical Perspective

While we’re at it, why not track this data over time? It’s fun to look back as trails and lifts open over the season. And by incorporating weather and snow data, you can pick out interesting trends.

Here are a few shots of my Copper Mountain dashboard:

To achieve this, I pull the same JSON data into a Prometheus server and user Grafana for visualization. It’s fine to use a phone or web browser to check your ski status dashboard, but even better to display it for everyone to see. Ours is next to the breakfast table, where we can figure out what layers, wax, and skis/boards to ride for the day.

An old iPad is probably the best option for displaying the results. I used a Raspberry Pi 4, 7-inch touch display, and SmartiCase as a slick, low-cost alternative.

If you put FreshPow to work for you, I’d love to hear about it — get in touch below!

If you need other resorts or notification methods added, please open an issue! Pull requests with improvements and new features are also very welcome!!

I'm focused where software, infrastructure, and data meets security, operations, and performance. Follow or DM me on twitter at @nedmcclain.