Live · watching 1,000+ NOAA stations

It's on.

Know when to go

Your phone buzzes. A meter 28 miles up the shore just jumped to 19 knots. You grab your keys.

📡 Official NOAA data 🔥 Free until December 31
3:47 📶 100%
💬 WindStoke now
🔥 Pere Marquette just fired
Jumped to 22 kts SW. That meter is 28 miles up the shore, upwind of your spot.
📆 WindStoke 6:00 AM
📆 Saturday looks good at Grand Haven
3 of 4 models agree on 18-22 kts SW. Clear your afternoon.
🌡️ WindStoke 1:15 PM
🌡️ NW thermal filling in at Muskegon
Forecast said East, not rideable. It's swinging NW and building, 8 to 14 kts. Be on the water by 2:00.

You know the guy.

Every spot has one. He's already on the water when you pull in. He's always already on the water when you pull in. You don't know what he does for a living. He's got the tan and the sun-bleached hair and that lean, weathered look that tells you everything about his priorities without him saying a word. You're rigging up and you hear it before you see it. A kite ripping through a turn so hard the lines sing. He's way above the water, kite looping, and he floats it down with a heli like gravity is a suggestion.

And here's the part that gets you: the forecast said today was dead. Light, out of the east, not worth the gas. He came anyway, because he knew the sand would bake by noon and the lake would answer, that by two it'd be cranking out of the northwest. It always does. Your app never saw it coming. He did.

What does he know that you don't?

What he knows, on the record.

LAKE-BREEZE CALLS · MUSKEGON

A lake breeze (thermal wind) is the onshore wind that fills in on a hot afternoon. No forecast model predicts it. WindStoke tells you the morning it’s coming, so you get more days on the water.

Since June 6 we’ve called it 48 mornings at Muskegon and it showed 27 times. The forecast had those afternoons at 9 kt. They blew 14.

  1. Tue Nov 10Forecast 9 ktBlew 10 ktNo lake breeze
  2. Fri Oct 30Forecast 5 ktBlew 12 ktCame in 3 pm
  3. Wed Oct 28Forecast 10 ktBlew 15 ktCame in 10 am
  4. Sat Oct 24Forecast 7 ktBlew 12 ktCame in 10 am
  5. Thu Oct 22Forecast 6 ktBlew 9 ktNo lake breeze
Premium riders get the call the morning we make it.Start your free seasonFull Premium free through Dec 31 — no charge until Jan 1, cancel anytime
How this was measured

Called: our morning lake-breeze watch flagged that afternoon at Muskegon. Came in: the wind at the meter (MKGM4) turned onshore and built. Forecast: the model forecast’s afternoon peak for the spot as of that morning (HRRR). Blew: the afternoon’s peak sustained wind at the meter. 10 kt is about the least you can ride, on a big kite or a foil. The 9 and 14 kt above are averages over the called days it showed with a forecast on file (19). The last 5 calls are listed, misses included; 9 calls when the meter was down are left out. On the 86 mornings we stayed quiet, a lake breeze showed 13 times (every other graded morning, including the ones the watch saw primed but held back). Only spots where the call has beaten the quiet mornings get this card, and those are the spots it goes out from, by push or email.


What no other app does

Four things that change when you stop guessing and start knowing.

01Upwind Radar
WindStokenow
🔥 Port Washington jumped 8 → 19 kts. That meter is 28 miles upwind of your spot.

It watches the water upwind of you.

The local checks the meters up the shore before he loads the car. WindStoke checks all of them, and tells you the moment one upwind of you fires. It reports what the meter did and how far away it is — it won't tell you a minute the wind will arrive, because we can't measure that well enough yet to put a time on it.

02Virtual Station
WindStokelive
Estimated 19 kts at your sandbar. Nearest observation: 18.5 kts. No station within 8 miles.

It knows your spot.

Your favorite beach doesn't have a wind meter. WindStoke learns how your coordinates run against the nearest reporting station — direction by direction — and applies that to its live reading, so you get a number for your sandbar instead of the airport's.

03Session Match
WindStoke6:00 AM
Thursday matches 47 past sessions. Like Aug 14th, when you rated it 🔥. You wrote: "come earlier."

It remembers your best days.

Log your sessions. When those conditions return, your own words come back to you, like a buddy who was there and has a better memory than you do.

04Thermal Alert
WindStoke1:15 PM
🌡️ Afternoon NW thermal filling in at Muskegon, building to 16 kts. The forecast said East 8.

