AI-POWERED EARLY WARNING SYSTEMS FOR INTERCOMMUNITY CONFLICTS IN SOUTH-EAST NIGERIA: A PREDICTIVE MODEL FOR PEACEBUILDING IN RURAL SETTINGS
# Conflict Monitor RSS Backend
A tiny Express server that fetches and parses RSS feeds from HumAngle, Premium
Times, TheCable, Daily Trust, and Vanguard **server-side**, so the dashboard
never has to route through a public CORS proxy.
## What it does
- `GET /api/rss` — returns the latest ~150 items across all five outlets,
merged and sorted by date, plus a per-outlet error list if any feed failed.
- `POST /api/rss/refresh` — forces a fresh fetch, bypassing the 3-minute cache.
- `GET /api/health` — simple liveness check.
Feeds are cached in memory for 3 minutes so repeated dashboard syncs don't
hammer the news sites.
## Run it locally
```bash
npm install
npm start
```
The server listens on `
localhost` by default (override with the
`PORT` environment variable). Visit `
localhost` to
confirm it's up.
If you only want to test locally, use a tunnel like `ngrok http 3001` to get
a public HTTPS URL you can paste into the dashboard's Settings panel.
## Deploy it somewhere permanent
Any Node host works. Easiest free/cheap options:
- **Render** — "New Web Service" → connect this folder/repo → build command
`npm install`, start command `npm start`.
- **Railway** — `railway init`, then `railway up` from this folder.
- **Fly.io** — `fly launch` from this folder, accept the Node defaults.
Once deployed, you'll get a public URL like `
your-app.onrender.com`.
## Connect it to the dashboard
Open the dashboard, click the settings (gear) icon in the header, paste your
backend's base URL (e.g. `
your-app.onrender.com`, no trailing slash),
and save. The dashboard will call `{that URL}/api/rss` on every sync instead
of using a CORS proxy.
## Notes
- This scrapes public RSS feeds only — no login, no paywalled content.
- Respect each outlet's terms of use and robots.txt if you deploy this beyond
a prototype; consider adding a lower polling frequency or attribution if
this becomes a public-facing tool.
- GDELT is still queried …