Skip to main content
AI AUTOMATION

A news site that writes and publishes itself every day

Scrapers, a writer agent, a reviewer with veto, and a static site that deploys on merge.

THE PROBLEM

What was in the way

Following AI releases closely enough to write about them every day is a full time job. Sources publish at all hours, most items repeat each other, and the few that matter still have to be read before they can be summarised.

A publication that depends on someone finding an hour each morning stops publishing in its first busy week.

THE APPROACH

How it was built

Three stages, each able to fail without taking the site down. Scrapers pull from RSS feeds and APIs into SQLite and drop duplicates before anything reaches a model. A writer agent turns each surviving source into a short digest. A reviewer agent then checks that draft for factual accuracy, plagiarism and format before it is allowed anywhere near the site.

The reviewer is what makes the pipeline safe to leave alone. Rewriting someone else's reporting is exactly where an unattended system embarrasses you, so nothing publishes without passing that gate.

Source to published article
Source to published article
HIGHLIGHTS

How it works

Duplicates die before they cost anything

Deduplication happens in the scraper against the local store, so the same story arriving from six feeds is paid for once.

A reviewer agent that can say no

Every draft is checked for factual accuracy, plagiarism and format. A rejected draft goes back to the writer instead of to the site.

Ships without a human in the loop

Approved articles are committed and published automatically, alongside scheduled jobs for search-console ingest and the newsletter.

RESULTS

What it does now

runs unattendedcommits and publishes with no human step
200 to 400 wordsper digest, enforced by the writer agent
reviewed before publishaccuracy, plagiarism and format gate
STACK

What it is built on

TypeScriptmonorepo across packages
Claude Agent SDKwriter and reviewer agents
Astrostatic site generation
SQLitesource store and dedup
BullMQ and Redisjob queue and scheduling
Vitesttest suite

Got something in your workflow that looks like this?