Zum Inhalt

Ein Datensatz, jede Fläche.

Ein Termin-Plugin für kleine Studios: Eine Stunde wird einmal eingetragen und speist Stundenplan, Trainer-Karten, Kurspanel, Anmeldungen und strukturierte Daten. Gebaut, damit die Inhaberin einer Münchner Tanzschule ihre Website selbst betreiben kann, ohne eine Seite anzufassen.

Gebaut
Vier Datensatztypen, vier öffentliche Oberflächen, Anmeldungen mit eigenem Weg für Probestunden, Absage-Mail, Course-, Event- und Person-JSON-LD aus denselben Datensätzen wie die Anzeige.
Methode
Participatory Design: ein klickbares Mockup pro Oberfläche vor jeder Spec, getestet von der Inhaberin. KI schrieb den Code nach meinen Specs, ein zweites Modell prüfte ihn, ich habe jede Version auf Staging verifiziert.
Einmal bewiesen
Am Launch-Tag hat die Inhaberin jede Stunde selbst für Anmeldungen geöffnet und die Kapazitäten gesetzt. Seitdem sind die Versionen 1.11.18 bis 1.14.0 live gegangen. Stundenplan und Anmeldungen betreibt sie die ganze Zeit allein; ich liefere Versionen aus. Neun Wünsche von ihr bisher: acht live, einer mit Begründung abgelehnt.

Kernergebnis

21
Anmeldungen für 9 Stunden über die öffentlichen Formulare, in den ersten zwei Tagen live
Anmeldungen-Ansicht · 24.09.2026

WordPress-Plugin · von mir entworfen und verantwortetLive auf kayjays.de seit 23.09.2026

  1. Erste Version
  2. Regel: erst Mockup
  3. Live; ihre ersten Änderungen ohne mich
  4. Ihre ersten Wünsche live
  5. Sechs Wochen: sie betreibt es allein
0
Kursangaben von Hand auf einer Seite, bei 27 Stunden, 12 Trainer:innen und 8 Kursarten
Staging-Renderings · Sep. 2026
9
Fehler im Design-Review gefunden, bevor es Code gab
Release-Protokolle
10 → 3
Gleichzeitige Anfragen für drei Plätze, genau drei Buchungen
Abnahmetest
Kapitel
  1. Was es ist
  2. Was es für sie erledigt
  3. Für Suche und KI
  4. Wie entschieden wurde
  5. Wie es gebaut wurde
  6. Bewusst nicht gebaut
  7. Zum Launch
  8. Was als Nächstes kommt
  9. Quellen

Trainer:in, Kurs und Zeit stehen im Datensatz, nie auf einer Seite.

Das ist die Grundregel, wörtlich. Die alte Website hatte ihren Stundenplan als ein einziges Bild und ihre Trainer:innen als von Hand getippte Seiten. Jede Änderung hieß drei Bearbeitungen und die Chance, eine zu vergessen. Das Plugin hält vier Datensatztypen (Kurs, Stunde, Trainer:in, Ort) und rendert daraus alles, was Besucher:innen sehen. Die Seite selbst enthält keine Fakten.

Ein Datensatz, vier Oberflächen

QuelldatensatzStunde · Trainer:in · Ort · PreisEinmal im Plugin-Backend eingetragen. Nichts davon wird nachgelagert von Hand getippt.
  1. Stundenplan-BlockWochenraster oder Tagesliste, je Kurs, Trainer:in und Ort
  2. Trainer-GridUnd Kurs-Trainer-Karten
  3. KurspanelPreise, Anmeldung, Probestunde, Warteliste
  4. JSON-LDCourse-, Event- und Person-Schema aus denselben Datensätzen
27 Stunden pro Woche, 12 Trainer:innen, 8 Kursarten. Staging-Renderings, September 2026.

Eine Kurszeit oder eine Adresse steht im Stundenplan, auf einer Trainer-Karte, im Kurspanel und im JSON-LD. Von Hand gepflegte Kopien laufen auseinander; hier werden alle vier aus einem Datensatz erzeugt, es gibt also nichts, das auseinanderlaufen kann. Was die Datensätze für die Suche ausgeben, steht unter der Aufgabentabelle.

