Changelog
Änderungen & neue Features – neueste Einträge zuerst.
2026-02-20
🗺️ Karte
- Marker-Clustering für Gruppen und Events (bessere Übersicht und Performance)
🧩 Events
- Trust-Hinweise: Adress-/Positions-Check im Event-Formular + Hinweis bei abgelaufenen Events (inkl. Duplizieren-Flow)
🧩 Gruppen
- Tanzstile: `DanceMode` um Option **Beides (BOTH)** erweitert
- Gruppen: Neues optionales Textfeld **Accessoires** (Create/Edit + Anzeige auf Gruppenseite)
🖼️ Uploads
- Upload Limit für Bilder/Flyer auf **15MB** erhöht
- Upload UX: Klarere Fehlermeldungen aus dem Backend werden im UI angezeigt (statt generischem "Upload fehlgeschlagen")
- Upload UX: Hinweistext mit Maximalgröße direkt an den Upload-Feldern (Gruppen-Form, Gruppen-Wizard, Event-Form)
💃 Tanzstile
- Default-Liste ergänzt: **Oriental Fusion** (Seed-Scripts + API Default-Seeding)
🧰 Admin / Transfer
- Transfer-Upload API: Fallback für Raw-Uploads (`application/gzip`/`octet-stream`) zusätzlich zu Multipart
- Tests: Transfer Upload Test an Vitest-Umgebung angepasst
🛍️ Marketplace (Second-Hand Börse)
- Inserate: Create/Detail/Edit/Delete komplett (Owner/Admin Berechtigungen)
- Standort: Geocoding best-effort (keine 500er bei externen Fehlern) + Soft-Warnung bei PLZ/Ort-Mismatch
- Validierung/UX: Pflichtfelder konsistent (Preis: Pflicht bei „Ich biete“, optional bei „Ich suche“), Input-Sanitization (PLZ 5-stellig, Preis/Versand nur Zahlformat)
- Detailansicht: zusätzliche Infos (Datum/Location-Quelle) + Admin/Owner Aktionen
- Legacy-Listings: Standort-Anzeige robust bei älteren Inseraten ohne PLZ/Ort
- Architektur: Marketplace-Übersicht lädt Inserate über `/api/marketplace` (statt Prisma direkt)
💬 Direktnachrichten
- E-Mail Benachrichtigung bei neuer Nachricht: Link führt direkt in den passenden Thread (`/direct-messages/[otherUserId]`)
- Profil: Optionale Einstellung, ob bei neuen Direktnachrichten eine E-Mail gesendet wird
- E-Mail Throttle: Maximal eine Benachrichtigung pro Kontakt alle 10 Minuten (Spam-Schutz)
- E-Mail Links: Deep-Links nutzen `NEXTAUTH_URL` (Fallback: `SITE_URL`) – kein kaputter Button wenn Base-URL fehlt
🧩 UI / UX
- Gruppenliste: Filter UX auf Mobile verbessert
- Oben nur noch Suche + Sortierung
- Tanzstil + Standort/Umkreis im Accordion „Filter“
- Sortierung „Entfernung“: Hinweis + Accordion-Öffnung wenn Standort fehlt
- Tänzerinnen-Übersicht (`/taenzerinnen`): Layout/Filter wie Gruppenübersicht (Suche, Sortierung, Filter)
- Tänzerinnen-Profile: Phase 2 Felder ergänzt (Unterricht + Ort, Schwerpunkte, Ausbildung/Training, Auftritte/Referenzen) + Filter „Unterricht“
- Tänzerinnen-Profile: Workshops + „Für Auftritte buchbar“ + Konditionen (Freitext) + Filter „Workshops“
- Gruppenseite: Öffentliche Sidebar zeigt jetzt Gruppenleitung (Owner + Admins) und Mitgliederliste (erste 12 + „Mehr“)
- User-Profil: Gruppenliste zeigt jetzt Rolle (Mitglied/Gruppenleitung) und Beitrittsdatum
- Neue Hilfeseite `/hilfe` und Link im Footer
🛠️ Wartungsmodus
- Wartungsmodus (MAINTENANCE_MODE) blockiert Schreibzugriffe serverseitig (HTTP 503)
- via `src/proxy.ts` (Next.js 16 Proxy-Konvention)
- Globales Wartungs-Banner
PWA (iOS)
- iOS Home-Screen Icon verbessert
- `apple-touch-icon.png` hinzugefügt
- Manifest um PNG Icons ergänzt
- Favicon/App-Icon: SVG Logo wird zusätzlich als Icon ausgeliefert (neben PNG Fallbacks)
🔧 Deployment / Datenbank
- PostgreSQL-only: SQLite komplett entfernt
- Entfernte Prisma SQLite-Migrations-History (`prisma/migrations` inkl. `migration_lock.toml`)
- Setup/Deploy nutzen `prisma db push`
- Backup/Restore/Auto-Backup via `pg_dump`/`psql`
🧪 Tests
- Playwright E2E: Neuer Test für Inbox-Thread (Edit/Delete bis gelesen)
🔧 Geändert
- Event-Erstellung: Datum/Uhrzeit Eingabe UX überarbeitet (native Date/Time Picker, Safari-kompatibel)
- Event-Formular: Automatisches Setzen der Endzeit (+90 Minuten) solange Ende nicht manuell geändert wurde
- Event-Formular: Beim Bearbeiten wird das Ende beim Verschieben des Starts mitverschoben (inkl. Hinweis)
- Event-Formular: Inline-Validierung + Scroll zum ersten Fehler
- Event-Formular: Zeitzone aus dem Browser wird als Info angezeigt
- Formular-Layout: Ticket-Link/Preis unter Webseite neu angeordnet
SEO
- `robots.txt` und `sitemap.xml` werden jetzt server-seitig generiert (Next.js Metadata Routes)
- Sitemap nutzt bevorzugt `SITE_URL` (Fallback: `NEXTAUTH_URL`) als Basis
- Globales Default-SEO verbessert (Description, OpenGraph, Twitter Cards)
🐛 Behoben
- "Ungültiger Wert" bei Datum/Uhrzeit Eingabe in Safari (Browser-Validation der versteckten Inputs)
- Weiterleitung nach Event-Erstellung für Events ohne Gruppe
- Event löschen: Delete-Button auf Detailseite + API-Route für Events ohne Gruppe
- Öffentliche Seiten: Nicht eingeloggte Nutzer sehen wieder Gruppenlogos/Profilbilder (Uploads werden nicht mehr auf Login umgeleitet)
🎉 Neu hinzugefügt
- Tänzerinnen-Profile: Optional im Nutzerprofil aktivierbar (inkl. Privat-Option) und sichtbar in `/taenzerinnen` + Gruppen-Detailseiten
🎉 Neu hinzugefügt
UX Verbesserungen
- **Toast Notifications System** - Moderne Benachrichtigungen statt Browser-Alerts
- 4 Typen: success, error, warning, info
- Auto-Dismiss nach 5 Sekunden
- Manuelles Schließen möglich
- Integriert in allen Formularen und User-Interaktionen
- **Skeleton Loader** - Loading-Platzhalter für bessere wahrgenommene Performance
- Gruppen-Listenseite (`/groups`)
- Event-Listenseite (`/events`)
- Passt exakt zum finalen Layout (keine Layout-Shifts)
Stabilität & Fehlerbehandlung
- **Error Boundary** - Globale Fehlerbehandlung für React Components
- Zeigt benutzerfreundliche Fehlermeldungen
- Entwickler-Details nur in Development-Modus
- "Seite neu laden" Button
Sicherheit
- **Security Headers** in `next.config.ts`
- X-Frame-Options: SAMEORIGIN
- X-Content-Type-Options: nosniff
- X-XSS-Protection
- Strict-Transport-Security (HSTS)
- Referrer-Policy
- Permissions-Policy
🔧 Geändert
🐛 Behoben
- **Prisma Version-Konflikt** auf Ubuntu 24.04
- `npx prisma` installierte automatisch v7.2.0 (breaking changes)
- Jetzt: `npm run db:generate` und `npm run db:migrate`
- **Alle Browser-Alerts ersetzt**
- 15+ `alert()` Aufrufe durch Toast Notifications ersetzt
- Betrifft: Gruppen, Events, Feed, Karte, Admin-Bereich
📝 Dokumentation
- README.md aktualisiert - Native Installation als Hauptoption
- OPTIMIZATIONS.md aktualisiert - Status aller Features
- Neue npm scripts: `npm run setup`, `npm run deploy`
✅ Validierung
- **Input Sanitization**: Bereits via Zod-Schemas in allen API-Routes implementiert
- **Rate Limiting**: Bereits vorhanden für kritische Endpoints
- **Magic Bytes Validation**: Bereits vorhanden für File-Uploads
---
2026-03-01
🧰 Admin
- Admin: Ankündigungen/„What's new“-Modal: Vorschau-Button im Editor (ohne Speichern)
📣 What's new (Modal)
- Neues globales „What's new“-Modal für eingeloggte Nutzer (zeigt neueste aktive Ankündigung einmal pro User, inkl. Dismissal)
- Copper-Design: Header mit Branding-Farben, Button nutzt `--primary`, kleines Logo im Header (Branding-Logo mit Fallback)
- Robustheit: Textumbruch/Scroll bei viel Inhalt, damit nichts aus dem Modal herausläuft
💃 Tanzstile
- Seed: Tanzstile werden nur einmal initial angelegt (Flag in `SystemSetting`) und nicht automatisch erneut erzeugt, wenn Admins Einträge löschen
2026-02-28
🏷️ Tags
- Tags unterstützen Typen (GENERAL/DIALECT/PROP) und können über die API gefiltert werden
- Gruppen: Dialekte/Schulen und Props können separat als Tags gepflegt werden (Mehrfachauswahl)
💃 Tanzstile
- Aliase/Synonyme für Tanzstile (z.B. ATS/American Tribal Style) werden in der Auswahl angezeigt, aber als kanonischer Stil gespeichert (z.B. FCBD Style)
- Nutzer können Änderungen am Tanzstil vorschlagen (Inhalte wie Beschreibung/Links/Kategorie) und verifizierte Nutzer können zusätzlich neue Tanzstil-Aliase vorschlagen; Admin kann diese freigeben/ablehnen
- Weitere Aliase wurden vor-seeded (u.a. Global Caravan/Gypsy Caravan, ITS/Improvisational Tribal Style, BlackSheep BellyDance/BSBD, Salimpour Format)
- Defensive Migration: vorhandene Legacy-Tanzstile aus dem Live-System (z.B. Gypsy Caravan, Improvisational Tribal Style (ITS), BlackSheep) werden automatisch auf kanonische Stile gemerged (inkl. Gruppen-/User-Zuordnungen)
- Admin-Diagnose: neuer Integritätscheck für DanceStyles (Orphans, Duplikate, Legacy-Namen)
🧭 Presence
- „Zuletzt online“ wird nicht mehr nach 5 Minuten zu „unbekannt“ (Last-Seen Retention: 30 Tage statt Online-Fenster)
🧭 Navigation
- Footer: Facebook-Seite verlinkt
- Footer: Facebook-Icon statt Textlink
- Footer: GitHub-Icon statt Textlink
🔐 Auth
- Registrierung/Login: Hinweise zur E-Mail-Verifizierung nach der Registrierung klarer formuliert
💃 Tanzstile
- Dropdowns/Filter laden Tanzstile immer aktuell aus der DB (kein Stale Cache; Refresh beim Öffnen)
- Gruppen/Tänzerinnen: Tanzstil-Filter sind konsistent und nutzen DanceStyle IDs (Query-Param `danceStyleId`, Legacy-Params bleiben kompatibel)
- Filter: Dropdowns zeigen nur noch Tanzstile, die tatsächlich verwendet werden (pro Kontext: Gruppen/Events/Tänzerinnen)
- Prisma: Schema-Relation für Tanzstil-Vorschläge korrigiert (migrate/generate laufen wieder)
- Tanzstile: Safety-Logging für Ladeprobleme (API + Gruppen-Editor)
- Gruppen bearbeiten: Tanzstil-Dropdown bleibt offen beim Nachladen (kein "Laden"-Flicker)
- Cleanup: Entfernt Fallback-Workarounds für veralteten Prisma Client (Deployment läuft mit `migrate deploy` + `generate`)
🧩 Events
- Events: Tanzstile können optional ausgewählt werden und sind im Kalender filterbar (Query-Param `danceStyleId`)
- Events: Nach dem Erstellen wird direkt zur Event-Detailseite weitergeleitet
- Event-Formular: Adresseingabe verbessert (PLZ/Ort zuerst, geführte Suche)
- Events: Aktion-Buttons vereinheitlicht (Löschen als Icon-Button)
- Events: Filter zeigt Hinweis, wenn noch keine Tanzstile in Events vorhanden sind
- Events: Hinweis im Formular und auf der Detailseite, damit bestehende Events leichter um Tanzstile ergänzt werden können
- Events: Filter erweitert um Standort/Umkreis (wie Gruppen) und Monats-Auswahl (nur Monate mit zukünftigen Events)
- Events: Events-Header/Filter optisch an Gruppen-Seite angepasst (Button-Ausrichtung, Monats-Labels)
- Events: Lint-Fixes im Event-Filter (kein setState im Effect, keine `any`-Typen)
👥 Gruppen
- Gruppen: Tanzstile-Auswahl in der Gruppenerstellung auf Mobile (iOS/Android) repariert (Select-Overlay wurde durch Reload beim Fokus geschlossen)
🧭 Navigation
- Navbar: API-Requests nutzen aktuelle Origin (kein CORS mehr bei Zugriff über lokale IP)
- Next.js: Deprecated `middlewareClientMaxBodySize` durch `proxyClientMaxBodySize` ersetzt
📣 Marketing
- Marketing: Corporate Identity ergänzt (Schriftart Marcellus für Copper, Logo-Farben #C7643C / #e7bf73)
🧰 Maintenance
- npm audit: `npm audit fix` (ohne `--force`) ausgeführt und Lockfile aktualisiert; verbleibende Findings erfordern Major-Updates
- Tests: Regressionstest für `POST /api/events` (inkl. `danceStyleIds`), damit kaputte Event-Erstellung sofort auffällt
- Admin: Diagnostics prüft Prisma-Relation `Event.danceStyles` explizit
2026-03-05
🔗 Links
- Neue öffentliche Linkseite (`/links`) mit aktiven Links + Archiv (offline)
- Eingeloggte Nutzer können Links vorschlagen (PENDING), Admins können freigeben/ablehnen (`/admin/links`)
- Nutzer können Änderungen an bestehenden Links vorschlagen; Admins können Vorschläge prüfen (Diff) und freigeben/ablehnen
- Admin: E-Mail-Benachrichtigung an alle Admins bei neuen Link-Änderungsvorschlägen
- Admin: Links können vollständig angelegt/bearbeitet/gelöscht werden (CRUD)
- Automatische tägliche Prüfung der Erreichbarkeit (Healthcheck): HTTP >= 400 zählt als offline; nach 3 Fehlschlägen Archivierung; automatische Reaktivierung bei Erfolg
- Links unterstützen Kategorien (z.B. Tanzschule) sowie PLZ/Ort als Grundlage für zukünftige Karten-Integration
- Standort wird best-effort geocoded (PLZ/Ort → `lat/lng`) für spätere Karten-Integration
- Karte (`/map`): Links werden als Marker angezeigt (inkl. Kategorie im Popup; Toggle im Filter)
- Kategorien für Links sind nun als verwaltete Dropdown-Liste umgesetzt (User/Admin/Suggestions); Admin kann Kategorien einsehen und neue anlegen
- Karte: Links mit identischer PLZ/Ort werden auf der Karte leicht auseinandergezogen (Jitter), damit Marker einzeln anklickbar bleiben
- Admin: Einmaliger Backfill-Endpoint zum Nachziehen von Link-Kategorien aus bestehenden Link-Daten (für laufende Systeme)
- Admin: Link-Kategorien können umbenannt/gelöscht werden (bei Verwendung wird Löschen verhindert)
- Karte: Link-Filter zeigt Kategorien einzeln (statt pauschal "Links"); Admin kann pro Kategorie steuern, ob sie auf der Karte angezeigt wird ("In Karte anzeigen")
- Startseite: Links-Kennzahlen zeigen Gesamtzahl der freigegebenen Link-Einträge sowie eine Kachel pro Kategorie (mit Anzahl)
- Startseite: Kategorie-Kacheln verlinken direkt auf gefilterte Linkliste (`/links?category=...`)
- Startseite: Links-Kennzahlen optisch vereinheitlicht (Kachel "Links" entfernt; gleiche Höhen; Kategorie-Kacheln 4 Spalten auf Desktop)
- SEO: Gefilterte Linklisten werden per `robots: noindex` vor Duplicate Content geschützt
- Links-Seite: Kategorie-Chips als Schnellfilter + Canonical-URL (`/links`) für saubere Indexierung
🧰 Admin
- Einstellungen: Matomo-Abschnitt zeigt nach „Speichern“ wieder eine Statusmeldung (Feedback)
- Admin: Online-Zähler "Eingeloggt online" nutzt jetzt korrekt das 5-Minuten-Fenster (statt historischer Last-Seen Werte)
- Admin: Online-Kachel Beschriftung präzisiert ("Besucher online" vs. "Eingeloggt online (letzte 5 Minuten)")
🧭 Navigation
- Footer: Links im Footer sind nun in Sektionen unterteilt (Rechtliches/Mehr/Community) für bessere Übersicht
- Hilfe: Icons für Tänzerinnen/Gruppen korrigiert; Links-Seite in Hilfe ergänzt
- Startseite: "Was bietet TribeFinder?" ergänzt um Links
- Startseite: "Was bietet TribeFinder?" Kacheln optisch vereinheitlicht (Icon-Badges, gleiche Höhen, klare CTA)
- Favicon: Standard-Favicon (`/favicon.ico`) explizit in Metadata-Icons hinterlegt (bessere Browser-Kompatibilität)
- Responsiveness: Horizontales Overflow reduziert (Link-Chips umbrechbar; Footer-Version bricht lange Hashes)
- SEO: JSON-LD Structured Data robuster (WebSite/Organization via `@graph`) – verhindert Runtime-Fehler
- Startseite: Feature-Kachel-Titel auf max. 2 Zeilen geklemmt für bessere Lesbarkeit
- Startseite: Feature-Kacheln weniger gequetscht (max. 3 Spalten, bessere Abstände)
- Build: Next.js TypeScript-Typen für `/links` korrigiert (searchParams Promise-Kompatibilität)
- Karte: Gruppen-Popup – Logo/Overlay blockiert nicht mehr den Klick auf "Profil ansehen"
- Mobile: Feedback-Link wieder im Konto-Menü verfügbar
- Karte: Filter-Panel auf Mobile kompakter und aufklappbar
- Karte: Popups schließen weniger aggressiv bei Klick/Tap (Landscape-freundlicher)
- Security: Dependencies aktualisiert (Next.js Patch-Update; DOMPurify/jsPDF Fixes; Overrides für transitive Vulnerabilities)
- Gruppen: Like-Zähler konsistent gemacht (zählt auch legacy Favoriten/`FavoriteGroup` in Listen, Detailseite und Like-Endpoint)
🍪 Datenschutz
- Consent: Dezenter Cookie-/Consent-Banner unten + Einstellungs-Dialog (Notwendig/Matomo/YouTube)
- Consent: Matomo-Tracking und YouTube-Embeds werden erst nach Zustimmung geladen; Footer-Link "Cookie-Einstellungen" zum späteren Ändern
- Rechtstexte: Datenschutzerklärung/Impressum sowie Cookie-Hinweise sprachlich auf Einzelperson angepasst ("ich" statt "wir")
🛠️ Admin
- Admin: Online-Card bekommt einen manuellen "Jetzt prüfen"-Button + Detailansicht zur Verifikation der Online-Besucherzählung
📱 Mobile
- PWA: Ungelesene Nachrichten können (wenn unterstützt) als Badge-Zahl am App-Icon angezeigt werden; Navbar nutzt dafür den bestehenden Unread-Count Endpoint
- PWA: Dezente Install-Promo (ohne Sticky-Banner) im Profilbereich, im Konto-Menü sowie unten auf der Startseite inkl. Anleitung für Android/iOS
2026-02-27
💃 Tanzstile
- Einmalige Initialbefüllung: Tanzstil-Infos (Beschreibung/Webseite/Video) für bestehende Einträge werden per Migration gesetzt (danach Pflege über Frontend)
- Einmalige Ergänzung: Fehlende Tanzstile aus der initialen Liste werden angelegt und mit Infos befüllt (danach Pflege über Frontend)
- Einmalige Zuordnung: Kategorien für Tanzstile werden gesetzt (Oriental/Tribal/Fusion/Folklore/Modern/Sonstiges)
- Detailseite: Video-Bereich wird nur angezeigt, wenn das verlinkte YouTube-Video verfügbar ist
- Admin: Änderungsvorschläge zeigen Alt/Neu (Vergleich) für bessere Freigabe-Entscheidungen; Freigabe kann Felder auch leeren (setzt NULL)
🔎 SEO
- Events: Kalender-Seite (`/events`) wird serverseitig gerendert (bessere Indexierbarkeit, kein Client-only Fetch)
2026-02-25
💃 Tanzstile
- Öffentliche Tanzstile-Übersicht unter `/dance-styles` mit Suche sowie Counts für Gruppen & Tänzerinnen (nur Profile mit `isDancerProfileEnabled = true`)
- Öffentliche Tanzstil-Detailseiten unter `/dance-styles/[id]` inkl. Website/Beschreibung/„früherer Name“ sowie optionalem Video-Link (YouTube wird eingebettet)
- Tanzstile: Vorschlagsformular für neue Stile (nur eingeloggte User); Vorschläge sind nicht öffentlich sichtbar bis zur Admin-Freigabe
- Tanzstile: Änderungsvorschläge für bestehende Tanzstile (nur verifizierte User) inkl. Felder wie Website/Beschreibung/Video/„früherer Name“
- Admin: Review-Seite für Tanzstil-Vorschläge unter `/admin/dance-style-suggestions` (Freigeben/Ablehnen)
- Datenmodell: Neues Prisma-Model `DanceStyleSuggestion` inkl. Status (PENDING/APPROVED/REJECTED)
- Seed: Default-Liste ergänzt um **ITS** und **Wüstenrosen ATS**
- Admin: Zentrale Tanzstil-Verwaltung unter `/admin/dance-styles` (manuell hinzufügen/bearbeiten/löschen)
- Admin: Tanzstile können jetzt auch einen optionalen Video-Link speichern (für Detailansicht)
- Admin: Legacy-Tag-Verwaltung (`/admin/tags`, Admin → Inhalte) auf zentrale Tanzstil-Verwaltung umgestellt
- Gruppen: Tanzstil-Filter lädt Tanzstile zentral aus `/api/dance-styles` (kein leerer Dropdown mehr)
- Tänzerinnen: Tanzstil-Filter in der Übersicht (`/taenzerinnen`) ergänzt
- Admin: Tanzstil-Vorschläge werden oben auf `/admin/dance-styles` eingeblendet, wenn offene Vorschläge existieren (Approve/Reject direkt dort)
- Admin: E-Mail-Benachrichtigung an Admins bei neuem Tanzstil-Vorschlag
🧭 Navigation
- Navbar: Primärlinks auf Gruppen/Tänzerinnen/Events/Karte fokussiert; Tanzstile + Second-Hand unter „Mehr“ (Desktop Dropdown + Mobile aufklappbar)
📍 Standort
- Startseite: Standort wird erst nach Klick („Standort aktivieren“) abgefragt (kein automatisches GPS-Popup beim Seitenaufruf)
2026-02-22
🧩 Gruppen
- Gruppen-Flyer: Button "Flyer Vorschau" wieder sichtbar auf Gruppen-Detailseite und in "Gruppe bearbeiten" (für Admins/Owner)
- Gruppen-Flyer PDF: Footer zeigt jetzt "Erstellt mit TribeFinder.de"; QR-Code und Footer-URL nutzen kanonische `SITE_URL` (Fallback: `NEXTAUTH_URL`)
- Gruppen-Flyer PDF: Details-Layout robuster (kein Überlagern von Standort/Training durch Kontakt-Block) + Tanzstile nutzen echte `danceStyles` (Fallback: Tags)
- Gruppen-Flyer PDF: Kontaktblock zeigt immer E-Mail + Website (mit Platzhalter falls nicht hinterlegt)
- Gruppen-Flyer PDF: Download-/Preview-Endpoint ist nicht mehr öffentlich (nur Owner/Gruppen-Admins/Global-Admins)
- Gruppen-Flyer PDF: DIN-A4 Layout stärker gerastert (fixe Bereiche) + deutlich mehr Platz für Beschreibung; TribeFinder-Logo im Footer
- Gruppen-Flyer PDF: "Über uns" wird wieder zuverlässig angezeigt (Layout strikt top-down; Boxen schrumpfen bei wenig Platz)
- Gruppen-Flyer PDF: Overlap-Fix (Kontaktblock unten verankert; Tanzstile/Events darüber)
- Gruppen: Neue öffentliche Steckbrief-Seite zum Drucken/Teilen unter `/groups/[id]/promote` (A4-Print-Layout + QR-Code)
- Gruppen: UI vereinfacht – statt PDF-Flyer Button gibt es jetzt den Steckbrief-Link (Promote-Seite)
- Gruppen: Steckbrief verbessert (Drucken-Button wieder verfügbar; Tanzstile zeigen Level + Impro/Choreo; Link-Text entfernt – QR genügt)
- Gruppen: Steckbrief-Druck optimiert (Print-Icon am Steckbrief-Button; beim Drucken werden Navbar/Footer ausgeblendet + höhere Kontraste)
- Gruppen: Steckbrief-Link öffnet in neuem Tab
- Gruppen: Steckbrief zeigt Gruppen-Logo; Safari-Druckvorschau fix (nur Steckbrief sichtbar via Print-CSS)
- Gruppen: Steckbrief ist jetzt immer hell (lesbar auch im Darkmode)
- Gruppen: Steckbrief zeigt optionalen Video-QR-Code, wenn ein Video verlinkt ist
- Gruppen: Gruppen-Übersicht (`/groups`) zeigt nun kompakt die Top 3 beliebtesten Gruppen (mit Like-Aufforderung)
- Gruppen: Sortierung "Beliebtheit" nutzt den gleichen Like-Zähler wie die Anzeige (Union aus `GroupLike` + legacy `FavoriteGroup`)
- Gruppen: Gruppenleitung/Mitglieder verlinken nur noch auf Tänzerinnen-Profile, wenn diese aktiviert sind (kein 404 beim Klick)
🧰 Admin
- Admin: Benutzerliste zeigt jetzt Tänzerinnenprofil-Status (aktiv/privat) zur Fehlersuche
- Admin: Benutzer-Detailseite zeigt jetzt Tänzerinnenprofil-Status (aktiv/privat)
- Admin: Benutzerliste zeigt Online/Offline Status
- Admin: Benutzer-Detailseite zeigt Online-Status + zusätzliche Debug-Felder (User ID, zuletzt aktualisiert)
- Admin: Ankündigungen/„What's new“-Modal verwaltbar unter `/admin/announcements` (mit Zeitraum + Warnung bei mehreren aktiven)
🗺️ Roadmap
- Auth/Security: konsistente Rate-Limits + Schutz für Write-Endpoints (inkl. Abuse-Schutz und klare Auth-Matrix Tests)
- Performance: Caching/ISR für öffentliche Listen (Gruppen/Events/Tänzerinnen/Marketplace) + Query-Optimierungen/Pagination
2026-03-08
🍪 Datenschutz
- Consent: Hydration-Fix – Cookie-Banner wird erst nach Mount gerendert (keine SSR/Client-Mismatch bei vorhandenem LocalStorage-Consent)
🧭 Navigation
- Navbar: Nachrichten-Link zeigt auf `/messages` (Desktop-Menü + Mobile-Menü)
- Navbar: Ungelesene Nachrichten werden als Badge im Konto-Bereich angezeigt
📱 Mobile
- PWA: Install-Promo zeigt auf Mobile auch ohne Install-Prompt eine manuelle Anleitung (Android/iOS), z.B. wenn PWA im Dev deaktiviert ist; im Konto-Menü ist die Install-Anleitung zusätzlich auch am Desktop erreichbar
- PWA: Fix – "App installieren" im Konto-Menü öffnet jetzt zuverlässig den Dialog (Menü schließt erst nach einer Aktion)
- PWA: Install-Promo nutzt echte Android/iOS Icons statt Platzhalter-Emojis
- PWA: Install-Promo zeigt App-Logo (Branding/Fallback) und wirkt optisch stärker (dezente Animation)
- PWA: Install-Promo Layout: mehr Abstand zwischen Text und Buttons
- Release: Version auf 2.8.1 erhöht
🔎 SEO
- SEO: Canonical URLs + robustere Meta-Descriptions für Event-/Gruppen-Detailseiten; Map/Hilfe mit Description+Canonical; private Bereiche (auth/dashboard/messages/direct-messages/admin) per noindex ausgeschlossen; robots.txt + sitemap erweitert
✨ UI
- Startseite: Logo im Hero-Bereich größer, ohne rechteckige Card im Hintergrund, Logo wird nicht mehr abgeschnitten (ohne Animation; statischer Schatten für mehr Tiefe)
- Navbar: Logo links oben mit Glint/Shimmer-Effekt (dezent; Intervall ~23s)
- Karte: Eigener Standort wird als Marker angezeigt (pulsierend; respektiert prefers-reduced-motion)
- Karte: Standort-Marker pulsiert deutlicher
- Wartungs-/Wartebildschirm: Text angepasst (kein "Wir" mehr)
- Admin: Startseiten-Logo (Hero) separat konfigurierbar (Upload, inkl. GIF)
- Admin → Design: Startseiten-Logo (Hero) ist auch im Branding-Bereich verwaltbar
- Startseiten-Logo (Hero): Upload-Limit erhöht und Video (mp4/webm) als Alternative zu GIF möglich
- Startseite: Hero zweigeteilt (links Blau/Primary, rechts Schwarz für Media) für saubere Darstellung von GIF/Video/Logo
2026-03-13
🔓 Auth
- Verbesserte Fehlermeldungen beim Login: `/auth/signin` zeigt NextAuth-Fehler (z.B. `CredentialsSignin`, `EMAIL_NOT_VERIFIED`, `LOGIN_LOCKED`) zuverlässig als Toast und Inline-Hinweis an und behandelt unerwartete/undefined SignIn-Responses.
- Login: Feedback-Link für ausgeloggte Nutzer auf `/auth/signin` (vorbefüllt für Login-Probleme) inkl. Rate-Limit + Honeypot-Spamschutz im Feedback-Endpoint.
🏠 Startseite
- Hero: Zeigt das normale Logo als Platzhalter im rechten Logo/Video-Bereich, bis das Asset geladen ist.
- Hero: Rechter Hintergrund nutzt jetzt die gleiche Farbe wie die Navbar (`--nav-bg`) statt reinem Schwarz.
- Hero: Hintergrund-Füllflächen hinter dem Logo/Video entfernt (rechteckig + rund), damit transparente Assets sauber mit dem Panel-Hintergrund verschmelzen.
🧭 Navigation
- Konto-Menü: Schließt sich beim Klick außerhalb/ESC und beim Ausführen von Menü-Aktionen (z.B. Theme wechseln).
- Mobile-Menü: Schließt sich beim Tippen außerhalb (und per ESC).
2026-03-15
🔐 Admin / Audit-Log
- Audit-Log: Auth-Events ergänzt (Login Erfolg/Fehler inkl. Lockout & Rate-Limits).
- Audit-Log: Passwort-Reset Events ergänzt (angefordert/gesendet/erfolgreich/fehlgeschlagen).
- Audit-Log: E-Mail-Verifikation Events ergänzt (erfolgreich/ungültig/bereits verifiziert).
- Audit-Log: Registrierung Events ergänzt (Erfolg/Rate-Limit/E-Mail existiert/Validierung) inkl. Versandstatus der Verifikationsmail.
- Audit-Log: `actorAdmin` kann für System/Auth-Events leer sein (Schema angepasst).
2026-03-19
🧩 Events
- Events: Adresse um Land ergänzt (Default: Deutschland) inkl. Unterstützung für Nachbarländer.
- Event-Formular: Land-Auswahl + Geocoding/Positionsprüfung berücksichtigen das ausgewählte Land.
2026-03-20
🌍 Länder
- Events: Land als validiertes Textfeld (weltweite Länder auf Deutsch) mit Autocomplete.
- Events: Land-Feld bleibt editierbar (nicht mehr durch Default „Deutschland“ überschrieben).
- Filter (Events/Gruppen): Standortsuche um Land ergänzt, Geocoding nutzt countrycodes.
- Gruppen: Standort um Land ergänzt (Formular + Wizard + API + Anzeige).
- Links: Standort um Land ergänzt (Submit + Vorschläge + Admin + Geocoding + Map/Anzeige).
- Map: Gruppen-Popup zeigt Land am Standort an.
- DB: Backfill-Script für fehlende Länderwerte (`npm run db:backfill-country`).
📍 Standort
- Verbesserte Fehlermeldungen bei Standort-Ermittlung (Safari/macOS): konkrete Hinweise für Berechtigung / nicht verfügbar / Timeout.
🔗 Links
- Admin: Tab „Vorschläge“ zeigt jetzt auch neue Link-Einreichungen (PENDING) inkl. Freigeben/Ablehnen.
- Admin: Einreicher bekommen automatisch eine Direktnachricht, wenn ihr Link-Vorschlag (bzw. Änderungsvorschlag) freigegeben oder abgelehnt wurde.
🛍️ Second-Hand
- Inserate: Land ergänzt (Formular + API + Anzeige) inkl. Geocoding nach Land.
2026-03-25
🔐 Security
- Admin: Es können keine weiteren Admins erstellt werden (Registrierung: nur erster User kann Admin sein; Admin-Promotion per API blockiert).
🧹 Datenschutz
- Profil: Self-Service „Konto & Daten löschen“ löscht Profil und zugehörige Daten inkl. Kalender/Events; Datenschutzerklärung ergänzt.
2026-03-22
📣 Marketing
- Marketing: Asset-Typen sind jetzt dynamische Kategorien (DB-verwaltet) statt fester Enum (Logo/Header/Poster).
- Admin → Marketing: Kategorien können angelegt/gelöscht werden; Uploads werden Kategorien zugeordnet.
- /marketing: Bereiche/Sektionen werden automatisch aus Kategorien gerendert.
- Marketing: Upload unterstützt jetzt auch MP4 (Video) und MP3 (Audio) inkl. Abspielen im Admin und auf /marketing.
🧰 Maintenance
- Wartungsseite: Logo wird wieder zuverlässig angezeigt (relativer Pfad + Fallback auf /icons/icon-512.png).
🚀 Deploy
- Deploy (native): Schwere Steps (npm install/prisma generate/next build) laufen mit niedrigerer CPU/IO-Priorität; Hinweis wenn kein Swap aktiv ist.
Allgemein
# Changelog