Skip to content
← Work
Slopie app icon

Slopie

Ski map and tracker · web live, iOS in development

Resort trail maps are beautiful but flat. Digital maps are accurate but look like every other map. Slopie draws ski areas the way a painted trail map does — with real terrain, forests and lifts underneath — and records your day on top of it.

slopie.app ↗
Map tab with a resort card and friends on the mountainRecording a run: elapsed time, runs and verticalA day at Uludağ: every run on the map with speed and distanceRecording in dark mode

Three directions, one map

Before committing to a layout I built the iOS app three ways, each as working SwiftUI screens running on the live Slopie map in the simulator, and compared them side by side. The question was simple: on a chairlift, with gloves on, what should be one tap away?

Direction "Map": seven iOS screens
Map. Search, resort card and friends live on a glass sheet over the map, the way Apple Maps does it.
Direction "Now recording": seven iOS screens
Now recording. Recording behaves like a mini player that follows you across tabs and expands into a full-screen view.
Direction "Training": seven iOS screens
Training. A large record button and big numbers on glass, closer to a fitness app than a map.

A map that had to be fixed first

OpenStreetMap has most of the world's pistes, but often drawn loosely. I wrote a correction step that snaps each piste to aggregated activity data, which raised its overlap with hand-drawn reference maps from an IoU of 0.35 to 0.79 on a 19-resort benchmark.

Every layer — terrain, contours, snow, forests, buildings, lifts — is served from Slopie's own Cloudflare Worker, and buildings, trees and lifts are generated in 3D in the browser. 4,116 resorts are covered, 1,814 of them with hand-checked resort logos, in seven languages.

Medal explorations: summit, lift, skis, night skiing, world and snow badges
Medal studies for the iOS app: resort summits, lift types, night skiing, countries, weather.

On the phone

The tracker is native SwiftUI: HealthKit workouts, automatic lift-ride detection, barometric altitude, a Watch app that shares the phone's workout, and friends on the map. Builds go to testers through an automated TestFlight pipeline.

Days list: a season of ski daysProfile with season totals, medals and friends

Built with

SwiftUI, HealthKit, Next.js, MapLibre GL, PMTiles, Three.js, Cloudflare Workers and R2, Python for the data pipeline.