It feels the breeze the forecast misses.

On a sunny day the land bakes and the lake answers. A thermal cranks onshore while the forecast still reads dead. WindStoke learns each spot's afternoon sea breeze and pings you the moment it's igniting, hours before it peaks.

05Ask Jetty
Ask Jettyjust now
"Worth burning a vacation day for Thursday at Muskegon?"
Thursday's your day. SW 18 to 22 filling in late morning and holding into the evening, and three of four models agree on it. Friday's the one I'd skip. It swings east and dies by noon.

It answers in plain English.

Ask it anything about your spots the way you'd text a buddy who's already looked. Jetty reads your actual forecast, not the internet, so every number in the answer comes from the data. When the models disagree, he says so instead of picking one to sound confident. He's named after Jetty, the guy who used to answer these questions on our old blog.


The wind the forecast doesn’t have.

MUSKEGON · MKGM4 · SEPTEMBER 6, 2026

measured windwhat the model heldwind it didn’t havewind was onshore

The model said 7.3 knots. We said 15. It blew 17.1.One good day is an illustration, not evidence. The evidence is the whole record: of every lake-breeze alert we have sent and since graded, 33 of 56 were confirmed.

How a lake breeze forms: the sun heats the land, the hot air over it rises, and cooler air over the lake flows in to replace it. That inflow is the onshore wind at the beach. LAKE LAND The sun bakes the land, and the hot air over it rises. Cooler air over the lake slides in to take its place. NNW 17.1 kt at the beach, from 3:00 PM How a lake breeze forms: the sun heats the land, the hot air over it rises, and cooler air over the lake flows in to replace it. That inflow is the onshore wind at the beach. LAKE LAND The sun bakes the land. Hot air rises. Cooler air over the lake slides in. NNW 17.1 kt at the beach, from 3:00 PM

and here is the day it happened

Measured wind at Muskegon on 2026-09-06 from 8:00 AM, against the single figure the model held for that afternoon. 0 6 12 18 KT 8A 11A 2P 5P 8P 11P MODEL HELD 7.3 KT ALL DAY the wind the model didn’t have WE SAID 15 KT NNW, 8:00 AM it fired 5:45 PM 17.1 kt at 6:10 PM SHADED = WIND CAME ONSHORE AMERICA/DETROIT Measured wind at Muskegon on 2026-09-06 from 8:00 AM, against the single figure the model held for that afternoon. 0 6 12 18 KT 8A 11A 2P 5P 8P 11P MODEL HELD 7.3 KT WE SAID 15 KT NNW, 8:00 AM it fired 5:45 PM 17.1 kt at 6:10 PM SHADED = WIND CAME ONSHORE

Every point is one observation from MKGM4 — 144 of them that day — timestamped UTC and redrawn in America/Detroit. The dashed line is the single figure the model held for that afternoon, recorded that morning before any of this happened; the chart opens at the hour we sent the watch, and the shaded band is every reading that came in above it, on a morning reading air 77°F over water 71°F.

What a lake breeze is, how we spot one coming, and the record of every call — on the forecast FAQ →


Set up once. Never check again.

1

Pick your spots

Choose from 1,000+ NOAA stations or drop a pin on your secret spot.

2

Dial in your conditions

Wind speed, direction, waves, temperature, all combined in one alert profile.

3

Go when it buzzes

Real-time when it's happening. Forecast alerts days ahead. You just show up.


The forecast isn’t wrong. It’s wrong differently at every beach.

NWS VS MEASURED WIND · 100 METERS · 0-5H AHEAD · 96 DAYS

the national forecastafter we correct it

At Big Bay the national forecast promises 4.4 knots that never show up. At Cheboygan Marina it misses 2.4 that do. We shade every forecast by what that beach’s own meter has been measuring.So we don’t serve you the national number. Every forecast is shaded by what that spot’s own meter measured the last time we made the same forecast there.

BIG BAYaveraged over 1,255 forecasts
national forecast4.4 kt too much wind
after we correct it1.4 kt too much wind

↓ 3 kt closer at this beach

CHEBOYGAN MARINAaveraged over 305 forecasts
national forecast2.4 kt too little wind
after we correct it0.3 kt too little wind

↓ 2.1 kt closer at this beach

