Automatisches Einlesen, Umschreiben & Vorbereiten von RSS-Artikeln zur Veröffentlichung
Find a file
Oliver G 7163b1bd7e
feat(wordpress): only assign tags that are established
_resolve_wp_tag_ids created a WordPress tag for every keyword the rewriter
invented, up to 12 per post. That is where the 3.055 tags for 955 posts
came from - 1.683 of them used exactly once, 473 attached to no post at
all. The categories are stable now, but the tags would simply grow back.

Three changes, all on the write path:

A proposed tag has to appear for wordpress_new_tag_min_proposals (3)
different articles before it is created. Proposals are counted in the new
tag_proposals table, keyed on (name, article), so re-publishing an article
does not inflate its own count. Tags that already exist in WordPress are
assigned as before - the gate only guards creation.

Only the first wordpress_max_tags_per_post (5) tags reach WordPress. The
full list still feeds the category rules, which were validated against it.

The lookup fallback of reusing the first search hit is gone. It filed
"Camping" under the unrelated existing tag "Campingplatz" whenever the
exact tag was missing, which quietly produced wrong tags rather than none.

If the proposal bookkeeping fails, nothing is creatable that run: existing
tags still get assigned and the taxonomy stays put, rather than falling
back to creating everything.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 08:21:53 +02:00
.dedupe Image Dublettenprüfung 2025-08-18 07:36:48 +02:00
.github fix(deploy): correct service name and app path for Hetzner 2026-03-21 09:43:55 +00:00
backend feat(wordpress): only assign tags that are established 2026-07-31 08:21:53 +02:00
data Bump version to v1.7.1 2025-08-28 11:18:30 +02:00
docs Use four fixed daily publish slots 2026-07-24 10:38:04 +02:00
internal Grundfunktionen optimiert 2025-08-16 11:13:10 +02:00
logs Bump version to v1.7.1 2025-08-28 11:18:30 +02:00
pages Bump version to v1.6.3 2025-08-18 10:33:27 +02:00
scripts feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00
static Bump version to v1.6.3 2025-08-18 10:33:27 +02:00
tools Image Dublettenprüfung 2025-08-18 07:37:32 +02:00
utils Bump version to v1.7.1 2025-08-28 11:18:30 +02:00
.env.example Bump version to v1.7.1 2025-08-28 11:18:30 +02:00
.gitignore chore: gitignore CLAUDE.md instead of CLAUDE_CONTEXT.md 2026-04-20 06:24:34 +00:00
__version__.py Bump version to v1.7.1 2025-08-28 11:18:30 +02:00
AGENTS.md Bump version to v1.7.1 2025-08-28 11:18:30 +02:00
app.py Bump version to v1.7.1 2025-08-28 11:18:30 +02:00
CHANGELOG.md feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00
LICENCE Release 1.1.0 2025-07-04 09:48:03 +02:00
main.py Wordpress API Anbindung imprementiert 2025-08-16 13:01:10 +02:00
pytest.ini feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00
README.md feat: rebuild rss-news backend, admin ui, and legal extraction pipeline 2026-02-18 09:52:36 +01:00
requirements.txt Update requirements.txt 2025-08-17 17:58:18 +02:00
test_checklist.md 🔖 Release v1.5.0 2025-07-08 10:48:12 +02:00
versioning.py Bump version to v1.6.2 2025-08-16 13:39:10 +02:00

rss-news (Rebuild)

rss-news wird als bestehendes Repository weitergefuehrt und schrittweise zu einer robusten, rechtssicheren News-Pipeline neu aufgebaut.

Aktueller Stand:

  • Alte Streamlit-App wird nicht produktiv genutzt.
  • news.vanityontour.de wird bis zum Go-Live der neuen App auf https://vanityontour.de umgeleitet.
  • Planung, Doku und Wiki werden als Grundlage fuer den Neuaufbau gepflegt.

Ziele

  • RSS-gestuetzte Artikelverarbeitung mit klaren Quellregeln
  • Rechtssichere Nutzung (Quellen, Attribution, Lizenzinformationen)
  • Zuverlaessige Automatisierung auf Hetzner
  • Publikation nach WordPress (IONOS aktuell, spaeter offen)
  • Zugriff nur nach Login (zunaechst User/Password)

Architektur-Richtung (MVP)

  • Backend: Python + FastAPI
  • Jobs: Queue-Worker (z. B. Redis + RQ/Celery)
  • Daten: SQLite fuer MVP, spaeter optional PostgreSQL
  • Auth: Session-Login mit einem Admin-User
  • Publishing: WordPress REST API (Status zunaechst pending)

Details: docs/PROJECT_PLAN.md

Projektsteuerung

  • GitHub Project: https://github.com/users/OliverGiertz/projects/3/views/1
  • Dieses Board ist die zentrale Steuerung fuer ToDos, Bugs, Verbesserungen.
  • Wiki-Struktur liegt unter docs/wiki/.

Dokumentation

  • Projektplan: docs/PROJECT_PLAN.md
  • ToDo-Liste: docs/TODO.md
  • Quell- und Lizenzpolicy: docs/SOURCE_POLICY.md
  • Wiki Home: docs/wiki/Home.md

Lokale Entwicklung (Legacy-Code)

Der vorhandene Legacy-Stand kann weiterhin lokal gestartet werden:

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
streamlit run app.py

Hinweis: Diese App ist funktional historisch und wird durch die neue Architektur ersetzt.

Deployment-Zielbild

  • Betrieb auf Hetzner
  • Reverse Proxy via CloudPanel/Nginx
  • Produktive Domain: news.vanityontour.de
  • Bis zur Fertigstellung: Redirect auf https://vanityontour.de

Sicherheit

  • Keine Secrets im Repository
  • .env lokal/auf Server, nie committen
  • Auth-Pflicht fuer die neue WebApp
  • spaeter optional: Passkeys/WebAuthn

Rechtlicher Hinweis

Dieses Projekt verarbeitet nur Quellen mit dokumentierter Nutzungsgrundlage. Vor produktiver Nutzung ist eine finale rechtliche Pruefung der ausgewaehlten Feeds notwendig.