< cd ~/raba.pl

Public products & communities

nowosci.ai

Treat AI publishing as an editorial system, with decisions readers can inspect.

  • live
  • July 2026 - present
  • Owner: product, code and the publishing pipeline

The problem

Generating text is the easy part. A useful publishing system must recognize repeated stories, check claims against sources and tell readers whether a person actually reviewed the result.

My part

Owner and builder of the product, publishing pipeline and iPhone app.

What this shows

I can turn an AI feature into an inspectable workflow, including the cases where the right product behavior is to stop and ask for review.

Where it started

I built nowosci.ai as a Polish and English AI news site, with a pipeline that drafts articles and an iPhone app that also plays them as an audio queue.

See it in action

Product walkthrough · 1:31 · 60 FPS · English narration
nowosci.ai interface

English AI narration · Subtitles included · Play with sound, or read the transcript.

Read the video transcript

0:00 I built an AI news publishing pipeline, with its review policy visible to readers.

0:08 Each draft gets a review window, and automatic publication is clearly labelled.

0:15 An approved article shows which facts were verified and what the editor changed.

0:23 Approval requires every verification field. This recreated form demonstrates that check.

0:35 The workflow connects source collection, writing, review, fact checking and publication.

0:42 A separate judge checks whether an event is new, a follow-up, or repeated coverage.

0:53 When fact checking fails, drafts stay unpublished. The safeguard stopped one hundred and three drafts.

1:04 Readers can inspect the method, including the limits of automated reporting.

1:11 I also shipped a native iPhone reader. This archived recording includes its earlier audio mode.

1:25 This is the recorded state in October: the pipeline was stalled, with its limits documented.

The decisions behind the product

Separate the publishing decisions

The pipeline checks new links, writes a draft, compares it with recent events, checks its claims and opens an editorial review window. Each stage has a specific decision to make.

Make uncertainty change the outcome

The fact-check gate refuses publication when checks fail or source coverage is incomplete. A repeated story is handled separately from an unverifiable claim, so the system does not treat every failure the same way.

Put the editorial history on the page

Articles show whether they were reviewed, which fields were approved and what changed later. The review form requires an editor to confirm the title, lead and every body block.

What came out of the work

A visible control in operation

Between 13 and 15 September 2026, the fact-check gate held 103 drafts and published none of them. That is evidence of the publication control working, not a claim that every generated article was correct.

A web publication and native reader

The 6 October 2026 sitemap contained 1,608 Polish articles. A SwiftUI iPhone app has been listed on the App Store since July. The documented pipeline was stalled after 15 September, so this case study focuses on the system and its editorial decisions.

  • 1,608Polish articles in the live sitemapChecked 6 Oct 2026
  • 917Google search clicks in 6 monthsGoogle Search Console · 1 Apr - 30 Sept 2026
  • 60,355Google search impressions in 6 monthsGoogle Search Console · 1 Apr - 30 Sept 2026

Search metrics use the scope shown with each result. Search position is an average across searches.

Traffic over time

Google Search Console

Google search clicks

Domain property: nowosci.ai (all subdomains)

Latest month
1421 Sept - 30 Sept 2026
First month
01 Apr - 30 Apr 2026
Google search clicks per month, 1 Apr to 30 Sept 2026Google Search Console. Domain property: nowosci.ai (all subdomains). Monthly clicks. 1 Apr: 0; 1 May: 0; 1 Jun: 0; 1 Jul: 691; 1 Aug: 84; 1 Sept: 142. Vertical axis starts at zero.03507001 Apr - 30 Apr 2026: 0 clicks1 May - 31 May 2026: 0 clicks1 Jun - 30 Jun 2026: 0 clicks1 Jul - 31 Jul 2026: 691 clicks1 Aug - 31 Aug 2026: 84 clicks1 Sept - 30 Sept 2026: 142 clicksAprMayJunJulAugSept
6 complete months · 1 Apr - 30 Sept 2026 · Download chartFirst month Latest month
Source, methodology and monthly data

Open Google Search Console report · Checked 8 Oct 2026