All 100 meters we have measured, each one tick on a knots axis. Left of centre the forecast promised more wind than the meter saw; right of centre it promised less. The two ends are the beaches named above. EVERY METER WE HAVE MEASURED — 100 OF THEM Big Bay: -4.36 kt over 1,255 forecasts Alpena: -3.78 kt over 170 forecasts Sturgeon Point Light: -3.48 kt over 391 forecasts Marblehead: -3.29 kt over 1,465 forecasts Mayport , FL: -2.86 kt over 827 forecasts Manistee Harbor: -2.80 kt over 1,518 forecasts Ludington: -2.75 kt over 1,465 forecasts De Tour Village: -2.67 kt over 136 forecasts Ashtabula Lighthouse: -2.65 kt over 1,449 forecasts Navy Fuel Depot, St Johns River: -2.51 kt over 1,391 forecasts Toledo: -2.50 kt over 1,465 forecasts Muskegon Buoy: -2.38 kt over 612 forecasts Marquette C.G.: -2.34 kt over 189 forecasts Los Angeles Pier 400: -2.11 kt over 577 forecasts Charlevoix Muni, MI: -2.09 kt over 1,146 forecasts Big Sable Point: -2.00 kt over 1,720 forecasts Duluth: -1.95 kt over 1,463 forecasts Northerly Isle: -1.86 kt over 1,464 forecasts Los Angeles Pier S: -1.86 kt over 477 forecasts Holland Buoy: -1.82 kt over 1,439 forecasts Cleveland: -1.68 kt over 1,464 forecasts Los Angeles Pier F: -1.68 kt over 577 forecasts Calumet Harbor: -1.58 kt over 1,464 forecasts Mayport (Bar Pilots Dock): -1.58 kt over 1,446 forecasts Ludington Buoy: -1.57 kt over 786 forecasts Jacksonville Craig Municipal Airport: -1.53 kt over 1,382 forecasts Green Bay West: -1.53 kt over 90 forecasts St. Joseph: -1.51 kt over 1,204 forecasts Point Iroquois: -1.50 kt over 230 forecasts Geneva on the Lake Light: -1.48 kt over 1,164 forecasts Blount Island Command, St Johns River: -1.47 kt over 1,409 forecasts Los Angeles Badger Avenue Bridge: -1.47 kt over 1,099 forecasts Thunder Bay Island: -1.44 kt over 1,106 forecasts Angels Gate: -1.38 kt over 577 forecasts Santa Monica Basin - 33NM WSW of Santa Monica: -1.37 kt over 1,364 forecasts Frankfort/Dow Mem, MI: -1.36 kt over 1,430 forecasts GRAYS REEF - 40 NM Southeast of Savannah: -1.35 kt over 1,183 forecasts Port Hope: -1.30 kt over 1,431 forecasts Port Inland: -1.28 kt over 939 forecasts Michigan City Buoy: -1.21 kt over 1,391 forecasts Oswego: -1.19 kt over 1,464 forecasts Kewaunee MET: -1.17 kt over 1,463 forecasts Cook Nuclear Plant Buoy, Stevensville: -1.11 kt over 1,426 forecasts Fairport: -1.08 kt over 939 forecasts Fulton/Oswego Cnty, NY: -1.06 kt over 1,446 forecasts Milwaukee: -1.00 kt over 1,118 forecasts South Bass Island: -0.99 kt over 1,465 forecasts Northport Pier at Death's Door: -0.99 kt over 432 forecasts Vermilion River at Lake Erie: -0.87 kt over 1,457 forecasts Muskegon County Airport: -0.87 kt over 1,437 forecasts ATW20 - Atwater Park: -0.83 kt over 983 forecasts Holland - West Michigan Regional Airport: -0.82 kt over 1,437 forecasts Manitowoc Muni, WI: -0.82 kt over 1,443 forecasts Mackinaw City: -0.81 kt over 1,461 forecasts Cherry Capital Airport: -0.80 kt over 1,435 forecasts Saginaw Bay Light #1: -0.68 kt over 1,457 forecasts Gravelly Shoal Light: -0.67 kt over 559 forecasts Salmon Unlimited Wisconsin: -0.63 kt over 670 forecasts Gerald R. Ford International: -0.60 kt over 1,015 forecasts Wilmette Buoy: -0.53 kt over 1,411 forecasts Los Angeles Pier J: -0.53 kt over 577 forecasts Cadillac/Wexford Cnty, MI: -0.48 kt over 1,390 forecasts Ludington/Mason Cnty, MI: -0.47 kt over 1,428 forecasts Rock Cut: -0.43 kt over 135 forecasts Waukegan Buoy: -0.42 kt over 1,232 forecasts Port Wing: -0.38 kt over 1,459 forecasts Buffalo: -0.32 kt over 1,465 forecasts SAN CLEMENTE BASIN - 27NM SE Of San Clemente Is: -0.28 kt over 1,332 forecasts SOUTH SANTA ROSA - 14 NM SW of Santa Rosa Island: -0.27 kt over 64 forecasts Winthrop Harbor Buoy: -0.25 kt over 1,213 forecasts Chicago Buoy: -0.23 kt over 284 forecasts Barcelona Harbor: -0.22 kt over 1,465 forecasts Kenosha Light, Kenosha: -0.22 kt over 1,280 forecasts Manistee/Blacker Arpt, MI: -0.15 kt over 1,166 forecasts Mackinac Straits West, Mackinaw City: -0.13 kt over 1,191 forecasts S.W. Pier: -0.09 kt over 231 forecasts Fremont Muni, MI: -0.06 kt over 1,388 forecasts Naubinway: -0.06 kt over 305 forecasts NORTH MICHIGAN- Halfway between North Manitou and Washington Islands.: -0.05 kt over 1,443 forecasts Huron Harbor Light: -0.03 kt over 1,465 forecasts Michigan City: -0.02 kt over 1,119 forecasts West Neebish Island: -0.02 kt over 130 forecasts Olcott Harbor: +0.01 kt over 1,462 forecasts Port Washington: +0.03 kt over 1,465 forecasts Menominee: +0.03 kt over 458 forecasts Presque Isle Light: +0.19 kt over 843 forecasts Sleeping Bear Dunes: +0.30 kt over 981 forecasts Sheboygan: +0.33 kt over 1,465 forecasts SILVER BAY: +0.51 kt over 1,466 forecasts Rochester Coast Guard: +0.58 kt over 1,453 forecasts Grand Traverse Light: +0.73 kt over 1,461 forecasts Harbor Beach: +0.78 kt over 1,464 forecasts Grand Marais: +1.10 kt over 1,460 forecasts Chicago: +1.12 kt over 1,302 forecasts Holland: +1.46 kt over 1,707 forecasts Muskegon CG Station, Muskegon: +1.48 kt over 1,302 forecasts Fort Gratiot: +1.50 kt over 1,464 forecasts Alpena Harbor Light: +1.56 kt over 1,114 forecasts South Haven Light, South Haven: +2.03 kt over 1,303 forecasts Cheboygan Marina: +2.42 kt over 305 forecasts -5 -4 -3 -2 -1 +1 +2 +3 0 ◀ RAN HIGH RAN LOW ▶ 54 of 100 miss by over a knot All 100 meters we have measured, each one tick on a knots axis. Left of centre the forecast promised more wind than the meter saw; right of centre it promised less. The two ends are the beaches named above. EVERY METER WE HAVE MEASURED — 100 OF THEM Big Bay: -4.36 kt over 1,255 forecasts Alpena: -3.78 kt over 170 forecasts Sturgeon Point Light: -3.48 kt over 391 forecasts Marblehead: -3.29 kt over 1,465 forecasts Mayport , FL: -2.86 kt over 827 forecasts Manistee Harbor: -2.80 kt over 1,518 forecasts Ludington: -2.75 kt over 1,465 forecasts De Tour Village: -2.67 kt over 136 forecasts Ashtabula Lighthouse: -2.65 kt over 1,449 forecasts Navy Fuel Depot, St Johns River: -2.51 kt over 1,391 forecasts Toledo: -2.50 kt over 1,465 forecasts Muskegon Buoy: -2.38 kt over 612 forecasts Marquette C.G.: -2.34 kt over 189 forecasts Los Angeles Pier 400: -2.11 kt over 577 forecasts Charlevoix Muni, MI: -2.09 kt over 1,146 forecasts Big Sable Point: -2.00 kt over 1,720 forecasts Duluth: -1.95 kt over 1,463 forecasts Northerly Isle: -1.86 kt over 1,464 forecasts Los Angeles Pier S: -1.86 kt over 477 forecasts Holland Buoy: -1.82 kt over 1,439 forecasts Cleveland: -1.68 kt over 1,464 forecasts Los Angeles Pier F: -1.68 kt over 577 forecasts Calumet Harbor: -1.58 kt over 1,464 forecasts Mayport (Bar Pilots Dock): -1.58 kt over 1,446 forecasts Ludington Buoy: -1.57 kt over 786 forecasts Jacksonville Craig Municipal Airport: -1.53 kt over 1,382 forecasts Green Bay West: -1.53 kt over 90 forecasts St. Joseph: -1.51 kt over 1,204 forecasts Point Iroquois: -1.50 kt over 230 forecasts Geneva on the Lake Light: -1.48 kt over 1,164 forecasts Blount Island Command, St Johns River: -1.47 kt over 1,409 forecasts Los Angeles Badger Avenue Bridge: -1.47 kt over 1,099 forecasts Thunder Bay Island: -1.44 kt over 1,106 forecasts Angels Gate: -1.38 kt over 577 forecasts Santa Monica Basin - 33NM WSW of Santa Monica: -1.37 kt over 1,364 forecasts Frankfort/Dow Mem, MI: -1.36 kt over 1,430 forecasts GRAYS REEF - 40 NM Southeast of Savannah: -1.35 kt over 1,183 forecasts Port Hope: -1.30 kt over 1,431 forecasts Port Inland: -1.28 kt over 939 forecasts Michigan City Buoy: -1.21 kt over 1,391 forecasts Oswego: -1.19 kt over 1,464 forecasts Kewaunee MET: -1.17 kt over 1,463 forecasts Cook Nuclear Plant Buoy, Stevensville: -1.11 kt over 1,426 forecasts Fairport: -1.08 kt over 939 forecasts Fulton/Oswego Cnty, NY: -1.06 kt over 1,446 forecasts Milwaukee: -1.00 kt over 1,118 forecasts South Bass Island: -0.99 kt over 1,465 forecasts Northport Pier at Death's Door: -0.99 kt over 432 forecasts Vermilion River at Lake Erie: -0.87 kt over 1,457 forecasts Muskegon County Airport: -0.87 kt over 1,437 forecasts ATW20 - Atwater Park: -0.83 kt over 983 forecasts Holland - West Michigan Regional Airport: -0.82 kt over 1,437 forecasts Manitowoc Muni, WI: -0.82 kt over 1,443 forecasts Mackinaw City: -0.81 kt over 1,461 forecasts Cherry Capital Airport: -0.80 kt over 1,435 forecasts Saginaw Bay Light #1: -0.68 kt over 1,457 forecasts Gravelly Shoal Light: -0.67 kt over 559 forecasts Salmon Unlimited Wisconsin: -0.63 kt over 670 forecasts Gerald R. Ford International: -0.60 kt over 1,015 forecasts Wilmette Buoy: -0.53 kt over 1,411 forecasts Los Angeles Pier J: -0.53 kt over 577 forecasts Cadillac/Wexford Cnty, MI: -0.48 kt over 1,390 forecasts Ludington/Mason Cnty, MI: -0.47 kt over 1,428 forecasts Rock Cut: -0.43 kt over 135 forecasts Waukegan Buoy: -0.42 kt over 1,232 forecasts Port Wing: -0.38 kt over 1,459 forecasts Buffalo: -0.32 kt over 1,465 forecasts SAN CLEMENTE BASIN - 27NM SE Of San Clemente Is: -0.28 kt over 1,332 forecasts SOUTH SANTA ROSA - 14 NM SW of Santa Rosa Island: -0.27 kt over 64 forecasts Winthrop Harbor Buoy: -0.25 kt over 1,213 forecasts Chicago Buoy: -0.23 kt over 284 forecasts Barcelona Harbor: -0.22 kt over 1,465 forecasts Kenosha Light, Kenosha: -0.22 kt over 1,280 forecasts Manistee/Blacker Arpt, MI: -0.15 kt over 1,166 forecasts Mackinac Straits West, Mackinaw City: -0.13 kt over 1,191 forecasts S.W. Pier: -0.09 kt over 231 forecasts Fremont Muni, MI: -0.06 kt over 1,388 forecasts Naubinway: -0.06 kt over 305 forecasts NORTH MICHIGAN- Halfway between North Manitou and Washington Islands.: -0.05 kt over 1,443 forecasts Huron Harbor Light: -0.03 kt over 1,465 forecasts Michigan City: -0.02 kt over 1,119 forecasts West Neebish Island: -0.02 kt over 130 forecasts Olcott Harbor: +0.01 kt over 1,462 forecasts Port Washington: +0.03 kt over 1,465 forecasts Menominee: +0.03 kt over 458 forecasts Presque Isle Light: +0.19 kt over 843 forecasts Sleeping Bear Dunes: +0.30 kt over 981 forecasts Sheboygan: +0.33 kt over 1,465 forecasts SILVER BAY: +0.51 kt over 1,466 forecasts Rochester Coast Guard: +0.58 kt over 1,453 forecasts Grand Traverse Light: +0.73 kt over 1,461 forecasts Harbor Beach: +0.78 kt over 1,464 forecasts Grand Marais: +1.10 kt over 1,460 forecasts Chicago: +1.12 kt over 1,302 forecasts Holland: +1.46 kt over 1,707 forecasts Muskegon CG Station, Muskegon: +1.48 kt over 1,302 forecasts Fort Gratiot: +1.50 kt over 1,464 forecasts Alpena Harbor Light: +1.56 kt over 1,114 forecasts South Haven Light, South Haven: +2.03 kt over 1,303 forecasts Cheboygan Marina: +2.42 kt over 305 forecasts -4 -2 +2 0 ◀ RAN HIGH RAN LOW ▶ 54 of 100 miss by over a knot

