PageMark

Anforderungen – Frontend, Iterationsplan

Projekt: Online Novel Lib Komponente: Frontend (Kotlin Multiplatform) Stand: 23.09.2026 Basis: anforderungen-frontend.md (vollständige fachliche/technische Anforderungen), abgeglichen gegen den tatsächlichen Stand von api/openapi.yaml und iterationplan-backend.md nach der Vertragsbereinigung vom 22.09.2026.

Plattform-Änderung nach Iteration 0. Die ursprüngliche Iteration 0 (siehe specs/progress-frontend/iteration-0.md) zielte auf Android, iOS und Desktop. Auf Wunsch wurde das Desktop-Target durch ein Web-Target (Compose Multiplatform for Web, Kotlin/Wasm) ersetzt, bevor eine der Fach-Iterationen begonnen wurde: Web bietet denselben schnellen, emulatorlosen Blick ins UI wie Desktop, läuft aber im Browser ohne separates natives Artefakt. desktopApp wurde aus dem Projekt entfernt; alle folgenden Verweise auf die „drei Zielplattformen” meinen ab hier Android, iOS und Web.

Android ist die primäre Zielplattform. Es steht aktuell kein Mac zur Verfügung, daher wird in jeder Iteration zuerst auf Android real verifiziert (siehe anforderungen-frontend.md, Abschnitt 2). Web dient als sekundäre, ebenfalls im Dev-Setup sofort lauffähige Plattform. iOS-Code entsteht parallel im gemeinsamen commonMain und muss kompilieren, eine Laufzeitverifikation auf Simulator/Gerät ist jedoch erst möglich, sobald ein Mac verfügbar ist – „Definition of Done” je Iteration unterscheidet deshalb zwischen den auf Android/Web tatsächlich nachgewiesenen Kriterien und dem für iOS nur zugesicherten Kompilieren.

1. Zweck dieses Dokuments

Dieses Dokument gliedert die in anforderungen-frontend.md beschriebenen Anforderungen in aufeinander aufbauende Iterationsstufen, die jeweils als eigenständiges, auf allen drei Zielplattformen (Android, iOS, Web) lauffähiges Inkrement entwickelt werden können. Die Reihenfolge orientiert sich an derselben Logik wie im Backend-Iterationsplan (iterationplan-backend.md): zuerst ein Multiplatform-Grundgerüst, dann Auth, dann die Kernlese-/Autorenfunktionen, danach Bibliothek/Sync, Offline-Robustheit, Moderation/Admin und zuletzt UX-Politur. Jede Iteration setzt voraus, dass die fachlich passende Backend-Iteration bereits existiert oder parallel entsteht; die jeweilige Abhängigkeit ist pro Stufe vermerkt.

Warum dieses Dokument überarbeitet wurde. Die vorherige Fassung war gegen den Vertragsstand vor der Bereinigung vom 22.09.2026 geschrieben (u. a. slug-/chapterNumber-basiertes Routing, ein ChapterDetail mit eingebettetem content, den Pfad /users/me/... statt /user/me/..., sowie become-author statt des in Iteration 4.5 eingeführten RoleRequest-Flows). Da der Backend-Teil inzwischen bis einschließlich Iteration 4.5 abgeschlossen ist (siehe iterationplan-backend.md) und dabei mehrere dieser Vertragsdetails bewusst geändert wurden, war der alte Frontend-Plan an genau den Stellen falsch, an denen ein Frontend-Entwickler ihn am ehesten wörtlich nehmen würde. Die folgenden Punkte sind die tatsächlich verbindliche Grundlage (Quelle: api/openapi.yaml):

Die aus anforderungen-frontend.md, Abschnitt 14 bekannten „Offenen Punkte” (Web-Target, OAuth-/Social-Login-UI, vollständiger Offline-Download ganzer Novels, Kommentare/Bewertungen, Push-Benachrichtigungen, „Passwort vergessen”) sind bewusst in keiner der folgenden Iterationen enthalten und bilden weiterhin einen späteren Backlog nach Abschluss von Iteration 7.

2. Übersicht der Iterationsstufen

