Iran Monitor
A real-time intelligence dashboard for the Middle East.
Stack
- React 19
- TypeScript 5.9
- Vite 6
- Tailwind CSS 4
- Zustand 5
- MapLibre GL 5
- deck.gl 9
- Express 5
- Upstash Redis
- NVIDIA NIM
- Gemma 4 31B
- Vercel
Explained
I’m Persian-American. The gulf wars have been a contentious topic. I wanted to know what was actually happening and get comfortable with agentic development at the same time. So I built a real-time dashboard.
It pulls 10 public feeds (live flights, ships, conflict events, news, water stress, markets) and draws them onto a 2.5D map, fully on free data. Every request goes through an Express function that reads Redis first and then calls the upstream source on a miss.
The only real cost is Vercel because the LLM pipeline takes too long (aka need 800s limit on functions). The pipeline processes GDELT-based events to extract more accurate metadata.
Transparently, this was the hardest part. I settled on Gemma 4 31B after sending one real batch to ~20 models from NVIDIA’s catalog… and it was the only one that worked.
- ~15s a batch on idle
- <90s under load
The real goal of this project wasn’t the dashboard, but the development process. What I took away:
- Cache everything first and treat upstream as unreliable
- Measure model choices, not just vibe it out
- Treat free tiers as temp, keep re-testing models