Add project documentation and update workflow plan

Adds AGENTS.md, DESIGN.md, and docs/* covering architecture,
conventions, decisions, checklists, branching, release process,
and prompts. Updates README and workflow-feedback-plan to reflect
the decoupled GroupName nomination model.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
AzuTear
2026-06-28 23:31:13 +02:00
parent 18b61bed52
commit fc5c13a4fd
13 changed files with 1670 additions and 15 deletions
+23 -15
View File
@@ -10,7 +10,7 @@ Die erste grosse Aenderung sollte den Core Workflow stabilisieren: Nominierung,
Die wichtigsten Produktentscheidungen:
- Kategorien mit Viewer-Groessen werden als einzelne Kategorien pro Unterkategorie abgebildet, gruppiert ueber `GroupName`.
- Viewer duerfen pro Kategorie bis zu drei Stream- oder Kanal-Links nominieren.
- Viewer duerfen pro Hauptkategorie so viele Stream- oder Kanal-Links nominieren, wie in der Hauptkategorie als `MaxNomineesPerUser` konfiguriert ist. Der aktuelle Default bleibt drei.
- Eine Nominierung muss nicht fuer alle Kategorien abgegeben werden.
- Clip-Compilations werden nicht als Videodateien in der App gespeichert.
- Voting und Gewinnerbereiche nutzen externe YouTube-/Twitch-Links oder Embeds.
@@ -29,21 +29,23 @@ Das Dokument beschreibt pro Award-Kategorie drei Unterkategorien nach Viewer-Gro
Im aktuellen Datenmodell passt das am besten zu einzelnen `Category`-Datensaetzen pro Unterkategorie. Der uebergeordnete Award-Bereich, zum Beispiel `Gamer`, bleibt `GroupName`; die konkrete Unterkategorie wird `Name`, zum Beispiel `Hidden Star der Gamer`.
Damit entsteht kein paralleles Kategorienmodell. Admin-, Public- und Voting-Flows koennen weiter mit `CategoryId` arbeiten.
Damit entsteht kein paralleles Kategorienmodell. Admin- und Voting-Flows arbeiten weiter mit konkreten `CategoryId`s. Die Public-Nominierung wurde davon bewusst entkoppelt: User nominieren auf Hauptkategorie/`GroupName`, das passende Viewer-Tier wird danach ueber Tracker- und Admin-Review bestimmt.
Um die Pflege fuer Admins einfacher zu machen, bleibt die normale Hauptkategorie-Pflege erhalten, waehrend Unterkategorien zentral in einem Season-Modal konfiguriert werden. Ein Award-Bereich bleibt `GroupName`, Unterkategorien bleiben im Ausfuehrungsmodell normale `Category`-Datensaetze, werden aber aus der globalen Definition fuer alle Hauptkategorien synchron gehalten. Viewer-Range, Name, Slug und Reihenfolge werden pro Unterkategorie strukturiert gespeichert; ein separates Standard-Set wird nicht mehr angeboten.
### Nominierung
Das Feedback wuenscht pro Kategorie bis zu drei Nominierungen als Stream-/Kanal-Links. Namen sind nicht zwingend noetig, weil die Admins aus dem Link den finalen Kandidaten erstellen oder zuordnen koennen.
Das Feedback wuenscht pro Kategorie mehrere Nominierungen als Stream-/Kanal-Links. Namen sind nicht zwingend noetig, weil die Admins aus dem Link den finalen Kandidaten erstellen oder zuordnen koennen. Das konkrete Link-Limit kommt aus der Admin-Hauptkategorie.
Geplanter Zielzustand:
- Pro Kategorie koennen ein bis drei Links eingereicht werden.
- Doppelte Links innerhalb derselben Kategorie werden blockiert.
- Pro Hauptkategorie koennen ein bis zum konfigurierten Limit Links eingereicht werden.
- Doppelte Links innerhalb derselben Hauptkategorie werden blockiert.
- Leere Kategorien duerfen uebersprungen werden.
- Die Nominierungsoberflaeche wird wie ein Wizard aufgebaut: Kategorien links, Inhalt rechts, klare Weiter-Navigation.
- Clip-Einreichung wird aus dem Nominierungsformular entfernt oder deutlich getrennt, weil laut Feedback Clips in der Nominierungsphase eher Probleme verursachen.
Backendseitig existiert bereits eine passende Grundlage: `CreateNominationRequest` unterstuetzt mehrere `Nominations`, und die API verhindert doppelte Links innerhalb eines Requests. Die groesste Arbeit liegt daher im Public UI und in der Kommunikation der Regeln.
Backendseitig speichert `Nomination` jetzt `CategoryGroupName` statt eine Tier-Kategorie als primaere Zuordnung. `CategoryId` bleibt als nullable Legacy-Feld erhalten. Twitch-Links werden best-effort ueber TwitchTracker angereichert; Nicht-Twitch-Links bleiben erlaubt und werden im Admin-Review manuell einem Tier zugeordnet.
### Vorbereitung
@@ -52,6 +54,9 @@ Nach der Nominierungsphase prueft das Team die Nominierungen, zaehlt aus und kon
Geplanter Zielzustand:
- Admins sehen pro Review-Fall genug Signal, um Kandidaten zuzuordnen.
- Admins sehen Nominierungen gruppiert nach Hauptkategorie und Streamer-Identitaet.
- Das System zeigt Trackerstatus, durchschnittliche Viewer, Tier-Vorschlag und Tally der eindeutigen User.
- Beim Uebernehmen entsteht der Kandidat im vorgeschlagenen oder manuell gewaelten Tier.
- Final ausgewaehlte Nominierte bekommen einen Annahmestatus.
- Admins koennen pro Kandidat eine externe Clip-Compilation-URL pflegen.
- Es wird keine Upload-Infrastruktur fuer Videodateien gebaut.
@@ -85,7 +90,8 @@ Diese Regeln sollten nicht still im Public UI verschwinden, sondern als Admin-Gu
Geplanter Zielzustand:
- Admins koennen final maximal vier Nominierte pro Unterkategorie festlegen.
- Admins sehen Warnungen, wenn eine Person zu oft nominiert oder als Gewinner markiert wird.
- Streamer-Identitaet wird zentral ueber Plattform/Login modelliert, damit dieselbe Person ueber Kategorien hinweg erkannt werden kann.
- Admins sehen Warnungen oder Blocker, wenn eine Person zu oft nominiert oder als Gewinner markiert wird.
- Die App blockiert riskante finale Veroeffentlichungen oder verlangt eine bewusste Admin-Bestaetigung.
- Gewinner werden pro Unterkategorie bestimmt; bei Gleichstand oder Sonderfaellen entscheidet das Team manuell.
@@ -103,14 +109,14 @@ Folgeplanung:
### Phase 1: Public Nominierungs- und Voting-UX
Ziel: Der Public Flow entspricht dem Feedback, ohne zuerst das Datenmodell stark umzubauen.
Ziel: Der Public Flow entspricht dem Feedback: Nominierung auf Hauptkategorie, Voting weiter auf Tier-Kategorie.
Umsetzung:
- Nominierungsmodal zu einem Wizard umbauen.
- Pro Kategorie bis zu drei Link-Felder anbieten.
- Kategorien als linke Navigation anzeigen.
- Kategorien ohne Eingaben erlauben.
- Pro Hauptkategorie bis zum konfigurierten `MaxNomineesPerUser`-Limit Link-Felder anbieten.
- Hauptkategorien als linke Navigation anzeigen.
- Hauptkategorien ohne Eingaben erlauben.
- Doppelte Links clientseitig validieren und Backend-Fehler sauber anzeigen.
- Clip-Einreichung aus dem Nominierungsflow entfernen oder als separaten, weniger prominenten Flow belassen.
- Voting-Wizard um Weiter-Button und fehlende-Stimmen-Hinweis erweitern.
@@ -118,8 +124,8 @@ Umsetzung:
Akzeptanz:
- Eine Kategorie kann mit einem, zwei oder drei Links eingereicht werden.
- Doppelte Links in derselben Kategorie werden blockiert.
- Eine Hauptkategorie kann mit einem oder mehreren Links bis zum konfigurierten Limit eingereicht werden.
- Doppelte Links in derselben Hauptkategorie werden blockiert.
- Ein leerer Kategorienblock verhindert nicht das Absenden anderer Kategorien.
- Voting kann gespeichert und in derselben Phase erneut geaendert werden.
@@ -184,9 +190,9 @@ Akzeptanz:
### Beibehalten
- `CategoryId` bleibt die zentrale Einheit fuer Nominierung und Voting.
- `CategoryId` bleibt die zentrale Einheit fuer Voting, Kandidaten und Gewinner.
- `GroupName` bleibt die Gruppierung fuer uebergeordnete Award-Bereiche.
- Die Nominierungs-API bleibt grundsaetzlich erhalten.
- Die Nominierungs-API bleibt grundsaetzlich erhalten, nimmt aber `CategoryGroupName` als neues Zielfeld; `CategoryId` bleibt Legacy-Fallback.
- Die Voting-API bleibt grundsaetzlich erhalten.
- Wiederholtes Vote-Speichern bleibt erlaubt und wird als Bearbeiten behandelt.
@@ -198,6 +204,8 @@ Akzeptanz:
- Plattform
- optionaler Embed-Status
- Admin-Review braucht Statusinformationen fuer final ausgewaehlte Nominierte.
- `Nomination` speichert Tracker-/Review-Metadaten: `ResolvedChannel`, `ResolvedPlatform`, `AvgViewers`, `SuggestedCategoryId`, `StreamerIdentityId`, `TrackerStatus`.
- `StreamerIdentity` wird als eigene Entity fuer Plattform/Login/Normalisierung eingefuehrt.
- Gewinnerverwaltung braucht Guards fuer interne Regeln, inklusive "maximal ein Gewinnerplatz" und "Clip-Link fuer Gewinner erforderlich".
### Nicht bauen