2026 · Personal In progress · Early

West Highland Way Tracker

An app for walking the West Highland Way, starting with a sandbox that gets the route maths right.

Year
2026
For
Personal
Status
In progress · Early
Stack
  • JavaScript
  • MapLibre GL JS
  • Turf.js
  • PMTiles

The idea is an app for walking the West Highland Way: where you are on the trail, how far you’ve got to go, and a plan for each day between Milngavie and Fort William.

Before building any real UI, I’m getting the hard part right first: the geometry. So it’s starting life as a sandbox.

Here’s a simplified version of the sandbox running in your browser. It uses the real route and stops, with a static map in place of the map library:

Milngavie Drymen Balmaha Rowardennan Inversnaid Beinglas Crianlarich Tyndrum Bridge of Orchy Inveroran Kingshouse Kinlochleven Fort William

Map data © OpenStreetMap contributors · Protomaps

Where am I?

Click or drag on the map
Along the route
0.0 km
Remaining
152.3 km
Next stop
Drymen, 19.3 km
Nearest stop
Milngavie

Plan your days

8 days · 152.3 km
  1. Day 1 Milngavie → Drymen 19.3 km moderate
  2. Day 2 Drymen → Rowardennan 23.3 km tough
  3. Day 3 Rowardennan → Beinglas 17.5 km moderate
  4. Day 4 Beinglas → Tyndrum 24.0 km tough
  5. Day 5 Tyndrum → Bridge of Orchy 11.8 km easy
  6. Day 6 Bridge of Orchy → Kingshouse 19.7 km moderate
  7. Day 7 Kingshouse → Kinlochleven 12.0 km easy
  8. Day 8 Kinlochleven → Fort William 24.7 km tough
A simplified version of the sandbox: the real route and stops, snapping and the day planner, with a static map instead of a map library.

What the sandbox does

How it works

The route line is the single source of truth for distances. Stops live in a simple YAML file with coordinates only, and a build step snaps each one onto the route to work out how far along it sits. The map uses a local PMTiles file, so there’s no tile server and no API key.

It’s deliberately plain: JavaScript with ES modules, MapLibre GL JS and Turf.js, no framework and no bundler. The geometry lives in pure functions so it can move into a real app later.

Next

All projects