Eine „Now Page“ ist eine spezielle Seite auf einer persönlichen Website, die anzeigt, womit sich eine Person aktuell im Leben beschäftigt. Sie ist meist unter der URL /now erreichbar. In den letzten Monaten habe ich genau dafür ein WordPress Plugin geschrieben, dessen Geschichte, Aufbau und Technik ich hier gerne für Interessierte beschreiben würde.
Hintergrund
Auf „Now Pages“ wurde ich durch die monatlichen Treffen des Krautpress Clubs, geleitet von Simon Kraft und dem eher selten anwesenden Matthias Pfefferle, aufmerksam. Der Club ist ein lockeres Zusammenkommen von zumeist technisch versierten wie auch interessierten Menschen aus der WordPress-Welt, die in einem Zoom Meeting über die Möglichkeiten des „democratize publishing“ sprechen. Themen sind u.a. frei einsetzbare Techniken und offene Formate, die heutzutage leider nicht mehr häufig genutzt werden.
Irgendwann kamen die sogenannten Slashpages als Thema auf. Für mich völlig neu, aber gleichzeitig absolut einleuchtend und nachvollziehbar. Viele Website bieten bekanntlich ähnliche Themen mit individuellen Inhalten an, für die man durchaus einheitliche URLs verwenden könnte. Eine „Über mich“-Seite unter /about oder Kontakt und /contact. Und ja, das kommt aus dem englischen Sprachraum, aber man darf es natürlich auch eindeutschen. Ziel ist, es den Besuchern zu vereinfachen bestimmte Inhalte zu finden – nichts ist einfacher als wenn alle die gleichen URLs für ein Thema verwenden und man unter dieser ihre individuellen Texte dazu findet. Hier gibt es eine List solcher Slashpages: https://slashpages.net
Eine dieser Slashpages ist auch /now. Auf dieser kann der Inhaber der Website auflisten, wo er gerade im Leben steht, was ihn beschäftigt und wo er sich herum treibt. Erfunden wurde sie von Derek Sivers im Jahr 2015 und seither erfreuen sie sich immer größerer Beliebtheit. Hier gibt es eine Seite mit allen derzeit bekannten „Now Pages“ weltweit: https://nownownow.com
Die Last der Inhaltspflege
Simon sagte irgendwann in einem der Krautpress Club Meetings, dass er gar nicht mehr dazu käme seine eigene „Now Page“ zu aktualisieren. Das traf in dem Moment genau einen Schmerz, den ich seit geraumer Zeit habe. Ihr seid hier auf meiner privaten Website, ich zeige euch wo ich überall tätig bin und was mich interessiert – aber keiner weiß was ich tatsächlich gerade in diesem Moment, diesen Tagen, dieser Woche oder diesem Monat mache.
Natürlich kann man sich dazu auch meine Social Media Profile aufrufen. Dort steht etwas. Andererseits sind es eben nur Momentaufnahmen dessen was ich persönlich erlebt oder gesehen habe, aber eben nicht womit ich mich tatsächlich gerade beschäftige.
Trotz dessen, dass ich derzeit schon über 20 kostenfreie und 2 kommerzielle WordPress Plugins pflege, keimte in mir der Wunsch nach einem weiteren Plugin auf. Ja, ich kriege einfach nicht genug :-) So baute ich mir ein Konzept für ein „Now Pages“ Plugin, basierend auf meinen langjährigen Erfahrungen mit WordPress und Plugins.
Das Konzept
Die grundsätzliche Idee:
Die abgreifbaren Daten von Plattformen auf denen ich mich tatsächlich mit Themen beschäftige, verwenden um in der eigenen Website Informationen aus diesen oder auf Basis von diesen anzuzeigen.
Ich habe bereits mit meinem Plugin Externe Dateien für die Mediathek reichlich Erfahrung im Umgang mit externen Quellen in WordPress. Ebenso nutze ich für meine beiden kommerziellen Plugins wie auch Provenexpert die APIs von Dienstleistern um deren Daten in WordPress einzubringen. Ich wusste somit bereits, dass es in jedem Fall möglich ist.
So entstand eine Stuktur für die Daten:
- Vorlagen dienen dazu vorgefertige Konfigurationen eines Providers für eine Quelle bereitzustellen (z.B. eine vorbereitete Konfiguration zum Abruf eines RSS-Feed eines WordPress.org Profils, bei der man nur noch den eigenen Profil-Namen angeben muss).
- Provider stellen den Zugriff auf die externe Quelle bereit (z.B. den RSS-Reader).
- Quellen speichern die Konfiguration eines Providers (z.B. die RSS-Quelle für die WordPress.org Profil-Daten) um Daten abzurufen. Das ist letztlich der Schlüssel um Datensätze von extern zu beziehen.
- Einträge sind die von der externen Quelle importierten Datensätze (z.B. die neuesten Tätigkeiten eines WordPress.org Profils wie neueste Beiträge im Forum, Arbeiten am Core oder Übersetzungen).
- Kategorien helfen dabei die Einträge anzuordnen und zu gruppieren, um thematische Zusammenhänge innerhalb der eigenen Now Page zu erzeugen.
Dadurch hatte ich erstmal alles um Daten von extern abgreifen und speichern zu können. Doch wie gebe ich die Daten dann im Frontend in der vom Plugin erzeugten Now Page aus? Wenn ich Einträge aus 5-7 RSS-Feeds und vlt. noch aktuell gehörte Lieder von lastfm erhalte, könnte ich diese 1:1 anzeigen wollen. Aber das sieht irgendwann auch doof aus und entspricht nicht ganz dem was „Now Pages“ machen sollten. Es würde eher wie ein Tätigkeits-Feed wirken, eine Art Arbeitsnachweis.
Daher entwickelte ich ein Konzept für eine generische Ausgabe der Einträge. Ich ermögliche es dem Inhaber der Website selbst zu wählen, was er will:
- Eine 1:1-Liste der Einträge. So könnte man eine fortlaufende Liste der eigenen Tätigkeiten erzeugen.
- Ein Erzähl-Modus, bei dem die Einträge verbal zusammengefasst werden. Optional auch mit Hilfe von KI.
Beide Methoden sollten die Einträge optional gruppiert nach ihren Themen sowie optional mit Anzeige ihrer Datums- und Zeitangaben ausgeben. Der Erzähl-Modus war jedoch die größere Herausforderung für mich. Wie kann ich per Programmierung aus verschiedensten eintreffenden textlichen Informationen eine Erzählung schaffen – und das ganz ohne KI? Aber ich war erstmal beim Konzept und hob mir das für später auf.
Zu meinem Konzept gehörte von vornherein auch ein Stalker-Schutz. Ich bastelte hier an einer Now Page, wo aktuelle Tätigkeiten eines Menschen aufgelistet werden können. Jemand könnte diese Liste als Basis zum Verfolgen der Person verwenden. Daher habe ich sofort an eine Verzögerung („Delay“) für die Anzeige jeglicher Einträge gedacht. Das war interessanterweise fast das Einfachste am ganzen Projekt.
Und ja, der Zeitfaktor spielt auch eine Rolle. Schaut man sich verschiedene Now Pages an, zeigen diese Angaben aus der letzten Woche, aus dem letzten Monat oder auch einem halben Jahr. Mein Plugin sollte auch mit diesen verschiedenen Zeitfaktoren umgehen können.
Und dann war da noch das Thema KI, welches derzeit für einen enormen Wandel in der Art wie wir arbeiten und auch mit WordPress umgehen sorgt. Ich habe bereits die WordPress-eigene Abilities API genutzt um Schnittstellen zu schaffen per MCP andere von mir entwickelte Plugins zu verwenden. Das wollte ich hier natürlich ebenso ermöglichen.
Die Umsetzung
Mein Konzept stand und ich begann an einem verregneten Sonntag im Sommer 2026 mit der Umsetzung. Innerhalb weniger Stunden hatte ich bereits die Basis geschaffen – ganz ohne KI-Unterstützung. Da ich vieles aus meinen anderen Plugins übernehmen konnte, saß die Struktur des Plugins und die ersten Abläufe sehr schnell. Noch am gleichen Abend importierte ich die ersten RSS-Feeds und konnte mir deren Einträge auf der neuen Now Page anschauen.
Dann ging es um die Ausgabe der Einträge, insbesondere den Erzähl-Modus. An der Stelle setzte ich das erste Mal KI für die Entwicklung dieses Plugins ein und konnte hierfür eine doch, denke ich, brauchbare Lösung finden, die auch mit verschiedenen Sprachen funktionieren sollte. Ob das klappt, wird dann der Einsatz in der Masse zeigen. In meinen automatisierten Tests mit Hilfe von Playwright, kamen durchaus brauchbare Dinge raus. Alternativ dazu richtete ich aber auch die Verwendung von KI für die Optimierung der Texte ein. Sobald ein API Konnektor in WordPress aktiv ist und die angebundene KI String-Unterstützung mitbringt, kann KI genutzt werden um die Texte der Now Page zu optimieren. Das ganze natürlich gecached, damit nicht jeder Aufruf eine KI-Anfrage auslöst.
Anschließend kopierte ich sprichwörtlich aus meinen kommerziellen Plugins die Unterstützung für 12 Page Builder (u.a. Avada, Divi 4 & 5 sowie Elementor) um native Widgets, Module, Elemente .. whatever dem Anwender zu bieten. Dieser soll sich bei dem Plugin heimisch fühlen, da er sich nicht an irgendeine ihm neue Umgebung für die Ausgabe seiner Now Page Inhalte gewöhnen muss. Da mir 12 Page Builder noch nicht genug waren, baute ich mit Hilfe von KI die Unterstützung für 7 weitere Page Builder, die ich bis dahin teilweise noch gar nicht kannte, ein. Es war interessant in diese Vielfalt im WordPress-Kosmos einen Einblick zu bekommen. Schaut euch z.B. mal den Zion Builder an – will keine Werbung machen :) Zusätzlich dazu baute ich natürlich auch einen Shortcode und ein klassisches Widget mit ein. Damit konnte man nun fast 30 Page Builder (manche basieren auf klassischen Widgets oder Shortcodes) für die Now Page verwenden. Ich war sprichwörtlich am Ende der Fahnenstange, was PageBuilder-Unterstützung betraf, angekommen.
Anschließend ging ich wieder an den Anfang zurück. Wie kann ein Anwender, der das Plugin installiert, schnell starten und nicht viel suchen? Ich verwende für mein Now Page Plugin mehrere meiner eigenen composer Packages, so nun auch Easy Setup for WordPress. Das konnte ich sofort verwenden um dem Anwender einen leichten Einstieg in Form eines Frage-Antwort-Dialogs zu ermöglichen. Er bekommt eine Liste mit ihm möglicherweise bekannten Icons und Begriffen angezeigt, unter denen er seine bevorzugte Datenquelle direkt auswählen und anbinden kann. Das Setup holt bereits die neuesten Einträge zu dem was er hier konfiguriert hat, wodurch direkt danach seine Now Page sofort erreichbar und bereits mit Inhalten gefüllt ist. Das Plugin ist also innerhalb von nicht mal 2 Minuten eingerichtet und voll funktionsbereit – egal welchen der rund 30 PageBuilder man nutzt.
Das Vorgehen entspricht übrigens dem, was ich bei meinen kommerziellen Plugins auch mache: der Anwender muss nur eine Angabe machen und das Setup ermöglichen einen schnellen Start. Kam bisher sehr gut an :) Bei den kostenfreien Plugins, ist es teilweise auch enthalten – macht aber nicht immer viel Sinn. Hier jedoch durchaus.
Nachdem diese Basis stand, habe ich mich an mehreren nachfolgenden Abenden um die Feinarbeiten gekümmert. Dabei testete ich es mit meinen eigenen Daten und prüfte auch Möglichkeiten, die ich nicht benötige, aber vlt. für andere interessant sind. Das Plugin enthält folglich nicht nur Themen, die ich selbst verwende sondern die die Breite Masse an möglichen Anwendern zufriedenstellen sollte.
Technikkram
Für die technische Interessierten, hier nur ein paar Stichpunkte zu dem, was in diesem Plugin verwendet wird:
- WordPress Coding Standards werden natürlich eingehalten.
- PHP Strict wird genutzt.
- PHPStand in Level 8.
- Smoke Test beim Releasen über GitHub um die Lauffähigkeit des fertigen ZIPs sicherzustellen.
- PlayWright zum echten automatischen Testen der grafischen Ausgabe in einem simulierten Browser mit einem fertigen Release bevor es veröffentlicht wird.
- Über 200 PHP Unit Tests.
- Abilities API um es KI zu ermöglichen selbst Einträge vorzunehmen, Quellen zu ergänzen oder anderweitig behilflich zu sein.
- Skills für KI Agents sowohl für Entwickler als auch für Anwender.
- Veröffentlichung von Zusammenfassungen der Einträge über das ActivityPub Plugin im Fediverse.
Full Disclosure
Und ja, ich habe dieses Plugin erstmals mit Unterstützung von KI entwickelt. Ich schätze, dass rund 60% des Codes von KI erzeugt wurde. Jede Zeile habe und musste ich aber auch kontrollieren. Trotz aller Fortschritte, machen KIs weiterhin haarsträubende Fehler, die teilweise sogar den Sinn des Plugins verfälscht hätten. Die von mir hinterlegten Skills wurden mehrfach ignoriert und einmal ist eine KI auch entgegen meinen Anweisungen auf meine Entwicklungs-VM gegangen und hat Dinge angepasst.
Dennoch ist die Verwendung von KI für mich inzwischen eine absolute Zeitersparnis. Entwicklungen, für die ich sonst 1-2 Wochen benötigt hätte, sind innerhalb von einer Stunde durch eine KI erledigt. Danach kontrolliere ich das erzeugte noch 2-3 Stunden lang und habe immernoch eine Ersparnis von vielen Stunden.
Für mich entscheidend ist dabei, dass – egal was eine KI mir rät und welchen Code sie mir gibt – ich die betreffende Funktion des Plugins in jedem Fall selbst testen und absichern musste, dass sie wirklich so funktioniert wie sie soll. Jede. Einzelne. Funktion.
Dennoch: ohne die Erfahrungen mit meinen anderen Plugins sowie dem tiefen Einblick in WordPress, PHP und React, hätte ich auch mit Unterstützung von KI dieses Plugin nicht in der Form und der Qualität fertigstellen können.
Die Steine im Weg
Nachdem ich das Plugin aus meiner Sicht fertig gestellt hatte, kamen noch 2 große Hürden auf mich zu:
- Ein Test auf Stabilität und Sicherheit durch andere KI-Modelle.
- Die Einrichtung im WordPress Repository.
KIs sind auch nur Menschen
Die allermeisten Arbeiten am Plugin, habe ich gemeinsam mit Claude Sonnet oder Opus gemacht. Sonnet für einfache Dinge, Opus für den Überblick über alles (auch wenn es den nie hat). Als ich das aus meiner Sicht fertige Plugin an ChatGpt, Grok und Perplexity weitergab, kamen plötzlich jedoch scheinbar völlig neue Baustellen zu Tage.
Jedem KI-Modell fiel etwas anderes auf – und fatalerweise lagen sie allesamt zu 90% falsch. Diese Beurteilung habe ich mir dann doch selbst erlaubt, denn was sie als Fehler meldeten war Absicht oder hätte bei Änderung gar den Sinn des Plugins geändert. Claude Fable hat mir in der letzten Instanz zugestimmt und so musste ich nur minimale Optimierungen vornehmen.
Das WordPress Plugin Team
Ich würde mir anmaßen zu behaupten, dass das WordPress Plugin Team in den letzten Monaten das Team mit der höchsten Auslastung ist. Was diese Freiwilligen leisten um das WordPress Repository nicht nur sicher sondern auch besser zu machen ist aller Ehren wert.
In meiner Rolle als Support Moderator bei wp.org, habe ich öfter mit ihnen zu tun. So unterstütze ich ab und zu im #pluginreview Channel vom wp.org Slack bei der Beantwortung von Fragen. Dieser Channel ist es auch, wo ich immer wieder Fragen zu laufenden Reviews sehe. Viele wundern sich über lange Wartezeiten – teilweise zieht sich so etwas bei einigen über Monate hinweg.
Das zuletzt von mir eingereichte Plugin Connector for Propstack hatte rund 3 Wochen für die Freigabe benötigt. Es gab 5-6 E-Mails mit Rückfragen und Antworten – dann war es soweit. Umso gespannter war ich, wie lange ein derart mit Hilfe von KI optimiertes und auf Sicherheit sowie Einhaltung der WordPress Plugin Richtlinien getrimmtes Plugin beim Plugin Team ankommen würde. Man muss auch den Umfang bedenken: das Plugin besteht aus über 500 PHP-Dateien sowie nochmals mehrere hundert JavaScript-Dateien. Das ist kein einfaches Plugin, was nur einen Hook in WordPress beeinflusst und dadurch schnell geprüft sein sollte.
Um es direkt zu sagen: von der Einreichung bis zur Freigabe dauerte es exakt 70 Stunden. Und dazwischen lag nur ein E-Mail-Austausch zur erforderlichen Namensänderung von „Now Pages by threadi“ zu „threadi Now Pages“.
Hätte ich schneller auf die Namensänderung reagiert, hab ich die Vermutung, dass es noch weniger Zeit gewesen wäre. Die Freigabe des umbenannten Plugins kam ohne weitere Beanstandungen in meiner Zeitzone nachts um 3 Uhr. Ich hatte noch einen sprichwörtlich vollen Arbeitstag vor mir und habe es daher erst im Laufe des Tages per SVN hochgeladen, Übersetzungen und Screenshots ergänzt sowie abschließend getestet. Alles in Ordnung.
Da ist es nun: https://de.wordpress.org/plugins/threadi-now-pages/
Hoffnungen
„threadi Now Pages“ ist mein 21. kostenfrei verfügbares WordPress-Plugin. Ja, das ist viel um das man sich regelmäßig kümmern müsste. Dazu kommen auch noch 2 kommerzielle Plugins, die ehrlich gesagt Priorität haben, da sie dabei helfen, dass ich das überhaupt machen kann.
Meine Hoffnung ist nun, dass „threadi Now Pages“ vielleicht genau so gut ankommt, wie meine anderen Plugins. Es wäre mir eine Freude Rückmeldungen zu erhalten und vor allem Now Pages zu sehen, die mit meinem Plugin erstellt wurden. Gebt mir gerne Bescheid :-)