News Aggregator – Nachrichten ohne Clickbait
Strukturiert regionale und überregionale Nachrichten ohne Clickbait und Werbung. Eine familienfreundliche PWA mit Fokus auf Fulda/Osthessen, Hessen und Bundesliga – inklusive KI-Zusammenfassungen und Volltext-Suche.
Projekt auf einen Blick
Die Ausgangslage
Nachrichten lesen sollte informieren, nicht aufregen. Die meisten kostenlosen Nachrichtenangebote leben von Klicks – und Klicks bekommt man mit Empörung, Reißerischem, Halbwahrheiten. Das wollte ich nicht.
Nachrichten die ich lesen will – nicht Nachrichten, die mich zum Klicken verführen sollen.
Die Herausforderung
Automatisiert aus vielen RSS-Quellen zu importieren ist einfach – automatisiert zu erkennen, dass fünf Quellen gerade über dasselbe Ereignis mit leicht unterschiedlichem Wortlaut berichten, ist die eigentliche Aufgabe. Ohne Bündelung entsteht Redundanz statt Überblick.
Zusätzlich sollte kein Nutzer-Browser direkt gegen externe News-APIs sprechen – aus Sicherheits- und Performance-Gründen musste der komplette Datenimport serverseitig laufen, unabhängig vom einzelnen Seitenaufruf.
Die Lösung
Eine klare Trennung übernimmt die Arbeit: n8n kümmert sich um sämtliche Datenimporte im Hintergrund, SHA256-Hashes erkennen Duplikate, Jaccard-Similarity gruppiert verwandte Artikel zu Themen-Clustern, Claude Haiku fasst jeden Artikel zusammen. Supabase speichert alles zentral, Next.js liefert nur noch das fertige Frontend aus – kein direkter API-Call vom Browser an externe Quellen.
Die Umsetzung
Architektur
Die 5 n8n-Flows
| Flow | Trigger | Was er tut |
|---|---|---|
| Quellenimport | alle 30 Min. | RSS-Feeds lesen, SHA256-Hash zur Duplikat-Erkennung, in Supabase schreiben |
| Themenbündelung | alle 2h | Jaccard-Similarity gruppiert verwandte Artikel automatisch zu Themen-Clustern |
| KI-Zusammenfassungen | tägl. 06:00 | Claude Haiku erstellt ai_summary + Bullet-Points für jeden Artikel |
| Bundesliga | tägl. 18:00 + 23:00 | OpenLigaDB → Tabelle + Spieltag-Ergebnisse in Supabase upserten |
| Cleanup | tägl. 03:00 | Artikel älter als 14 Tage auf is_active=false setzen |
Die App-Seiten
Design & PWA
Das Design folgt einem klaren Leitmotiv: „Newsportal Rot" – roter Akzent (#CC0D18), Barlow Condensed als Schrift, warmer Cremehintergrund (#F4F0E8). Nicht zufällig gewählt, sondern als Referenz an klassisches deutsches Nachrichtendesign.
Das Frontend ist als PWA ausgelegt: Service Worker, Manifest, installierbar auf dem Handy-Homescreen. Nachrichten lesen wie in einer nativen App – aber vollständig im Browser, ohne App Store.
Täglich um 06:00 Uhr erstellt ein n8n-Flow für jeden Artikel eine KI-Zusammenfassung und strukturierte Bullet-Points mit Claude Haiku. So bekommt man auf der Detailseite sofort die wichtigsten Punkte – ohne den ganzen Artikel lesen zu müssen. Das spart Zeit und macht den News Aggregator zu mehr als einem RSS-Reader.
Quellen
Alle Quellen sind sorgfältig ausgewählt – keine Yellow-Press, keine Clickbait-Seiten. Die Kernquellen: ARD Tagesschau (Inland, Ausland, Wirtschaft, Wissen, Panorama, Sport), Deutschlandfunk, Zeit Online, Süddeutsche Zeitung und Heise Online für Tech-Themen. Regional: Osthessen News und HR Hessen. Bundesliga über OpenLigaDB (kostenlos, kein API-Key).
Ergebnis & Mehrwert
Statt fünf ähnlicher Artikel zum selben Ereignis erscheint ein gebündeltes Thema mit KI-Zusammenfassung – seriöse Quellen, werbefrei und ohne Tracking, mit schnellem Überblick statt Clickbait-Ablenkung.
Screenshots
Erkenntnisse
Eine Erkenntnis aus diesem Projekt: Jaccard-Similarity für das Themen-Clustering ist schnell implementiert, aber den Schwellenwert richtig zu kalibrieren hat mehrere Anläufe gebraucht – zu strikt, und ähnliche Artikel blieben getrennt; zu locker, und unterschiedliche Themen wurden fälschlich zusammengefasst.
Mir ist außerdem klar geworden, wie viel eine klare Backend/Frontend-Trennung für eine PWA bringt: Weil n8n den gesamten Datenimport übernimmt, bleibt Next.js schlank und schnell – unabhängig davon, wie viele Quellen dazukommen.
Verwandte Projekte
Weitere automatisierte Workflows und Web-Apps gibt es in der Portfolio-Übersicht.
