Fizz News started from a simple idea — I visit the same handful of sites every day and wanted them collected in one place as my own daily home page. Existing RSS tools never quite fit: most felt dated, the good ones required subscriptions, and none of them were exactly what I had in mind. So I built my own. A scraper pulls content from the RSS feeds I actually follow, and a frontend surfaces it the way I'd want to see it. What began as a personal reader evolved into something more interesting: a full editorial platform with a human curation workflow, an AI agent that learns from it, and a production setup I use every day.
Overview
The home page is built around a featured article carousel, two promoted slots beneath it, a latest sidebar, and category clusters — each mapped to a content vertical from the scraper. The design keeps the reading experience clean and fast, with all the editorial machinery tucked behind an admin panel.
The site runs across two machines in production. A VPS serves the React frontend and handles high-traffic home page routes from a Redis cache, refreshed every 15 minutes. A locally hosted machine runs the full backend — MongoDB, the admin panel, and the web server. The AI agent runs on a separate local machine connected to the same network.
Admin
The admin panel is a single-page tool designed around how I actually think about editorial decisions. The left side is a scrollable feed of the latest articles; the right side has the current draft carousel, promoted slot assignments, a live trending context panel, and a running curation history log. Everything I need to make or review a decision is visible at once without switching contexts.
Editorial Workflow
A lot of the thinking behind this workflow came from years working alongside the editorial team on the Audience Engagement Platform — watching how professional editors actually made daily content decisions, what slowed them down, and what they needed visible at a glance. That experience directly shaped how I designed this: articles get staged into a draft carousel, reordered by drag-and-drop, and published when the lineup looks right. The draft always initialises from the current live state so every session starts from a known baseline rather than from nothing. Assigning a promoted slot auto-clears the previous occupant, so there's no cleanup step.
Trending Context
A trending context panel in the right rail surfaces what's moving across seven sources in real time — Google News, BBC, NPR, Hacker News, Reddit, NewsAPI, and Google Trends BigQuery. It's there both for reference when curating manually and as one of the direct inputs the agent reads before each automated run.
Agent Curator
The AI agent is the most technically interesting part of the project. It runs on two schedules: a full curation run every few hours, and an hourly breaking news check that triggers an immediate publish if enough new articles have arrived since the last run. Both schedules are configurable and can be triggered manually from the admin panel.
Taste Learning
What makes the agent more than a "pick the trending articles" script is the taste layer. Every human curation session is logged to a separate database — which articles were kept or replaced, what the category mix looked like, what kind of story led the carousel, how many slots changed hands. Before each agent run, the system analyses patterns across those sessions and surfaces them as editorial guidance. The agent isn't just picking what's trending; it's picking what I would likely pick.
Provider Flexibility
The curator is model-agnostic — Claude, Gemini, or Ollama, swappable via a single environment variable. Ollama runs locally on a Mac Studio reachable over Tailscale, keeping routine runs at zero API cost. The editorial prompt lives in a plain text file that's tunable without touching any code, so adjusting the agent's taste or priorities is a text edit rather than a deploy.