Monitors live news for animal agriculture stories, classifies each by advocacy angle, scores urgency, and generates publication-ready content — all in under 2 minutes.
Most animal advocacy organizations run lean — a comms team of one or two people. When a major story breaks, like a bird flu outbreak or an undercover investigation dropping, the window to respond is 24 to 48 hours. After that, the news cycle moves on.
Most organizations miss it. Not because they don't care, but because drafting a tweet thread, press statement, and op-ed pitch from scratch takes hours they don't have. This tool is built for that exact problem.
Main dashboard — story feed on left, content panel on right with angle and urgency badges. Real-time news aggregation from 4 APIs and 13 RSS feeds with AI-powered classification.
Every story passes through the same pipeline — fetch, classify, generate. Each stage is a separate service so any part can be upgraded independently.
Pulls from 4 free APIs (GNews, Currents, NewsData, NewsAPI) and 13 curated RSS feeds simultaneously. Every article is filtered through a 30+ keyword list before classification so the AI is not wasting calls on irrelevant content. Results are deduplicated by title similarity and sorted newest-first. A 15-minute in-memory cache prevents burning through free API quotas.
Each story is sent to Gemini with a structured prompt defining all 5 advocacy angles and a concrete urgency rubric. Gemini returns a JSON object containing the angle, a 1–10 urgency score with reasoning, 3 key facts, and the single strongest advocacy hook sentence. Up to 20 stories are classified per fetch with a 350ms delay between calls to avoid rate limits.
On demand, Gemini generates three pieces of content: a 5-tweet thread written as a connected narrative, a press statement with headline, lead, body, quote placeholder, and boilerplate, and an op-ed outline with 5 standalone talking points, a suggested opening line, and outlet recommendations. All content targets under 30% editing before it is publishable.
Generated content panel — tweet thread, press statement, and op-ed tabs with one-click copy. AI-generated advocacy content ready for immediate publication with minimal editing required.
Gemini picks the angle with the highest advocacy potential for each specific story. The same story can often be framed multiple ways — the angle determines how the content is written.
Ran the engine against live feeds for 7 days. 28 relevant stories fetched, 20 classified, 20 pieces of content generated.
| Story | Angle | Urgency |
|---|---|---|
| Global livestock methane emissions reach new high | Environmental | 6/10 |
| Tyson Foods posts quarterly losses tied to avian flu | Economic | 7/10 |
| Antibiotic-resistant bacteria found in supermarket chicken | Public health | 8/10 |
| UK government rejects proposed cage-free egg legislation | Policy | 7/10 |
| Amazon deforestation reaches 15-year high driven by cattle ranching | Environmental | 6/10 |
| Smithfield Foods recalls 200,000 pounds of pork due to contamination | Public health | 8/10 |
Generated press statement for H5N1 dairy cattle story — ready to send with only spokesperson name to fill in. Professional advocacy content formatted for immediate media release.
Four free APIs combined with 13 curated RSS feeds. Even with no API keys at all, the RSS feeds alone pull real, relevant stories with no rate limits and no cost.
| Source | Free limit | Best for | Where to sign up |
|---|---|---|---|
| GNews API | 100 req/day | Breaking news, outbreaks, H5N1 | gnews.io |
| Currents API | 600 req/day | Environment, climate, policy stories | currentsapi.services |
| NewsData.io | 200 req/day | Welfare, investigations, cruelty | newsdata.io |
| NewsAPI | 100 req/day | Economic, company stories (Tyson, JBS) | newsapi.org |
| RSS Feeds | Unlimited | CDC, Guardian, Civil Eats, Reuters, PETA, Humane Society and more | No key needed |
Currents API has the best free tier by far — 600 requests per day covers continuous monitoring without ever hitting limits. Signing up takes about 2 minutes.
Real issues that came up during development — not a polished summary. Each one required iteration to get right.
Without keyword filtering, Gemini would classify anything from the RSS feeds — sports news, tech stories, politics — and waste API calls on completely irrelevant content.
Added a 30+ keyword list in fetcher.js that runs on every article before it reaches Gemini. Only animal agriculture stories get classified. Reduced wasted API calls by around 80%.
The first version of the classifier prompt was too vague about urgency. Gemini defaulted to "high" for everything because the definition was not concrete enough.
Rewrote the urgency rubric to tie each score to a specific time window — 10 means breaking today, 8–9 means past 48h, 6–7 means past week. Scores now spread across the full 1–10 range.
The same story would appear multiple times when pulled from different sources — for example a Reuters article republished by RSS feeds and also returned by NewsAPI.
Added deduplication by normalizing the first 55 characters of each title — lowercase, non-alphanumeric characters removed. Handles around 95% of duplicates without needing a database.
Occasionally Gemini would wrap responses in markdown code blocks or add an explanation sentence before the JSON, causing JSON.parse() to throw an error.
Added "Return ONLY valid JSON. No markdown. No explanation." to every prompt. Wrapped all parse calls in try/catch with a sensible default object so one bad response does not break the whole batch.
Burned through the GNews 100 req/day limit within an hour during testing by refreshing the frontend repeatedly while building the UI.
Added in-memory caching in server.js that stores classified stories for 15 minutes. The frontend can refresh freely without touching the APIs. Force-refresh available via ?refresh=true.
Persistent dashboard banners with 24-hour response timers for breaking news stories scoring 8+ urgency.
Auto-saves every generated tweet, press release, and op-ed for 1-click export to CSV or JSON.
Instant Slack, Discord, Email, and webhook drops to auto-notify your team of high-urgency stories.
Quickly define, search, and toggle feed filters by category directly from the UI.
Gemini assigns angle, urgency 1–10, key facts, and the best advocacy hook for every story.
Tweet thread, press statement, and op-ed angles generated in one click per story.
Push notifications integration with Slack, Discord, and custom webhooks for high urgency signals. Automated alerts ensure rapid response to breaking news stories with 8+ urgency scores.
Twitter/X integration for one-click publishing of generated tweet threads directly to social media. Seamless connection to social platforms enables immediate advocacy campaign deployment.
News sources configuration showing API keys, RSS feeds, and real-time fetching status. Centralized management of 4 free APIs and 13 curated RSS feeds with customizable keyword filtering.
Features that would make this genuinely useful beyond a demo — prioritized by real-world advocacy impact.