A gaming-industry newsroom that pulls RSS feeds and news APIs, filters out irrelevant stories with a tested relevance gate, tags articles by jurisdiction and sends keyword alerts to WhatsApp, email and Discord.
Project media coming soon
Screenshots and demo videos for this case study will appear here.
CGA News aggregates casino, sports-betting, poker, slots and compliance coverage, alongside its own content on Sri Lankan gaming law, events, casinos and launches. The public reading experience is paired with an authenticated newsroom where editors manage feed sources, keyword rules, exclusions, custom content and alert settings.
Feeds and search APIs return a lot of noise. Video-game coverage shows up under the word "gaming", wire stories arrive mis-tagged by region, and images and links come back broken. The product needed editorial control and automated filtering, not blind republishing.
I built it with Next.js 14, MongoDB and NextAuth. Configurable RSS sources, NewsAPI and GNews feed a pipeline that fetches in parallel, applies a relevance gate, detects jurisdictions, cleans links and images, and caches the results. Twelve Mongoose models back the admin routes for articles, laws, events, casinos, accreditation and newsroom settings.
The live channel keeps news flowing continuously while editors keep control of relevance, presentation and local regulatory context.
Feed sources are managed in the database and fetched in parallel with Promise.allSettled and per-request timeouts, so one dead feed never blocks the rest.
The relevance gate and jurisdiction detector have no imports and their own tests, covering trusted sources, blockers and city, regulator and operator signals.
Successful feeds are cached individually. The aggregated feed refreshes at a fixed daily slot and is pre-warmed in the background, so the first visitor isn't the one who waits.
Admin APIs for feed sources, keyword rules, exclusions, custom content, laws, events, casinos, uploads and alert configuration.
Active keyword rules, scoped per desk, dispatch matching articles to the configured channels, and each channel fails independently.
Dedicated gambling trade press passes automatically, because even its M&A stories are industry news. Regional, esports and search-driven sources must pass a strict gate. A hard blocker (console names, game titles) rejects outright, one unambiguous gambling term admits, and ambiguous terms need two. The word "gaming" alone never admits a story, and that one rule removed the video-game leakage.
The region filter used to rely on the feed's desk, so a Nepal story carried by a global wire was invisible to a Nepal filter. The detector now reads the article itself. It matches countries, cities, regulators and operators (such as PAGCOR or Marina Bay Sands) against the same ten jurisdictions as the Gaming Laws page.
Exclusion lists hide specific URLs, custom content blends into the feed, and keyword rules control alerts, all without a deploy. Automation does the bulk of the work and editors make the final call.