Skip to content

Repository files navigation

IZZ.ro — Informația Zero Zgomot

Agregator de știri românești anti-clickbait. Site static (SSG), model de conținut B+C (rezumat scurt + link / sinteză multi-sursă), publicat serverless: GitHub Actions rulează pipeline-ul orar și publică la ~2 ore (vezi Deploy). AI implicit Gemini (gratuit), comutabil pe Claude API.

Cum rulezi local

pip install -r requirements.txt

# Pipeline complet (RSS -> AI -> HTML în output/) + salvează starea
python -m generator.main

# Doar test, fără să salveze sau să randeze (afișează rezultatul + sursele RSS moarte)
python -m generator.main --dry-run

# Vizualizare locală
python -m http.server 8000 --directory output
# -> http://localhost:8000

Fără cheie AI, pipeline-ul folosește un fallback determinist (rezumat din descrierea RSS) — util pentru testat structura. Pentru reformulare reală, pune GEMINI_API_KEY în .env (vezi .env.example).

Structură

generator/   cod: fetch (RSS) · state (dedup/expirare) · cluster · process (AI B/C) · moderation · render (SSG) · main
templates/   Jinja2 (autoescape ON): base, index, article, category, legal, _card
static/      styles.css (auriu-dark) · logo.svg · favicon.svg
content/legal/  pagini legale (markdown)
data/articles.json  STAREA (comisă în repo — așa persistă între rulări)
moderation.yaml     control editorial (om în buclă)
output/      site generat (gitignored; deployat de Actions)

Administrare

  • Ce apare pe site se controlează din moderation.yaml (vezi REVIEW.md).
  • Surse RSS: generator/config.py -> SOURCES. (gsp dă 404 — de înlocuit cu un feed valid.)
  • Praguri B/C, TTL, max/sursă: tot în config.py.

Deploy (GitHub Actions + Cloudflare Pages)

Arhitectura separă munca grea de publicare:

  1. GitHub Actions (.github/workflows/build.yml, cron 13 * * * *): rulează pipeline-ul (fetch + AI, cu buget per rulare), apoi comite data/articles.json în repo. Secret necesar: GEMINI_API_KEY (repo → Settings → Secrets → Actions). Încearcă orar, publică la ~2h: un job de poartă taie rularea dacă ultimul conținut e mai proaspăt de 105 minute. Cron-ul e des ca să apere cele 2h — planificatorul GitHub sare firings de schedule (măsurat 2026-08-04: 4 rulări în loc de 12), iar cu încercări orare un firing pierdut se recuperează în ora următoare. Bugetul de build Cloudflare (~500/lună pe planul free) e păzit de poartă, nu de cron — nu coborî pragul fără să refaci socoteala.
  2. Cloudflare Pages (conectat la repo, auto-deploy la fiecare commit): rulează doar render-only și publică output/. Setări în Cloudflare Pages → Settings:
    • Build command: pip install -r requirements.txt && python -m generator.main --render-only
    • Build output directory: output
    • Environment variables: PYTHON_VERSION=3.11, SITE_BASE= (gol). (GEMINI nu e necesar aici — render-only nu apelează AI.)

Astfel: Actions face fetch+AI și salvează starea → commit-ul declanșează Cloudflare → Cloudflare randează rapid (fără AI/quota) și publică. Cron-ul de auto-actualizare vine din Actions.

Domeniul izz.ro

  1. În Cloudflare „Add a site" → izz.ro → primești 2 nameservere.
  2. La registrar (ICI/ROTLD) setezi acele nameservere pentru izz.ro.
  3. În Pages → proiectul izz-ro → Custom domains → adaugi izz.ro.

Comutare pe Claude API

Adaugă secret ANTHROPIC_API_KEY în GitHub și pune AI_PROVIDER: anthropic în build.yml.

Comutare pe Claude API

Adaugă secret ANTHROPIC_API_KEY și pune AI_PROVIDER: anthropic în build.yml. Restul rămâne identic.

About

Repository created via Manus

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages