Commit graph

74 commits

Author SHA1 Message Date
2ddd8ac350 Fix: alle funktionalen Inline-Event-Handler → addEventListener/Delegation (von CSP-Härtung 65cfa25 app-weit blockiert)
Chat (senden/öffnen/löschen/Foto), Tagebuch-Buch, KI-Berichte, Wiki-Moderation,
Events-Detail, Walks-Lightbox, Routen-Foto, Navigations-CTAs (data-page),
Presse-Copy + Züchter-Landing (externes JS). 35x UI.modal.close → data-modal-close,
28x totes event.stopPropagation entfernt. Verbleibend: kosmetische onerror/Hover. SW v1164
2026-06-04 13:59:27 +02:00
fb9620fbcb Onboarding: 'Los geht's' navigiert direkt zum vollen Hunde-Profil-Formular statt Mini-Wizard. Welcome-'Hund anlegen' nutzt echten Event-Listener statt inline onclick. 2026-05-30 17:19:11 +02:00
cad34711b7 Welten: adaptive Abdunklung getrennt für oben (Banner+JETZT-Chips) und unten (Feature-Chips) — obere/untere Bildhälfte separat gemessen, SW v1131 2026-05-29 09:31:32 +02:00
ac5b26f767 Welten: adaptive Abdunklung — Bildhelligkeit per Canvas messen, --wbg-dim dynamisch (hell→mehr, dunkel→wenig), Dark-Mode-Overlay berücksichtigt, SW v1130 2026-05-29 09:26:32 +02:00
87c688d5b7 Wetter-Chip JETZT: Wetter- und Warn-Icon vertikal gestapelt statt nebeneinander (mehr Platz für Text), SW v1122 2026-05-29 08:43:30 +02:00
6fcc9d34d3 UX: Übung des Tages zeigt 'Stand erfassen →' statt '--' wenn kein Stand 2026-05-19 18:41:44 +02:00
a736d66c47 UX: Panorama-Hinweis bleibt 4s sichtbar (erste 2x), Text + Querformat, SW by-v1034 2026-05-16 13:03:42 +02:00
a65e5a2723 Feature: Dark-Mode Overlay auf Welten-Panorama (rgba 0,0,0,0.45), SW by-v1033 2026-05-16 13:01:33 +02:00
fc8d396247 Fix: Geburtstags-Banner nur für aktiven Hund
bday/bdayYear: nur truthy wenn bdayDog.id === dog.id (aktiver Hund)
otherBdayDog: zeigt Hinweis wenn ein ANDERER Hund Geburtstag hat
SW by-v1031, APP_VER 1031
2026-05-16 12:13:15 +02:00
b54d9fda99 Fix: users.geburtstag Migration + Format TT.MM statt MM-DD
- database.py: ALTER TABLE users ADD COLUMN geburtstag TEXT (fehlte!)
- profile.py: Validierung auf \d{2}\.\d{2} (TT.MM Format)
- settings.js: Placeholder/Pattern auf TT.MM geändert
- worlds.js: Birthday-Check auf DD.MM Format angepasst
SW by-v1029, APP_VER 1029
2026-05-16 12:02:52 +02:00
a4377033ec Feature: User-Geburtstag im Profil + Glückwunsch in JETZT-Welt
Settings:
- Feld 'Dein Geburtstag (optional)' im Profil-Formular (Format MM-TT)
- Hinweis: nur für Geburtstagsgrüße, kein Jahr nötig
- profile.py: geburtstag gespeichert + Format-Validierung MM-DD

JETZT-Welt wenn heute User-Geburtstag:
- Greet-Text: 'Herzlichen Glückwunsch' statt Tageszeit-Gruß
- Animiertes Geburtstags-Reminder-Card (confetti + cake Icons)
- 'Alles Gute zum Geburtstag, [Name]!'