Each tick is one meter’s average signed error over 111,204 forecasts made 0-5h ahead across 96 days, every one graded against that meter’s own reading at that hour. 82 run high and 18 run low; 4 meters with fewer than 50 forecasts are left out rather than drawn thin, and meters that have not proven they can measure wind at all are excluded entirely. Across all 100 meters the correction is worth 0.2 kt of average error at this range — the two beaches above are the extremes, not the typical case — and its value fades to nothing past three days out.

Full method — the rolling window, the shrink, the 3 kt clamp and the rebuilt gust — on the forecast FAQ →


We test every model. You get the winner.

FORECAST LAB · 5 MODELS RACED · LAST 120 DAYS

behind the baselineahead, but under the bar

We race every model we can get at your spot, and serve whichever one wins. So far nothing has beaten NWS plus your own meter — which is how we know that is the right thing to be sending you.Not a default we settled on. A result we keep re-measuring, separately for every spot and every range, every night. The day a model wins there, your forecast switches to it and the forecast page says so.

Every forecast model we run, shown at the lead time where it came closest to beating NWS plus each station's own measured correction. None has beaten it by enough to earn a switch. NOW SERVING · EVERY RANGE WE HAVE SCORED NWS, corrected by your own station's measured error Decided per spot and per range, re-checked every night, and handed over the moment something beats it. EVERY CHALLENGER, AT THE RANGE WHERE IT CAME CLOSEST HRRR corrected HRRR at 144-168h: +0.37 kt vs baseline, n=133 over 3 days 0.37 kt ahead best at 144-168h Blend Blend at 72-95h: +0.17 kt vs baseline, n=104,786 over 79 days 0.17 kt ahead best at 72-95h NWS, uncorrected NWS at 72-95h: -0.09 kt vs baseline, n=106,194 over 93 days 0.09 kt behind best at 72-95h GFS corrected GFS at 6-11h: -0.30 kt vs baseline, n=107,357 over 80 days 0.30 kt behind best at 6-11h ECMWF corrected ECMWF at 48-71h: -0.34 kt vs baseline, n=104,706 over 78 days 0.34 kt behind best at 48-71h 67 RANGES SCORED SO FAR · 5 NOT MEASURED YET · 0 HAVE EARNED A SWITCH