Der alte KayJays-Wochenstundenplan, veröffentlicht als einzelnes Bild
Vorher · der Stundenplan als ein Bild
Das vom Plugin gerenderte Wochenraster: fünf Tagesspalten mit Kurskarten mit Zeit, Alter, Trainer:in, Dauer und Buchungs-Buttons
Nachher · dieselbe Woche, aus Datensätzen gerendert

Dreizehn Aufgaben, die das Plugin jetzt für sie erledigt.

Ein Stundenplan, der sich selbst rendert, ist nur die halbe Sache. Die andere Hälfte ist die Arbeit rund um eine Stunde, die die Inhaberin bisher von Hand erledigt hat: Familien sagen, dass ein Platz frei ist, allen sagen, dass ein Termin ausfällt, zählen, wer kommt, löschen, was sie nicht behalten soll. Das sind die Aufgaben, die das Plugin heute auf kayjays.de erledigt, in der Reihenfolge, in der sie live gingen. Aufgeführt ist nur, was live ist.

Ihre AufgabeWas das Plugin tutWas es ihr bringtLive seit
In einer vollen Stunde wird ein Platz freiAlle auf der Warteliste dieses Termins bekommen sofort eine Mail; wer zuerst bucht, bekommt den PlatzKein Herumtelefonieren mit der WartelisteZum Launch · 23. Sep.
Eine Lehrkraft ist krankEin Klick sagt den Termin ab und schreibt allen, die gebucht haben. Wird der Termin zurückgenommen, folgt eine „Findet doch statt“-Mail. Kommt eine Mail nicht an, nennt der Bildschirm die Person, damit sie anrufen kannEin Klick, statt alle Gebuchten anzurufenZum Launch · 23. Sep.
Eine Stunde füllt sichPlätze werden pro Termin gezählt. „Nur noch wenige Plätze“, „Ausgebucht“ und der Anmeldeschluss schalten sich auf jeder Seite von selbstKeine Überbuchung, keine Anrufe „Ist noch Platz?“Zum Launch · 23. Sep.
Daten, die sie nicht behalten sollNamen, E-Mail-Adressen und Telefonnummern löschen sich 90 Tage nach dem Termin von selbst, spätestens nach 97; nur die Zahl bleibtGelöscht wird, ohne dass sie daran denken mussZum Launch · 23. Sep.
Ein Preis ändert sichEine Preistabelle. Jede Seite und jeder Satz mit einem Preis folgt ihrEine Änderung setzt den Preis auf allen 37 Seiten, die ihn zeigenZum Launch · 23. Sep.
Ferien und SchließtageEine Schließzeit sperrt Buchungen an diesen Tagen und markiert die schon gemachten. Ein Hinweisbanner erscheint und verschwindet an den Tagen, die sie einträgtKeine Buchungen an Schließtagen, nichts zu erstatten1.11.19 · 24. Sep.
Anmeldungen in ihre KundensoftwareEine Liste aller Anmeldungen, neueste zuerst, und ein Tabellen-Export von allem seit dem letzten Export. Ihr Wunsch, entschieden am 25. Sep.Export statt Namen abtippen1.11.23 · 28. Sep.
Zu viele Probestunden in einer StundeEine eigene Grenze für Probestunden pro Termin. Ist sie erreicht, bietet die Stunde stattdessen die normale Anmeldung an. Ihr Wunsch, entschieden am 30. Sep.Die Stammkundschaft behält ihre Plätze1.11.25 · 1. Okt.
Eine Anmeldung aus Versehen entferntEntfernen braucht in der Liste eine Bestätigung; der Eintrag wartet 14 Tage unter „Zuletzt gelöscht“ und lässt sich wiederherstellen, außer der Platz ist inzwischen vergebenWiederherstellen, statt die Eltern neu buchen zu lassen1.11.34 · 3. Okt.
Eltern wollen erst eine Stunde ausprobierenDie Probestunden-Seite bietet pro Stunde einen Knopf für die Probestunde zu 9 € und sonst nichts; eine volle Stunde zeigt „Ausgebucht“ und keinen Knopf. Entschieden am 2. und 3. Okt. anhand eines MockupsEin Knopf, ein Preis, nichts zu erklären1.11.35 · 4. Okt.
Ein einmaliger WorkshopEin Workshop mit Datum steht im Stundenplan und auf der Kursseite seines Stils, nimmt Buchungen an wie eine Stunde und steht auf einer gemeinsamen Workshop-Seite. Jeder ist in den strukturierten Daten ein Event. Ihr Wunsch, entschieden am 7. und 11. Okt. anhand von MockupsDerselbe Buchungsweg wie bei Stunden, kein eigenes Formular1.11.47 · 12. Okt.
Anmeldezahlen des letzten MonatsMonatliche Zahlen zu Anmeldungen, Probestunden, Workshops und Absagen pro Stunde, als Zahlen behalten, wenn die Namen gelöscht sind, mit Tabellen-Export. Keine Namen verlassen das Plugin. Entschieden am 15. Okt.Trends überstehen das Löschen der Namen1.11.52 · 21. Okt.
Wo Personendaten liegenEin Bildschirm, nur zum Lesen, listet jede Stelle, an der die Website personenbezogene Daten speichert: Anmeldungen, Warteliste, Formulare, Mail-Log, Newsletter, Server-Backups, jeweils mit der Angabe, wer sie wann löscht. Ein Backup, das älter als 30 Tage ist, wird rot. Entschieden am 21. Okt. anhand eines MockupsEin Bildschirm beantwortet „Was speichert ihr über mein Kind?“1.11.53 · 26. Okt.

