Stories

Wind against the road, not the town

Every tour group chat asks the same question the night before, and the honest answer to “thirty from the west” is “at the start, or at Sutherland?” A forecast for a place cannot answer it. So we built one for a road.

Windline

Summary

  • A weather app forecasts one place at one time. A tour covers two hundred kilometres a day, through different weather, at different hours.
  • So Windline forecasts a road, not a town: it compares wind direction against the bearing of every stretch, and reports headwind, crosswind or tailwind instead of a compass reading.
  • And it times each forecast to when the group actually arrives — pace, climbs and stops modelled, wind blended between hourly readings rather than rounded to the hour.
  • When the models disagree it says so, in red, rather than averaging four forecasts into one confident number nobody should trust.

The nine o’clock question

It gets asked in every tour group chat the night before a stage, and it is always some version of the same thing: what’s the wind doing tomorrow?

Somebody opens an app and reports back. Thirty from the west. And the only useful reply is a question: at the start, or at Sutherland?

Because on a two-hundred-kilometre day those are different places, several hours apart, and on a route that turns, a west wind is a tailwind for an hour and then it is not. The app was not wrong. It was answering a question nobody had asked.

What a weather app actually tells you

A forecast is for a point. Pick a town, pick an hour, get a number. That is the right shape for deciding whether to hang the washing out, and the wrong shape for almost everything about riding a bike a long way.

  • A tour stage is a line, not a point — it passes through weather the start never sees.
  • It is ridden over hours, so the relevant forecast for kilometre 140 is not the one for the hour you left.
  • And wind is a vector. Its speed is half the story; the other half is what the road is doing when it hits you.

The wind at the start tells you nothing about the climb at eleven.

Resolving wind against the road

This is the part that makes the number mean something. Every GPX route is a sequence of stretches, and each stretch has a bearing. Wind has a bearing too. Comparing the two turns an abstraction into an instruction.

A 21 km/h easterly is a different day depending on whether you are heading east, west or south. Windline reports it the way a rider experiences it — headwind, crosswind or tailwind, with a number for how much of it is actually against you. The map draws it directly: red where it is in your face, amber from the side, green at your back.

It is a small transformation and it changes what the forecast is for. “25 km/h WNW” is something to interpret. “Headwind 26, gusts 58, at 06:18” is something to plan around.

Timed to arrival, not to the clock

The second half is when. A forecast for 11:00 is only useful if you know where the group is at 11:00, and that depends on the start time, the pace, the climbing and how long the stops run.

So the route is walked through in time rather than distance. Set the start, the riding speed and the stops, and each stretch gets the forecast for the moment the bunch reaches it — slower on the climbs, later after a long café stop. Wind is blended between hourly model readings to that moment rather than rounded to the nearest hour, because a group moving at 25 km/h covers a lot of road inside one rounding error.

The effect is that a stage reads as a story rather than a table. The gusts climb after ten, so the regroup goes before then.

Honest when the models disagree

Windline runs four forecasts — ECMWF’s high-resolution model, the American GFS as a second opinion, ICON, and a blend — and the obvious thing to do with four numbers is average them into one.

We decided that was the wrong thing to do, because an average hides exactly the information you most need. When the models agree, the forecast is worth planning a day around. When they do not, that disagreement is the forecast, and burying it produces a confident number with nothing behind it.

When the models disagree, we say so, in red, so nobody plans a day on a coin toss.

Nothing is cached either. Every time a page is opened it pulls the newest model run, up to sixteen days out. A forecast saved from yesterday is not a forecast, it is a memory.

Nothing for riders to install

The constraint that shaped the product more than any other: a rider should not have to do anything. Not download an app, not make an account, not be added to a group.

A tour has thirty-eight riders, a support crew and a pile of family at home refreshing a tracker. Any step between them and the forecast is a step most of them will not take. So the whole thing is one link that opens in a phone browser, unfurls in the group chat with a route preview so people know what they are opening, and shows everyone the same thing.

The organiser does the work once — upload the stages, set the pace — and the link stays live for the whole tour.

Riding it before selling it

Windline exists because of a specific tour: Pont Drift to Cape Town, thirteen stages, 2,093 kilometres, in October 2026. The tour is the test, and it was ridden in full before the product was offered to anyone.

That is the pattern behind everything in this portfolio, and this is the least ambiguous version of it we have had. There is no staging environment for a headwind. Either the forecast matched the road or it did not, and over two weeks the answer arrives thirteen times.

The public tour page is live now, and the ratings on it are not a recording. They are computed in your browser, from the current forecast, when you open it. The toughest day so far is day ten, Fraserburg to Sutherland: a 20 km/h headwind, gusts to 81, between ten and twelve degrees.