Each bar is one model against the one we serve, over the same station-hours at the same lead, graded on what the meter actually read — shown at the range where that model came closest, which is the most generous reading of it we can give. Winning takes all four bars at once: 100 paired forecasts, across 14 separate days, a margin of 0.5 kt, and that margin bigger than twice its own error bar — and 0 have, which is why the table that records model switches is empty rather than missing.

The full board, all nine ranges, and what it takes for a model to earn a switch — on the forecast FAQ →


The receipts.

Every one of these is read straight out of our own record. Nothing here is written by hand.

The forecast missed it
On November 11 the models had Los Angeles Pier J topping out around 7 kt. We called an afternoon lake breeze that morning. It came in at 13 kt, 0° off the direction we called.
When we say no
On 273 mornings we said the breeze would not build. It built on 3 of them.
Days worth rigging for
Across 95 verified days at Naubinway, the raw forecast stayed under 12 kt on 30 days that actually got there. We measure that gap and correct for it.
When we said go
Over the last 90 days we said go on 116 days and it blew on 91 of them. The other half of that number: 206 days turned out rideable and we had called 91 of them the night before. On the 115 we missed, the night-before forecast ran an average 6.1 kt under what the meter went on to read.
The call we did not make
On 674 of those mornings our lake-breeze model had already scored the afternoon, and we measured whether letting it overrule the overnight forecast would help. It would not: across 200 days the forecast called off, the model's strongest call was followed by a rideable afternoon 9% of the time, against 78% for the forecast's own go-calls. So it overrules nothing. What it does measure is the gap: on those days the meter beat the forecast by a median 3.9 kt — real, and still short of most riders' bar.