„Besonders praktisch ist, dass ich Inhalte wie den Stundenplan, Änderungen oder neue Kurse jederzeit selbst und ganz unkompliziert aktualisieren kann. Meine Kunden können sich direkt über die Website selbst für die gewünschten Kurse anmelden. Das spart mir unglaublich viel Zeit und vor allem jede Menge E-Mail-Schreiberei.“

Jessy, Inhaberin von KayJaysJessy, Inhaberin, KayJays
Mockup des Reiters „Zuletzt gelöscht“: eine entfernte Buchung, deren Wiederherstellung abgelehnt wird, weil der Termin jetzt voll ist, mit Grund und nächstem Schritt, und eine zweite entfernte Buchung, die sich wiederherstellen lässt
Eine Anmeldung entfernen, gebaut als 1.11.30, live seit 3. Okt. Zwei Personen auf der Warteliste bekamen eine Mail, als der Platz frei wurde, darum lässt sich das Entfernen auf einem vollen Termin nicht rückgängig machen; der Bildschirm sagt, warum, und was stattdessen zu tun ist. Mockup mit erfundenen Namen.
Die Plugin-Ansicht „Anmeldungen & Termine“ in wp-admin mit 1.11.34: Reiter Nach Wochentag, Liste & Export, Warteliste mit der Zahl 2, Zuletzt gelöscht; zwei Wartende für Donnerstag, 8. Oktober, mit E-Mail, Eintragezeit und Entfernen-Link
Der Reiter „Warteliste“, wie er in 1.11.34 aussieht. Ich fand nicht, wer wartet, darum bekam die Liste einen eigenen Reiter mit Zahl (entschieden 28. Sep., live 1. Okt.); der Entfernen-Link und der Reiter „Zuletzt gelöscht“ daneben kamen mit 1.11.30. Mockup mit erfundenen Namen; auf der Live-Seite stehen echte Familien.
Mockup der öffentlichen Probestunden-Seite mit dem Stil-Filter links, Hip-Hop ausgewählt: zwölf Stunden über die Woche, jede mit einem Knopf, Probestunde 9 Euro; Schilder für Anmeldeschluss und wenige Plätze; eine volle Stunde zeigt Ausgebucht und keinen Knopf
Die Probestunden-Seite, wie sie mit 1.11.35 live ging: Filter nach Stil und Tag, ein Knopf pro Stunde, „Buchbar bis“ beim Anmeldeschluss, kein Knopf bei einer vollen Stunde. Mockup mit erfundenen Namen der Lehrkräfte.