Domain property: nowosci.ai (all subdomains). Provider timezone: America/Los_Angeles.

  • Six complete calendar months: 1 April to 30 September 2026. Current is September; comparison baseline is April. Both comparison months have 30 days. This is not a comparison against the preceding six months.
  • Final web-search data, all countries and devices, America/Los_Angeles reporting timezone. Search clicks are not website visits or unique visitors.
  • Domain properties include all subdomains with property aggregation. Documentation pages retain exact page filters from the preceding evidence collection and measure documentation interest, not adoption.
  • Monthly chart values and the six-month total are reconciled with independently queried totals.
  • The percentage, where shown, compares September 2026 with April 2026, the last and first complete months of this window.
  • April has fewer than 100 events, so absolute counts are shown without a percentage growth claim.
  • For fewer than 100 events in the baseline period, the comparison shows absolute counts instead of a percentage.
Complete monthly totals
MonthGoogle search clicks
1 Apr - 30 Apr 20260
1 May - 31 May 20260
1 Jun - 30 Jun 20260
1 Jul - 31 Jul 2026691
1 Aug - 31 Aug 202684
1 Sept - 30 Sept 2026142
PostHog recorded activity643 pageviews in 28 days

nowosci.ai and www.nowosci.ai only · UTC

Recorded activity is affected by consent, blockers, tracking gaps and internal traffic.

Recorded totals, separate from search data
Metric7 Sept - 4 Oct 202610 Aug - 6 Sept 2026
Recorded pageviews643309
Recorded sessions378179

Inside the implementation

Explore the features, architecture and quality checks

What I built

  • Next.js 16 App Router site on Vercel with Polish and English editions; every article is a JSON file the pipeline commits to the site repo
  • Ingest gate: TheNewsAPI and RSS items are diffed against links already seen, so Claude only runs for new stories
  • Writer: Claude run headless (claude -p) turns a story into zero to two Polish articles as JSON; a translation step adds the English edition
  • LLM judge: each draft is compared with a 14-day event map and marked new, follow-up or rehash; rehashes are not auto-published
  • Fact-check gate: claims are checked against the cited sources, and from 13 Sep 2026 a guard script refuses to publish anything not marked "ok"
  • 60-minute review window, then labelled auto-publish: an editor can approve field by field, otherwise the article goes out labelled as AI text nobody reviewed
  • Public publication history on article pages: created, published or approved, which fields were verified, and later corrections
  • SwiftUI iPhone app on the App Store since 13 Jul 2026, with a Radio mode that plays articles as an audio queue

How it works

  1. Ingestingest-gate.py checks TheNewsAPI and RSS feeds and passes on only links it has not seen.
  2. WriteClaude, run headless, drafts zero to two Polish articles per story as JSON.
  3. JudgeAn LLM judge compares the draft with a 14-day event map: new, follow-up or rehash. Rehashes are not auto-published.
  4. Fact-checkClaims are checked against the sources. From 13 Sep 2026 a failed or incomplete check holds the draft.
  5. Review windowThe draft and its English translation wait 60 minutes for an editor's field-by-field approval.
  6. PublishApproved or expired drafts are committed to the site repo with the matching label and pushed.

Quality and reliability

  • Fact-check fails closed: publish-to-site.sh exits unless factcheck_guard.py allows the article, and checker errors or incomplete source coverage count as unverified
  • From 13 to 15 Sep 2026 the gate held 103 drafts and let none through; for 101 of them the checker asked for a block or a fix (65) or could not verify the claims (36)
  • The judge fails open on purpose: when it cannot run, the draft counts as new instead of being lost; the log shows 9 such runs
  • The approval form refuses to approve until the editor confirms reading the whole text and ticks the title, the lead and every body block
  • Corrections made after an automatic publish are added to the article's public history
  • Known gap: between 27 Aug and 12 Sep 2026, 561 drafts went out automatically with the unreviewed label after the window lapsed; an editor approved one
  • Known gap: no new article since 12 Sep 2026 and no pipeline activity logged since 15 Sep; the 2 Sep SEO audit ties a fall in Google clicks, 691 in July to 79 in August, to a publishing stall through most of August

Technology

  • Next.js 16
  • React 19
  • TypeScript
  • Zod 4
  • Tailwind CSS 4
  • Vercel
  • Claude Code (claude -p)
  • n8n
  • Bash
  • Python
  • TheNewsAPI
  • RSS
  • SwiftUI
  • AVFoundation
  • XcodeGen
  • fastlane

Explore another problem I worked on

>_ Your next project

Liked what you saw?
Let’s get in touch!

Have an idea, a challenge, or a role in mind? I’d love to hear about it.

Let’s talk

>_ Start a conversation

Liked what you saw?
Let’s get in touch!

Tell me what you’re working on. Let’s see how I can help.

Email mepatryk@raba.pl
Send a message