# Titel Kernziel Passende Backend-Iteration Backend-Status
0 Projekt-Grundgerüst & Multiplatform-Setup Lauffähige App auf Android/iOS/Web mit Verbindungstest zum Backend 0 abgeschlossen
1 Auth & Session-Handling Registrierung, Login, sicherer Token-Speicher, Auto-Refresh 1 abgeschlossen
2.1 Katalog (Entdecken) Novels durchsuchen, filtern, paginieren 3 abgeschlossen
2.2 Startseite Startseite als App-Einstieg mit app-weiter oberer Navigationsleiste (Suche, Profil/Login-Avatar) auf allen Screens – –
2.3 Novel-Detail Volle Novel-Ansicht inkl. Synopse, Autorenliste, Kapitelliste 3 abgeschlossen
2.4 Leseansicht (Reader inkl. Kapitel-Seiten) Kapitel seitenweise lesen, Kapitel-/Seiten-Navigation, Reader-Settings 2.5, 3, 3.5 abgeschlossen
3.1 Rollen-Selbstantrag (“Autor werden”) Autorenrolle per Self-Service beantragen und wirksam werden lassen 4.5 abgeschlossen
3.2 Autoren-Dashboard & Novel-Verwaltung Eigene Novels anlegen/bearbeiten/löschen, Cover verwalten 2, 2.5 abgeschlossen
3.3 Kapitelverwaltung & Co-Autoren Kapitelliste sortieren, Co-Autoren hinzufügen/entfernen 2 abgeschlossen
3.4 Kapitel-Editor Kapitel schreiben, als Entwurf speichern, veröffentlichen 2 abgeschlossen
4 Bibliothek & geräteübergreifender Lesefortschritt Eigene Bibliothek, seiten-genaue Fortschritts-Sync 4 abgeschlossen
5 Offline-Caching & Netzwerk-Robustheit Lokales Caching, Wiederholung bei transienten Fehlern 7 (optional/parallel) offen
6 Melden & Admin-Bereich Reporting-UI, permission-gesteuerter Admin-Bereich 5, 6 offen – blockiert
7 Profil/Einstellungen & UX-Politur Profilscreen, Web-Layout, Performance-Feinschliff 7, 8 teilweise offen

Warum 2 und 3 in Unteriterationen aufgeteilt sind. Die ursprünglich einstufigen Iterationen 2 („Katalog, Novel-Detail & Leseansicht”) und 3 („Autoren-Dashboard, Kapitel-Editor & Rollen-Selbstantrag”) bündelten jeweils mehrere, fachlich unabhängig abnehmbare Features in einem einzigen Inkrement und waren dadurch für eine einzelne Iteration zu groß. Beide sind daher entlang der einzelnen Features in kleinere Unteriterationen (2.1–2.4 bzw. 3.1–3.4) aufgebrochen worden, die jeweils für sich lauffähig, testbar und abnehmbar sind, aber in der angegebenen Reihenfolge aufeinander aufbauen. Backend-seitig ändert sich dadurch nichts: Alle Unteriterationen einer Elterniteration nutzen weiterhin denselben, bereits abgeschlossenen Vertragsumfang.

Anders als der ursprüngliche Plan nahelegte, sind die Backend-Iterationen für die Stufen 0–4 inzwischen vollständig abgeschlossen (siehe iterationplan-backend.md, Stand 22.09.2026) – das Frontend kann diese Stufen also gegen einen fertigen, stabilen Vertrag bauen, ohne auf parallele Backend-Arbeit zu warten. Iteration 5 hat keine harte Backend-Abhängigkeit: Offline-Caching und Retry-Verhalten sind reine Client-Themen; Backend-Iteration 7 (HA-Härtung) macht die dabei simulierten transienten Fehler nur plausibler testbar, ist aber keine Voraussetzung. Iteration 6 ist dagegen wirklich blockiert: Weder Report- noch Admin-Endpunkte (POST /reports, GET/PATCH /admin/reports/{id}, GET /admin/users, PATCH /admin/users/{id}/roles, PATCH /admin/users/{id}/status) existieren aktuell in api/openapi.yaml – sie sind erst für Backend-Iteration 5/6 vorgesehen und dort noch nicht umgesetzt. Iteration 6 kann daher frühestens begonnen werden, sobald die entsprechende Backend-Iteration den Vertrag um diese Operationen erweitert hat; bis dahin sollte sie nicht vorgezogen werden (kein Mock-Backend für einen noch gar nicht feststehenden Vertrag).


Iteration 0 – Projekt-Grundgerüst & Multiplatform-Setup