Die Oberfläche wird gezeichnet, bevor die Spec geschrieben wird.

Ab dem 8. September ging nichts mehr in den Build ohne ein klickbares Mockup der ganzen Oberfläche, die es betrifft, gezeichnet mit echten Staging-Daten und allen offenen Anfragen gleichzeitig. Das Mockup misst sich selbst (Breiten, Tipphöhen, Zeilenumbrüche), und die Entscheidung fällt auf der Seite. Erst dann wird die Spec geschrieben.

Beide Stundenplan-Layouts nebeneinander bei 375 px: Das Wochenraster scrollt 646 px seitwärts und zeigt 1,7 von 5 Tagen; die Tagesliste zeigt alle fünf. Bedienelemente unter 44 px sind mit ihrer Höhe markiert
Der öffentliche Stundenplan, 11. Sep. Dieselben 27 Stunden in beiden Rahmen; die Seite hat den Unterschied selbst gemessen: 1,7 von 5 Tagen im Raster sichtbar, 646 px seitliches Scrollen, jedes Bedienelement unter 44 px markiert. Entschieden am 12. Sep.: Tagesliste unter 1120 px. Gebaut am 24. September als 1.11.21, zwölf Tage nach der Entscheidung, bis 28. September live auf kayjays.de; warum es gewartet hat, steht im Detail des nächsten Kapitels.
Mockup der öffentlichen Stundenplanzeile mit vier Entscheidungskarten: Anmeldeschluss-Zeile, zwei Buttons, Tippgröße, doppelte Altersangabe
Die Stundenplanzeile, 18. Sep. Zwei Regeln widersprachen sich bei der Zeile mit dem Anmeldeschluss; das Mockup hat beide gemessen (16 vs. 12 px, 10 von 10 Zeilen umgebrochen), und die Entscheidung dauerte zehn Minuten. Ausgeliefert am 22. Sep. als 1.11.16.
Mockup des Absage-Ablaufs in wp-admin bei Schritt 4: eine Mail unzustellbar, der Hinweis nennt die Person, die Mail-Vorschau daneben
Einen Termin absagen, 21. Sep. Fünf klickbare Schritte in der echten wp-admin-Ansicht, die Mail daneben gezeichnet, fünf offene Fragen durch Hinsehen beantwortet. Entschieden: kein automatischer Neuversand; eine unzustellbare Mail nennt die Person, damit sie sie anrufen kann.
Mockup der Anmeldungen-Ansicht in wp-admin, Variante B: Buchungen und Probestunden getrennt gezählt
Die Anmeldungen-Ansicht der Inhaberin, 17. Sep., im Look von WordPress selbst, weil sie WordPress schon kennt. A ist die Ansicht wie vorher; B trennt Probestunden von Buchungen, die A stillschweigend zusammengezählt hat.

Getestet mit der Person, die es benutzen wird.

Die Mockups entscheiden, wie eine Oberfläche aussieht; die Inhaberin entscheidet, ob sie funktioniert. Ich saß neben ihr, während sie das Backend ohne Anleitung benutzt hat, habe notiert, wo sie gezögert und wonach sie gegriffen hat, und gefragt, was es als Nächstes können soll. Ihre Wünsche stehen im Backlog in ihren Worten, nicht in meinen.

Die Inhaberin der Tanzschule, auf Staging · 18. Sep. 2026

Sie hat jede Aufgabe ohne Hilfe erledigt. Dann fragte sie, was passiert, wenn eine Trainerin krank ist: Der Termin ließ sich absagen, aber niemand, der gebucht hatte, wurde informiert. Die Mail stand seit Anfang September auf einer To-do-Liste und war nie gebaut worden. Sie hat es bemerkt; daraus wurde die Absage-Mail, gebaut als 1.11.17 und live zur Umstellung.

Die Inhaberin der Kunstschule, bei der Backend-Tour · 18. Sep. 2026

