Case Study 03 — Editorial Intelligence
Story Desk: Competitor Intelligence Dashboard
A live editorial tool that monitors 12 Kentucky news outlets twice daily, scores every story on impact and uniqueness, and surfaces the angle the original reporter missed — not just what they covered.
The job of a reporter is never ending. Always searching for stories, making calls, doing research, then searching for more stories. And just when everything lines up, a source cancels. Life happens. Sometimes the well goes dry.
It's no secret that every producer and reporter browses competitor outlets looking for content to pitch or add to their show. It happens every day in every newsroom. Instead of straight copying someone else's work, I built a tool that looks for what's missing from it — the gap in the original report, the follow-up nobody made, the angle that wasn't taken.
Left: An Edge output for a UPS crash story — a systemic FAA liability angle the original story didn't touch. Right: The scraper running in production, showing pass-one scoring and pass-two article fetching.
Story Desk monitors outlets across Louisville, Lexington, Northern Kentucky, Bowling Green, and Owensboro — WDRB, WLKY, WHAS, Kentucky Lantern, WTVQ, LEX18, WNKY, WCPO, Owensboro Times, Tompkinsville News, NKY Tribune, and Louisville Public Media. Every story goes through a two-pass editorial scoring system before any expensive AI processing occurs.
- Pass one: Claude Haiku scores each story on a 13-point rubric — impact (1–5), uniqueness (1–5), urgency (1–3). Stories below 7 are dropped before any further processing.
- Pass two: Qualifying stories trigger a full article fetch and a second AI call generating three editorial angles: Verify (the claim worth checking), Gap (the hole in this specific report), and Edge (the systemic story hiding underneath).
- Stories expire automatically after 36 hours so the deck stays current. A manual Analyze tab lets any reporter paste in a press release or pitch for the same treatment on demand.
"Sometimes the tool comes up with outlandish, borderline conspiracy theory ideas — and that's by design. The goal is to get reporters thinking about the greater impact of a story, not hand them a finished pitch."
| Component | Technology |
|---|---|
| Backend | Python · Flask · SQLite |
| Scraping | BeautifulSoup · RSS/XML parsing |
| AI | Anthropic API (Claude Haiku for scoring and angles) |
| Scheduling | System cron — 8am and 12:30pm ET daily |
| Infrastructure | DigitalOcean (shared with DOT CAM) |
| Frontend | Vanilla JS · Spectrum News brand identity |
- Added 8 new outlets: WTVQ, LEX18, WNKY, WCPO-KY, Owensboro Times, Tompkinsville News, NKY Tribune, Louisville Public Media
- Total monitored outlets: 4 → 12
- Stripped HTML image tags from RSS descriptions causing broken card display
- Full article fetch on pass-two stories
- 36-hour story expiry
- Manual Analyze tab
- Spectrum News brand identity applied
- Two-pass scoring system: Haiku filter + full AI angle generation
- Verify, Gap, Edge framework
- Cron-scheduled runs at 8am and 12:30pm ET
- 4 outlets: WDRB, WLKY, WHAS, Kentucky Lantern