Strait of Hormuz · 26°N 56°E
Projects
Maritime Intelligence · 2025

The world's oil chokepoint,
watched in real time by AI.

HormuzWatch tracks every vessel, news headline, and market signal at the Strait of Hormuz and runs them through a live Apache Flink + Claude AI pipeline that generates intelligence briefings, trajectory forecasts, risk heatmaps, and throughput estimates updated in seconds.

Apache Flink · Ververica CloudClaude AI · live briefingsApache Kafka · AivenReact + Mapbox GLFastAPI · Python 3.12live · hormuzwatch.lopez.fi
The system in action

A morning
at the strait.

A dark AIS event and a news alert arrive within minutes of each other. This is how the pipeline responds — from raw signal to intelligence briefing in under five minutes.

Illustrative scenario based on real system behaviour.

hormuzwatch · intelligence-pipeline · live
06:14:32AIS
DarkAISDetector·MMSI 423XXXXXX transponder silent — Qeshm Island area, 27.1°N 56.3°E
06:14:33KAFKA
intelligence-events·Event published to Kafka topic · significance score: 42
06:17:08NEWS
NewsAISCorrelator·Reuters RSS: "Iran warns of response to new US maximum pressure measures"
06:17:44CEP
MultiSignalCorrelator·Pattern matched: 2 detectors fired in 27m 12s window · risk +35 · MULTI_SIGNAL_CORRELATED
06:19:21AI
synthesizer.py·Claude Sonnet triggered · risk score: 82 · synthesis: 4,230ms · citing 2019 tanker attacks
06:21:00HEATMAP
RiskHeatmapAggregator·Grid cell 27.0/56.0 risk: 94/100 · heatmap RED over strait mouth
06:22:14MARKET
market_poller.py·Brent: $84.20 → $85.60 (+$1.40) · Frontline FRO: +1.2% · Polymarket Iran action: 22% (+4pp)
$_
Why it matters

33 kilometres.
One fifth of world supply.

The Strait of Hormuz sits between Iran and Oman at the mouth of the Persian Gulf. At its narrowest point it is 33 kilometres wide. Roughly 20% of the world's daily oil supply passes through it — about 17–21 million barrels every day.

Any disruption — an Iranian vessel seizure, a naval confrontation, a credible closure threat — sends commodity markets moving within hours. What is physically happening in the strait is directly relevant to energy traders, shipping analysts, and anyone tracking how a narrow waterway shapes the global economy.

World daily oil supply · ~100M bbl/day
Strait of Hormuz~20M bbl/day
Rest of world supply~80M bbl/day
Iran, Iraq, UAE, Kuwait, Saudi Arabia, Bahrain — all export via the strait
Persian Gulf · Strait of Hormuzlive AIS coverage
I R A NUAE · SAUDI ARABIA · OMANOMANWESTBOUND TANKER LANESTRAIT OF HORMUZ33km at narrowestQeshmtankerlanerisk zone
Four incidents that shaped the strait
2011

Iran closure threat

In response to threatened EU oil embargo, Iran warns it will close the strait. US 5th Fleet deploys additional assets. Tanker war-risk insurance rates spike 200% in 48 hours.

AIS signature

Military vessel clustering near strait mouth; commercial traffic bunching at Fujairah anchorage.

2012

US-EU sanctions peak

EU embargo on Iranian oil takes effect. Shadow fleet begins to emerge as Iran routes oil through intermediaries. Dark AIS events increase 340% vs. baseline in the strait area.

AIS signature

Persistent dark AIS clusters near Qeshm and Larak Islands. Ship-to-ship transfers in open Gulf waters.

2019

Tanker attacks

MT Front Altair and Kokuka Courageous attacked by limpet mines. USS Abraham Lincoln carrier strike group deployed. Brent crude rose 4% in 24 hours. Lloyd's of London suspends war-risk cover.

AIS signature

Anomalous military proximity to tanker lanes in days prior. Unusual clustering of small vessels near incident coordinates.

2024

Houthi escalation

Houthi attacks on Red Sea shipping trigger partial re-routing via Cape of Good Hope. Hormuz traffic holds steady but freight rates for alternative routes surge 300%. Shadow fleet activity increases.

AIS signature

Shift in tanker routing choices visible in AIS. Sanctioned vessel density in Hormuz increases as compliant fleet avoids Red Sea.

Capabilities

What the system
actually does.

A streaming data pipeline and a monitoring dashboard. The pipeline ingests AIS transponder data, news feeds, commodity prices, and prediction markets, processes them through twelve Flink stream processors on Ververica Cloud, and synthesises the results with Claude. The dashboard makes all of it visible and queryable.