Ihre Kurse laufen semesterweise, eine Warteliste gilt dort also einem Platz im Kurs, nicht einem Termin. Die Speicherung der Warteliste wurde vor der Auslieferung so geändert, dass sie einen Eintrag ohne Datum annimmt, mit einem Test als Beleg. Ihre übrigen Wünsche (wer nicht mehr kommt, ob es 700 Schüler:innen trägt, ein Raster für fünf Standorte) wurden mit Begründung in den Umfang aufgenommen oder ausgeschlossen und für ihren Rollout vorgemerkt.

Im Detail: was ein Mockup tragen muss und was es ablehnt

Eins pro Oberfläche, nie eins pro Anfrage. Eine Oberfläche sammelt jede offene Anfrage, die sie betrifft (die Stundenplanzeile trug sechs), sodass eine Entscheidung im Wissen um die anderen fällt. Die Seitenleiste ist so gezeichnet, wie Gutenberg sie zeichnet, mit denselben Bedienelementen und denselben deutschen Bezeichnungen, damit die Inhaberin Mockup und Editor unterscheiden kann.

Echte Daten, auf der Seite gemessen. Kursnamen, Zeiten, Trainer:innen und Buchungsstände werden aus Staging gelesen, nicht abgetippt. Breiten, Höhen und Zeilenzahlen werden live im Mockup berechnet, sodass ein Urteil „passt / bricht um“ eine Messung ist, keine Meinung.

Eine Liste „nicht auf dieser Oberfläche“. Jedes Mockup sagt, was es bewusst weglässt und warum: Das Kurskürzel bleibt in wp-admin, Absagen bleiben aus der Wochenzeile heraus, das mobile Akkordeon ist nach dem Launch eine eigene Oberfläche. Die Liste verhindert, dass eine Spec auf dem Weg zum Build wächst.

Geprüft, bevor es gezeigt wird. Jedes Mockup bekommt vor der Veröffentlichung ein Design-Audit (Barrierefreiheit, Responsivität, Theming, Umsetzungstreue); der Prüfbericht reist mit. Das CSS des Mockups ist eine Entscheidungshilfe. Bei jedem nicht entschiedenen Wert gewinnt die Spec und hält den Unterschied fest.

KI hat das PHP geschrieben. Alles, woraus es geschrieben wurde, verantworte ich.

Der Code wurde von KI-Modellen nach meinen Specs erzeugt, in fester Reihenfolge der Rollen: Architektur, Plan-Review, Gegenprüfung, Build, Review. Build und Review sind immer verschiedene Modelle, und jede Korrekturrunde bekommt ein unabhängiges Review.

Mein Teil

Die Datensatztypen und was jedes Feld bedeutet · jede Entscheidung, mit Datum festgehalten · die Mockups · die Liste „bewusst nicht gebaut“ · die Abnahmetests · was als fertig gilt · die Staging-Verifikation jeder Version · die Umstellung.

Der Teil der Modelle

Das PHP, JS und CSS · Migrationen unter einer Versionsnummer, die ich vergebe · das Plan-Review und die Gegenprüfung jeder Spec · das Code-Review jedes Builds · die Testsuite, rund 1.400 Tests, vor jeder Version auf PHP 7.4 und 8.3 ausgeführt · eine erneute Sicherheitsprüfung durch ein externes Modell im Oktober, die Korrekturen ausgeliefert als 1.11.51.

Die Schleuse, die jede Version passiert

In dieser Reihenfolge, jede Version. Gefüllte Schritte sind meine.

  1. Spec mit Entscheidungen
  2. Build
  3. Unabhängiges Review
  4. Zip
  5. Design-Audit
  6. Datenbank-Backup
  7. Installation auf Staging
  8. Meine Prüfung jeder geänderten Ansicht
  9. Live
Eine Version, die gespeicherte Daten ändert, beantwortet zuerst vier Fragen: Was passiert, wenn sie auf halbem Weg scheitert? Was wird bewusst nicht gebaut? Wer macht was am Auslieferungstag? Wie wird sie rückgängig gemacht, und was geht dabei verloren? Bisher: 6 Schemaversionen, jede mit Backup und geprobter Wiederherstellung; 48 Versionen seit dem Launch gebaut, in 17 festgehaltenen Installationen auf die Live-Website gebracht.
Im Detail: die Fehler, die den Prozess geformt haben