What early testers say.

Feedback from the riders testing it, on the lakes and on the coast.

"I stopped reading the hourly table. I ask Jetty if tomorrow is worth it and get a straight answer about my spot instead of a wall of numbers. When he hedges, I've learned to believe the hedge."
N
Noah V.
Kiteboarding · Grand Haven
"I'm out in San Diego, a long way from the Michigan water this was built on, and it still reads my spot right. It knows my station runs a few knots light in the afternoon and fixes the number before I ever see it."
C
Clint T.
San Diego, CA
"It's early days on the wave side and Jeff will tell you that himself. But the surf call has already been closer to what I actually paddled out into than anything else I can find for the lakes."
J
John V.
Surfing · Frankfort

The nod.

You're at the trucks after a session. Wetsuit peeled down. Hands still trembling. Cold beer. Sand in your ears. People are still showing up, rigging in full wind, asking how you got here so early.

The legend is two spots over. Same beer. Same lean against the tailgate. He nods at you. Not a wave. Not a conversation. Just a nod.

And it hits you. You've been the second car in the lot a lot lately. Your name shows up in the group chat now. People have been asking you how you knew.

You nod back.


Who's building this

I'm not the legend. I just got tired of missing it.

A lone kiteboarder riding past a pier as big waves explode over it
That's me out there. Frankfort, Michigan, one of the good ones.

