pub / kontra

Der linke Newsaggregator.
git clone src.jayvii.de/pub/kontra.git
Home | Log | Files | Exports | Refs | README | RSS

commit 937bbd392df050ba479a320269bc982c3c34721e
parent c9efff5250a62c87f5fed3183958674d67203a97
Author: JayVii <jayvii[AT]posteo[DOT]de>
Date:   Sat, 14 Jun 2025 17:31:05 +0200

feat: add remaining features for initial version

Diffstat:
Massets/css/custom.css | 27++++++++++++++++++++++++++-
Aassets/img/background.jpg | 0
Aassets/img/background_cut.jpg | 0
Aassets/img/background_orig.jpg | 0
Mindex.php | 310++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
Mnews-sources.json | 2+-
6 files changed, 206 insertions(+), 133 deletions(-)

diff --git a/assets/css/custom.css b/assets/css/custom.css @@ -2,7 +2,8 @@ * REVERSED for better highlighting */ :root { - --accent: #e93700; + --accent: #ef5d2f; + --imagetaint: #a22600bb; --accent-hover: #ff9999; --marked: #ff6733; } @@ -28,6 +29,9 @@ #searchform { flex-direction: column; } + .nomobile { + display: none; + } } /* Buttons */ @@ -104,3 +108,24 @@ mark { img, video { opacity: 1 !important; } + +.description { + padding: 1em; + border-radius: 10px; + margin-bottom: 2em; + background-color: var(--imagetaint); + background-image: url("/assets/img/background.jpg"); + background-size: cover; + background-repeat: no-repeat; + background-blend-mode: darken; +} + +.submit-container { + width: 100%; + background-color: var(--bg); + padding: 0.5em; + border-radius: 10px; + position: sticky; + top: 0px; + z-index: 99; +} diff --git a/assets/img/background.jpg b/assets/img/background.jpg Binary files differ. diff --git a/assets/img/background_cut.jpg b/assets/img/background_cut.jpg Binary files differ. diff --git a/assets/img/background_orig.jpg b/assets/img/background_orig.jpg Binary files differ. diff --git a/index.php b/index.php @@ -115,19 +115,19 @@ </header> <!-- Description --> - <div class="fullheight description"> - <strong style="font-size: 133%;"> - <em>Kontra</em> gibt Nutzer:innen die Möglichkeit, - unterschiedliche Nachrichtenquellen zu einem persönlichen - Nachrichten-Feed zusammen zu stellen. Ganz ohne Tracking, - Big-Tech und algorithmischem Framing. - </strong> - <p> - Auf dieser Seite befinden sich viele seriöse Medienquellen aus - dem <em>linken Spektrum¹</em> von Zeitungen, Magazinen und - sonstigen journalistischen Veröffentlichungen, aus denen sich - persönliche Nachrichten-Feeds erstellt werden lassen. - </p> + <div class="fullheight"> + <div class="description"> + <strong style="font-size: 133%;"> + Nachrichten von Links! Ohne Tracking, ohne Tech-Konzerne und + ohne algorithmisches Framing. + </strong> + <p> + Auf dieser Seite befinden sich viele seriöse Medienquellen + aus dem <em>linken Spektrum</em> von Zeitungen, Magazinen + und sonstigen journalistischen Veröffentlichungen, aus denen + sich persönliche Nachrichten-Feeds erstellt werden lassen. + </p> + </div> <div class="buttonrow"> <a href="#usage" class="button c2"> Wie funktioniert das? @@ -157,16 +157,7 @@ <strong>ohne Konto-Zwang</strong> <strong>ohne <a href="https://de.wikipedia.org/wiki/Soziales_Netzwerk_(Internet)#Kritik" target="_blank">Algorithmen</a></strong> und <strong>ohne <a href="https://de.wikipedia.org/wiki/Lock-in-Effekt" target="_blank">Lock-In Effekte</a></strong>. - </p> - <p> - Hierfür nutzt Kontra die offene Schnittstelle - <a href="https://de.wikipedia.org/wiki/RSS_(Web-Feed)" target="_blank"> - RSS - </a> (zu deutsch: <em>sehr einfache Verbreitung</em>), welche - von Millionen Webseiten und Online-Zeitungen weltweit zur - Verfügung gestellt wird, um Nachrichten auf direktem Weg an - interessierte zu verteilen. RSS ist das <em>schwarze Brett</em> - von Zeitungen, Blogs und digitalen Veröffentlichungen. + Wie das funktioniert, erfährst du <a href="#faqs">hier</a>! </p> <p> Kontra ist ein Archiv mit aktuell @@ -271,7 +262,15 @@ <form id="sources-selection" method="post"> <!-- Submit button --> - <input type="submit" value="Nachrichten-Feed erzeugen!"> + <div class="submit-container"> + <input type="submit" value="Nachrichten-Feed erzeugen!"> + <a href="#sources" class="button" title="Nach oben"> + &#128070; <stretch class="nomobile">Nach oben</stretch> + </a> + <a href="#faqs" class="button" title="Nach unten"> + &#128071; <stretch class="nomobile">Nach unten</stretch> + </a> + </div> <input type="hidden" name="action" value="gen_opml"> <?php $cnt = 0; @@ -327,148 +326,197 @@ <h3>Was ist <em>Kontra</em>?</h3> - <!-- meaning of name --> <details> - <summary>Sammelt Kontra meine Daten?</summary> + <summary>Welche Technik nutzt Kontra?</summary> <p> - Nein! Kontra sammelt keinerlei Datein über Personen und - Geräte, die diese Seite besuchen und Kontra nutzen. - Technisch bedingt, wird bei jedem Aufruf <em>jeder</em> - Webseite im Internet mindestens die eigene IP-Adresse und - oft noch weitere Informationen über das Betriebssystem, den - Webbrowser, bzw. das verwendete Gerät übermittelt. Kontra - speichert <strong>keine</strong> dieser Informationen. + Millionen Webseiten und Online-Zeitungen weltweit bieten die + offene Schnittstelle + <a href="https://de.wikipedia.org/wiki/RSS_(Web-Feed)" target="_blank"> + RSS + </a> (zu deutsch: <em>sehr einfache Verbreitung</em>) an. + Nahezu jeder Blog, jede Nachrichtenseite und + Online-Veröffentlichungen nutzen einen <em>RSS</em> Feed. + Das ist eine maschinenlesbare Datei, welche alle dort + veröffentlichte Nachrichten und einige Zusatzinformationen + (Veröffentlichungszeitpunkt, Autor:in, Kurzzusammenfassung, + usw.) enthält. RSS kann als <em>schwarzes Brett</em> + digitaler Medien verstanden werden. </p> <p> - Zudem stellt Kontra lediglich das Archiv von RSS-Feeds zur - Verfügung. Kontra speichert außerdem keine Informationen - darüber, welche Nachrichtenquellen von Nutzer:innen - ausgewählt werden. + Kontra stellt eben diese RSS-Feeds für alle von Nutzer:innen + ausgewählte Medien in einer herunterladbaren Datei zusammen, + die in üblichen Feedreadern (siehe: + <em><strong>Was sind Feedreader?</strong></em>) importiert + werden kann. Diese Datei basiert auf dem offenen + <a href="https://de.wikipedia.org/wiki/Outline_Processor_Markup_Language", target="_blank"> + OPML + </a> Format und wird von nahezu allen RSS/Feed-Readern + verstanden. Damit gewährleistet Kontra, dass es keinen + sogenannten <em>Lock-In</em> Effekt gibt, der Nutzer:innen + an eine einzige App binden und der Wechsel zu Alternativen + erschwert. </p> <p> - Mit dem Herunterladen der Feed-Datei endet der - Datenaustausch zwischen den Nutzer:innen und Kontra. Kontra - hat technisch bedingt keinen Einblick darin, ob und welche - Nachrichten Nutzende in welche Feedreader einlesen oder - welche Nachrichten tatsächlich von Nutzer:innen gelesen - werden. Das liegt daran, dass die Nachrichten - <strong>direkt</strong> und ohne Umwege von den jeweiligen - Nachrichtenseiten kommen und zu keinem Zeitpunkt über Kontra - laufen. + Die angesprochenen OPML-Dateien enthalten nicht nur die + RSS-Feeds selbst, sondern auch alle Kategorien, die man + ihnen innerhalb des eigenen Feed-Readers zugewiesen hat. Die + OPML-Dateien aus Kontra enthalten alle Kategorie-Label, die + auch in der Liste sichtbar sind. + </p> + <p> + <strong>Kurzum:</strong> RSS und OPML sind die grundlegende + Technik, auf die <em>Kontra</em> setzt. Nachrichten können + darüber direkt von Blogs und Zeitungen bezogen werden, ohne + dass Dritte Einsicht darin haben. Feeds können in nahezu + allen Feedreadern importiert und exportiert werden. Ein + Wechsel von einer App zu einer anderen ist also innerhalb + von Sekunden möglich. </p> </details> - <!-- what are keywords --> <details> - <summary>What are keywords?</summary> + <summary>Was sind Feed-Reader / RSS-Reader?</summary> <p> - An idea lent from the search Engine - <a href="https://duckduckgo.com/bangs" target="_blank"> - DuckDuckGo - </a>, which has been utilized by many others since. They - call their keywords bangs, but it is the same concept and - usability. In essence, keywords are shortcuts for searching - on other websites. + Feed- oder RSS-Reader erlauben es, so genannte RSS-Feeds zu + <em>abonnieren</em>, um regelmäßig Nachrichten von diesen zu + erhalten. Das Konzept ist vergleichbar mit einem E-Mail + Newsletter. </p> <p> - For example, you can conduct a search on the website - <a - href="<?php echo $searches[$rsi]["website"]; ?>" - target="_blank" - > - <?php echo $searches[$rsi]["name"]; ?> - </a> - directly from <?php echo $_SERVER["SERVER_NAME"]; ?> by - adding the keyword - <code>!<?php echo $searches[$rsi]["keywords"][0]; ?></code> - to your search query. + Der Unterschied besteht darin, dass man, um einen Newsletter + erhalten zu können, den Versender:innen eine E-Mail Adresse + hinterlegen muss. Newsletter werden dann aktiv von den + Versender:innen an bekannte Empfänger:innen verschickt. </p> <p> - You can find all keywords associated with each search engine - in the <a href="#engines">list above</a>. + Bei RSS-Feeds ist es umgekehrt. Empfänger:innen (bzw. von + ihnen genutzt Feed-Reader) ziehen sich die Nachrichten von + den Nachrichten-Seiten oder Blogs selbst. Letztere wissen + dabei gar nicht, wer die Empfänger:innen sind oder wie viele + es letztendlich sind. + </p> + <p> + Der RSS-Reader ist lediglich die Software, welche die + Nachrichten empfängt und diese oft in einem Listen-Format + zum Lesen anzeigt. Es gibt eine Vielzahl wirklich guter + und zeitgemäßer RSS-Reader für alle möglichen Endgeräte, + ganz egal ob am PC, Smartphone, Tablet, E-Book-Reader oder + per Webbrowser. + </p> + <p> + Folgende RSS-Reader sind kostenlos und darüber hinaus noch + <a href="https://fsfe.org/freesoftware/freesoftware.de.html" target="_blank"> + Freie, Open Source Software + </a>: + <ul> + <li><a href="https://apps.apple.com/us/app/netnewswire-rss-reader/id1480640210" target="_blank">NetNewsWire (iOS)</a></li> + <li><a href="https://apps.apple.com/us/app/twine-rss-reader/id6465694958" target="_blank">Twine (iOS)</a></li> + <li><a href="https://play.google.com/store/apps/details?id=com.nononsenseapps.feeder.play" target="_blank">Feeder (Android)</a></li> + <li><a href="https://play.google.com/store/apps/details?id=dev.sasikanth.rss.reader" target="_blank">Twine (Android)</a></li> + <li><a href="https://freshrss.org/" target="_blank">FreshRSS (Web)</a></li> + <li><a href="https://www.thunderbird.net/de/" target="_blank">Thunderbird (Windows, MacOS, Linux)</a></li> + <li><a href="https://gfeeds.gabmus.org/" target="_blank">Feeds (Linux)</a></li> + <li><a href="https://alternativeto.net/browse/search/?q=rss%20reader" target="_blank">und viele weitere</a>...</li> + </ul> </p> </details> - <!-- how to use --> <details> - <summary>How can I use serĉi?</summary> + <summary>Kann ich weitere Nachrichten-Feeds abonnieren?</summary> <p> - You can try serĉi directly - <a href="#searchbar">on this site</a> or - <a - href="https://src.jayvii.de/pub/serci/#hosting" - target="_blank" - > - host it yourself - </a>! - It barely needs any server resources, no database or lots of - RAM. serĉi has minimal footprint (also on user data: there - are <strong>none</strong>). + Ja! Gibt es Nachrichtenquellen, die nicht in Kontra + enthalten sind, kann man diese auch einzeln im eigenen + Feed-Reader abonnieren. Auch das ist sehr einfach und dauert + in der Regel nur wenige Sekunden. </p> <p> - Either type your search directly into the - <a href="#searchbar">search bar at the very top</a> - or add the search to your browser by rightclicking in the - URL-bar of your web browser and choose - <emph>add serĉi - Search with !keywords</emph>. + Fast alle Online-Medien haben eine Unterseite, auf der sie + ihre RSS-Feeds auflisten. Folgende Medien sind + beispielsweise wegen des Fokus auf dediziert Linke Medien + nicht in Kontra enthalten, lassen sich aber sehr einfach + über einen RSS-Reader abonnieren: + <ul> + <li><a href="https://www.tagesschau.de/infoservices/rssfeeds" target="_blank">Tagesschau (ÖRR)</a></li> + <li><a href="https://www.deutschlandfunk.de/rss-angebot-102.html" target="_blank">Deutschlandfunk (ÖRR)</a></li> + <li><a href="https://www.sueddeutsche.de/service/updates-mit-rss-uebersicht-aller-rss-feeds-fuer-sz-de-sz-magazin-und-jetzt-de-1.393950" target="_blank">Süddeutsche Zeitung</a></li> + </ul> </p> + </details> + + <details> + <summary>Ist Kontra kostenlos?</summary> <p> - Some browsers (for example Firefox on Android / Fennec) - allow to configure custom search engines via a so-called - search URL. Simply list following URL as - <emph>search-URL</emph> there and choose it as your fallback - search option: + Ja! Kontra ist und bleibt kostenlos. Es ist lediglich ein + kleines privates Software-Projekt einer Einzelperson. </p> - <pre>https://<?php echo $_SERVER["SERVER_NAME"]; ?>/?q=%s</pre> <p> - You can also choose the fallback search engine, used by - serĉi as fallback, when no keyword is given, through the URL - instead of choosing it from the - <a href="#engines">list above</a>, in case you do not want - serĉi to store any cookie on your device. For example, if - you wanted to use - <a - href="<?php echo $searches[$rsi]["website"]; ?>" - target="_blank" - > - <?php echo $searches[$rsi]["name"]; ?> + Zudem wird Kontra + <a href="https://fsfe.org/freesoftware/freesoftware.de.html" target="_blank"> + Freie, Open Source Software </a> - as your fallback search, you could use following search-URL: + entwickelt. Der Programm-Code kann also von allen jederzeit + eingesehen werden. Verbesserungsvorschläge oder eigene + Code-Beiträge sind stets willkommen. Es ist auch erlaubt, + eigene Projekte auf Kontra aufzubauen. Diese müssen jedoch + ebenfalls unter einer Freien Software-Lizenz stehen. + </p> + <p> + Du möchtest helfen? + <a href="https://src.jayvii.de/pub/kontra/" target="_blank"> + Hier + </a> findest du mehr Informationen dazu. </p> - <pre><?php - echo "https://" . $_SERVER["SERVER_NAME"] . - "/?fallback=" . $rsi . "&q=%s"; - ?></pre> </details> - <!-- no js or cookies --> <details> - <summary> - Choosing a fallback search without cookies or Javascript - </summary> + <summary>Ist das <em>Abonnieren</em> eines RSS-Feed kostenlos?</summary> <p> - You can simply choose a fallback search by adding the - <code>fallback</code> URL parameter. For example, if you - wanted to use - <a - href="<?php echo $searches[$rsi]["website"]; ?>" - target="_blank" - > - <?php echo $searches[$rsi]["name"]; ?> - </a> - as your fallback search, you can simply add - <code>/?fallback=<?php echo $rsi; ?></code> to the serĉi - URL: - <br> - <a href="/?fallback=<?php echo $rsi; ?>"> - <?php - echo "https://" . $_SERVER["SERVER_NAME"] . - "/?fallback=" . $rsi; - ?> - </a> + Ja! Allerdings kann es sein, dass einige der in den + Nachrichten-Feeds angebotenen Artikel hinter einer + Bezahlschranke liegen, also oft nicht in voller Länge + gelesen werden können, ohne ein Abonnement bei der + jeweiligen Online-Publikation, bzw. ein Zeitungsabonnement + abzuschließen. + </p> + <p> + Kontra kennzeichnet Nachrichtenquellen, bei denen einige + Artikel hinter einer Bezahlschranke liegen können. + Nachrichtenquellen, die niemals eine Bezahlschranke nutzen + sind ebenfalls in einer eigenen Kategorie. + </p> + </details> + + <details> + <summary>Sammelt Kontra meine Daten?</summary> + <p> + Nein! Kontra sammelt keinerlei Datein über Personen und + Geräte, die diese Seite besuchen und Kontra nutzen. + Technisch bedingt, wird bei jedem Aufruf <em>jeder</em> + Webseite im Internet mindestens die eigene IP-Adresse und + oft noch weitere Informationen über das Betriebssystem, den + Webbrowser, bzw. das verwendete Gerät übermittelt. Kontra + speichert <strong>keine</strong> dieser Informationen. + </p> + <p> + Zudem stellt Kontra lediglich das Archiv von RSS-Feeds zur + Verfügung. Kontra speichert außerdem keine Informationen + darüber, welche Nachrichtenquellen von Nutzer:innen + ausgewählt werden. + </p> + <p> + Mit dem Herunterladen der Feed-Datei endet der + Datenaustausch zwischen den Nutzer:innen und Kontra. Kontra + hat technisch bedingt keinen Einblick darin, ob und welche + Nachrichten Nutzende in einen Feedreader einlesen oder + welche Nachrichten tatsächlich von Nutzer:innen gelesen + werden. Das liegt daran, dass die Nachrichten + <strong>direkt</strong> und ohne Umwege von den jeweiligen + Nachrichtenseiten kommen und zu keinem Zeitpunkt über Kontra + laufen. </p> </details> + </section> </body> diff --git a/news-sources.json b/news-sources.json @@ -400,7 +400,7 @@ ] }, "nd-loc-brandenburg": { - "title": "nd: Berlin", + "title": "nd: Brandenburg", "desc": "Überregionale Tageszeitung mit Leserschwerpunkt in Ostdeutschland und Selbstverständnis als sozialistisch. Lokales und Nachrichten aus Brandenburg.", "web": "https://www.nd-aktuell.de/rubrik/Brandenburg/", "rss": "https://www.nd-aktuell.de/rss/brandenburg.xml",