What we may build on today
Kept by incident.meteorology@web-summit.dinis, 11 November 2026, 03:00 UTC
Where a forecast comes from · licences · open sources · as data
Dinis: "the places where we can add ridiculous value". Each item below is a proposal (ours, a hypothesis about what would be worth building); the licence, the size and the attribution line beside it are facts read at the source, each on the source's own page here. Nothing below is built yet; no image and no model field is in git. Any model output we show follows the rule already on Storm Charles through the chain: IPMA's warnings first, "a model's output, read at the publisher, evidence", no average, no pick. Not a warning service.
| What we could draw | From | May we transform it | Size | Needs first | |
|---|---|---|---|---|---|
| 1 | The storm from space, one hour behind | Meteosat (geostationary) | yes, with attribution | An 800 × 640 JPEG of the box at 01:00 UTC on 11 November was 51,729 bytes | A person registers in EUMETSAT's user portal and accepts the licence for Meteosat level 1 data an hour old or more (no fee) |
| 2 | The model's own map, cut to our box: gusts and pressure from GFS | GFS (NOAA/NCEP) | yes | 1,702 bytes for the surface gust of one step over 32 to 40 N, 18 to 8 W | A GRIB2 decoder outside the build (a tool that writes the small JSON; the build stays dependency-free) |
| 3 | Measured gusts at three airports, every half hour | Airport observations (METAR) | yes | 0 | Nothing new: the data room already reads LPPT this way (incident.meteorologist@ has LPMA as a suggestion). |
| 4 | How sure is the model: the spread of ECMWF's 51 runs | ECMWF ensemble (ENS) | yes, with attribution | One global field is 0 | A GRIB2 decoder outside the build; ECMWF asks for restraint (500 to 2000 simultaneous connections for everyone) |
| 5 | A second model at 7 km: ICON-EU maximum gusts | ICON (DWD) | yes, with attribution | About 1 | A GRIB2 decoder; only the latest runs stay on the server (about a day), so history must be copied as it is published. |
| 6 | Six models for one place, as numbers | Open-Meteo | yes, with attribution | 18 KB for two places × six models × four variables × 48 hours | The free API is for non-commercial use, under 10,000 calls a day: a decision for Dinis if the site ever carries advertising. |
| 7 | A second official opinion for any point | MET Norway weather API (api.met.no) | yes, with attribution | 3 KB gzipped per place | An identifying User-Agent and caching, as their terms ask |
| 8 | IPMA's own data, redrawn | IPMA open data (api.ipma.pt) | unclear | 2 to 93 KB per file | Non-profit use only, and the terms are silent on storing and changing: a person should ask IPMA (a draft for incident.media@'s outreach). |
| 9 | The sea: waves from the regional model | IBI wave analysis and forecast (Copernicus Marine) | unclear | Not probed: needs a free account | A free account (a person registers); the licence document read in full ("transform" is unclear until then). |
| 10 | What a machine-learned model made of it | ECMWF AIFS | yes, with attribution | As for IFS: 0 | A GRIB2 decoder |
The storm from space, one hour behind
One of the two to lead with. Proposal. One Meteosat picture an hour for the box from Madeira to Lisbon (28 to 44 N, 25 to 5 W): the airmass composite, where a deepening low shows as a dark dry slot curling into the cloud, and the infrared image; a strip of the last 24 hours that a reader can scrub, each frame stamped with its own time and "one hour old or more".
Why it adds value. No Portuguese news site shows the storm itself with its time and its licence. The hour rule turns a restriction into a format: a dated record of what the storm looked like, not a live feed.
- Source: Meteosat (geostationary)
- Licence (fact): EUMETSAT licence for Meteosat level 1 data with a latency of one hour or more: any purpose, attribution, no redistribution of the original numerical data, read 11:36 UTC, 11 Nov: read yes, after registering and accepting the licence; store yes; show yes, as an image or product we make from it, with attribution; never the original numerical data; transform yes, with attribution
- The data: EUMETView WMS, layers msg_fes:rgb_airmass and msg_fes:ir108 (also mtg_fd:li_afa, lightning flash area, and eps:m01_ascat_wind, winds over the sea measured by Metop), asked for a box and a time.
- Size: An 800 × 640 JPEG of the box at 01:00 UTC on 11 November was 51,729 bytes (airmass) and 52,047 bytes (infrared), probed at 02:56 UTC and not kept. 24 frames a day is about 1.2 MB: a display vault, never git.
- The line to print: "Contains modified EUMETSAT Meteosat data 2026" (EUMETSAT's own wording: "[Contains modified] EUMETSAT [Meteosat/Metop] [data/product] [Year]")
- What it needs first: A person registers in EUMETSAT's user portal and accepts the licence for Meteosat level 1 data an hour old or more (no fee). Dinis lifts design rule 9 for this one source. The images go to a display vault (incident.archivist@). Never an image newer than one hour: that needs a broadcaster's licence. Whether a picture drawn by EUMETView counts as "what we make" or as their product is the one point to confirm with EUMETSAT.
The model's own map, cut to our box: gusts and pressure from GFS
One of the two to lead with. Proposal. A small map of the Atlantic from Madeira to Lisbon with the pressure lines and the gust field of each GFS run, drawn by us from the numbers; and beside it the same hour from the four previous runs, so a reader sees the low move south or weaken from run to run ("less wind for Lisbon?" as five small maps).
Why it adds value. Public domain: the only global model we may redraw, recolour, animate and republish with no condition. Every other site shows a picture of this data; we can show the data and how it changed.
- Source: GFS (NOAA/NCEP)
- Licence (fact): US government work: public domain, read 11:30 UTC, 11 Nov: read yes; store yes; show yes; transform yes
- The data: NOMADS grib filter: one variable, one level, one box, one time step per request (surface gust; mean sea level pressure; 10 m wind).
- Size: 1,702 bytes for the surface gust of one step over 32 to 40 N, 18 to 8 W (probed 02:29 UTC). Decoded to a grid of 33 × 41 values it is about 8 KB of JSON per step and variable: small enough for git. 4 runs a day.
- The line to print: "NOAA/NCEP GFS, run <HH> UTC <date>, read <time> UTC. Public domain." (credit is asked, not required)
- What it needs first: A GRIB2 decoder outside the build (a tool that writes the small JSON; the build stays dependency-free). The conductor's conditions for any model output: IPMA's warnings first, "a model's output, read at NOAA, evidence", no pick, no average.
Measured gusts at three airports, every half hour
Proposal. One strip for Lisbon, Madeira and Porto Santo airports: each METAR's wind and gust, with IPMA's warned gust for the same hour above it and the TAF below it.
Why it adds value. The only open gust measurements for Portugal. Madeira (LPMA) reported 27 kt at 02:00 UTC and is not yet in the data room.
- Source: Airport observations (METAR)
- Licence (fact): US government work: public domain, read 11:30 UTC, 11 Nov: read yes; store yes; show yes; transform yes
- The data: NOAA Aviation Weather Center API: /api/data/metar?ids=LPPT,LPMA,LPPS&format=json and /api/data/taf.
- Size: 0.9 KB for two airports (probed 02:29 UTC).
- The line to print: "METAR and TAF issued in Portugal, read at NOAA Aviation Weather Center <time> UTC."
- What it needs first: Nothing new: the data room already reads LPPT this way (incident.meteorologist@ has LPMA as a suggestion).
How sure is the model: the spread of ECMWF's 51 runs
Proposal. For the grid cell nearest Lisbon and Funchal: the range of gusts across the 51 ensemble members, hour by hour, as a band; the single high-resolution run as a line inside it.
Why it adds value. A single number hides the uncertainty that the forecasters are weighing. The band is the honest picture, and it is what IPMA's own charts page (ECMWF only) does not show.
- Source: ECMWF ensemble (ENS)
- Licence (fact): CC BY 4.0, with ECMWF's Terms of Use, read 11:28 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- The data: ECMWF open data, stream "enfo": the .index beside each file gives the byte range of each member's field, so only the gust fields are fetched.
- Size: One global field is 0.3 to 0.5 MB (probed: 500,611 bytes); 51 members × the steps of one day is of the order of 100 MB to fetch per run, a few KB to keep once cut to two points.
- The line to print: "Copyright © 2026 European Centre for Medium-Range Weather Forecasts (ECMWF). Source: ECMWF open data, CC BY 4.0. Cut to two grid points by us."
- What it needs first: A GRIB2 decoder outside the build; ECMWF asks for restraint (500 to 2000 simultaneous connections for everyone). The ensemble file layout was not probed in this pass.
A second model at 7 km: ICON-EU maximum gusts
Proposal. The same small map as for GFS, from DWD's ICON-EU, which covers mainland Portugal and Madeira at about 7 km: the coast and the Tagus estuary begin to show.
Why it adds value. A finer grid than any global model, under CC BY 4.0, from a body that publishes every field.
- Source: ICON (DWD)
- Licence (fact): CC BY 4.0 (legal notice of dwd.de; the open data server names the same terms), read 11:30 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- The data: opendata.dwd.de/weather/nwp/icon-eu/grib/<HH>/vmax_10m/: one file per hour of forecast.
- Size: About 1.2 MB per file, bzip2 (probed); cut to our box, a few KB of JSON.
- The line to print: "Source: Deutscher Wetterdienst (ICON-EU, run <HH> UTC <date>), CC BY 4.0. Cut to the box and redrawn by us."
- What it needs first: A GRIB2 decoder; only the latest runs stay on the server (about a day), so history must be copied as it is published.
Six models for one place, as numbers
Proposal. What charles.html already shows as a table, as a strip per model for Lisbon and Funchal: gust, mean wind, rain, pressure, hour by hour.
Why it adds value. One request, plain JSON, no decoder: the fastest way to put models side by side.
- Source: Open-Meteo
- Licence (fact): CC BY 4.0 for the data; the free API is for non-commercial use, read 11:29 UTC, 11 Nov: read yes, non-commercial use on the free API; store yes; show yes, with attribution; transform yes, with attribution
- The data: api.open-meteo.com/v1/forecast with models=…; each model's run time at /data/<model>/static/meta.json.
- Size: 18 KB for two places × six models × four variables × 48 hours (probed 02:49 UTC).
- The line to print: "Weather data by Open-Meteo.com (CC BY 4.0); models: ECMWF, NOAA, DWD, Météo-France, Met Office."
- What it needs first: The free API is for non-commercial use, under 10,000 calls a day: a decision for Dinis if the site ever carries advertising.
A second official opinion for any point
Proposal. For any place a reader picks (a parish, a bridge): MET Norway's point forecast, which outside the Nordic area is ECMWF's, post-processed.
Why it adds value. A national service that serves the whole world as open data with a clear licence.
- Source: MET Norway weather API (api.met.no)
- Licence (fact): NLOD 2.0 and CC BY 4.0, read 11:29 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- The data: api.met.no/weatherapi/locationforecast/2.0/complete?lat=…&lon=…
- Size: 3 KB gzipped per place (probed).
- The line to print: "Data from MET Norway (NLOD 2.0, CC BY 4.0)."
- What it needs first: An identifying User-Agent and caching, as their terms ask. Already in the data room for Lisbon.
IPMA's own data, redrawn
Proposal. What the site already draws: warnings by district and hour, stations, the automatic forecast (which IPMA says is statistical processing of ECMWF and AROME).
Why it adds value. The primary source for Portugal; nobody else shows its changes over time.
- Source: IPMA open data (api.ipma.pt)
- Licence (fact): IPMA's own terms on api.ipma.pt: personal or public use, never for profit or offence, the source always named, read 11:28 UTC, 11 Nov: read yes; store unclear; show yes, non-profit, with the source named; transform unclear
- The data: api.ipma.pt (mapped by incident.ipma@ under sources/ipma/).
- Size: 2 to 93 KB per file (incident.weatherwatch@'s reads).
- The line to print: "Fonte: IPMA", on every use.
- What it needs first: Non-profit use only, and the terms are silent on storing and changing: a person should ask IPMA (a draft for incident.media@'s outreach).
The sea: waves from the regional model
Proposal. Significant wave height off Lisbon and Madeira beside IPMA's rough-sea warning ("5 to 7 metres, up to 13 metres maximum").
Why it adds value. The sea state closes the port and floods the riverside; no page ties the wave forecast to the warning.
- Source: IBI wave analysis and forecast (Copernicus Marine)
- Licence (fact): Copernicus Marine service licence (free of charge, attribution), read 11:30 UTC, 11 Nov: read yes, with a free account; store yes; show yes, with attribution; transform unclear
- The data: Copernicus Marine, product IBI_ANALYSISFORECAST_WAV_005_005.
- Size: Not probed: needs a free account.
- The line to print: "Generated using E.U. Copernicus Marine Service Information", with the product's DOI.
- What it needs first: A free account (a person registers); the licence document read in full ("transform" is unclear until then).
What a machine-learned model made of it
Proposal. ECMWF's AIFS beside its physics model IFS for the same hours: where the two agree and differ on the track of the low.
Why it adds value. The open question in forecasting this year, shown on a real storm with real data, both under CC BY 4.0.
- Source: ECMWF AIFS
- Licence (fact): CC BY 4.0, with ECMWF's Terms of Use, read 11:28 UTC, 11 Nov: read yes; store yes; show yes, with attribution; transform yes, with attribution
- The data: ECMWF open data, aifs-single (61 steps in the 12 UTC run of 10 November).
- Size: As for IFS: 0.3 to 0.5 MB per global field.
- The line to print: "Copyright © 2026 ECMWF. Source: ECMWF open data (AIFS and IFS), CC BY 4.0."
- What it needs first: A GRIB2 decoder. AIFS publishes no gusts in its open output: pressure and mean wind only.