Ziel: Ein leeres, aber auf allen drei Zielplattformen startbares KMP-Projekt existiert und kann das lokale Backend erreichen.

Enthaltene Anforderungen (Bezug auf anforderungen-frontend.md):

Abgrenzung: Keine echten Fach-Screens; ein einfacher Test-Screen genügt, um die Ktor-Verbindung zum Backend zu verifizieren. Noch keine tatsächliche Nutzung des generierten API-Clients für einen Fach-Endpunkt – nur der Nachweis, dass Generierung und Grund-Setup funktionieren.

Definition of Done:

Abhängigkeiten: Backend-Iteration 0.


Iteration 1 – Auth & Session-Handling

Ziel: Nutzer können sich registrieren, einloggen und bleiben über sicher gespeicherte Tokens eingeloggt.

Enthaltene Anforderungen:

Abgrenzung: „Passwort vergessen” und Social Login sind ausdrücklich nicht enthalten (Abschnitt 6, 14).

Definition of Done:

Abhängigkeiten: Iteration 0 (Frontend), Backend-Iteration 1 (Auth-Endpunkte).


Iteration 2.1 – Katalog (Entdecken)

Ziel: Leser können veröffentlichte Novels durchsuchen, filtern und in einer Ergebnisliste überblicken.

Enthaltene Anforderungen:

Abgrenzung: Noch keine Detailansicht (Iteration 2.3) – ein Tap/Klick auf einen Katalogeintrag darf vorerst auch nur ein Platzhalter-Ziel oder eine unverlinkte Karte sein. Kein Melden-Button (Iteration 6).

Definition of Done:

Abhängigkeiten: Iteration 1, Backend-Iteration 3 (Katalog-Endpunkt) – bereits abgeschlossen.


Iteration 2.2 – Startseite

Ziel: Die App hat einen einheitlichen Einstiegspunkt: eine Startseite, die unabhängig vom Login-Status als erste Seite erscheint und über eine obere Navigationsleiste den Zugang zu Katalog und Profil/Login bündelt.

Enthaltene Anforderungen:

Abgrenzung: Kein vollständiger Profilscreen mit Bearbeitungsfunktionen (Iteration 7) – der über den Avatar erreichte Platzhalter zeigt nur die bereits geladenen Profildaten und einen Logout. Keine weiteren Startseiten-Inhalte (z. B. Empfehlungen, „Weiterlesen”-Kacheln) – diese sind nicht Teil dieser Iteration und ergeben sich erst mit Bibliothek/Fortschritt aus Iteration 4.

Definition of Done:

Abhängigkeiten: Iteration 1 (Login-Status/Profil), Iteration 2.1 (Katalog als Suchziel).


Iteration 2.3 – Novel-Detail

Ziel: Leser können zu einem Novel die volle Detailansicht inklusive Synopse und Autorenliste aufrufen – sowohl aus dem Katalog heraus als auch über einen geteilten Slug-Link.

Enthaltene Anforderungen:

Abgrenzung: Kapitel lassen sich noch nicht öffnen/lesen (Iteration 2.4); „Zur Bibliothek hinzufügen” löst noch keinen echten Request aus (Iteration 4); kein Melden-Button (Iteration 6).

Definition of Done:

Abhängigkeiten: Iteration 2.1, Backend-Iteration 3 (Novel-Detail-/Autoren-Endpunkte) – bereits abgeschlossen.


Iteration 2.4 – Leseansicht (Reader inkl. Kapitel-Seiten)

Ziel: Leser können ein Kapitel öffnen und komfortabel lesen – inklusive langer, serverseitig in mehrere Seiten zerlegter Kapitel.

Enthaltene Anforderungen:

Abgrenzung: „Weiterlesen” springt noch nicht an eine serverseitig gespeicherte Position (folgt mit der Bibliothek in Iteration 4); kein Melden-Button (Iteration 6); keine Autoren-seitige Kontrolle über die Seitengrenzen (rein serverseitig, siehe Backend Abschnitt 4.4).

Definition of Done:

Abhängigkeiten: Iteration 2.3, Backend-Iteration 3 (Lese-Endpunkte), 2.5 (Kapitelinhalt aus dem Objekt-Speicher) und 3.5 (Kapitel-Seiten) – alle drei sind bereits abgeschlossen.


Iteration 3.1 – Rollen-Selbstantrag (“Autor werden”)

