Travelia ← the value map

How Travelia works — and four things it got wrong

Travelia scores about 234,000 places on whether a particular trip, in a particular month, from a particular home town, is a good idea — and what it would cost all-in. It has no backend: the whole index is precomputed and the scoring runs in your browser.

That much is easy to say. The interesting part is that building it produced four mistakes that all had the same shape, and none of them looked like a bug from the outside. Each one produced a confident, plausible, wrong answer. They are worth writing down because the shape recurs.

The score, briefly

Each destination gets Safety × Fit^wFit × Value^wValue × Reach^wReach × Salience^wSal × Quality^wQ. Fit is climate against what the trip actually wants. Reach is door-to-door travel time from your home town. Quality is trip-specific and measured, not editorial — beach and resort density, ski-lift capital, dive operators, protected-area proximity, built heritage. The exponents come from five preference sliders, so the answer is yours, not a published league table.

1. Counting national parks ranked Frankfurt above Jasper

The obvious way to score "is there nature here" is to count protected areas nearby. Within 40 km, Frankfurt has 203 of them and Jasper has 5. Frankfurt's are all 0.1–3 km²; one of Jasper's is Jasper National Park, at 3,764 km².

Protected-area count is a proxy for urban mapping density. Weighting by protection × √area and dropping everything under 10 km² fixes it. The lesson — which we then failed to apply three more times — is that an open-data count usually measures how thoroughly a place has been surveyed, not how much of the thing is there.

2. Forty-two percent of "destinations" were city districts

GeoNames marks a city district as PPLX, and the ingest was throwing that field away. So Pest, Eixample, Monte-Carlo, "Downtown Dubai" and "Sydney Central Business District" were all competing as destinations in their own right — and winning, because every quality signal is a density-in-a-radius measure and a radius centred on a district captures the whole city's cluster.

The attractions top fifteen was, at one point, fifteen city districts. The live site answered Monte-Carlo as the world's best June hiking destination.

Two things about the fix were counter-intuitive. Matching on shared administrative codes — the natural approach — fails on exactly the cases it targets: Mexico City's admin2 code is empty while its boroughs have their own, so requiring a match discards every borough while appearing to work. And blocking promotion isn't enough, because tier is assigned from population: a 504,000-person Shanghai district qualifies on its own and was never "promoted" at all.

3. The beach data rated an iron-ore port at 96 out of 100

Port Hedland, Western Australia, is an iron-ore export terminal. It scored 96; Hurghada scored 98. Two things were wrong, and the second is the one that mattered.

The density term was linear and saturated at about thirteen mapped beach features, so the top of the range separated nothing — Hurghada's weighted sum is 154 and Port Hedland's is 36, and both read as a perfect 1.0.

But fixing that alone would not have worked, because Port Hedland's 36 is higher than Sharm el-Sheikh's 35. Mapped beach features measure OpenStreetMap coverage; natural=beach records that sand exists, and an industrial coastline has sand. What actually separates them is whether anyone can stay there, and accommodation density does it with no overlap at all: Gladstone 0.0, Dampier 0.0, Port Hedland 2.4 — against Makadi Bay 23.6, Hurghada 49.4, Sharm 72.4.

4. The climate grid said Zermatt was 3 °C in June

This one was invisible for months because it never looked like a data problem — it looked like a ranking problem. The Alps were simply absent from hiking and nature results, and every attempt to fix the lens improved things slightly without fixing it.

Decomposing a single score finally showed it. For hiking in June from Prague, Zermatt's quality was fine (0.75 against Flagstaff's 0.92) and its reach strongly favoured it (0.62 against 0.18). Its climate fit was 0.27. The index believed Zermatt's June mean temperature was 3 °C. It is about 10.5 °C.

The climate normals were WorldClim at 10 arc-minutes — roughly 18 km per cell. In mountains one cell averages the valley floors with the peaks around them, so a town in a deep valley is handed the climate of terrain a kilometre above it. Correcting each place by the lapse rate over the difference between the grid cell's mean elevation and the town's own moved Zermatt from rank #3,261 to #34. Temperatures now come from the 2.5-arc-minute grid (~4.6 km) with the same correction applied on top, which brings Chamonix, Interlaken and Innsbruck to within a degree of their published normals and Zermatt to 10 °C against a real 10.5 °C.

What makes that correction trustworthy is where it does nothing. It moves Prague by +0.4 °C and Flagstaff — at 2,104 m, but on a broad plateau — by +0.8 °C. Elevation was never the predictor; local relief is. Three quarters of all destinations move by less than half a degree.

Fixing it immediately broke something else, which is the most honest part of the story. Making mountain villages accurately mild knocked Kitzbühel, Chamonix and Engelberg off the ski map entirely — the snow gate tested the village, and Kitzbühel's village really is around freezing in February. Its slopes are not. The gate now lifts the climate up the local relief to where the lifts are. Edmonton, a flat and genuinely cold prairie city, fell from 14th to 233rd.

What this should tell you about the numbers

Every one of those four was an open-data signal that measured how well something had been surveyed rather than how much of it was there — and each produced an answer that looked entirely reasonable until someone checked a place they knew.

So: the climate, prices and travel times here are worth citing, and they are stated with their own error bars — the price model runs about 20% median absolute error, and it says so on every card. The ranking is not a published fact and never will be: it is computed in your browser from your home town and your preferences, and two people opening the same link can legitimately see a different order. Known limitations are listed in llms.txt, including the ones still unfixed.

Try it

Every view is a URL, so any answer here is shareable and restores exactly:

← Back to the map