{
  "lastUpdated": "2026-06-29T21:28:31.838Z",
  "events": [
    {
      "hash": "6e14431d6080af9400401e60e215cc4a5e14937a",
      "shortHash": "6e14431",
      "date": "2026-06-26T13:01:42.000Z",
      "category": "feature",
      "title": "Flag 'Moving Downstream' flagship with a Latest link under the research callout",
      "rawSubject": "feat(home): flag 'Moving Downstream' flagship with a Latest link under the research callout",
      "url": "/"
    },
    {
      "hash": "9b8551958175f51e4bd03c6249ee0adb37a8b8c9",
      "shortHash": "9b85519",
      "date": "2026-06-26T12:34:11.000Z",
      "category": "feature",
      "title": "Ship 'The Oil Crisis Is Moving Downstream' flagship",
      "rawSubject": "feat(research): ship 'The Oil Crisis Is Moving Downstream' flagship",
      "url": "/"
    },
    {
      "hash": "aa5ae51d2a8cf185495bb71a994bbdf1358c2566",
      "shortHash": "aa5ae51",
      "date": "2026-06-25T09:58:41.000Z",
      "category": "newsletter",
      "title": "2026-06-25",
      "rawSubject": "chore: newsletter sent 2026-06-25",
      "url": "/briefings"
    },
    {
      "hash": "7b06c185b4ac1a55f731c63fe8accb6416eac791",
      "shortHash": "7b06c18",
      "date": "2026-06-25T09:58:11.000Z",
      "category": "newsletter",
      "title": "Send Euro weekly briefing 2026-06-25",
      "rawSubject": "newsletter: send Euro weekly briefing 2026-06-25",
      "url": "/briefings"
    },
    {
      "hash": "263cb2f6da13a3dd95e9ae38842071a9921683b8",
      "shortHash": "263cb2f",
      "date": "2026-06-24T10:08:52.000Z",
      "category": "feature",
      "title": "Add hover permalink (#) affordance per event",
      "rawSubject": "feat(hormuz-timeline): add hover permalink (#) affordance per event",
      "url": "/"
    },
    {
      "hash": "5bd4021eaac3dd503571db9280fe97fa5d128385",
      "shortHash": "5bd4021",
      "date": "2026-06-24T09:54:21.000Z",
      "category": "feature",
      "title": "Replicate sourced 2026 Hormuz crisis timeline to Euro",
      "rawSubject": "feat(hormuz-timeline): replicate sourced 2026 Hormuz crisis timeline to Euro",
      "url": "/"
    },
    {
      "hash": "c58b5774038e149496ede5fab1089fb759bfce90",
      "shortHash": "c58b577",
      "date": "2026-06-21T15:29:54.000Z",
      "category": "feature",
      "title": "Pressure-test the Turkey oil-dollar cascade thesis (+Europe Gulf-dependence tail)",
      "rawSubject": "feat(analysis): pressure-test the Turkey oil-dollar cascade thesis (+Europe Gulf-dependence tail)",
      "url": "/"
    },
    {
      "hash": "e7bbadcead69aad9033cbf1a95fdb5dc73670edb",
      "shortHash": "e7bbadc",
      "date": "2026-06-21T14:31:34.000Z",
      "category": "feature",
      "title": "Red alert — Iran declares Strait of Hormuz closed (US disputes); banner+article+spot-physical",
      "rawSubject": "feat(hormuz): red alert — Iran declares Strait of Hormuz closed (US disputes); banner+article+spot-physical",
      "url": "/"
    },
    {
      "hash": "c66f120e670a49cd5e68147cc111133b203dda92",
      "shortHash": "c66f120",
      "date": "2026-06-19T08:33:45.000Z",
      "category": "feature",
      "title": "Reframe to \"under strain\" after Switzerland-talks delay + Lebanon escalation",
      "rawSubject": "feat(mou): reframe to \"under strain\" after Switzerland-talks delay + Lebanon escalation",
      "url": "/"
    },
    {
      "hash": "138c361c249773a23661a713e670118156582c72",
      "shortHash": "138c361",
      "date": "2026-06-18T09:24:37.000Z",
      "category": "feature",
      "title": "Link Last Prompt as the individual-scale companion",
      "rawSubject": "feat(research): link Last Prompt as the individual-scale companion",
      "url": "/"
    },
    {
      "hash": "47ba707911d924336f5b39b4cc85527999b1922a",
      "shortHash": "47ba707",
      "date": "2026-06-18T08:15:22.000Z",
      "category": "newsletter",
      "title": "2026-06-18",
      "rawSubject": "chore: newsletter sent 2026-06-18",
      "url": "/briefings"
    },
    {
      "hash": "225cec1a22478c6acda397d26c41db0e65330ca6",
      "shortHash": "225cec1",
      "date": "2026-06-18T08:14:54.000Z",
      "category": "newsletter",
      "title": "Euro weekly briefing 18 June 2026 (send)",
      "rawSubject": "newsletter: Euro weekly briefing 18 June 2026 (send)",
      "url": "/briefings"
    },
    {
      "hash": "f5a11d1f7132dc2745bf5e914f4fb83acf28a86b",
      "shortHash": "f5a11d1",
      "date": "2026-06-17T09:23:06.000Z",
      "category": "feature",
      "title": "Feature strategic reports on the Research hub",
      "rawSubject": "feat: feature strategic reports on the Research hub",
      "url": "/"
    },
    {
      "hash": "e550549ea46d0c80356364be5570fc8738847812",
      "shortHash": "e550549",
      "date": "2026-06-16T13:48:33.000Z",
      "category": "feature",
      "title": "Add Research hub tab + homepage callout",
      "rawSubject": "feat: add Research hub tab + homepage callout",
      "url": "/"
    },
    {
      "hash": "a21da84407fe59d3b97aeb85350195342ded1679",
      "shortHash": "a21da84",
      "date": "2026-06-12T09:03:19.000Z",
      "category": "feature",
      "title": "Hormuz Inventory Runway — /runway interactive page + cross-posted analysis",
      "rawSubject": "feat: Hormuz Inventory Runway — /runway interactive page + cross-posted analysis",
      "url": "/"
    },
    {
      "hash": "612db50e42b2877fe765f089055a77723da6caf2",
      "shortHash": "612db50",
      "date": "2026-06-11T08:21:18.000Z",
      "category": "newsletter",
      "title": "2026-06-11",
      "rawSubject": "chore: newsletter sent 2026-06-11",
      "url": "/briefings"
    },
    {
      "hash": "52ded7abf858548f7b062bad82f44c4bffeb37c6",
      "shortHash": "52ded7a",
      "date": "2026-06-11T08:20:42.000Z",
      "category": "newsletter",
      "title": "Euro weekly briefing 11 June 2026 (send)",
      "rawSubject": "newsletter: Euro weekly briefing 11 June 2026 (send)",
      "url": "/briefings"
    },
    {
      "hash": "bab0c6174b473f7e393e312a701f7d2d7e6adc3d",
      "shortHash": "bab0c61",
      "date": "2026-06-10T08:25:22.000Z",
      "category": "feature",
      "title": "Make chokepoint risk badges dynamic from live PortWatch transit",
      "rawSubject": "feat(supply): make chokepoint risk badges dynamic from live PortWatch transit",
      "url": "/supply"
    },
    {
      "hash": "57725f5eb3488be8a84e263aeed844b083898f37",
      "shortHash": "57725f5",
      "date": "2026-06-10T07:55:21.000Z",
      "category": "feature",
      "title": "Lift briefing sign-up to the top of the dashboard",
      "rawSubject": "feat(home): lift briefing sign-up to the top of the dashboard",
      "url": "/"
    },
    {
      "hash": "6a6216cf1b1bbd6316caadbc8d5afe52a62e51f5",
      "shortHash": "6a6216c",
      "date": "2026-06-10T07:46:35.000Z",
      "category": "feature",
      "title": "Move weekly briefing sign-up high + make it prominent",
      "rawSubject": "feat(home): move weekly briefing sign-up high + make it prominent",
      "url": "/"
    },
    {
      "hash": "f2bfd606bdf1cf6fec0e996c2a60b4e9b9cd9871",
      "shortHash": "f2bfd60",
      "date": "2026-06-09T15:07:11.000Z",
      "category": "feature",
      "title": "Europe Replacement Barrel Tracker (EuroOilWatch)",
      "rawSubject": "feat(supply): Europe Replacement Barrel Tracker (EuroOilWatch)",
      "url": "/supply"
    },
    {
      "hash": "c9c4d5300bc99e81338213b9bb4739501c4aff80",
      "shortHash": "c9c4d53",
      "date": "2026-06-09T14:52:52.000Z",
      "category": "feature",
      "title": "Oil Route Stress Score + AIS-confidence flags on chokepoint panel",
      "rawSubject": "feat(supply): Oil Route Stress Score + AIS-confidence flags on chokepoint panel",
      "url": "/supply"
    },
    {
      "hash": "a803d5f42a21843eddb29d4c14f7a07e6754824a",
      "shortHash": "a803d5f",
      "date": "2026-06-09T13:58:05.000Z",
      "category": "feature",
      "title": "Capacity-weight the Chokepoint Transit Monitor (DWT, not ship count)",
      "rawSubject": "feat(supply): capacity-weight the Chokepoint Transit Monitor (DWT, not ship count)",
      "url": "/supply"
    },
    {
      "hash": "8fac888f7f3d955aa25ffef832acc4c9c34b7f7e",
      "shortHash": "8fac888",
      "date": "2026-06-09T13:45:28.000Z",
      "category": "feature",
      "title": "Tailor Port Oil-Flow roster per site (+ keep global hubs)",
      "rawSubject": "feat(supply): tailor Port Oil-Flow roster per site (+ keep global hubs)",
      "url": "/supply"
    },
    {
      "hash": "e3609d82ac5f97a4974a0c8db046aec98c551a17",
      "shortHash": "e3609d8",
      "date": "2026-06-09T13:29:40.000Z",
      "category": "feature",
      "title": "Port Oil-Flow Monitor from IMF PortWatch Daily_Ports_Data",
      "rawSubject": "feat(supply): Port Oil-Flow Monitor from IMF PortWatch Daily_Ports_Data",
      "url": "/supply"
    },
    {
      "hash": "37765fa89a7cae3f94a8547fbd9399aeef18eed3",
      "shortHash": "37765fa",
      "date": "2026-06-09T12:57:13.000Z",
      "category": "feature",
      "title": "Chokepoint Transit Monitor from IMF PortWatch",
      "rawSubject": "feat(supply): Chokepoint Transit Monitor from IMF PortWatch",
      "url": "/supply"
    },
    {
      "hash": "c1ee7171375f878d339ef6d49df2c92a7f89fdd3",
      "shortHash": "c1ee717",
      "date": "2026-06-09T12:24:03.000Z",
      "category": "analysis",
      "title": "From Hormuz to Hunger, six weeks on — mechanism validated, scenarios not",
      "rawSubject": "analysis: From Hormuz to Hunger, six weeks on — mechanism validated, scenarios not",
      "url": "/analysis"
    },
    {
      "hash": "5fa5da2f7442d990931e7d41bf7bc7d5dc8655cc",
      "shortHash": "5fa5da2",
      "date": "2026-06-09T08:37:11.000Z",
      "category": "feature",
      "title": "Add Vulnerability Tiering as the third tool",
      "rawSubject": "feat(doom-loop): add Vulnerability Tiering as the third tool",
      "url": "/"
    },
    {
      "hash": "8e2d7cb27433efd44567bc087ca12e1d7af894ef",
      "shortHash": "8e2d7cb",
      "date": "2026-06-08T15:49:59.000Z",
      "category": "feature",
      "title": "Add live station-level fuel prices (DGEG); drop Germany",
      "rawSubject": "feat(portugal): add live station-level fuel prices (DGEG); drop Germany",
      "url": "/"
    },
    {
      "hash": "7b80bb6b0417af1d452bfdf987ba57647d860029",
      "shortHash": "7b80bb6",
      "date": "2026-06-08T14:37:29.000Z",
      "category": "feature",
      "title": "Add /doom-loop page with Fragility Monitor + Doom Loop Engine",
      "rawSubject": "feat(doom-loop): add /doom-loop page with Fragility Monitor + Doom Loop Engine",
      "url": "/"
    },
    {
      "hash": "71547274300214cec9355c34ecd9b69709f5e21e",
      "shortHash": "7154727",
      "date": "2026-06-08T07:34:48.000Z",
      "category": "feature",
      "title": "Expose FR/ES/IT station-level fuel prices via public JSON API",
      "rawSubject": "feat(api): expose FR/ES/IT station-level fuel prices via public JSON API",
      "url": "/api"
    },
    {
      "hash": "ee7de6b05cf8a797956c6b25eb8c88d9aad9db00",
      "shortHash": "ee7de6b",
      "date": "2026-06-04T08:31:58.000Z",
      "category": "newsletter",
      "title": "2026-06-04",
      "rawSubject": "chore: newsletter sent 2026-06-04",
      "url": "/briefings"
    },
    {
      "hash": "75626c49225439ca6a26c6887321b55c2e54d7a6",
      "shortHash": "75626c4",
      "date": "2026-06-04T08:31:30.000Z",
      "category": "newsletter",
      "title": "4 June EuroOilWatch weekly briefing",
      "rawSubject": "newsletter: 4 June EuroOilWatch weekly briefing",
      "url": "/briefings"
    },
    {
      "hash": "c5d4ce54979c778f6c3ed1bbde97ea4ce839c285",
      "shortHash": "c5d4ce5",
      "date": "2026-06-03T13:49:49.000Z",
      "category": "feature",
      "title": "Article + BreadcrumbList JSON-LD on Euro analysis pages",
      "rawSubject": "feat(seo): Article + BreadcrumbList JSON-LD on Euro analysis pages",
      "url": "/"
    },
    {
      "hash": "8ea7eab80d2e5ca64287df5836a6a0c345e724fb",
      "shortHash": "8ea7eab",
      "date": "2026-06-03T12:40:34.000Z",
      "category": "feature",
      "title": "Unique data-driven price summary on FR/ES/IT area pages",
      "rawSubject": "feat(seo): unique data-driven price summary on FR/ES/IT area pages",
      "url": "/"
    },
    {
      "hash": "a2f6f0472fbc21eddfe86a43a886f342ce1bc30f",
      "shortHash": "a2f6f04",
      "date": "2026-06-03T10:02:57.000Z",
      "category": "feature",
      "title": "JSON-LD Dataset + breadcrumbs on FR/ES/IT area pages",
      "rawSubject": "feat(seo): JSON-LD Dataset + breadcrumbs on FR/ES/IT area pages",
      "url": "/"
    },
    {
      "hash": "bbb852de43063623edc9cf313f1fd55fc68508b4",
      "shortHash": "bbb852d",
      "date": "2026-06-03T09:38:43.000Z",
      "category": "feature",
      "title": "Crawlable département/provincia directory on country hubs",
      "rawSubject": "feat(seo): crawlable département/provincia directory on country hubs",
      "url": "/"
    },
    {
      "hash": "0ab0c031d77d8e94ab79a105e78e140882169f62",
      "shortHash": "0ab0c03",
      "date": "2026-06-02T10:57:40.000Z",
      "category": "feature",
      "title": "Switch from live API to tankerkoenig bulk CSV dataset",
      "rawSubject": "feat(germany): switch from live API to tankerkoenig bulk CSV dataset",
      "url": "/"
    },
    {
      "hash": "9c21b1364f1e492ef1b4c153abf5948426f747ec",
      "shortHash": "9c21b13",
      "date": "2026-06-01T14:10:55.000Z",
      "category": "feature",
      "title": "Germany foundation — 16 Bundesländer pages + tankerkoenig-ready fetcher",
      "rawSubject": "feat(country/de): Germany foundation — 16 Bundesländer pages + tankerkoenig-ready fetcher",
      "url": "/"
    },
    {
      "hash": "6d48e393ae565e7e6063d56e3fce685e07994005",
      "shortHash": "6d48e39",
      "date": "2026-06-01T13:54:28.000Z",
      "category": "feature",
      "title": "Italy granular live station prices + 107 SEO pages",
      "rawSubject": "feat(country/it): Italy granular live station prices + 107 SEO pages",
      "url": "/"
    },
    {
      "hash": "17e881501262c0fb3f68a5e8b63345e847d70e06",
      "shortHash": "17e8815",
      "date": "2026-06-01T13:36:28.000Z",
      "category": "feature",
      "title": "Spain granular live station prices + 52 SEO pages",
      "rawSubject": "feat(country/es): Spain granular live station prices + 52 SEO pages",
      "url": "/"
    },
    {
      "hash": "7c97ff0fb63c6603aa3a6042d22ab49dd0fad192",
      "shortHash": "7c97ff0",
      "date": "2026-06-01T11:24:32.000Z",
      "category": "feature",
      "title": "Typeahead search — by city name OR postal code",
      "rawSubject": "feat(home): typeahead search — by city name OR postal code",
      "url": "/"
    },
    {
      "hash": "0b5bbef9f19fa23aef8e99224cba83031e749985",
      "shortHash": "0b5bbef",
      "date": "2026-06-01T11:13:14.000Z",
      "category": "feature",
      "title": "City-level filter on département pages",
      "rawSubject": "feat(country/fr): city-level filter on département pages",
      "url": "/"
    },
    {
      "hash": "9698a1680cac31d55eb9d44d68cf99509e484df3",
      "shortHash": "9698a16",
      "date": "2026-06-01T11:03:03.000Z",
      "category": "feature",
      "title": "Prominent French fuel-price search box on dashboard",
      "rawSubject": "feat(home): prominent French fuel-price search box on dashboard",
      "url": "/"
    },
    {
      "hash": "ff7b8614e2896e22d52179954f1f05caeec9093c",
      "shortHash": "ff7b861",
      "date": "2026-06-01T10:47:29.000Z",
      "category": "feature",
      "title": "96 per-département SEO pages with full station detail",
      "rawSubject": "feat(country/fr): 96 per-département SEO pages with full station detail",
      "url": "/"
    },
    {
      "hash": "2ac81b7fab73a27c5534e78516608d1e8ffbe46c",
      "shortHash": "2ac81b7",
      "date": "2026-06-01T08:34:11.000Z",
      "category": "feature",
      "title": "Live station-level fuel prices from prix-carburants.gouv.fr",
      "rawSubject": "feat(country/fr): live station-level fuel prices from prix-carburants.gouv.fr",
      "url": "/"
    },
    {
      "hash": "fcdd1551572bc9f4e2e0024f86da19e0523597c0",
      "shortHash": "fcdd155",
      "date": "2026-06-01T07:31:07.000Z",
      "category": "feature",
      "title": "Rebuild as proper transparency page with source hierarchy + citation block",
      "rawSubject": "feat(methodology): rebuild as proper transparency page with source hierarchy + citation block",
      "url": "/methodology"
    },
    {
      "hash": "49befbe35913b9f0fe86796ea64ee51a03f37952",
      "shortHash": "49befbe",
      "date": "2026-05-29T14:52:25.000Z",
      "category": "analysis",
      "title": "From Hormuz to Bundibugyo — second case for the Compound Cascade Framework",
      "rawSubject": "analysis: From Hormuz to Bundibugyo — second case for the Compound Cascade Framework",
      "url": "/analysis"
    },
    {
      "hash": "9da4a45daab16be6bfba0bd9012118b54019706b",
      "shortHash": "9da4a45",
      "date": "2026-05-29T11:11:27.000Z",
      "category": "feature",
      "title": "GA4 with Consent Mode v2 + cookie banner",
      "rawSubject": "feat(analytics): GA4 with Consent Mode v2 + cookie banner",
      "url": "/"
    },
    {
      "hash": "c0fc2037179e6da71a9beaba63065a7a0213a5d3",
      "shortHash": "c0fc203",
      "date": "2026-05-28T08:47:43.000Z",
      "category": "newsletter",
      "title": "2026-05-28",
      "rawSubject": "chore: newsletter sent 2026-05-28",
      "url": "/briefings"
    },
    {
      "hash": "afa3d64fef7fa6fc3058f39d4b8bf609c1b5d806",
      "shortHash": "afa3d64",
      "date": "2026-05-28T08:47:17.000Z",
      "category": "newsletter",
      "title": "28 May EuroOilWatch weekly briefing",
      "rawSubject": "newsletter: 28 May EuroOilWatch weekly briefing",
      "url": "/briefings"
    },
    {
      "hash": "d3faaa05bf061a999b95da06e2ef484ac0ce8388",
      "shortHash": "d3faaa0",
      "date": "2026-05-27T09:07:19.000Z",
      "category": "feature",
      "title": "/fertilizer page — Hormuz-to-Hunger operational tracker",
      "rawSubject": "feat(fertilizer): /fertilizer page — Hormuz-to-Hunger operational tracker",
      "url": "/"
    },
    {
      "hash": "160f1b063dea7a3af51befaf460474796d03fb32",
      "shortHash": "160f1b0",
      "date": "2026-05-27T08:53:27.000Z",
      "category": "report",
      "title": "Ungate H2H + Fall of UK downloads + add voluntary newsletter CTA",
      "rawSubject": "chore(reports): ungate H2H + Fall of UK downloads + add voluntary newsletter CTA",
      "url": "/reports"
    },
    {
      "hash": "5c75940bcaea1b59a4556c73fb5fc0cf56b2727b",
      "shortHash": "5c75940",
      "date": "2026-05-24T15:11:22.000Z",
      "category": "feature",
      "title": "War-Risk Watch — editorial Lloyd's / JWC indicator panel",
      "rawSubject": "feat(supply): War-Risk Watch — editorial Lloyd's / JWC indicator panel",
      "url": "/supply"
    },
    {
      "hash": "2e73e4bde9f49c52697cfd37199ecb81855d5f43",
      "shortHash": "2e73e4b",
      "date": "2026-05-24T07:49:40.000Z",
      "category": "analysis",
      "title": "Cross-post Beyond the Strait — Why Iran's Next Target Set Matters More Than Hormuz",
      "rawSubject": "analysis: cross-post Beyond the Strait — Why Iran's Next Target Set Matters More Than Hormuz",
      "url": "/analysis"
    },
    {
      "hash": "28fc097fa8dca6f4c3cb6af9fedc3d20d40e0769",
      "shortHash": "28fc097",
      "date": "2026-05-21T12:38:25.000Z",
      "category": "newsletter",
      "title": "2026-05-21",
      "rawSubject": "chore: newsletter sent 2026-05-21",
      "url": "/briefings"
    },
    {
      "hash": "a33bb24d85c1e6da5f519ae3082aca93ff4b917e",
      "shortHash": "a33bb24",
      "date": "2026-05-21T12:37:58.000Z",
      "category": "newsletter",
      "title": "21 May EuroOilWatch weekly briefing",
      "rawSubject": "newsletter: 21 May EuroOilWatch weekly briefing",
      "url": "/briefings"
    },
    {
      "hash": "9c80943e3a100c8ab01b76994380d12d1eaebd8f",
      "shortHash": "9c80943",
      "date": "2026-05-20T10:00:12.000Z",
      "category": "feature",
      "title": "Tanker-activity panel (Phase 1) on /supply",
      "rawSubject": "feat(supply): tanker-activity panel (Phase 1) on /supply",
      "url": "/supply"
    },
    {
      "hash": "27baa25164c838cc1dab3be79474f2129dbb1676",
      "shortHash": "27baa25",
      "date": "2026-05-18T13:09:55.000Z",
      "category": "analysis",
      "title": "Cross-post The 2026 Oil Black Swan & the Four Doom Loops",
      "rawSubject": "analysis: cross-post The 2026 Oil Black Swan & the Four Doom Loops",
      "url": "/analysis"
    },
    {
      "hash": "3768936cc0b97e10931b2f0c9c37d53b1cf6f9a5",
      "shortHash": "3768936",
      "date": "2026-05-15T07:34:04.000Z",
      "category": "feature",
      "title": "Physical NWE crude editorial estimate + bunker transparency",
      "rawSubject": "feat(home): physical NWE crude editorial estimate + bunker transparency",
      "url": "/"
    }
  ],
  "siteBaseUrl": "https://eurooilwatch.com"
}