It is in beta, it is free, and it is being ridden before it is sold.

Running a tour next season?

Windline is in beta, and free while it is.

Questions people ask

How do you forecast wind for a cycling route rather than a place?
By resolving the wind against the road. Every stretch of a GPX route has a bearing; so does the wind. Comparing the two gives the component actually working against or with the rider, which is reported as headwind, crosswind or tailwind rather than as a compass direction and speed.
What is the difference between wind speed and headwind?
Wind speed is how fast the air is moving. Headwind is how much of that is pointed at you, which depends entirely on which way the road runs. A 25 km/h wind can be a 25 km/h headwind, a pure crosswind, or a free tailwind, on the same day in the same place, depending on the direction of travel.
Which weather model is most accurate for cycling?
ECMWF’s high-resolution model is widely rated the most accurate global forecast, and Windline uses it as the primary, with GFS, ICON and a blend alongside it. The more useful question is whether they agree: when four models converge the forecast is dependable, and when they diverge no single one of them should be planned around.
Do riders need to install an app to see the forecast?
No. A tour is one link that opens in any phone browser, with no account and no download, for riders, support crew and anyone following at home. The organiser sets the stages up once and the link stays live for the whole tour.
How far ahead can a cycling tour be forecast?
Up to sixteen days. Nothing is stored between visits — each time a page is opened it re-forecasts from the newest model run, so a stage looked at a week out and again the night before gives two different, current answers.

Every product named here is built and operated by Cross Constellation.


The thesis

A forecast for a town is a fact. A forecast for a road is a plan.

Read next

The second product is found by operating the first
A forecast engine built to put wind on a cycling route turned out to be most of what runners needed, pointed at a different problem. Not a pivot and not a feature — a sister product, on one engine, for an enemy that is not wind.

A thousand kilometres, counted for you
Most December challenges hand you a weekly leaderboard and leave the sum to you. The Windline 1000 counts every ride from 16 December, puts your running total on Strava, and sends a finisher card on 1 January.

When the register is the product: building a standards body that can be checked
The Private Lending Association of South Africa publishes records that tell a stranger who is real. That makes every entry a liability, every badge a claim that travels, and the door the most important thing on the site. Here is the system, and why it runs Crossdeck for analytics and Crossdeck Trust.

Building an AI assistant that cannot lie about its work
Digital Hank reported a client meeting as arranged and produced a joining link. There was no meeting, no email, and the link led nowhere. Nothing had broken — the model had done what models do. So we stopped asking it not to, and rebuilt so it cannot.

We cut a client’s application rejections by 90% — by letting the documents fill in the form
ProLend was not losing applications because the applicants were wrong. It was losing them because a human retyped what was already printed on a document, and got a digit wrong. So we stopped asking people to retype documents, and had the documents populate the profile instead.

Why we built Crossdeck — and why every product we build helps test it
We thought the App Store Connect wait was the problem. The real problem was fragmentation — the same person scattered across a dozen disconnected tools. So we put one SDK and one customer timeline underneath everything we operate.

Every product is a test environment for the one beneath it
A habit tracker on the App Store, a link-in-bio product carrying anonymous global traffic, and a book catalogue on two platforms. None of them was built to test anything. That is exactly why they work as tests.

The Firebase bill that taught us to see
A runaway Firestore read bill sent us chasing ClickHouse. The real fix was not a new database — it was being able to see where every read came from. What we learned, and why we open-sourced Buckets.

The email address you’re keying on is not the person
Why email is a fragile anchor for user identity, how keying on the wrong id forks one person into many records, and how an identity graph converges every key onto one canonical customer.

We got our connector rejected. It was the best product spec we received all year.
A marketplace review rejected our connector with roughly a dozen findings. Instead of a failure, it read like a spec — the exact definition of a production-grade third-party integration we would never have written ourselves.

The black box blinks: seeing App Review happen in your own data
App Review is a black box. Identity-joined session data reveals when a reviewer starts testing your build, where they connect from, and the exact path they walk — plus the line we will not cross.

Why Biotree needed Crossdeck Trust — and how we stopped the SEO spam farms
Public, indexed link-in-bio pages are a magnet for spam farms and bot signups. The attack Biotree faced, why the obvious defences backfire, and the signup firewall that stopped it without punishing real users.

Why we are building Crossdeck Sales
Cold outbound is miserable because the seller is blind. We were not — we already saw who landed, what they read, and why. So we are building the tool that turns that journey into outreach that lands.