{
  "updated_at": "2026-03-09",
  "project": "wgenerator",
  "summary": {
    "css_theme": [
      "LESS @-Variablen durch CSS-Custom-Properties ersetzt",
      "natuerlichere Farbpalette auf Basis des Body-Gradients eingefuehrt",
      "Material Icon Buttons auf die Primaerfarbe abgestimmt",
      "mehrere harte Farben in normale App-Views auf Tokens umgestellt",
      "Monitor-/Beamer-Ansicht bewusst kontrastreich belassen"
    ],
    "material_theme": [
      "src/custom-theme.scss auf map-basierte Angular-Material-M2-Theme-Definition umgestellt",
      "Warnung zu legacy define-light-theme-Signatur behoben"
    ],
    "transpose": [
      "TransposeService auf Halbtonlogik umgebaut",
      "unbekannte Akkorde rendern bewusst als X",
      "dynamisches Rendern statt festem 100-Zeichen-Template",
      "Tests fuer Enharmonik, B/H, X-Faelle und Key-Helper ergaenzt",
      "key.helper Korrekturen: Gb-Mapping und D-Skala"
    ],
    "firebase_reads": [
      "ConfigService und GlobalSettingsService auf Singleton-Streams umgestellt",
      "read$ fuer shows, songs und guest wieder direkt ueber doc$ statt list$.find(...)",
      "songUsage Login-Backfill entfernt",
      "songUsage-Inkremente auf FieldValue.increment(...) umgestellt",
      "Admin-Konsoleintrag window.wgeneratorAdmin.rebuildSongUsage() hinzugefuegt",
      "showSongDataService.list$(showId) pro showId gecacht",
      "monitor.component.ts entkoppelt, damit Show-Metadaten keine unnoetigen Song-Reads triggern"
    ],
    "shows_filter": [
      "showType-Filter funktioniert wieder clientseitig",
      "Zeitraumfilter fachlich auf heute minus n*30 Tage umgestellt",
      "oeffentliche Shows werden fuer den Zeitraum serverseitig per Firestore-Query geladen",
      "owner und showType filtern weiterhin clientseitig auf dem kleineren Resultset",
      "Null-Fall im Filter-Template abgesichert"
    ]
  },
  "important_files": [
    "src/styles/styles.less",
    "src/custom-theme.scss",
    "src/app/modules/songs/services/transpose.service.ts",
    "src/app/modules/songs/services/transpose.service.spec.ts",
    "src/app/modules/songs/services/key.helper.ts",
    "src/app/modules/songs/services/key.helper.spec.ts",
    "src/app/services/config.service.ts",
    "src/app/services/global-settings.service.ts",
    "src/app/services/user/user.service.ts",
    "src/main.ts",
    "src/app/modules/shows/services/show-song-data.service.ts",
    "src/app/modules/presentation/monitor/monitor.component.ts",
    "src/app/modules/presentation/remote/remote.component.ts",
    "src/app/modules/shows/services/show-data.service.ts",
    "src/app/modules/shows/list/list.component.ts",
    "src/app/modules/shows/list/filter/filter.component.ts",
    "src/app/modules/shows/list/filter/filter.component.html",
    "src/app/modules/songs/song/song.component.ts",
    "src/app/modules/songs/song/song.component.html",
    "README.md"
  ],
  "console_commands": {
    "song_usage_rebuild": "await window.wgeneratorAdmin.rebuildSongUsage()"
  },
  "known_tradeoffs": [
    "songUsage wird historisch nicht mehr automatisch beim Login rekonstruiert; dafuer ist die Admin-Migration gedacht",
    "songUsage decrement kann bei inkonsistenten Aufrufpfaden theoretisch unter 0 laufen",
    "owner- und showType-Filter fuer Shows laufen noch clientseitig",
    "oeffentliche Show-Zeitraumquery kann Firestore-Indexe benoetigen"
  },
  "next_candidates": [
    "remote.component.ts weiter entkoppeln, damit textRendering.parse(...) nicht bei jeder Show-Metadatenaenderung fuer alle Songs neu laeuft",
    "users$ als Voll-Collection-Livestream spaeter auf Einzelreads bzw. gezieltere Nutzung pruefen",
    "weitere Firestore-Read-Hotspots mit echten Metriken gegenpruefen"
  ]
}
