A hybrid conflict-monitoring dashboard built with Python, Streamlit, GDELT, and GitHub Actions to track recent war-related media signals and structured conflict patterns.
This project combines:
- a Recent War News Pulse powered by GDELT
- a Structured Conflict Dashboard powered by historical ACLED data
- an automated refresh pipeline that updates the processed datasets on a schedule
The goal of this project is to build a visually polished and analytically useful dashboard for monitoring global conflict-related developments.
The dashboard is designed to support:
- recent war/news monitoring
- conflict topic tracking
- media-source analysis
- geographic conflict visualization
- historical structured conflict exploration
This project was built as a portfolio project connecting interests in:
- international studies
- data analytics
- Python development
- dashboard design
- automation workflows
This section uses GDELT to monitor recent conflict-related media coverage.
Features include:
- recent article count
- top source countries
- top domains
- language distribution
- conflict topic breakdown
- latest headlines table
- automatically generated summary insight box
This section uses cleaned ACLED data for structured conflict analysis.
Features include:
- conflict event KPIs
- fatalities summary
- interactive conflict map
- event type breakdown
- daily event trend
- fatalities by region
- recent events table
The project includes an automated refresh workflow using GitHub Actions.
Automation covers:
- fetching new GDELT data
- cleaning and processing the raw file
- updating processed CSV files
- committing refreshed data back to the repository
- Recent War News Pulse tab
- Structured Conflict Dashboard tab
- Python
- Pandas
- Streamlit
- Plotly
- PyDeck
- GDELT DOC 2.0 API
- ACLED (historical structured conflict layer)
- GitHub Actions
global-conflict-intelligence-dashboard/
│
├── data/
│ ├── raw/
│ └── processed/
│
├── src/
│ ├── fetch_data.py
│ ├── clean_data.py
│ ├── fetch_gdelt.py
│ ├── clean_gdelt.py
│ └── run_refresh_pipeline.py
│
├── .github/
│ └── workflows/
│ └── refresh_data.yml
│
├── app.py
├── requirements.txt
├── README.md
└── .gitignore
GDELT is used for the recent war-news pulse layer.
It provides:
- article metadata
- source country
- language
- domain
- headline-level recent media coverage
This powers the recent/news-oriented side of the dashboard.
ACLED is used for the structured conflict analysis layer.
It provides:
- conflict event records
- event types
- locations
- fatalities
- actors
- regional trends
In this project, ACLED is used primarily for historical structured exploration because recent detailed access depends on account access level.
The dashboard is split into two tabs:
This tab focuses on recent conflict-related media signals and includes:
- summary insight box
- recent article metrics
- topic breakdown
- top source countries
- language distribution
- top domains
- latest headlines
This tab focuses on conflict-event analytics and includes:
- event KPIs
- interactive map
- conflict event trends
- regional fatalities
- recent structured events
The project includes a GitHub Actions workflow that refreshes the processed data automatically.
The refresh pipeline:
- fetches recent GDELT war-news data
- cleans and filters the raw data
- saves processed CSV files
- commits updated processed files back to the repository
This turns the project from a static dashboard into a lightweight monitoring system.
git clone https://github.com/Vireen555/global-conflict-intelligence-dashboard.git
cd global-conflict-intelligence-dashboardWindows
python -m venv venv
venv\Scripts\activateMAC/Linux
python -m venv venv
source venv/bin/activatepip install -r requirements.txtpython src/fetch_gdelt.py
python src/clean_gdelt.pyIf needed, you can also run:
python src/run_refresh_pipeline.pystreamlit run app.py- recent conflict-news monitoring
- topic-based war-news analysis
- media-source distribution analysis
- automated processed-data refresh pipeline
- minimal glass-style dashboard UI
- GDELT provides article/news metadata, not fully structured conflict-event records
- conflict topic detection is currently rule-based and can still include some noise
- ACLED recent detailed access depends on account access level
- article-level geolocation is not yet implemented in the recent news tab
These limitations also create future improvement opportunities.
Planned and possible improvements include:
- more advanced topic classification
- better false-positive filtering
- sentiment or tone analysis
- clickable article cards
- region-based filtering for GDELT articles
- improved summary generation
- deployment on Streamlit Community Cloud
- optional React-based frontend version in the future
I wanted to build a project that sits at the intersection of:
- global affairs
- international studies
- data analytics
- Python
- automation
- visual storytelling The idea was to create something that is not just technically functional, but also relevant to real-world ongoing events and useful as a portfolio showcase.
Vireen Chowdary Vesangi
If you found this project interesting, feel free to connect or explore the repository.