SW by-v1028, APP_VER 1028
2026-05-16 11:55:34 +02:00
1328e2c4e3 Feature: HUND-Geburtstag-Hint für Nicht-aktiven Hund
Wenn ein anderer Hund (nicht der angezeigte) Geburtstag hat:
- Cake-Icon (Phosphor) animiert bounce in der Info-Karte unten
- "[Name] hat heute/morgen Geburtstag!" + Pfeil-Button
- Klick → wechselt direkt zum Geburtstagshund + zeigt Birthday-Banner
Kein Tab-Indicator (nur HUND-Welt). SW by-v1027, APP_VER 1027
2026-05-16 11:51:06 +02:00
82869e3f12 Fix: Drag-and-Drop in Welten-Konfig für Desktop (Pointer Events)
touchstart/touchmove/touchend → pointerdown/pointermove/pointerup:
- Pointer Events funktionieren auf Mouse (Desktop) + Touch (Mobile) gleich
- setPointerCapture() für sauberes Drag auch wenn Maus das Element verlässt
- e.touches[0] → e.clientX/clientY direkt aus dem Pointer Event
- Nur linke Maustaste (e.button === 0) startet Drag
SW by-v1011, APP_VER 1011
2026-05-16 09:24:08 +02:00
1b3b150b50 Desktop: Welten-Konfig als zentrierter Dialog, Chips kompakter
- Desktop (_isDesktop = innerWidth >= 768):
  Overlay zentriert (nicht Bottom-Sheet), max-width 1100px, border-radius 20px
  Grid: repeat(auto-fill, minmax(120px, 1fr)) statt repeat(4, 1fr)
  Chip-Höhe: 64px statt 80px, Gap 6px statt 8px
- Mobile: unverändert (Bottom-Sheet wie bisher)
- SW by-v1010, APP_VER 1010
2026-05-16 09:20:20 +02:00
a8c63e87da Experiment: Chip-Layout unten — Hintergrundbild bekommt mehr Raum
- Section-Labels entfernt ('Deine Bereiche', 'Alles über X', 'Die Welt da draußen')
- Chip-Grid: Höhe 80→74px, Gap 8→7px
- world-bottom gap 8→5px
- Footer-Links: Padding reduziert, Schrift 11→10px
- CSS-Version ?v=1001 für immutable-Cache-Busting
- SW by-v1002, APP_VER 1002
2026-05-15 21:18:44 +02:00
f962cf2f4d Fix: Chip-Sichtbarkeit geräteübergreifend konsistent
Root cause: _mergeDefaults() interpretierte fehlende Chips als 'neu'
und fügte sie wieder ein — auch bewusst ausgeblendete.

Fix:
- _saveConfig(): berechnet cfg.hidden = alle Default-Chips die keiner
  Welt zugewiesen sind; wird mit der Config auf dem Server gespeichert
- _mergeDefaults(): prüft hidden-Set und allAssigned-Set; fügt nur echte
  Neu-Chips ein (nicht in hidden, nicht bereits anderer Welt zugewiesen)
- Verhindert auch Doppelzuweisung wenn ein Chip zwischen Welten verschoben

SW by-v1001, APP_VER 1001
2026-05-15 19:08:34 +02:00
be12550df1 Fix: Lost-Hund — kein Doppeleintrag nach Sync, pulsierender Marker, Verwerfen-Button, 20km-Alert
- Deduplication in _loadReports(): Pending-Einträge die bereits auf dem Server
  sind (Race-Condition beim Sync) werden automatisch aus dem Pending-Store entfernt
- Verwerfen-Button für offline-gespeicherte Meldungen (pending), Notiz-Button nur
  für Server-Einträge sichtbar
- Pulsierender Kreis-Marker (CSS @keyframes by-lost-ping) statt statischem Pin;
  Pending-Einträge in Orange, Server-Einträge in Rot
