I’ve been frustrated by how difficult it is to track actual, kinetic events during modern conflicts without getting buried in algorithmic noise, propaganda, or Telegram spam. I wanted to build a purely automated, objective pipeline to map verifiable events as they happen.
I built IranWarLive as a serverless OSINT dashboard. Here is how the stack works under the hood:
The Architecture:
The Edge: A Cloudflare Worker runs on a cron trigger every 30 minutes, acting as the scraper.
The Ingestion: It parses major RSS feeds (BBC, Al Jazeera, etc.) for breaking regional news.
The Brain: The raw text is passed to the Gemini 2.5 Flash API. I used Gemini specifically because the inference speed is incredible, the context window handles bulk article parsing easily, and it's highly reliable at returning strictly formatted JSON arrays based on system prompts.
The DB: Google Sheets API. It serves as a free, easily manageable, flat-file database that the frontend can read asynchronously.
The Frontend: Vanilla HTML/CSS/JS using Leaflet.js for the tactical map, decoupled from the backend to ensure instant page loads.
The Hardest Challenge: Handling state and LLM deduplication at the edge. Initially, the concurrent Worker requests were flooding the database with duplicate strikes every time an asset was missing or a refresh was hit. I had to build a strict API gateway lock and a read-before-write deduplication engine that compares incoming Source_URLs and normalized state names against the existing database before appending new rows.
It’s completely free and ad-free. It’s still very much a technical demonstration of what LLMs can do for open-source intelligence.
I would love to hear your thoughts on the architecture, any suggestions for improving LLM prompt reliability for fatality estimates, or feedback on the UI. Happy to answer any questions about the Cloudflare/Gemini pipeline!
aggeeinn•2h ago
I’ve been frustrated by how difficult it is to track actual, kinetic events during modern conflicts without getting buried in algorithmic noise, propaganda, or Telegram spam. I wanted to build a purely automated, objective pipeline to map verifiable events as they happen.
I built IranWarLive as a serverless OSINT dashboard. Here is how the stack works under the hood:
The Architecture:
The Edge: A Cloudflare Worker runs on a cron trigger every 30 minutes, acting as the scraper.
The Ingestion: It parses major RSS feeds (BBC, Al Jazeera, etc.) for breaking regional news.
The Brain: The raw text is passed to the Gemini 2.5 Flash API. I used Gemini specifically because the inference speed is incredible, the context window handles bulk article parsing easily, and it's highly reliable at returning strictly formatted JSON arrays based on system prompts.
The DB: Google Sheets API. It serves as a free, easily manageable, flat-file database that the frontend can read asynchronously.
The Frontend: Vanilla HTML/CSS/JS using Leaflet.js for the tactical map, decoupled from the backend to ensure instant page loads.
The Hardest Challenge: Handling state and LLM deduplication at the edge. Initially, the concurrent Worker requests were flooding the database with duplicate strikes every time an asset was missing or a refresh was hit. I had to build a strict API gateway lock and a read-before-write deduplication engine that compares incoming Source_URLs and normalized state names against the existing database before appending new rows.
It’s completely free and ad-free. It’s still very much a technical demonstration of what LLMs can do for open-source intelligence.
I would love to hear your thoughts on the architecture, any suggestions for improving LLM prompt reliability for fatality estimates, or feedback on the UI. Happy to answer any questions about the Cloudflare/Gemini pipeline!