GeoPulse is an automated geopolitics newsletter delivering curated global affairs updates and smart summaries to your GitHub Pages site. Fresh insights, every hour.
site/) is built and deployed to GitHub Pages automatically.Go to Settings → Pages → Source and set it to GitHub Actions.
Go to Settings → Actions → General → Workflow permissions and select Read and write permissions.
In Settings → Secrets and variables → Actions, you can add:
| Secret / Variable | Purpose |
|---|---|
NEWSAPI_KEY (secret) |
Enable NewsAPI as a news source |
OPENAI_API_KEY (secret) |
Enable OpenAI GPT summaries |
ANTHROPIC_API_KEY (secret) |
Enable Anthropic Claude summaries |
HF_API_KEY (secret) |
Enable HuggingFace summarization |
LLM_PROVIDER (variable) |
openai / anthropic / huggingface / none (default: none) |
LLM_MODEL (variable) |
Model name, e.g. gpt-4o-mini |
NEWS_SOURCES (variable) |
Comma-separated: gdelt,rss,newsapi (default: gdelt,rss) |
MAX_ARTICLES (variable) |
Max articles per run (default: 20) |
ARCHIVE_DAYS (variable) |
Days of archive to retain (default: 30) |
No key needed to get started. The default configuration uses GDELT and free RSS feeds with a formatted digest (no AI).
Go to Actions → GeoPulse Newsletter → Run workflow to trigger the first run manually.
All configuration is in config.yml. You can also override any setting via GitHub Actions variables.
To change the update frequency, edit the cron schedule in .github/workflows/newsletter.yml.
geo-pulse/
├── .github/workflows/newsletter.yml # Scheduled workflow
├── scripts/
│ ├── fetch_news.py # News fetching (GDELT + RSS + NewsAPI)
│ ├── summarize.py # LLM summarization with graceful fallback
│ └── generate_site.py # Static site + RSS feed generator
├── site/
│ ├── index.html # GitHub Pages dashboard (auto-generated)
│ ├── styles.css # Responsive CSS with dark/light mode
│ └── feed.xml # RSS feed (auto-generated)
├── newsletters/ # Auto-archived past editions
├── newsletter.md # Latest newsletter (auto-generated)
├── config.yml # Configuration
└── requirements.txt # Python dependencies
pip install -r requirements.txt
python scripts/fetch_news.py # → raw_news.json
python scripts/summarize.py # → newsletter.md
python scripts/generate_site.py # → site/index.html + site/feed.xml
Open site/index.html in your browser to preview the dashboard.