- Card-Click für pending deaktiviert (kein Detail-Modal für unsynchronisierte Daten)
- worlds.js: Alert-Radius für vermisste Hunde von 5 auf 20 km erhöht (wie Giftköder)
- SW by-v990, APP_VER 990
2026-05-15 17:37:16 +02:00
d20e63496c Feat: AGB-Link im Footer (Welt-Welt) + AGB-Checkbox im Upgrade-Modal
- worlds.js: 'Datenschutz · AGB' in der Welt-Welt-Fußzeile
- settings.js: AGB-Checkbox über Widerrufs-Checkbox; beide müssen gecheckt sein bevor 'Anfrage senden' aktiv wird
2026-05-15 16:19:46 +02:00
07db68aea2 Fix: Geburtstag aller Hunde + Kotbeutel-Stationen in Stats (SW by-v962)
- worlds.js: bdayDog = _dogs.find(...) — Geburtstag gilt für alle Hunde, nicht nur den aktiven
- Banner, KI-Call, "Was hat sich X gewünscht?" nutzen bdayDog.name
- stats.py: kotbeutel-Count aus user_map_pois WHERE type='kotbeutel'
- landing: Stats-Band 5. Kachel "Kotbeutel-Stationen"
2026-05-14 22:00:52 +02:00
2b672c89df Fix: Welten refresh nach Foto-Upload — _refreshPending Flag (SW by-v936)
show() re-renderte nur bei User-Wechsel. Wenn refresh() während unsichtbarer Welten
aufgerufen wurde, blieb das alte Bild beim Zurücknavigieren.
Fix: _refreshPending=true wenn !_visible; show() rendert bei nächstem Aufruf neu.
2026-05-14 12:28:03 +02:00
3585958c47 UX: Hinweis 'Welten bearbeiten' im Ausgeblendete-Funktionen-Sheet (SW by-v929) 2026-05-14 11:41:46 +02:00
00457f52f9 Fix: Datenschutz Hintergrundbild + Dog-Refresh nach Anlegen (SW by-v928)
- dogs.py: welcome-dashboard Foto-Queries filtern jetzt auch nach user_id
- worlds.js: Background Cache-Key enthält user_id (kein Cross-User Leakage)
- worlds.js: Worlds.refresh(appState) neu
- dog-profile.js: Worlds.refresh() nach Hund anlegen aufrufen
2026-05-14 11:35:53 +02:00
a27b8ea5b4 Fix: P/Z-Badges komplett aus allen Welt-Views entfernt (SW by-v924)
- _renderJetzt: false,false statt f.pro/_isRoleBasedPro/f.role=breeder
- _openAllChips: P-Badge entfernt
- _isRoleBasedPro() nur noch als ungenutzte Funktion (bleibt für Kompatibilität)
2026-05-14 11:07:24 +02:00
1081466704 Fix: HUND-Teaser zeigt nur kostenlose Features — Gassi durch Wurfbörse ersetzt (SW by-v923) 2026-05-14 10:56:23 +02:00
0a28c68953 Fix: P/Z-Badges nur im Welten-Einrichten-Modal für Admins (SW by-v922)
- Normale Welt-Views (JETZT/HUND/WELT): keine P/Z-Badges auf Chips
- Config-Modal: P-Badge (Pro) und Z-Badge (Züchter) nur wenn isAdmin=true
- isAdmin-Variable im _openConfigModal()-Scope ergänzt
2026-05-14 10:46:55 +02:00
3a3002aff3 Fix: Welten-Config auto-merge neuer Default-Chips — Läufigkeit erscheint automatisch (SW by-v918) 2026-05-13 20:31:27 +02:00
4a52a52cff Feature: Z-Badge für Züchter-Kacheln in Welten-Admin-Ansicht (SW by-v916) 2026-05-13 20:24:00 +02:00
b911c41583 Feature: Läufigkeit in HUND-Welt-Kacheln (nur Züchter) + laeufi in hund-Liste (SW by-v915) 2026-05-13 20:21:19 +02:00
bda61a0e40 Feature: Trauer-Feature, Futter-Verträglichkeit, Multi-Hund-Fixes, Wetter-Ort (Sprint 47)
- dog-profile.js: Verstorben-Button, Gedenkseite, KI-Abschiedstext
- database.py: futter_eintraege/reaktionen, route_dogs, exercise_progress.dog_id
- routes/ernaehrung.py: Futter-Verträglichkeit mit 20 Reaktionstypen + Analyse
- routes/routen.py: route_dogs Many-to-Many, Routen editierbar
- routes/training.py: exercise_progress per dog_id
- routes/ki.py: /ki/abschied Trauer-KI
- weather.py: Nominatim Ortsname parallel geladen
- ui.js: dogChip/bindDogChip, visualViewport-Modal
- api.js: gedenken, gedenkseite, futter-Methoden, route_dogs
- worlds.js: Ortsname im Wetter-Chip
- uebungen.js: _progressLoaded-Flag, dog-spezifischer Fortschritt
- trainingsplaene.js: dog_id Unterstützung
- diary.js/health.js: P-Badge Cleanup
- map.js: Wetter-Ort-Anzeige entfernt
- wetter.js: Ort in Wetter-Detail
2026-05-11 19:28:38 +02:00
265d3d4fe2 Fix: HUND-Welt Avatar-Klick setzt activeDog korrekt vor dog-profile Navigation (SW by-v856) 2026-05-11 17:30:26 +02:00
79fa5684b9 Feature+Fix: Referral-Admin, Pro-Gates, Karten-Layer, onDogChange, Staging-Media (SW by-v855)
Features:
- Admin: Referral-Tab (Virality Factor, Top-Werber, letzte Einladungen)
- Karte: Regenradar (RainViewer, zoom→7, color=4), Temperatur-Layer (OWM) mit Zahlen-Grid + Legende
- Wetter-Chip: Umschwung-Warnung bei ≥40%-Sprung in Niederschlagswahrscheinlichkeit
- Freundschaftsanfragen: Accept/Decline direkt in Notifications (kein Pro nötig)
- Freunde-Seite für Standard-User freigeschaltet