Live vessel tracking

Every commercial ship in the strait tracked in real time from three AIS sources. Ships render as directional icons colour-coded by type: orange tankers, red military, cyan LNG. 12-position trail lines and a mouseover detail panel show MMSI, speed, flag, and nav status.

Sanctioned vessel detection

Known IMO-sanctioned MMSIs matched against the live AIS feed. Iranian Revolutionary Guard vessels and shadow fleet tankers glow red on the map and trigger immediate CRITICAL intelligence events with no analyst intervention.

AI situation reports

Claude consumes the intelligence event stream and generates plain-language briefings citing historical precedents: 2019 tanker attacks, 2012 sanctions, 2011 closure threat. A four-layer cost control system keeps the daily AI cost at cents.

Market correlation

WTI and Brent crude, LNG futures, tanker stocks, energy majors, and Polymarket/Kalshi prediction market odds updated every 30 seconds. Maritime intelligence and commodity signals on the same screen.

Trajectory forecasting

Dashed prediction lines extend from every moving vessel at 15, 30, 45, 60, 90, and 120 minutes. Flink haversine dead-reckoning runs per vessel at ≥ 1.0 kt. Analysts can see if a military vessel intersects tanker lanes before it arrives.

Natural language queries

A chat panel accepts plain-English questions grounded in live Flink-processed state. Answers stream token-by-token via SSE. Ask about specific vessels, compare today's risk to past incidents, or query current throughput.

Risk heatmap

A Mapbox fill layer shades 0.2° geographic grid cells from transparent green through amber to glowing red. During chokepoint events, risk concentrates at the strait mouth near Qeshm Island — visible immediately without reading the intel feed.

Analyst geofence studio

Draw any polygon on the map; it becomes a live monitoring zone. The Flink DynamicGeofenceFilter uses JTS polygon containment for O(1) testing on every AIS position. Zones persist across sessions with no code changes required.

AI output

What Claude
actually generates.

Intelligence briefing · Claude · live system output
HormuzWatch briefing tab — real Claude AI situation report, risk 65/100, U.S. seizure of Iranian ship TERMEH

Real output from the live system. Risk 65/100 · U.S. seizure of Iranian ship TERMEH · Brent $95.1

Natural language query · fleet proximity graph · live system
HormuzWatch analytics tab — NL query panel and D3 fleet proximity graph, 1954 vessels 10560 links
REAL EXCHANGE · live system · 2026
Q

which vessel was attacked yesterday in hormuz?

A

Based on the provided intelligence events, there is no specific mention of an attack on a vessel in the Strait of Hormuz yesterday. The recent reports primarily focus on the U.S. seizure of an Iranian ship named "TERMEH," which has led to heightened tensions in the region. The situation remains tense with significant military and geopolitical activities, but no reports of attacks.

grounded in live Flink state · 1,954 vessels · 10,560 proximity links
Architecture

How data flows
through the system.

Ingestreal-time / 30s polling
AIS transponders
AISStream.io WebSocket · MarineTraffic · AISHub
News feeds
Reuters · Al Jazeera · AP · USNI RSS
Market data
Yahoo Finance · 30s · 30+ tickers
Prediction markets
Polymarket · Kalshi
Apache Kafka (Aiven)<100ms publish
ais-positions
primary vessel stream
intelligence-events
detector output
market-ticks
prices + prediction odds
prediction-markets
Polymarket + Kalshi
briefings
Claude synthesis output
Apache Flink 1.18.1 · Ververica Cloud1–3s event detection
TrafficVolumeDetector
Surges vs. 30-day baseline
KeyedProcessFunction~2s
MilitaryProximityDetector
Warships within 5nm of tanker lanes
KeyedProcessFunction~1s
TankerConcentrationDetector
Vessel clustering at anchor
KeyedProcessFunction~3s
DarkAISDetector
Transponder off in the strait
KeyedProcessFunction~2s
SlowdownDetector
Abrupt deceleration in sensitive zones
KeyedProcessFunction~1s
NewsAISCorrelator
News escalation + AIS anomaly
KeyedProcessFunction~3s
MultiSignalCorrelator
2+ detectors in 30-min window
CEP Pattern~1s
RiskHeatmapAggregator
5-min tumbling window · grid cell
Tumbling Window5 min
TrajectoryPredictor
Haversine dead-reckoning · 6 horizons
MapFunction60s
FleetGraphAggregator
Proximity MapState · 0.2° sector
KeyedProcessFunction~5s
ThroughputEstimator
Westbound crossings at 58°E
KeyedProcessFunction~2s
DynamicGeofenceFilter
JTS polygon containment
BroadcastProcessFunction<1s
AI Synthesis · Claude4–30s generation
Claude Haiku
risk 40–69 · routine briefings
Claude Sonnet
risk ≥ 70 · historical context
Claude Opus
NL analyst queries · SSE stream
FastAPI 0.111 · Python 3.1210–30s frontend refresh
/api/vessels /api/risk /api/briefing
core endpoints
/api/heatmap /api/predictions /api/fleet-graph
intelligence layer
/api/query (SSE) /api/geofences /api/replay
analyst tools + NL
/rss /embed
public feed + widget
React Dashboard · Mapbox GL JS 3 · D3 v7real-time
LIVE MAP — vessels · heatmap · trajectory · geofences
INTEL FEED — live event scroll · severity badges
DATA & CHARTS — transit · market · incident timeline
ANALYTICS — NL query · streaming briefing · fleet graph · replay
Flink patterns

