SunnySkyABOUT

We write down how wrong we were.

SunnySky keeps score of its own forecasts. Every night it records what each source predicted, checks those predictions against what a station actually measured, and shows you the result — including the days it was wrong. Everything else on this page follows from that one habit. I'm Ian Castillo, and I make it on my own.

In one line

Most weather apps give you one number and no error bars. SunnySky gives you the spread between ten models and seven services, and a public scorecard of which of them has actually been right where you are.

It grades itself, every night, in public.

Every night, SunnySky writes down what each source predicted for the next 48 hours. Then it writes down what actually happened, taken from the nearest airport weather station. Then it scores them: mean absolute error and signed bias, per source, per lead time. The app shows you which source has been closest at your location — not in general, at your location.

Rain is scored as a contingency table — hits, misses, false alarms — with probability of detection and false-alarm ratio, rather than a single accuracy percentage. That's not pedantry. In a dry climate, an app that never forecasts rain scores about 90% accurate and is completely useless.

And it refuses to name a winner until it has 200 scored readings for your area. Before that, the standings still appear — stamped PROVISIONAL, with a meter counting up to the threshold. You can watch it fill. What's withheld early is the conclusion, not the data.

The disagreement is the forecast.

Nearly every weather app is built on the same handful of national models. It picks one, rounds it off, and hands you a confident number. When that number turns out wrong, you have no way of knowing whether it was a close call or a coin flip.

SunnySky goes one layer down. It reads ten national models — GFS, ECMWF, ICON, HRRR, the UK Met Office, Canada's GEM, Météo-France, Japan's JMA and the rest — plus seven forecast services built on top of them, and it carries the disagreement out the other side. When they all sit on top of each other, that's a day you can stop thinking about. When they fan apart, that fan is the actual story of the day, and you get to see it rather than having it quietly averaged into a number that sounds just as certain as the other kind.

It will not invent a reading.

There's a document in this project listing features that were considered and then killed, each with the reason. Rain totals derived from radar: that would mean inventing a relationship between reflectivity and rainfall and then printing the result as if it were a measurement. Snow-day odds: fun, popular, and with no honest data underneath it. A live lightning-strike feed: real, but sold by networks whose terms we could not honestly meet.

That last one has since changed, and how it changed is the point. The ground-strike networks were still a no, so we built the layer on NOAA's Geostationary Lightning Mapper instead — a public instrument on a US weather satellite. It arrived with limits, and those limits now travel with it everywhere it appears: it detects total lightning, in-cloud flashes included, so a mark means a storm is electrically active rather than that a bolt hit that spot; it resolves kilometres, so we draw a soft cell about 11 km across instead of a point we cannot honestly place; and it watches the Americas, which means the continental US and Latin America but not Alaska, not Hawaii, and nowhere further afield. Where the satellite cannot see, the layer does not appear at all — an empty map would read as “no lightning here,” which is a different claim from “we cannot tell you.” A no in that document is a default rather than a verdict, but the thing that overturns one has to show up with its limits attached.

Radar went the same way, for a duller reason and at a real cost. The worldwide mosaic SunnySky used to draw came from a provider licensed for personal and educational use, with no commercial tier for sale, so it had to go. What replaced it is not a substitute — it is the actual instrument: the NOAA/NWS MRMS mosaic across the United States, its territories and Guam, and Environment and Climate Change Canada's mosaic across Canada, published by the two services that operate the networks. The bill for that honesty is coverage: radar is North America only now. Everywhere else the layer does not draw at all, for exactly the reason the lightning layer doesn't — an empty radar map is not a quiet map, it is a map saying “nothing is falling,” and we would have no basis for saying it. The paid global layers are still there to buy; every one of them is a satellite-blended field rather than radar, and stamping that RADAR is the thing this page is about not doing.

The same rule runs through the app itself. Where a number is modelled rather than measured, the screen says so, in the same place, every time:

Modelled — not a gaugeThis number came out of a forecast model, not an instrument sitting on the ground.
HRRR forecastSimulated radar — a model's picture of what reflectivity will look like. Never mixed in with observed radar.
Specimen dataAn illustration of how a feature looks, using invented numbers. Not your weather.
CachedThe last good reading we managed to fetch. The network is failing and the app would rather say so than look current.
ProvisionalThere isn't enough scored history here to support a conclusion yet. The numbers are shown anyway; the claim is withheld.
GOES GLM · Total lightning · Americas onlyLightning as a NOAA satellite sees it. It counts in-cloud flashes as well as ground strikes, so a mark means a storm is electrically active — not that a bolt landed on that spot. It watches the Americas and nowhere else.

A forecast frame is never drawn as radar. And when an instrument isn't there — no tide station nearby, no buoy, no pollen reading for your part of the world — the app goes quiet instead of substituting something that looks close enough. A missing reading produces silence, never a stand-in.

Warnings belong in every account.

Severe weather alerts and every home-screen widget capable of carrying one are included for every account. A warning should reach the person in its path without a product decision getting in the way.

There is one published severity ladder, and every surface uses it — phone, widget, wall display. So the screen in the kitchen can never call something alarming that the phone in the same room calls routine.

Location powers the answer, not background tracking.

With your permission, SunnySky reads your precise location while you use the app and sends coordinates only as needed to weather, map, place-name, and routing providers. It does not read or track your live location in the background.

To send you a warning, SunnySky has to know roughly where you are. So it syncs a grid cell roughly 20 km across — not your coordinates. That's precise enough to know a tornado warning covers you, and far too coarse to know which building you're in.

Reports and asks use a neighborhood-level location rather than raw GPS coordinates. Weather cards and wall links you choose to share contain a rounded location. Full detail is on the privacy page.

Some things only a person outside can tell you.

Where there is radar at all, it can tell you a cell is passing over your neighbourhood. It still can't tell you the underpass is flooded, or that it's already hailing two streets over. So there's a social layer: reports from people who are actually out in it, and places and people you can follow.

Official National Weather Service data and community reports are kept visually distinct, always, and are never blended together. One is an instrument and the other is a neighbour, and you should never have to work out which one you're looking at.

One small example of the whole approach.

SunnySky works out when it's good to go outside for the things you do — running, cycling, walking the dog. Heat closes one of those windows when it reaches the Danger rung of the National Weather Service heat index. High UV never closes a window at all.

That looks inconsistent until you see the rule underneath it: a factor closes a window only when the hazard can't be removed by preparation. A hat and sunscreen fix UV. Nothing you can put on fixes a heat index in the Danger range. The rule is written down, which means you can disagree with it — and that's the point of writing it down.

Made by one person.

I'm Ian Castillo, and SunnySky is mine end to end — the app, the servers, this website, the support replies. There's no investors and no growth plan on a slide somewhere.

That's the reason several things in this app exist. Nobody needed a confident number for a screenshot. The trade is real and it goes the other way too: things ship when they're right rather than when a quarter ends, and there's only one pair of hands here. When something is half-built, the app says so on the screen instead of pretending otherwise — the PROVISIONAL stamp is that idea in its smallest form.

If you want the full stack and the actual monthly bills, that's written out on how it's built. If you want to know why each model earned its place, that's sources. If something's broken, or you think one of these decisions is wrong, tell me — support@sunnyskyweather.com is an inbox, not a ticket queue.

The Sunny Weather Company is the parent — an app agency. SunnySky is its own thing underneath that, and sunnyskyweather.com is where everything about this app lands: the support mail, the bug reports, the account requests, the argument you want to have about one of these decisions. You don't have to work out which name to write to. It's this one.