Temeljno · kako smo gradili
Bilješka · iza postmortema

Kako smo izgradili
Temeljno.

Jednočlana, AI-potpomognuta cijev koja je pročitala ~31.840 članaka s ~27 hrvatskih portala, grupirala ih u događaje i napisala 4.353 vlastite priče — utemeljene, s izvorima, svaka s originalnom ilustracijom. Ukupan trošak: oko 900 € i četiri sata rada.

31.840pročitanih članaka
4.353napisanih priča
~27grupiranih portala
900 €ukupan trošak

Ideja u jednoj rečenici

Grupiraj isti događaj s više portala, pa napiši jednu neutralnu priču koja koristi samo te izvore — i svaku rečenicu pripiši portalima koji su je objavili.

Kad dva portala neovisno izvijeste istu činjenicu, to je signal pouzdanosti. Temeljno tu unakrsnu provjeru pretvara u proizvod. Cilj nikada nije bio „AI zamjenjuje novinare” — nego pokazati da mala, disciplinirana cijev može odraditi mehanički dio posla redakcije ako gradiš za pouzdanost, a ne za količinu.

Tehnologija

Bez reda poruka, bez vektorske baze, bez Kubernetesa. Nekoliko Python modula i jedna SQLite datoteka.

Izrada i hosting
Replit + Claude Code
Razvoj i objava u jednoj osobi, bez ops tima.
Jezik
Python, standardna biblioteka
Bez numpy/torch — instalira se i radi bilo gdje.
Web i pohrana
FastAPI + SQLite
HTML s poslužitelja; jedna datoteka koja preživi objave.
Model za pisanje
Claude Opus
Sinteza svake priče i naslov.
Model za provjeru
Claude Haiku
Jeftina druga provjera činjenica.
Ilustracije
Google Gemini
Originalne editorijalne ilustracije (image-to-image).

Proces

Osam malih koraka, svaki s jednim zadatkom. Cijeli proces radi svakih ~30 minuta.

1
Prikupljanje
RSS, bez duplikata
2
Grupiranje
TF-IDF, isti događaj
3
Rangiranje
prema pokrivenosti
4
Puni tekst
za vodeće priče
5
Sinteza
Opus · s izvorima
6
Provjera
Haiku · fact-check
7
Ilustracija
Gemini, vlastita
8
Objava
zbraja i stari

Koraci 5 i 6 — jezgra „napiši pa provjeri” — nose pouzdanost. Ostalo prikuplja i prikazuje.

Grupiranje — motor unakrsne provjere

Grupiraj članke o istom događaju. Namjerno bez vanjskih biblioteka: mali TF-IDF vektorizator nad naslovom + sažetkom (naslov ×2, izbačene česte riječi) plus pohlepno pridruživanje najbližem centroidu po kosinusnoj sličnosti. Bez numpyja — milisekunde za nekoliko stotina članaka.

~stotine članaka nekoliko skupina = priče
Skupina koja se proteže na više portala je „priča”. Usamljena točka je vijest iz jednog izvora — zadržana, ali označena.

Rangiranje — važnost bez analitike

Nemamo podatke o posjećenosti tuđih portala, pa je važnost procijenjena preko pokrivenosti. Širina pokrivenosti prevladava jer je slaganje više portala signal pouzdanosti.

rezultat = širina1.5 × (1 + 0,25·ln(1+količina)) × svježina
širina — različiti portali (dominira) količina — ukupno članaka (blagi bonus) svježina — pad s vremenom

Uz to, kazna za predugo zadržavanje na vrhu: kad priča drži vodeće mjesto nekoliko sati, rezultat joj opada — pa dugotrajna priča prepušta vrh stvarno novim vijestima umjesto da tabori.

Sinteza — motor pouzdanosti

Većina proizvoda bi samo „sažela”. Vrijednost Temeljna je u potpunosti u ograničenjima oko pisanja. Prva uputa modelu: koristi isključivo priložene izvorne tekstove — bez znanja izvana, bez izmišljenih činjenica, bez nagađanja. Svaka tvrdnja mora biti pripisiva imenovanom portalu.

Pripisivanje kao sintaksa

Model nikad ne piše „prema Indexu”. Svaku činjeničnu rečenicu završi strojno provjerljivom oznakom portala koji tu tvrdnju donose. Tekst se čita glatko; podrijetlo je strukturirano ispod.

Dron je iz Rusije ušao u zračni prostor Latvije.Index.hrJutarnji listN1

Model to napiše kao …zračni prostor Latvije.[[Index.hr|Jutarnji list|N1]] — sučelje te oznake prikazuje kao natpise s izvorima.

Drugi model provjerava prvog

Svaku napisanu priču provjerava jeftini prolaz Haikua: dobije iste izvore i jedno pitanje — je li svaka tvrdnja, i svaka oznaka izvora, doista potkrijepljena? Ta petlja „napiši pa provjeri” najvažnija je projektna odluka u cijelom sustavu.

Pisac Claude Opus nacrt + [[oznake]] Skeptik Claude Haiku ✓ provjereno ⚠ problemi
Sposoban pisac, jeftin skeptik. Provjera je popustljiva — priča se svejedno objavi — ali neprovjerene priče dobiju blažu oznaku, ne signal pouzdanosti.

Još tri važna pravila

