← AI Work Deployed

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.

12
Outlets monitored statewide
~$10
Monthly API cost
Daily automated runs

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.

Story Desk dashboard showing scored story cards with Verify, Gap, and Edge buttons Story Desk Edge output — an investigative angle generated from a competitor story Story Desk scraper running in terminal, showing two-pass scoring and article fetching

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."

Decision 01
Two-Pass Scoring to Control Costs
Running a full article fetch and AI analysis on every competitor story across 12 outlets would be expensive and slow. The solution was a cheap pass-one filter: Claude Haiku scores each story on headline and RSS summary alone — a fraction of the cost of a full call. Only stories clearing a 7/13 threshold get fetched and analyzed. This keeps the expensive work proportional to editorial value.
Decision 02
Full Article Fetch Over RSS Summaries
Early versions ran the editorial analysis on RSS descriptions — 300 characters of content the outlet chose to surface. The Gap analysis kept flagging things that were actually in the full article. The fix: for stories that clear the threshold, fetch and parse the full article body before generating angles. Sites that block scrapers fall back to the summary gracefully.
Decision 03
Built on Existing Infrastructure
Story Desk runs on the same DigitalOcean droplet as DOT CAM — a Flask app alongside the existing camera server, sharing the same $18/month server. No new infrastructure cost. The Anthropic API calls run at roughly $10/month in production, making the total marginal cost of the system negligible against the editorial value it generates.
ComponentTechnology
BackendPython · Flask · SQLite
ScrapingBeautifulSoup · RSS/XML parsing
AIAnthropic API (Claude Haiku for scoring and angles)
SchedulingSystem cron — 8am and 12:30pm ET daily
InfrastructureDigitalOcean (shared with DOT CAM)
FrontendVanilla JS · Spectrum News brand identity
v1.2July 3, 2026
Expanded Coverage
  • Added 8 new outlets: WTVQ, LEX18, WNKY, WCPO-KY, Owensboro Times, Tompkinsville News, NKY Tribune, Louisville Public Media
  • Total monitored outlets: 4 → 12
Bug Fixes
  • Stripped HTML image tags from RSS descriptions causing broken card display
v1.1June 17, 2026
New Features
  • Full article fetch on pass-two stories
  • 36-hour story expiry
  • Manual Analyze tab
  • Spectrum News brand identity applied
v1.0June 11, 2026
Initial Launch
  • 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