Pro-Gates:
- KI-Trainer, Routenvorschläge, Regenradar, Temperatur-Layer jetzt Pro-Feature
- Pro-Badge (P) auf Chips für Admins/Mods in allen Welten + Welten-einrichten
- Oranger Banner auf Pro-Seiten für Admin/Mod/Manager

Bugfixes:
- onDogChange: uebungen.js (Cache leeren + _render), trainingsplaene.js (war leer)
- robots.txt vereinfacht (nur Disallow, kein Allow-Durcheinander)
- Hintergrund-Foto: Querformat-Filter korrigiert (kein Fallback auf Hochformat)
- Staging Media: FileResponse mit korrektem MIME-Type, no-cache statt immutable
- Staging Docker: MEDIA_DIR=/data/media + /prod-media:ro Fallback-Handler
- Staging-Fix: Bild-Upload auf zweitem Hund (war Read-only file system)
2026-05-11 17:23:29 +02:00
70af387147 Feature: User-Feedback, Regen-Uhrzeit im Wetter-Chip, Admin-Karten klickbar (SW by-v833)
- Feedback-Modal im Settings (Kategorie + Text → E-Mail an support@banyaro.app)
- Wetter-Chip (Karte + Gassi-Score): zeigt nächste Regenstunde ab ≥20% Wahrscheinlichkeit
- Gassi-Score-Chip: zweizeilige Wetter-Info, linksbündig, volle Chipbreite
- Admin-Übersicht: Stat-Karten anklickbar → navigiert direkt zum jeweiligen Tab
- ui.js: visualViewport-Listener hebt Modal über Tastatur (alle Modals)
- api.js: Pydantic v2 Array-Detail korrekt als Fehlermeldung extrahiert
- map.js: Wetter-Fallback über watchPosition wenn getCurrentPosition scheitert
- Update-Loop-Fix: index.html ?v= synchron mit APP_VER halten (alle 4 Stellen)
2026-05-10 12:52:55 +02:00
97a03ce006 Fix: SW-Update nuklear (unregister all), touch-action pan-y für Scroll, /force-update Route, Geburtstags-KI user_id, konto-loeschen Import (SW by-v791) 2026-05-09 18:09:53 +02:00
2ff6d4dfe4 Feature: Hintergrundbild Portrait=Panorama (track/300vw) vs Landscape=Vollbild (overlay/100vw) mit Orientation-Listener (SW by-v784) 2026-05-08 18:58:31 +02:00
247ded6103 Fix: Hintergrundbild auf worlds-overlay statt worlds-track — cover statt 100%-Track-Breite (war 3x überzoomt) (SW by-v783) 2026-05-08 18:51:43 +02:00
e0fb6a78e4 UX: Geburtstags-Banner Emojis → Phosphor Icons (confetti, cake/gift, sparkle, balloon, star, magic-wand) (SW by-v782) 2026-05-08 18:47:49 +02:00
34fe59a672 Fix: Geburtstags-KI — Rate-Limit entfernt, KI_MODE=cloud auf Staging, bessere Fehlermeldungen (SW by-v781) 2026-05-08 18:41:02 +02:00
9ebd40aaae Feature: Geburtstags-KI — 2 Modi (morgen: Ideen, heute: Hundeperspektive), DB-Cache, Abend-Tagebuch-Hinweis (SW by-v780) 2026-05-08 18:24:27 +02:00
5664616a2a Fix: Welten-Config — Sicherheitsnetz entfernt (Rolle-Chips ausblendbar), Duplikat-Schutz (SW by-v778) 2026-05-08 15:27:03 +02:00
55ae22615d Feature: Geburtstags-Banner mit Feuerwerk-Animationen im world-reminder Stil (SW by-v777) 2026-05-08 13:20:03 +02:00
662190e308 Feature: Geburtstags-Banner in HUND-Welt — heute & morgen, mit Alter und Animation (SW by-v776) 2026-05-08 13:16:51 +02:00
ce14bb1d2c Refactoring: Inline-Styles → CSS-Klassen (worlds.js, dog-profile.js, settings.js) — 20 neue w3-/by-Klassen (SW by-v773) 2026-05-08 12:22:04 +02:00
3b8c9a72d8 UX: Wetter-Chip Subtext 9px/75% — kleiner als wj-chip-val, besser lesbar als 50% (SW by-v772) 2026-05-08 12:02:56 +02:00
08382de8cb UX: Wetter-Chip Temperatur/Regen-Text als wj-chip-val — gleiche Lesbarkeit wie Nachbar-Chips (SW by-v771) 2026-05-08 11:30:50 +02:00
572fbf642f Fix: Wetter-Chip ohne farbigen Rand, Update-Prüfung nutzt APP_VER+API+location.replace('/') (SW by-v769) 2026-05-08 11:22:55 +02:00
4a6c056742 Feature: Schnell-Gassi pingt nur noch Streak, kein Tagebucheintrag mehr (SW by-v768) 2026-05-08 11:17:38 +02:00
7d89ed8bd2 Fix: Schnell-Gassi zeigt korrekte Meldung wenn offline gequeuet statt falsches Erfolgs-Toast (SW by-v764) 2026-05-08 10:15:31 +02:00
cf2191efeb Fix: 'Weitere Funktionen' zeigt nur ausgeblendete Chips — bereits konfigurierte werden gefiltert (SW by-v752) 2026-05-07 16:43:30 +02:00
bd7b694874 Feature: FAB → 'Alle Funktionen' — kompaktes Chip-Grid aller verfügbaren Seiten (SW by-v751) 2026-05-07 16:39:22 +02:00
fdbd5448bc Fix: FAB-Overlay z-index 300→460 — war hinter worlds-overlay (z-index 450) versteckt (SW by-v750) 2026-05-07 15:51:03 +02:00