Everything here is evidence: an account's own words, read at the address given, at the time given. A post by an outlet or a volunteers' association about a warning is a report or a relay, never the warning: the fact is on the body's own channel. Where we compare two times it is our analysis and says so. Not a warning service: follow IPMA and ANEPC.
The read so far (11 Nov, 11:49 UTC)
- The bodies that decide are not here. We found no Bluesky account for IPMA, ANEPC, the government, the Câmara de Lisboa, Madeira's regional government, CP or TAP (accounts.json,
not_on_bluesky: where we looked). Their own sites are their channels. - Web Summit has an account and did not use it for the decision. Its last post is 10 Nov, 17:36 UTC: "That's a wrap on Day 1 of #WebSummit 2026 🇵🇹". Its page saying Day 2 will not take place went up at 19:09 UTC on 10 November (
s-1110T1909); at our read (11 Nov, 11:47 UTC) the account had posted nothing since: 14 posts since 8 November, none on the weather, Wednesday or Thursday. - Who carried the warnings here: VOST Portugal (a volunteers' association, not an authority) relayed IPMA's red wind warning for Lisbon 37 minutes after IPMA sent it, the red rain warning 15 minutes after, and the move of the red rain to 09:00 57 minutes after: the one change the press we read had not reported by 00:15 (
s-1111T0015). Lusa, the news agency, posted Web Summit's cancellation 53 minutes after the organisers' page. - Foreign weather services spoke of it here before Portugal's could: Spain's AEMET posted that the storm was named Charles at 10:20 UTC on 9 November (2 h 57 min before the time our timeline gives for IPMA's communiqué; offered to the conductor to check), and its posts are the most reposted of all we keep. The UK's Met Office posted on 10 November at 13:00.
- Kept: 199 posts from 18 listed accounts since 8 November, 185 about the storm. Counted, not kept: "depressão Charles" 137; "tempestade Charles" 95; "Storm Charles" 99; "borrasca Charles" 215 public posts.
The key moments: who posted them here, and how long after
Analysis (ours): the time in the first column is the body's own (the timeline row's, or the time IPMA sent the message); the post is the earliest one by a listed account that we tied to the row (links.json).
| UTC | The decision or warning | Did the body post it on Bluesky? | First listed account to carry it | Posts tied |
|---|
| 9 Nov, 13:17 | IPMA names the storm Charles (s-1109T1317) | no account found for IPMA | AEMET, 9 Nov, 10:20 (leaves this site): before, by 2 h 57 min | 2 |
| 9 Nov, 20:30 | ANEPC's warning to the population (s-1109T2030) | no account found for ANEPC | VOST Portugal, 10 Nov, 08:15 (leaves this site): 11 h 45 min after | 1 |
| 10 Nov, 07:18 | IPMA: red wind warning for Lisbon (s-1110T0718) | no account found for IPMA | VOST Portugal, 10 Nov, 07:55 (leaves this site): 37 min after | 2 |
| 10 Nov, 12:10 | The government declares the alert situation (s-1110T1210) | no account found for the government | Público, 10 Nov, 12:25 (leaves this site): 15 min after | 2 |
| 10 Nov, 16:30 | IPMA: red rain warning for Lisbon (sent 16:30) (s-1110T1742) | no account found for IPMA | VOST Portugal, 10 Nov, 16:45 (leaves this site): 15 min after | 1 |
| 10 Nov, 19:09 | Web Summit: Day 2 will not take place (s-1110T1909) | no: its last post is 10 Nov, 17:36 ("That's a wrap on Day 1 of #WebSummit 20…") | Agência Lusa, 10 Nov, 20:02 (leaves this site): 53 min after | 2 |
| 10 Nov, 21:23 | IPMA moves the red rain to 09:00 (sent 21:23) (s-1110T2353) | no account found for IPMA | VOST Portugal, 10 Nov, 22:20 (leaves this site): 57 min after | 1 |
What the listed accounts did not post
The most reposted (of the posts we keep, at the last read)
| Reposts and quotes | Account | Posted (UTC) | Text (excerpt) | Address |
|---|
| 41 | AEMET | 10 Nov, 09:34 | 🌀 Lluvias muy abundantes en el oeste peninsular este martes por la borrasca Bruna. ⚠️ La borrasca Charles, q… | the post (leaves this site) |
| 40 | AEMET | 9 Nov, 10:20 | ⚠️ Nombrada la borrasca Charles: es un sistema de procedencia subtropical que provocará un temporal muy adver… | the post (leaves this site) |
| 40 | AEMET | 11 Nov, 08:31 | ⚠️ Mucha precaución este miércoles: jornada muy adversa por la lluvia, el viento y el mal estado de la mar co… | the post (leaves this site) |
| 36 | AEMET | 10 Nov, 15:01 | ⚠️ ACTUALIZACIÓN AVISO ESPECIAL / Lluvias fuertes y persistentes, rachas de viento muy fuertes y temporal mar… | the post (leaves this site) |
| 31 | AEMET | 10 Nov, 17:57 | ⚠️ El paso de la borrasca Charles dará lugar a tiempo muy adverso en la jornada del miércoles en Canarias y a… | the post (leaves this site) |
| 14 | VOST Portugal | 10 Nov, 09:28 | #FMA_Charles Amanhã, quarta-feira, 11 de novembro de 2026 Portugal Continental - Fica em casa e evita desloca… | the post (leaves this site) |
| 11 | Met Office | 10 Nov, 13:00 | Storm Charles is set to bring disruptive weather to Madeira, Portugal and Spain over the coming days Strong w… | the post (leaves this site) |
| 8 | VOST Portugal | 9 Nov, 16:12 | ℹ️🌀 #FMA_CHARLES / Resumo do Comunicado do #IPMA O IPMA atribuiu o nome CHARLES a uma depressão que se encon… | the post (leaves this site) |
The public conversation, as counts
Posts by anyone that match a search, since 8 November: how many, from how many accounts, the busiest hour, the languages the posts declare. No post, text, handle or address of these is kept: conversation.json holds numbers per hour and nothing else. The searches overlap and are not added up. A "+" means capped.
| Search | Posts | Distinct accounts | Of them, by listed accounts | Busiest hour (posts) | Languages |
|---|
| "depressão Charles" | 137 | 65 | 18 | 10 Nov, 15:00 (14) | none declared 69, pt 53, en 14, es 1 |
| "tempestade Charles" | 95 | 53 | 5 | 11 Nov, 11:00 (16) | pt 47, none declared 35, en 11, es 1 |
| "Storm Charles" | 99 | 74 | 5 | 10 Nov, 15:00 (9) | en 50, none declared 32, pt 4, es 4 |
| "borrasca Charles" | 215 | 106 | 6 | 10 Nov, 20:00 (23) | none declared 95, es 94, ca 12, pt 9 |
| "tempête Charles" | 34 | 23 | 0 | 11 Nov, 11:00 (7) | none declared 22, fr 10, en 2 |
| FMA_Charles | 9 | 2 | 6 | 11 Nov, 08:00 (2) | none declared 6, pt 3 |
| "Web Summit" Charles | 25 | 21 | 1 | 10 Nov, 20:00 (5) | none declared 14, en 6, pt 3, tr 1 |
| "Web Summit" cancelled | 10 | 6 | 0 | 11 Nov, 10:00 (4) | en 5, none declared 3, tr 1, pt 1 |
| "Web Summit" cancelada | 1 | 1 | 1 | 10 Nov, 20:00 (1) | none declared 1 |
Read the same way (mastodon.json, read 11 Nov, 11:51 UTC; the reader: tools/social-mastodon.mjs). No body that decides or warns here has an account we could find, and neither has Web Summit: IPMA, ANEPC (civil protection), Web Summit, the Câmara de Lisboa, VOST Portugal, AEMET, Met Office, Météo-France, Copernicus, MeteoAlarm, Euronews. The organisations' accounts that exist are dormant or unverified:
| Account | Who | What shows it is theirs | Posts in all | Last post (day) |
|---|
eumetsat@mastodon.social | EUMETSAT (as the account names itself) | nothing verified | 48 | 2026-11-09 |
ECMWF@fediscience.org | ECMWF (as the account names itself) | nothing verified | 6 | 2024-02-06 |
Publico@masto.pt | Público (as the account names itself) | nothing verified | 41 | 2022-12-29 |
Lusa@masto.pt | Lusa (as the account names itself) | nothing verified | 8 | 2022-12-22 |
So there is nothing official to put on the time axis from Mastodon. The public conversation under the storm's tags, as counts only (each server sees only what reached it):
| Server | Tag | Posts since 8 Nov | Distinct accounts | Of them automated | Languages |
|---|
| mastodon.social | #stormcharles | 12 | 10 | 0 | en 5, pt 4, nl 3 |
| mastodon.social | #tempestadecharles | 7 | 4 | 0 | pt 7 |
| mastodon.social | #depressaocharles | 4 | 3 | 0 | pt 3, en 1 |
| mastodon.social | #borrascacharles | 12 | 5 | 3 | es 11, en 1 |
| mastodon.social | #websummit | 7 | 7 | 1 | el 1, fr 1, en 4, pt 1 |
| masto.pt | #depressaocharles | 4 | 3 | 0 | pt 3, en 1 |
| masto.pt | #tempestadecharles | 7 | 4 | 0 | pt 7 |
| masto.pt | #mautempo | 21 | 3 | 0 | pt 21 |
| masto.pt | #websummit | 3 | 3 | 1 | en 2, pt 1 |
X
Not readable without logging in: the organisers' and the authorities' profiles answer with an empty page to a client that is not logged in (incident.researcher@'s read, data/decisions/sources.json, platforms_without_login). We do not log in and we keep nothing from it. If a body's post on X matters, it is cited from where the body or the press quotes it.
The accounts read
Each with the reason it counts as official or public-role, and who decided: accounts.json. Each handle opens that account's page. "Kept" is what we store: every post for the organisers, the posts about the storm for the others (matched by words: a few are about other weather, and say so by their text).
| Handle | Who | Kind | Verified by Bluesky | Own posts since 8 Nov | Kept | Last post |
|---|
websummit.bsky.social | Web Summit (the organisers) | organiser | no | 14 | 14 | 10 Nov, 17:36 |
aemet.es | AEMET, Spain's State Meteorological Agency | authority (Spain) | yes | 14 | 5 | 11 Nov, 09:08 |
meteofrance.com | Météo-France | authority (France) | yes | 3 | 0 | 10 Nov, 15:37 |
metoffice.gov.uk | Met Office (United Kingdom) | authority (United Kingdom) | yes | 23 | 1 | 11 Nov, 11:30 |
ecmwf.int | ECMWF, the European Centre for Medium-Range Weather Forecasts | intergovernmental body | yes | 5 | 0 | 11 Nov, 09:26 |
eumetsat.int | EUMETSAT, Europe's weather-satellite agency | intergovernmental body | no | 3 | 0 | 10 Nov, 10:01 |
vost.pt | VOST Portugal, a volunteers' association for emergencies (not an authority) | volunteer organisation | no | 118 | 103 | 11 Nov, 10:15 |
metrolisboa.pt | Metropolitano de Lisboa (the handle is the operator's domain; the profile is empty) | transport operator | no | 0 | 0 | 2026-03-31 13:25 |
lusa.pt | Agência Lusa, Portugal's news agency | press (wire) | no | 269 | 56 | 11 Nov, 11:45 |
publico.pt | Público | press | yes | 158 | 13 | 11 Nov, 10:58 |
rr.pt | Renascença | press | no | 0 | 0 | 2026-05-03 17:01 |
lxparapessoas.pt | LPP, Lisboa Para Pessoas (a Lisbon newspaper) | press (local) | no | 1 | 1 | 10 Nov, 16:22 |
euronews.com | Euronews | press | yes | 202 | 4 | 11 Nov, 11:45 |
reuters.com | Reuters | press (wire) | yes | 456 | 1 | 11 Nov, 11:45 |
apnews.com | The Associated Press | press (wire) | yes | 118 | 0 | 11 Nov, 11:30 |
theguardian.com | The Guardian | press | yes | 292 | 0 | 11 Nov, 11:43 |
bloomberg.com | Bloomberg News | press | yes | 189 | 1 | 11 Nov, 11:30 |
meteored.com | Meteored (a weather publisher) | press (weather) | no | 0 | 0 | 2026-11-04 12:06 |
Left out, for the conductor to decide (nothing of theirs is stored): camaralisboa.bsky.social (not verified, not on the Câmara's domain, no posts: nothing shows it is the Câmara's); perturbacoes.pt (says itself that it is unofficial; who runs it is not stated: it could be a private person's); vostspain.bsky.social (not verified, not on its own domain; Spain is outside this incident's core); named journalists and meteorologists posting as such (a public role is a judgement per person: none is added without incident.conductor@'s yes. In round 1 their posts are inside the counts only.).
How this works
What we call (Bluesky's public API, no account, no login, one request every 3 seconds, a client named storm-charles-social-reader):
| Call | For | What we keep from the answer |
|---|
public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=<handle> | each listed account: does it exist, is it verified | name, verification, follower and post counts |
public.api.bsky.app/xrpc/app.bsky.feed.getAuthorFeed?actor=<handle>&limit=100&filter=posts_no_replies | each listed account's own posts, back to 8 November (6 pages at most) | per post: time posted, time read, address, text (press: 200 characters), links, hashtags, what media it carries (not the media), counters, Bluesky's content id |
api.bsky.app/xrpc/app.bsky.feed.searchPosts?q=<search>&sort=latest&since=…&until=… | the public conversation | numbers only: posts per hour, per language, how many distinct accounts |
What is public: every post read here is public on Bluesky to anyone without an account; so are the handles, the counters and the content ids. The search answers only its first page without a login, so we walk back in time by asking again with until set to the oldest post of the page before.
What we refuse to keep:
- any post, name, handle, identifier or address of a private person. The search's answer is counted in memory and dropped; it is never written to disk, to a vault or to a log.
- a mention of an unlisted account inside a listed account's post: replaced by "@[an account not on our list]".
- replies under official posts, follower lists, likes by named accounts: never requested.
- images and video: not downloaded, not shown. The card says what the post carries and links out.
- press text beyond a short excerpt.
What a card shows: who (and why the account counts), the time posted, the text, the timeline row it bears on and how, when we read it, the counters at that read, the content id, our record, and last the address on Bluesky, marked as leaving this site. Screenshots of the official posts are incident.archivist@'s (asked: the list is in capture-asks.json); when captured, the card will show our capture first.
The files: accounts.json (the list, the reasons, where we looked and found nothing, who was left out), posts.json (the index; posts/ holds one file per day: 2026-11-08, 2026-11-09, 2026-11-10, 2026-11-11), links.json (post to timeline row), offers.json (24 things the timeline lacks, offered to the conductor), conversation.json (the counts). The reader: tools/social-read.mjs; this page: tools/social-page.mjs.
Limits
- Bluesky is small in Portugal: silence here says where a body publishes, not that it was silent.
- A post's time is the one it gives for itself; Bluesky's own indexing time is kept beside it (
indexed_utc). - "About the storm" is a match on words. It can miss a post and keep a stray one. Correction, 11 November 05:45 UTC: until then it missed posts that count occurrences without naming the weather (two by Lusa that night, four earlier); the words were widened and those posts are now kept.
- Reuters' feed is longer than the six pages we read: its count since 8 November is a floor.
A wrong account, a wrong time, an account that should be on the list or off it: contribute.
The time axis, the cards and the counts are drawn here from posts.json, accounts.json, conversation.json and the timeline's signals.json. Without JavaScript, read the tables below or those files.