I'm Jeff. I kite in Michigan, and I build WindStoke — the forecast pipeline, the alerts, the app, the emails, the reply when you write in. There's no team.

This started in the early 2010s as a kiteboarding blog called Michigan Dawn Patrol that I ran with my buddy Matt. We were already trying to do what this app does — reading the upwind meters, calling the days, telling people when to drop everything and drive — but pulling in every model and tracking which one is actually right at your spot was a research project in 2012, not something one guy could ship. Now it is, so I'm building the system I always wanted: when it says it's going to be good, it's going to be good. Everything gets checked against what actually happened, and when I'm not sure, I say so.

Fair warning: it's not finished. You'll see rough edges, and I'd rather you hear that from me. What I won't do is tell you it's on when I don't believe it.

Matt posted on Dawn Patrol as "Jetty" — that's where Ask Jetty gets its name.

If something's wrong at your beach, tell me. I'm the one who reads it.

J
Jeff
Kiteboarder · Michigan · Founder, WindStoke

Stop checking charts. Stop asking the group chat. Stop showing up late.

Spring 2026

First Season Free.

Sign up now. Full Premium through December 31. No charge until January 1.

Basic

$0 /always
  • Real-time wind alerts by email
  • 1 alert profile, up to 3 stations
  • 7-day NWS forecast
  • 3-day surf call at Great Lakes spots
  • Ask Jetty, 3 questions a day
  • Upwind Radar on your dashboard
  • Forecast alerts days ahead
  • The corrected forecast — shaded by your meter's own measured error
  • SMS & push
  • Lake-breeze and upwind fire alerts
  • Model scoreboard, wave and direction filters
Get Started

Premium

$4.99 /month
  • Everything in Basic, plus:
  • Forecast alerts up to 7 days out
  • SMS & push notifications
  • Ask Jetty all day, on the full week and every spot you watch
  • Upwind fire alerts the moment a meter upwind of you spikes
  • Lake-breeze alerts before the thermal fills in
  • Model scoreboard: HRRR, GFS and ECMWF raced at your station
  • 7-day surf call with locally tuned wave heights
  • Unlimited profiles and stations, checked every 10 minutes
  • Wave, 16-point direction, temp and time filters
Start your free season

Free through December 31 · $4.99/mo or $39.99/yr after

Cancel anytime · Basic plan always available