How Wind Window works
the whole pipeline, one pageWind Window fetches four weather models four times a day, averages the two best ones, and writes down every forecast it publishes so that later it can be scored against what the wind actually did. That last part is the product. Everything else is presentation.
The short version
Fetch, one model at a time
Four times a day — 01, 07, 13 and 19 UTC — a scheduled worker asks Open-Meteo for four models across all 23 spots. Each model is requested in its own call. Open-Meteo would happily merge them into one response, but then a single model's outage quietly degrades everything and per-model scoring becomes impossible. Separate calls keep failures attributable.
Archive before anything else
The raw response for every model, every spot and every hour is written to object storage, immutably, before a single derived number is computed. Nothing overwrites it, ever. If the next three steps crash, the run still did the job that matters — because a missed run is a hole in the record that no amount of later work can fill.
Blend the two ECMWF models
The headline number is an unweighted mean of ECMWF IFS and ECMWF AIFS — a physics model and a machine-learning model from the same agency, which get things wrong in different ways. Direction uses a circular mean, because averaging 350° and 10° arithmetically gives you 180°: a southerly where there is a northerly.
Work out what it means for riding
Cross-shore angle comes from the wind direction and the compass bearing each beach faces. Kite size comes from the wind and your weight. Model spread is the standard deviation across all four models, and confidence is three coarse levels derived from it.
Score it later, against measured wind
Nightly, the archive is compared against real observations from partner weather stations and the error is recorded per model and per forecast range. This is the step that is not running yet, and the reason is below.
Why Accuracy is still empty
Not for want of measured wind any more. Ten Bureau of Meteorology automatic weather stations are connected and read every ten minutes — five on Port Phillip, five on the Perth coast — and thirteen spots are close enough to one to be scored against it.
What is missing is overlap. Scoring needs the same hour to appear on both sides: a forecast we published, and a reading of what actually happened then. The archive only began accruing recently, so there are not yet enough paired hours for a score to mean anything. A mean error computed from one windy afternoon would move several knots on the next one.
So the scores stay hidden until they are stable, and then they cover the whole archive at once rather than the last few days.
The readings themselves are on the forecast page
The Live stations panel shows what those ten masts are measuring right now, each with a trace of the last 48 hours behind it. The Bureau's combined state feed moves every ten minutes and carries wind direction in true degrees, so that is what we read every ten minutes; its per-station history feed fills in behind it once an hour. Ten minutes is the finest resolution any public Bureau product offers. The page refetches on its own every five minutes, so a tab left open in a car park does not quietly go stale.
It is the same data Baywinds has plotted for years — Baywinds is a presentation layer over these Bureau stations, not a source of its own. It plots today, yesterday and the week as separate graphs; we show a rolling 48 hours instead, which is a different choice about the same readings.
The Bureau's anonymous feeds are free to access for non-commercial use, and this site carries no advertising, subscription or revenue, so republishing them with attribution is within those terms. Monetising the site is intended, and that is what would change it — not the attribution, the commercial status. When revenue starts, this either moves to a Bureau data licence agreement or the live display goes off and the observations go back to scoring only. It is written down on the data sources page so it does not get forgotten.
A club-owned station, where the club grants redistribution rights outright, has neither problem — which is why we are still asking clubs.
The archive is why this matters now rather than later. The moment a station connects, every forecast we have published since launch can be scored against it at once. The first numbers on that page will cover months, not days. A site that started archiving on the day it found a station would be a year behind.
We could fill the gap with model spread and call it a confidence score. We do show spread, but not under a heading about accuracy, because spread measures whether the models agree with each other — not whether any of them is right. Four models can agree perfectly and all be wrong in the same direction, which is exactly what a sea-breeze bias looks like.
What the blend is, and what it is not
It is the mean of two models. That is all it is today, and the site says so on every screen.
What it is meant to become is the interesting part. Global models are run on a grid roughly 25 km across. Your spot is not 25 km across. The model does not know about the headland, the shallow bank, the way the bay funnels a southwesterly, or that the sea breeze at this beach consistently arrives ninety minutes late and two knots under. Those errors are not random — they are a stable, learnable, per-spot signal.
Learning them requires months of paired forecasts and observations, which is the dataset being accrued right now. When there is enough, a per-spot, per-model, per-lead-time correction gets applied to each member before averaging, and the blend starts being worth more than its inputs. The code already has the seam for it and currently passes an identity function through it, so the correction can drop in without anything downstream changing.
We will not apply a correction before we can show it works. A tuned-by-feel adjustment that makes the numbers look better is worse than no adjustment, because it destroys the only thing that makes the archive meaningful: that every forecast in it was produced by a process we can describe exactly.
Reading the matrix
- Wind Window — the blend. The number you would use.
- Gust — mean of the gust fields the blend members publish. AIFS does not publish one, so today this is the IFS gust alone.
- Cross-shore — where the wind sits relative to the beach. Onshore pushes you back to the sand, offshore pushes you out to sea, cross-on is what most people want. Geometry, not a safety assessment.
- Kite — a starting size for an intermediate freerider at the weight you set. Your kit and your ability move it.
- The four model rows — each model's own raw wind, unblended, so you can see the disagreement rather than take our word for it.
- Model spread — standard deviation across all four. Small means they agree. It does not mean they are right.
- Measured — what the nearest station actually recorded for that hour. Ringed cells, not filled ones: measured and forecast never wear the same shape on this site.
- Error — forecast minus measured, in knots. Positive means we called more wind than turned out. It is blank before the run was issued, because a model run also covers hours that were already over when it started, and scoring ourselves on those would flatter us.
- Wave — display only. Never blended, never scored. Enclosed water and rivers return values that mean very little, and they are shown as-is rather than quietly hidden.
Every row label carries a small i. It opens where that row comes from, and for a fetched model it links to the exact API call behind it — so you can read the raw numbers yourself rather than trusting ours. The data sources page lists all of them in one place.
Where the data comes from
Four models, from three agencies, all delivered through Open-Meteo: ECMWF IFS and ECMWF AIFS from the European Centre for Medium-Range Weather Forecasts, GFS from NOAA, and ICON from Deutscher Wetterdienst. The first two are blended; all four are shown and all four are archived and will be scored independently.
Coastlines and estuaries come from OpenStreetMap, clipped per region and simplified to about 50 m at build time. The map's arrows are real fetched model values at each grid point, not interpolation between spots — drawing a smooth field through a dozen coastal points would look better and mean less.
Honest limitations
- No bias correction is applied. The blend is a plain average.
- No accuracy scores exist yet, because no station is connected yet.
- Global models at ~25 km miss local effects, and coastal spots are exactly where that hurts most.
- Wave data is unverified and, in a bay or a river, close to meaningless.
- Maps are schematic. Do not navigate by them.
- Forecasts refresh four times a day, not continuously. The status page always shows when the last run landed.
If something here looks wrong, it probably is — and the fastest way to check is the raw-data link on the row in question.