The Ski Area Explorer puts every ski area in Canada on the winter style over 3D terrain. Search by name, filter by province or territory and by downhill or nordic, and pick an area: the camera flies to it and tilts onto its terrain, and the panel shows its vertical, top and base, runs, lifts, which way its runs face and the drive time from the nearest city. Turn on 3D lifts and the area's lift cables are drawn on the terrain at their real heights. It runs at apps.unmap.dev/winter, and its source is a standalone Next.js project you can clone and run with your own key.
The data is from OpenStreetMap, served by the Ski add-on under the Open Database Licence, and the panel credits it wherever it is on screen. It is terrain information only, not avalanche or safety advice: there is no live lift, run or grooming status. Check the area's own conditions and the avalanche forecast before you go.
What it does
- All of Canada in 3D: the
winterstyle on 3D terrain, with theskioverlay of runs and lifts. - Search and filter: by name (accents and case ignored), by province or territory, and by downhill or nordic.
- Area page: vertical, top and base, run count and downhill and nordic kilometres, lift count, an eight-direction aspect readout, the drive time from the nearest city of 100,000 or more, and the area's websites.
- 3D lifts: the header's switch draws the picked area's lift cables with deck.gl, in the map's own WebGL context, at heights baked from the same terrain release the map draws. deck.gl is downloaded only when you turn it on.
- Share: the link holds the area and the switch, such as
?area=sunshine-village&lifts=3d, and?lang=frfor French.
What it costs in API calls
Loading the app calls /ski/areas once, and each filter change calls it again (the search waits for a pause in typing). Picking an area makes no call: the list already holds it. With 3D lifts on, each area you pick calls /ski/areas/{id}/lifts-3d once. The map's own style, tile and terrain requests are counted like any map's.
The key it needs
A browser key with the Ski add-on. Without it the app still draws the winter map in 3D, and the panel says why the ski areas are missing and links the pricing. On the dev plan the add-on works from localhost and preview origins.
Built from the registry, unmodified
The whole page is the ski-resort-explorer block, with the map item under it, copied in unmodified; the app adds the header, the 3D lifts switch and the link. Installing the same block into your project is one command:
npx @unmap/cli add ski-resort-explorerWhat it does not do
- Live status: lifts, runs and grooming are as mapped, not as they are today.
- Safety: no avalanche danger, ATES rating or route advice of any kind.
- 3D lift models: the lifts are drawn as cables, without pylons or chairs.
- Outside Canada: only Canadian ski areas are in the data.
Run it yourself
You need Git, Node.js 24, pnpm and a browser key with the Ski add-on from the dashboard that allows http://localhost:3209.
git clone --depth 1 https://github.com/unmap-dev/winter.git
cd winter
pnpm install --frozen-lockfile
cp .env.example .env.localSet NEXT_PUBLIC_UNMAP_KEY in .env.local to your key, run pnpm dev, and open localhost:3209. The Ski areas reference covers the API, the overlay and the 3D lift files, and the Maps API reference covers the basemaps and terrain.