Der stille Datenverlust. Quick Edit bei einer Trainerin schrieb deren ID als 0, und die Stunde verlor ihre Trainerin ohne Fehlermeldung. Der Fix berührte genau den Codepfad, der versagt hatte, deshalb ging er nicht in der Nacht raus, in der er geschrieben wurde: Am nächsten Morgen liefen zuerst alle Abnahmetests erneut.

Die falsche Review-Behauptung. Ein Review meldete, die Anmeldetabellen der Testseite fehlten. Es hatte Tabellennamen im Plural geprüft; die des Plugins stehen im Singular. Seitdem wird eine Aussage über die Datenbank mit einer Abfrage geprüft, bevor sie in eine Spec geht, und das Review macht nie das Modell, das gebaut hat.

Die Entscheidung, die nicht umgesetzt wurde. Ein mobiles Layout für den Stundenplan wurde am 12. September entschieden, bekam eine Versionsnummer und blieb zwölf Tage ungebaut; die Entscheidung stand in einem Dokument, das niemand wieder las. Ausgeliefert als 1.11.21 am 24. September. Regel seitdem: Eine reservierte Version mit geparkter Spec bekommt am selben Tag eine Zeile im aktiven Backlog.

Code-Kompetenz, noch im Aufbau. Ich spezifiziere, verifiziere und betreibe das Plugin; sein PHP flüssig zu lesen ist eine Fähigkeit, die ich an meiner eigenen Codebasis aufbaue, statt sie vorauszusetzen. Bis dahin muss sich der Bericht jeder Version auf dem Bildschirm beweisen, was ohnehin die bessere Regel ist.

Das Plugin erzeugt Fakten, nie Fließtext.

Es wird ebenso an dem gemessen, was es ablehnt, wie an dem, was es tut. Jeder dieser Punkte wurde mit Begründung ausgeschlossen, sodass eine künftige Anfrage auf eine Entscheidung trifft statt auf eine Lücke.

  • Zahlungen, SEPA, Mitgliedsverträge. Haftung, die die Inhaberin nicht auf ihrer Website haben will. Verträge kommen vielleicht später; Geld nie.
  • Teilnehmerakten, Anwesenheit, Audit-Log. Ein Mitgliedersystem ist ein anderes Produkt. Anmeldungen werden 90 Tage aufbewahrt und dann vollständig gelöscht.
  • Newsletter-Versand. Das Plugin füllt die Liste des Mail-Anbieters; es verschickt keine Kampagnen. Eine Sache weniger, die abgesichert werden muss.
  • Ein eigenes Admin-Design. Die Inhaberin kennt WordPress schon. Die Admin-Ansichten sehen aus wie WordPress; die öffentliche Seite überschreibt nie Schrift, Farbe oder Abstände des Themes.
  • Automatischer Neuversand bei fehlgeschlagener Mail. Stattdessen nennt eine unzustellbare Absage-Mail die Person. Sie ruft dort an. Einfacher, und es scheitert sichtbar.

Eingebaut, weil die meisten Schüler:innen Kinder sind.

So wenig wie möglich erheben, nicht länger als nötig aufbewahren und jeden Schritt, der personenbezogene Daten berührt, zu einer sichtbaren Handlung machen statt zu einem Nebeneffekt.

  • Namen und Adressen aus Anmeldungen löschen sich eine festgelegte Zahl von Tagen nach dem Termin selbst; nur die Anzahl bleibt.
  • Die Anwesenheitsliste, die im Studio liegt, druckt gekürzte Namen, keine Liste mit den vollen Namen der Kinder.
  • Keine externen Schriften oder Anfragen aus einem Block, außer die Website-Inhaberin schaltet sie ein.
  • „Daten einer Person löschen“ entfernt jede Anmeldung zu einer Adresse, in einem Schritt.
  • Trainer:innen bekommen einen signierten Link, kein Konto; ein neuer Schlüssel macht alle Links auf einmal ungültig.