Ziel: Nutzer ohne NOVEL_CREATE können die Autorenrolle per Self-Service beantragen, und eine erteilte Berechtigung wirkt sich sichtbar auf die App aus.

Enthaltene Anforderungen:

Abgrenzung: Kein Admin-Genehmigungsschritt für den Rollen-Antrag (Backend-Backlog, siehe anforderungen-backend.md Abschnitt 15). Der „Meine Novels”-Bereich bleibt inhaltlich leer.

Definition of Done:

Abhängigkeiten: Iteration 1, Backend-Iteration 4.5 (Rollen-Selbstantrag) – bereits abgeschlossen.


Iteration 3.2 – Autoren-Dashboard & Novel-Verwaltung

Ziel: Nutzer mit NOVEL_CREATE können eigene Novels anlegen, bearbeiten, löschen und mit einem Cover versehen.

Enthaltene Anforderungen:

Abgrenzung: Kein Freigabe-Workflow vor der Veröffentlichung (Backend-Backlog). Kapitelverwaltung (Sortierung, Co-Autoren, Editor) folgt in 3.3/3.4 – der status-Wechsel eines Novels selbst (z. B. auf COMPLETED) ist zwar über PATCH /novels/{novelId} schon möglich, ein sinnvoller Veröffentlichungs-Workflow ergibt aber erst mit vorhandenen Kapiteln Sinn.

Definition of Done:

Abhängigkeiten: Iteration 3.1, Backend-Iteration 2 (Novel-Verwaltung) und 2.5 (Cover-Upload) – bereits abgeschlossen.


Iteration 3.3 – Kapitelverwaltung & Co-Autoren

Ziel: Autoren können die Kapitelreihenfolge eines eigenen Novels pflegen und weitere Autoren daran beteiligen.

Enthaltene Anforderungen:

Abgrenzung: Das Erstellen/Bearbeiten des eigentlichen Kapitelinhalts ist Iteration 3.4; hier geht es nur um Reihenfolge und Autorenzuordnung einer bereits (leeren oder befüllten) Kapitelstruktur.

Definition of Done:

Abhängigkeiten: Iteration 3.2, Backend-Iteration 2 (Kapitel-Verwaltung) – bereits abgeschlossen.


Iteration 3.4 – Kapitel-Editor

Ziel: Autoren können Kapitelinhalte schreiben, als Entwurf sichern und veröffentlichen.

Enthaltene Anforderungen:

Abgrenzung: Kein Freigabe-Workflow vor der Veröffentlichung (Backend-Backlog).

Definition of Done:

Abhängigkeiten: Iteration 3.3, Backend-Iteration 2 (Kapitel-Verwaltung) – bereits abgeschlossen.


Iteration 4 – Bibliothek & geräteübergreifender Lesefortschritt

Ziel: Nutzer können ihre Bibliothek verwalten und auf jedem Gerät an der zuletzt gelesenen Seite weiterlesen.

Enthaltene Anforderungen:

Abgrenzung: Die Zwischenspeicherung ausstehender Updates bei fehlender Verbindung ist Teil von Iteration 5; hier wird zunächst der Online-Fall abgedeckt.

Definition of Done:

Abhängigkeiten: Iteration 2.4 (Kapitel-Seiten müssen lesbar sein, um Fortschritt seitengenau festzumachen), Backend-Iteration 4 (Bibliotheks-/Fortschritts-Endpunkte) – bereits abgeschlossen.


Iteration 5 – Offline-Caching & Netzwerk-Robustheit

Ziel: Die App bleibt bei instabiler oder fehlender Verbindung nutzbar und verliert keine Fortschritts-Updates.

Enthaltene Anforderungen:

Abgrenzung: Kein vollständiger Offline-Download ganzer Novels (Abschnitt 14, spätere Erweiterung) – nur bereits besuchte Kapitel-Seiten bleiben zwischengespeichert.

Definition of Done:

Abhängigkeiten: Iteration 4. Keine harte Backend-Abhängigkeit; Backend-Iteration 7 (HA-Härtung, noch offen) macht die dabei simulierten Fehlerbilder nur realistischer nachstellbar.


Iteration 6 – Melden & Admin-Bereich