Naslov se piše zadnji, iz našeg gotovog članka — nikad prepisan iz naslova nekog portala. Izvori koji se ne slažu idu u zasebno polje „sporno”, opisano neutralno. A slabo pokrivene priče ostaju najave — ako događaj nosi samo jedan ili dva portala, sažetak je kratak i upućuje na originale umjesto da ih zamijeni. Bez ikakvog API ključa sinteza se vraća na označeni ekstraktivni sažetak stvarnih rečenica iz izvora — stranica nikad ne izmišlja da popuni prostor.

Ilustracija — vlastita, nikad tuđe fotografije

Za agregator, prikazivanje tuđih fotografija pravno je i vjerodostojnošću najslabija točka. Odgovor Temeljna: nikad ne objavljuje tuđe fotografije. Dio priča dobije originalnu ilustraciju u dosljednom stilu kuće — trobojni sitotisak — koju generira Gemini.

Gotovo crna tintalinija i sjena
Hrvatska crvena#b3122a naglasak
Krem novinskog papira#f4f1ea podloga

Izvorne fotografije modelu se šalju samo kao naznaka sličnosti — „tko i što”, nikad kompozicija, poza ni boje; za imenovanu osobu traži se novi portret. Tvrdo pravilo bez teksta (navedeno prvo i zadnje u uputi) uklanja izobličena slova koja odaju da je nešto AI. O tome hoće li priča dobiti ilustraciju odlučuje hash njezina URL-sluga, pa se odluka nikad ne mijenja. Bez integracije za slike ili u slučaju greške → priča se jednostavno objavi bez ilustracije.

Objava — zbrajanje i starenje

Umjesto da svaki ciklus iznova gradi naslovnicu, svaki prolaz dodaje nekoliko novih priča, a postojeće ostaju na svojim stabilnim URL-ovima i tonu kako stižu svježije, šire pokrivene priče. Priča koja se razvija prepoznaje se između osvježavanja po skupu URL-ova članaka iza nje (Jaccardovo preklapanje ≥ 0,25 = „ista priča”), pa zadržava svoj URL i skuplja izvore umjesto da stvara duplikate. Samo priče koje potvrde 2+ različita portala dolaze na naslovnicu.

Zaštitne ograde

Dijelovi koji od ovoga čine odgovoran alat, a ne tek scraper — i dijelovi vrijedni kopiranja.

Pravilo „samo izvori”. Nikad znanje izvana.
Pripisivanje uz svaku rečenicu. Strojno provjerljivo, ne ukrasno.
Drugi model provjerava prvog. Tvrdnje i pripisivanja.
Potvrđeno i sporno — odvojeno. Neslaganje se ističe.
Vlastite ilustracije, nikad tuđe fotografije. Autorski rizik uklonjen.
Prag unakrsne provjere. Ništa se ne objavi iz jednog izvora.
Slabo pokrivene priče ostaju najave. Nikad ne zamjenjuju original.
Dohvat siguran od SSRF-a. Nepouzdani feedovi ne mogu se okrenuti prema unutra.
Zastavice za uklanjanje + kanal za ispravke. Odgovori, ne prepiri se.
Pošten rezervni plan. Bez ključa → označeni izvod, nikad izmišljanje.

Koliko je koštalo

Razvoj + hosting150 €
Čitanje 31.840 članaka150 €
Pisanje 4.353 priče350 €
Ilustracije250 €
Ukupno900 €

Plus ~4 sata ljudskog rada. Neprekidan rad (5–10 tisuća članaka mjesečno) stajao bi ~1.500 € mjesečno — a uz predmemoriju, grupiranje i manji model na jeftinim koracima, bliže 150 €. Poluga troška je disciplina, ne potrošnja: puni tekst samo za vodeće priče, sinteza samo za stvarno nove, ilustracije uzorkovane i idempotentne, upute predmemorirane kroz cijelu seriju.

Napravi ga sam

  1. Odaberi feedove — popis RSS izvora za svoju regiju.
  2. Grupiraj — TF-IDF nad naslovom+sažetkom, pohlepno najbliži centroid, kosinus ≈ 0,2.
  3. Rangiraj — širina po različitim portalima (dominira) × količina × svježina, plus pad za zadržavanje.
  4. Dohvati puni tekst samo za vodeće skupine, iza SSRF zaštite.
  5. Sintetiziraj uz ograničenja — samo izvori, pripisivanje po rečenici, strukturirani JSON, naslov zadnji.
  6. Dodaj jeftinu provjeru — to je ono što „AI sažetke” pretvara u nešto obranjivo.
  7. Ilustriraj vlastito — ili ne prikazuj ništa. Ne objavljuj tuđe fotografije.
  8. Objavljuj inkrementalno — stabilni URL-ovi i prag od 2 portala, na rasporedu.

Počni s 1–3 (to je već upotrebljiva ploča „koje su priče danas velike”), zatim dodaj 5–6 (motor pouzdanosti), pa 7 (uglađivanje).

Pouka

Zanimljivo nije to što AI zna pisati — nego to što je vrijednost gotovo u cijelosti bila u ograničenjima: samo izvori, izvor uz svaku rečenicu, provjera drugim modelom, vlastite ilustracije, unakrsna provjera prije objave.

Modeli su roba široke potrošnje. Gradi skeptika, ne samo pisca.

Prijavi se na besplatne AI radionice →
← Natrag na Temeljno postmortem