Mechanismen, keine Rechtskonformität. Rechtsgrundlage, Datenschutzerklärung und Auftragsverarbeitungsverträge bleiben bei der Schule.

Was zum Launch gilt.

Gemessen am 23. September 2026. Das Versprechen des Plugins ist, dass eine Studio-Inhaberin eine Stunde, eine Trainerin oder einen Preis ändern kann, ohne eine Seite zu bearbeiten. An diesem Tag hat die Inhaberin jede Stunde selbst für Anmeldungen geöffnet und die Kapazitäten gesetzt, ohne mich im Raum, und dann die Eltern gebeten, als Test über die öffentlichen Formulare zu buchen. Was sie danach wollte (eine Absagefunktion, eine Telefonnummer bei Probestunden-Buchungen), kam als Zeilen in den Backlog, nicht als Chat. Eine Entfernen-Funktion für Anmeldungen wurde als 1.11.30 gebaut (2. Oktober) und ist seit 3. Oktober live.

15 Min.Umstellung, zweimal geprobt, nie zurückgerollt
52 → 0offene Prüfpunkte vor der Veröffentlichung über 45 Seiten
26Redirects, jeder geprüfte in einem Sprung
23. Sep.erste Änderungen der Inhaberin ohne mich

Die letzte Zahl ist die, auf die es ankommt. Suchergebnisse zum Relaunch stehen in der Fallstudie kayjays.de, mit der Baseline von 2025 und Auswertungen am 4. November und 16. Dezember. Für das Plugin wird nichts über Traffic behauptet. Was das Plugin allein bewirkt, wird gesondert getestet: Sein Stundenplan-Block kommt auf die Websites anderer Tanzschulen, eine Änderung nach der anderen; kayjays.de bleibt als Referenz unberührt.

Was ich ändern würde, und was als Nächstes kommt.

  • Mockups ab dem ersten Tag. Die ersten elf Versionen wurden aus Text spezifiziert. Die Regel „erst Mockup“ kam am 8. September, und die Fehlerquote pro Version sank danach; ohne sie würde ich nicht wieder bauen.
  • Trainerseiten aus dem Datensatz. Zwölf Trainerseiten wurden für den Launch von Hand gebaut, weil der Generator nicht fertig war. Sie sind die letzten von Hand getippten Fakten auf der Website und das Erste, was diese Woche umzieht.
  • Kursseiten aus dem Datensatz. Neun Kursseiten tragen noch von Hand getippten Text: Einleitung, was der Stil ist, FAQ. Dieser Text zieht als Nächstes in Kursfelder um, damit auch der letzte Fließtext auf der Website nur eine Quelle hat. Entschieden am 2. November anhand eines Mockups der Live-Seite.
  • Das Plugin allein messen. Relaunch und Plugin gingen am selben Tag live, darum kann kayjays.de nicht zeigen, was das Plugin allein für die Suche bewirkt hat. Der Test ist ein gestaffelter Rollout auf den Websites anderer Schulen, drei Änderungen im Abstand von sechs Wochen: Stundenplan-Block, Kursseiten mit der Antwort zuerst, generierte Trainerseiten.

Quellen und Grenzen.

Die Messungen in dieser Fallstudie stammen aus den Release-Protokollen des Plugins, den Staging-Verifikationsprotokollen und dem Umstellungsprotokoll vom 23. September 2026. Die Zählungen (27 Stunden, 12 Trainer:innen, 45 Seiten, 26 Redirects) wurden an den genannten Tagen auf der Website abgelesen. Die Zahl der Anmeldungen stammt aus der Anmeldungen-Ansicht des Plugins am Abend des 24. September. Die Zahl zu gleichzeitigen Anfragen stammt aus dem Abnahmetest des Plugins. Versionen und Live-Daten im Zeitverlauf und in der Tabelle stammen aus den Release-Protokollen und dem Ideen-Board, am Veröffentlichungstag neu gezählt. Als Mockup gekennzeichnete Screenshots verwenden erfundene Namen. Nichts hier ist geschätzt.