Status: blockiert. Die dafür nötigen Backend-Endpunkte existieren noch nicht in api/openapi.yaml – POST /reports, GET/PATCH /admin/reports/{id}, GET /admin/users, PATCH /admin/users/{id}/roles, PATCH /admin/users/{id}/status sind für Backend-Iteration 5 bzw. 6 vorgesehen (siehe iterationplan-backend.md), beide dort noch nicht begonnen. Diese Iteration kann frühestens gestartet werden, sobald der Vertrag um die entsprechenden Operationen erweitert wurde – contract-first bedeutet hier ausdrücklich, dass es vor einer Vertragsänderung nichts zu generieren und damit nichts Verbindliches zu implementieren gibt. Die folgende Beschreibung ist der geplante Umfang, nicht bereits umsetzbar.

Ziel: Nutzer können Inhalte/Accounts melden; berechtigte Nutzer sehen einen granular nach Permission gesteuerten Admin-Bereich.

Enthaltene Anforderungen:

Abgrenzung: Keine UI zum Anlegen neuer Rollen oder Permission-Bündel (Backend-Backlog).

Definition of Done (sobald entsperrt):

Abhängigkeiten: Iterationen 3.2/3.3 (die dort eingeführten DELETE-Endpunkte für Novel/Kapitel werden für den Admin-Bereich wiederverwendet), Backend-Iterationen 5 und 6 (beide noch offen).


Iteration 7 – Profil/Einstellungen & UX-Politur

Ziel: Die App wirkt auf allen Plattformen rund, performant und ist vollständig testbar.

Enthaltene Anforderungen:

Abgrenzung: Keine grundlegend neue visuelle Gestaltung (Farbschema/Typografie sind laut Anforderungsdokument ein separater Design-Schritt).

Definition of Done:

Abhängigkeiten: Iterationen 2.1–2.4, 3.1–3.4, 4 und 5 (Politur setzt auf den bestehenden Screens auf; Iteration 6 ist wegen der Backend-Blockade ausdrücklich keine Voraussetzung). Backend-Iteration 7/8 (AWS-Readiness) betrifft primär Deployment-Konfiguration und hat keine unmittelbare Auswirkung auf diese Frontend-Stufe.


3. Späterer Backlog (nicht Teil der Iterationen 0–7)

Die folgenden, in anforderungen-frontend.md (Abschnitt 14) genannten Themen bleiben bewusst außerhalb dieses Iterationsplans und werden erst nach Abschluss von Iteration 7 priorisiert: Web-Target (Compose Multiplatform for Web/Wasm), OAuth-/Social-Login-UI, vollständiger Offline-Download ganzer Novels, Kommentare und Bewertungen zu Novels/Kapiteln, Push-Benachrichtigungen bei neuen Kapiteln abonnierter Novels, „Passwort vergessen”-Flow.

4. Zusammenspiel mit dem Backend-Iterationsplan

Dieser Plan ist bewusst so geschnitten, dass jede Frontend-Iteration auf einer bestimmten Backend-Iteration aufsetzt (siehe Tabelle in Abschnitt 2 sowie die Abhängigkeiten je Iteration). In der Praxis können Backend und Frontend für dieselbe Funktionsgruppe parallel entwickelt werden, sobald das jeweilige API-Vertrag (Endpunkt-Signaturen, DTOs) feststeht – das Frontend muss dafür nicht auf die vollständige Fertigstellung der Backend-Iteration warten, sondern kann gegen die in api/openapi.yaml beschriebene Schnittstelle entwickeln. Für die Iterationen 0–5 ist das inzwischen ohnehin hinfällig, da der Backend-Vertrag für diesen Umfang bereits steht; einzig Iteration 6 muss auf eine tatsächliche Vertragserweiterung warten, da contract-first per Definition ausschließt, gegen einen noch nicht existierenden Vertrag zu generieren.

Da sich der Vertrag zwischen Backend-Iterationen bereits einmal rückwirkend geändert hat (Vertragsbereinigung vom 22.09.2026, siehe iterationplan-backend.md, Iteration 4), sollte dieses Dokument nach jeder künftigen Backend-Iteration, die api/openapi.yaml ändert, kurz gegen den neuen Stand geprüft werden – insbesondere vor Beginn von Iteration 6, deren Endpunkt-Namen und -Formen hier nur als aktuell wahrscheinlichste Annahme aus anforderungen-backend.md übernommen wurden, nicht aus einem bereits feststehenden Vertrag.