01 / 05 screenshot-2026-06-15-at-09.26.42-2.png
Screen 1 of 5 Screen 2 of 5 Screen 3 of 5 Screen 4 of 5 Screen 5 of 5

AI News Aggregator and Autopublisher

Case study · AI agents and RAG systems · Laravel · September 2026

Publishing one news story is easy. Processing a daily RSS stream without repeating the same event, mistaking promotion for reporting, or losing track of delivery across several channels is harder. I built an editorial pipeline that handles eligible stories automatically and sends uncertain cases to an editor.

4,485items received between May 11 and September 22
1,065unique stories with confirmed WordPress publication
10:15median time from intake to WordPress
3delivery channels: WordPress, Telegram and MAX

Database snapshot: September 22, 2026, 10:47 Moscow time. Reliable WordPress publication records start on June 29, 2026; the figures above cover different periods.

The gallery above shows an early interface. The newer stages and measured results are explained below.

What changed: the first autopublisher grew into a system for editorial decisions. Before a story reaches publication, it passes duplicate detection, classification, site-specific policies and a final check against the source.

One story, two ways in

Automatic RSS intake

Every five minutes the system checks active sources, extracts the story and queues a new record. Eligible stories continue without an editor. Ambiguous ones stop for review.

Editorial Telegram bot

An editor submits source material, selects destinations, reviews an AI preview and explicitly chooses “Publish” or “Cancel”. This route has a human decision and does not run exactly the same set of automatic checks as the RSS route.

An editor also configures sources, categories, destinations and publication policies. The whole system should therefore not be described as fully autonomous.

How a story moves from source to publicationRSS goes through intake, AI processing, RAG and a final check before WordPress. Ambiguous stories go to the editor. The Telegram bot is a separate editorial entry point.RSSintakeAI rewriteclassifyRAGpoliciesImagesquality gateWordPress→ TG / MAXModeration / rejectionSeparate entry: editorial Telegram bot
The diagram shows the automatic RSS path. The Telegram bot is a separate editorial entry point with human confirmation.

What happens after a story arrives

  1. Extract the source and reject exact repeats

    The RSS feed and source page provide the story text. A repeated URL or title within 24 hours is detected before AI processing. One failing source does not stop the rest.

    RSS · URL · title
  2. Rewrite and classify

    The active text provider is OpenAI gpt-4o-mini. It prepares a new editorial headline and body, then classifies story type, categories, importance, geography and advertising signals. Source material that is too short goes to the editor.

    AI rewriting · classification
  3. Check semantic duplicates and site policies

    Embeddings and Qdrant find related events over a 14-day window. The check considers similarity alongside actors, actions, objects and numeric facts. Each destination then applies its own categories, importance threshold and rules for advertising, negative stories and non-news content.

    RAG · stop words · site policy
  4. Prepare two images

    gpt-image-2 produces a square image for cards and a wide image for the article. An editor can replace the result with an uploaded file or launch another image generator manually.

    1024 × 1024 · 1536 × 1024
  5. Check against the original and publish

    Before WordPress, the final check requires a concrete event and at least two supporting sentences from the original. If the AI or RAG service is unavailable, publication waits. Separate jobs send Telegram and MAX announcements after WordPress confirms publication.

    quality gate · WordPress REST API · delivery

Why a rewritten text is not necessarily a new story

Two sources can describe the same event in different words. A URL check would miss that. The pipeline layers exact duplicate detection, semantic comparison in Qdrant, stop words, site policies and a final factual check against the original.

A repeated event

The system compares related stories and the structure of each event. Editors can see similar items and the reasons behind a decision.

Too little evidence

The final AI check requires a clear event, at least 85% confidence and supporting material from the source. Fluent text without enough evidence does not go to the site.

Between August 4 and September 22, 2026, the final gate recorded 631 decisions: 514 allowed and 117 stopped. These are editorial decisions, not a technical error rate.

Publication means three independently recorded outcomes

WordPress receives the article and its media through the REST API. A confirmed response with status=publish is recorded as a WordPress publication. Telegram and MAX receive announcements afterward, with their own timestamps and delivery states.

The total is 3,181 confirmed deliveries across destinations, not 3,181 unique stories. WordPress records cover June 29–September 22, 2026; Telegram records start June 30 and MAX records July 3.

How quickly does a story reach the site?

Across 1,065 confirmed WordPress publications, the median time from the story entering the system to publication was 10 minutes 15 seconds. Some 67.7% arrived within 15 minutes and 93.52% within an hour. This is measured pipeline speed, not an estimate of staff hours saved.

Time from intake to WordPress67.7 percent of confirmed publications happened within 15 minutes and 93.52 percent within an hour.Within 15 minWithin 60 min67.7%93.52%Median: 10:15 · sample: 1,065 confirmed WordPress publications
Shares use the interval from articles.created_at to confirmed WordPress publication.

The editor sees more than the finished text

The web editor shows the source beside the AI version, categories, RAG decisions, similar stories, site thresholds and a publication preview. An editor can correct the text, replace an image, rerun processing or publish manually.

A separate daily crypto-market workflow collects data on 16 assets and market indicators, creates a page and image, and delivers the digest to WordPress, Telegram and MAX. It uses the same editorial infrastructure but is not a stage of every RSS story.

Where a person is required. Ambiguous stories go to moderation, and the editorial Telegram bot waits for explicit approval. Image-generation and WordPress publication failures also require manual action.

How the system evolved

Wire Room is the first account of this system: it introduces the news pipeline and the editorial Telegram workflow. This case checks each stage against the running code and delivery records: semantic duplicates in Qdrant, per-site policies, a final source-based quality gate, confirmed delivery to three channels and the editor’s controls. Its figures come from a dated database snapshot rather than a product roadmap.

The current instance runs natively on a KVM virtual machine with Nginx, PHP-FPM, MariaDB, Qdrant, cron and Supervisor. Its active text provider is OpenAI gpt-4o-mini; images come from gpt-image-2. GigaChat exists as an alternative path, and editors can use YandexART manually. Neither is the active automatic route described above.

The outcome is a managed news flow: automatic publication when explicit rules are met, and a clear handoff to an editor when they are not.

Need an AI publishing workflow for your own sources?

I can design the process from collection and verification to the editorial interface and delivery channels. The first decision is which steps can safely run automatically and where a person must remain in control.

AI agents and RAG systems →

Laravel · OpenAI · Qdrant · MariaDB · WordPress REST API · Telegram · MAX · cron · Supervisor