Iran Monitor
A real-time intelligence dashboard for the Middle East.
Stack
- deck.gl
- Express
- Gemma 4 31B
- MapLibre GL
- NVIDIA NIM
- React
- Tailwind CSS
- TypeScript
- Upstash Redis
- Vercel
- Vite
- Zustand
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