Four patterns,
twelve detectors.

Ververica · My Employer

The technology
I work with every day.

I work at Ververica, the company that created Apache Flink. My job is helping organisations build real-time data systems. HormuzWatch is what happens when you point that same technology at something you want to understand about the world.

I love using stream processing to explain complex situations to people. Real-time data removes the delay that news coverage introduces and makes the underlying patterns legible to anyone paying attention. Ververica Cloud handles deployment, scaling, job restarts, and monitoring. I handle the detection logic. That division of responsibility is what makes a system this complex buildable by one person.

Ververica Cloud · Flink jobs in action
HormuzWatch Flink job DAG on Ververica Cloud — KeyedProcess operators, HASH/FORWARD edges, live RecordsIn/RecordsOut

HormuzWatch Flink job DAG running live on Ververica Cloud — 74,614 records in per operator

AI cost control

Four layers.
Cents per day.

Running Claude continuously on a live event stream could easily cost hundreds of dollars per day. A four-layer control system keeps daily spend at $0.02–$0.15 while ensuring briefings update within two minutes of any meaningful event.

Model selection decision tree
Risk < 40No synthesis
Risk 40–69Claude Haikufast · cheap · routine
Risk 70–89Claude Sonnethistorical context · market analysis
Risk ≥ 90Claude Sonnetmaximum detail
NL queriesClaude Opusanalyst queries only · SSE stream
01

Significance scoring

Every intelligence event is scored 0–100. Routine traffic fluctuations and repeated minor anomalies never reach the AI layer.

02

Delta-based triggering

Even above the significance threshold, synthesis only runs if the event meaningfully changes system state. Duplicate signals within a short window are deduplicated.

03

Model tiering

Risk < 40: no synthesis. Risk 40–69: Claude Haiku. Risk ≥ 70: Claude Sonnet. Claude Opus reserved for analyst NL queries only.

04

2-minute rate limit

Synthesis runs at most once every 2 minutes even if all conditions are met. Prevents burst costs during fast-moving events while keeping briefings current.

Why I Built It

Technology that
explains the world.

The Strait of Hormuz carries roughly one-fifth of the world's daily oil supply through a passage 33 kilometres wide at its narrowest point. In April 2025, with US-Iran tensions at a decade high, I kept watching news headlines but could not find anything that showed me what was actually happening in the strait, in real time.

I had built AISGuardian for Baltic Sea infrastructure protection and knew the data existed. AIS transponders broadcast from every commercial vessel. News feeds were parseable. Commodity prices were accessible. What did not exist was a system that connected all three streams, found the patterns, and explained what they meant.

HormuzWatch started as a Kafka + Flink + React stack that flagged AIS anomalies. Then I added Claude to turn the anomaly stream into intelligible briefings. Then market data, prediction markets, precedent-aware context, and a second sprint that added ten new capabilities including real-time NL queries, trajectory forecasting, and an analyst geofence studio.

The result is a system I actually use. When something happens at Hormuz, I open the dashboard.

Related project

AISGuardian

Maritime vessel tracking for Baltic Sea critical infrastructure. The predecessor to HormuzWatch, built during the Aiven Kafka Challenge. Same stack, different mission: cable protection instead of commodity market intelligence.

Let's Talk

Let's build something
worth talking about.

I take on a limited number of advisory and fractional engagements. Only projects where I can make a real difference. If you're navigating growth, AI, or revenue challenges in a technical B2B environment, let's talk.