Show HN: I built an interactive globe for verified combat events
defogwar.comI* have been following the situation in the Middle East closely over the past months and realized I was spending a lot of time just trying to figure out what actually happened where. Most sources either show raw social media posts or mix combat events with general news.
The closest thing to what I wanted is Liveuamap, but it has increasingly become a general news aggregator. The map includes protests, political statements, weather alerts, and unrelated incidents. There are also intrusive ads and the sources are often just reposted tweets without much verification or analysis.
I wanted something more focused. Specifically a map that only tracks combat events and shows the actual evidence when possible.
So I built Defogwar: https://www.defogwar.com/
It is an interactive Mapbox GL globe where military events such as airstrikes, drone strikes, artillery, ground assaults, and territorial changes are plotted geographically. Events are color coded by faction. There is a timeline slider so you can scrub through time and watch how things unfold day by day. Clicking a marker opens details about the event along with embedded video when footage exists.
The goal is simple: no political commentary pins, no news ticker spam, just combat events with sources.
The most interesting part technically ended up being the data pipeline.
Manually curating conflict events does not scale when you are one person, so I built an ingestion layer that pulls from RSS feeds and Telegram channels. The content is passed through Gemini 2.0 Flash which extracts structured fields such as coordinates, event type, factions involved, and severity. Everything then goes into a review queue.
Nothing goes live automatically. Every event still goes through manual review before it appears on the map.
The hardest problem has been filtering propaganda from the AI extraction step. A lot of the best footage actually originates from highly opinionated (or biased depending on your perspective) sources, which means the text surrounding it can contain language like “terrorist state” or exaggerated claims about damage. I often have to manually strip that language and normalize the description so the map remains factual.
Another challenge has been extracting reliable coordinates. Many posts reference places indirectly or only mention nearby towns. I ended up building a geocoding layer to resolve these into coordinates before review.
Current stack:
Next.js 14
PostgreSQL with PostGIS for spatial queries
Mapbox GL for the globe visualization
Cloudflare R2 for video storage (zero egress fees made this practical)
Railway for hosting
Right now the coverage is focused on the Iran conflict. I had other conflicts mapped earlier but temporarily removed them to focus on improving the data quality and pipeline first. Once the ingestion process is more reliable those will come back.
Long term I am also interested in mapping historical conflicts using the same timeline interface. I have found aggregators of historical events like WWII and the Vietnam War etc.
I would love feedback on the map UX. If anyone here works with OSINT data or knows good open sources for verified conflict reporting I would be very interested to hear about them.
*I helped with deployment and some UI refinement. My colleague did the heavy lifting on the engineering and data pipeline. He will be in the comments later. Thanks for considering this! Hi, I worked on the project with OP, would love to answer any questions or field any advice Was a pleasure. I think that people would like to know how you made it smooth and interactive. Honestly Mapbox worked really well here. After getting that working it was just a question of presenting data in a way that was easy to consume. Things like playing around with colors, and the playback speed for the timeline for example. A challenge I see going forward will be accurately representing ground control in the case of a ground invasion in the near future. I’ve been trying to get the Ukraine-Russia war on the project but the main issue so far has been two fold. One is getting accurate day by day ground control information and presenting it well as well as footage from years back with all the dead links out there. And of course the propaganda problem (distilling actual info from propaganda posts that have good combat info and footage) is actually even more difficult in that war. Seems like there are a lot of events missing Getting the right number of events ie which events were significant enough to put on here with combat footage was a challenge as well. Particularly for the first day or two where a number of US bases and Iranian targets were hit. I think in particular I’ll try to add more manually for the first two days of the war. But other than those two days were there any specific events you think the AI missed?
Sometimes I think it makes the fair decision to combine certain incidents. For example today 3 ships were hit in the strait of Hormuz but I don’t expect three different events for that and I think the right thing would be one event. Ukraine seems like the obvious big miss. Oh you mean the whole Ukraine war? Yes we removed that for now for quality reasons and currently we’re just covering the Iran war while we get the particulars right. After that we’ll add Ukraine, Myanmar, Sudan etc. We posted this here first to get input before populating the rest of the conflicts.