Wie ich TINAs Legacy-UI in 3 Tagen mit KI migriert habe – und warum das kein Glück war

Das TINA-Frontend, Stand 2026
Alle 12 Bereiche portiert
~90 % Line-Coverage (Gate: 80 %)
ESLint strict mit 0 Findings
Von Legacy zu neu
Angular 21 (standalone, Signals, zoneless, strict TS) + PrimeNG + Tailwind
Fachlich reviewt – seit 2 Wochen auf TINA-DEV parallel zur Legacy-UI im Einsatz.
Nein: ein Verfahren.
Das Playbook in 7 Phasen – der rote Faden dieses Vortrags:

„Code, den nie jemand aufgerufen hat” – Der Agent als Legacy-Archäologe
12 Bereiche, 40 Views, LOC und Komplexität je Bereich
auftragAnlegenProduktinstanzErweitern – im Legacy nie aufgerufen → nicht portiert
Das Backend erwartet sortDirection wörtlich als "Ascending"/"Descending" – fehlt es, gibt es eine NullPointerException
getAllBetriebstypen in den Betriebstypzuordnungen
Hier glänzt das Brain: echtes Verständnis von fremdem Code.
„Die KI fragt, ich entscheide” – Nicht prüfbare Entscheidungen gehören dem Menschen – und zwar vorne.
Angular (Team ist Java-lastig mit Angular-Erfahrung), PrimeNG + Tailwind
Re-Platform + Polish, kein kompletter UX-Redesign; Big-Bang, aber modulweise
Vitest + Playwright mock-first, 80 %-Coverage-Gate, ESLint strict
Bei Unklarheit immer fragen, testbare Zwischenstände melden, keine git-Commits durch die KI
IMPLEMENTATION-PLAN.md mit Fortschritts-Checkliste im Repo – geschrieben so, dass auch eine kleinere Modell-Instanz ihn abarbeiten kann.
Erst entscheiden, dann portieren.
Zwei komplett unterschiedliche, klickbare HTML-Mockups vor der ersten View:
Später dazu: Stil „TINA Klassik” in der Arvato-Farbwelt als neuer Default.
Heute: 3 Design-Stile zur Laufzeit umschaltbar.
Dunkel, Amber-Akzente
Warmes Papier, Serifen – Editorial gewann

„Erst das Fahrwerk, dann der Motor” – Bevor das erste Feature entsteht:
80 %-Line-Coverage-Gate – der Maven-Build bricht darunter
angular-eslint + typescript-eslint
Jeder BFF-Aufruf gemockt, unbekannte Aufrufe scheitern laut
Pro Prüfebene, das der Agent selbst ausführen kann (mvn verify)

„Feature für Feature, nicht Schicht für Schicht” – Ende-zu-Ende entwickeln
Anzeige und grundlegende Verwaltung der bestehenden Aufträge inklusive Such- und Filterfunktionen.
Erfassung, Bearbeitung und Validierung von Kernstammdaten wie Kunden- oder Produktdetails.
Verwaltung der Netzsegmente, einschließlich Definition und Zuweisung von Konfigurationen.
UI zur Definition und Pflege von Kommunikationsflüssen und Verantwortlichkeiten.

„Checkpoint: Was haben wir erreicht?” – Regelmäßige Statusprüfung
Alle 12 Bereiche zu X% portiert, Y Views abgeschlossen
Line-Coverage aktuell bei 87%, ESLint-Findings: 0
Unit-Tests: 340, e2e-Tests: 75, Playwright-Szenarien: 120
Dokumentierte Abweichungen zur Legacy, offene Fragen an Backend-Team

„Die Legacy läuft noch – wir fahren parallel” – Sicherheitsnetz und Validierung
Stakeholder testen neue UI parallel zur Legacy, Feedback wird dokumentiert
Beide UIs laufen live, Nutzer können umschalten, Fehler werden sofort sichtbar
Legacy wird erst abgeschaltet, wenn neue UI 100% stabil läuft und alle Szenarien validiert sind
„Das Playbook funktioniert – wenn man es befolgt”
Generate-and-Verify Ansatz: Stochastische Generierung + deterministische Prüfung
Vertikale Slices: Jeder Slice ist sofort lauffähig und testbar
Harness first: Feedback-Loop vor dem ersten Feature
Parallelbetrieb: Sicherheitsnetz statt Big-Bang-Risiko
Der Agent ist kein Ersatz für Architektur-Entscheidungen
Deterministische Prüfungen sind nicht optional – sie sind das Fundament
Menschen entscheiden, Maschinen führen aus
Dokumentation ist Code – und Code ist Dokumentation

Zugestanden: Ein LLM rät das nächste Token.
Ja – der Papagei rät.
Compiler, Linter, Tests, Build.
Der Papagei darf raten, solange ein Schiedsrichter jede Antwort prüft.
Das Ergebnis ist auf vielen Ebenen maschinell prüfbar.
Es ist egal, wie die Antwort entsteht, wenn jede Antwort durch deterministische Prüfungen muss.
In einem Aufsatz über Geschichte gibt es keinen Compiler. In unserem Code gibt es sechs Prüfebenen.