22225d5717
Pflege: Fell schneiden vs. trimmen + Tagebuch Medien-Button nach oben
...
- dogs.py: Pflegeart-Filter (trimmen/schneiden) anhand Rassen-Beschreibung
- dog-profile.js: Badge '✂️ Schneiden' / '✋ Trimmen' bei Fell-Kategorie
- diary.js: Fotos/Videos-Button direkt nach Textfeld (vor Ort und Meilenstein)
- ki.py: Standardmodell auf claude-sonnet-4-6 umgestellt
2026-04-25 08:21:49 +02:00
8d5c7a19b1
Admin: KI-Anfragen nach Quelle aufschlüsseln (cloud/local/luna)
...
- ki_daily_calls: PK auf (user_id, date, source) erweitert + Index; Migration
baut Tabelle mit neuer Struktur neu auf, behält Altdaten als 'cloud'
- ki.py: return_source=True-Parameter gibt (text, 'cloud'|'local') zurück
- training.py: ki_source aus ki.complete() auslesen, in DB speichern
- social.py: _ki_complete_tracked() zählt Luna-Anfragen mit source='luna';
alle Content-Endpoints (generate, evaluate, training-tip, breed-of-day,
pflege-tipp) nutzen tracking-Variante
- admin.py: Stats aufgeteilt in ki_cloud/ki_local/ki_luna je heute+Monat
- admin.js: KI-Karte zeigt 9 Zeilen mit ☁️ Claude / 🖥️ LM Studio / 🌙 Luna
- SW by-v359, APP_VER 344
2026-04-25 08:20:29 +02:00
74b6c03bb3
Social: Modernes Design — Cards, Pill-Buttons, Shadows, SW by-v359
2026-04-25 08:19:45 +02:00
8ba8f4dfa3
Moderations-Panel: neue Seite /moderation für Mods und Admins
...
- Backend: routes/moderation.py mit GET /stats, /reports, /users, /fotos
und PATCH-Endpoints für Ban/Unban und Foto-Review
- Frontend: pages/moderation.js mit 4 Tabs (Übersicht, Fotos, User, Forum)
- Sidebar-Eintrag (nur für Moderatoren/Admins sichtbar, gelb)
- Page in index.html registriert, pages-Objekt in app.js ergänzt
- Router in main.py eingebunden (/api/moderation)
- SW-Cache by-v357, app.js/ui.js/api.js auf v=94
2026-04-25 08:19:19 +02:00
ba5547f993
Pflege-System: Pflegetipps im Hundeprofil + Rassen-Autocomplete
...
- GET /api/dogs/{id}/pflege: rassenspezifische Pflegetipps
- pflege_tipps DB-Tabelle (43 Tipps, 10 Kategorien) geseedet
- dogs.rasse_id für Wiki-Verknüpfung (Migration)
- Hundeprofil: Tipp des Tages + alle Tipps aufklappbar
- Hundeprofil-Edit: Rassen-Autocomplete mit Wiki-Match-Badge
- Social: Post-Bestätigung (Gepostet!-Button, Quick-Mark, Pending-Banner)
- Social: Pflegetipp-Button (allg. + rassenspezifisch)
- Social: Diversitäts-Check, Kategorie-Tagging
- Social: 104 Übungen, Übungsübersicht-Modal
- Admin: Social-Media-Tracking-Sektion
- SW by-v356, APP_VER 343
2026-04-24 20:56:47 +02:00
548210b908
Social: 104 Übungen in 7 Kategorien + Übungsübersicht-Modal
...
Grundkommando(10) Tricks(18) Problemverhalten(12) Mental(8)
Körperpflege(7) Hundesport(6) Welpe-Basics(5) + erweitert auf 104 total
Modal zeigt alle Übungen mit Nutzungs-Counter, SW by-v350
2026-04-24 20:22:40 +02:00
1cb0c2df77
Social: Trainingstipp-Generator, Übungen in DB, 3 Stil-Varianten
...
- training_exercises Tabelle mit 13 Übungen aus App-Bibliothek
- POST /social/training-tip: Stil-Varianten tutorial/community/aspirational
- exercise_id in social_content für Wiederholungs-Tracking
- Admin-Stats: Social-Media-Sektion mit Status-Übersicht + letzte 10 Posts
- SW by-v349, APP_VER 336
2026-04-24 20:13:22 +02:00
0df6d569c1
Social Media Manager: Route, DB, KI-Prompts, Frontend, Rolle; SW by-v338
2026-04-24 19:13:30 +02:00
d90d4f1eeb
breed_enricher: Wikipedia-grounded via Haiku, ki_source-Spalte, Gemma-Reset; SW by-v337
2026-04-24 18:43:31 +02:00
eb6eaea04e
SW by-v336, APP_VER 323 — admin Qualitätsbewertungs-Button
2026-04-24 18:36:22 +02:00
fdca0a7ecc
admin: Qualitätsbewertungs-Button mit Scores-Tabelle
2026-04-24 18:33:02 +02:00
988cffcbd4
Karte refresh(): _scheduleOsmLoad() aufrufen — OSM-Marker nach Seitenwechsel ohne Pan, SW by-v335
2026-04-24 11:19:40 +02:00
005552042d
Karte: invalidateSize() in refresh() — leere Karte nach Seitenwechsel, SW by-v334
2026-04-24 11:07:22 +02:00
9151c14306
Fix Karte-Legende Desktop: #page-map Spezifität (components.css Überschreibung), SW by-v333
2026-04-24 11:00:55 +02:00
c503737fb1
Desktop Tab-Grid: Gesundheit (5 Sp.), Admin (4 Sp.), Karte-Legende (8 Sp.), SW by-v332
2026-04-24 10:58:12 +02:00
7ac421fcf9
Routen-Validierung: >15 km/h Ø zählt nicht für Stats/Trophäen, SW by-v331
2026-04-24 09:46:15 +02:00
9213b58d3c
Fix App.checkNearbyAlerts Export, Karte refresh nach Meldung, Button 'Absenden', SW by-v330
2026-04-24 09:29:23 +02:00
5a755e4922
Burger-Badge via Alerts-Check, Alert-Linie stärker, Linie weg nach Erledigen, SW by-v329
2026-04-24 09:17:15 +02:00
fc7d743153
Badge-System: personal/general Split, Punkte ohne Zahl, SW by-v328
2026-04-24 08:39:41 +02:00
0a3ad2207e
Badges: Chat-Punkt am Avatar, Notif-Punkt am Burger, Aktuelles aus Sidebar, SW by-v327
2026-04-24 08:33:32 +02:00
546551a8db
Zecken-Icon neu: großer Körper, kurze Beine, display:inline fix, SW by-v326
2026-04-24 08:20:25 +02:00
acd93e83e6
Zecken-Icon ohne Dreieck, kein Text, Statusleiste einzeilig (nowrap), SW by-v325
2026-04-24 08:17:48 +02:00
78d0f4289a
Zecken-Icon: SVG Warndreieck mit Zecken-Silhouette (Phosphor-Stil), SW by-v324
2026-04-24 08:14:00 +02:00
544307e443
Wetter: Regenwahrscheinlichkeit im Chip, SW by-v323
2026-04-24 08:08:20 +02:00
d72ee6f89f
Fix Wetter-API-Pfad (/api/api/ → /api/), API.weather.get(), SW by-v322
2026-04-24 08:05:44 +02:00
d32b802649
Wetter in Statusleiste (war hinter Legende versteckt), SW by-v321
2026-04-24 08:03:13 +02:00
0461f936ce
Wetter-Chip auf Karte + Bugfix private Routen zählen für km-Stats
...
- GET /api/weather?lat=&lon= (Open-Meteo, 30-min TTL-Cache)
- Zecken-Warnung regelbasiert: März–Okt + Temp > 7°C
- Karte: Wetterchip oben rechts nach GPS-Fix
- stats.py + achievements.py: is_public-Filter entfernt —
private Routen zählen jetzt für eigene km/Achievements
- SW by-v320, APP_VER 308
2026-04-24 07:59:15 +02:00
71e588a240
Security Nice-to-Have: Dockerfile, Magic-Bytes, Path-Traversal, TABLE_MAP, Deps
...
- Dockerfile: non-root user appuser, chown /data + /app
- media_utils: validate_upload() Magic-Byte-Check (JPEG/PNG/GIF/WebP/MP4/WebM)
- media_utils: safe_media_path() Path-Traversal-Schutz beim Löschen
- diary/health/dogs: safe_media_path() statt os.path.join + lstrip
- diary: validate_upload() vor jedem Medien-Upload
- forum: _LIKE_TABLE dict statt dynamischer String-Interpolation
- requirements: uvicorn 0.34, PyJWT 2.10.1, pydantic 2.10.6, bcrypt 4.3, httpx 0.28.1, anthropic 0.49
- SW by-v319, APP_VER 307
2026-04-23 18:42:05 +02:00
15f854d96c
Session 2026-04-23: Security, Content-Schutz, Wiki-Temperament-Migration
...
Security (9 Fixes):
- JWT_SECRET Pflicht-Check beim Start (Production)
- Rate-Limit: Login (10/5min), Register (5/h), KI-Training (10/h), Giftköder (3/h)
- KI-Training-Endpoint: Auth-Pflicht hinzugefügt
- Private Profile aus Freunde-Suche gefiltert
- OG-Tags XSS mit html.escape() gesichert
- Globales File-Upload-Limit 20 MB (Middleware)
- E-Mail-Maskierung für Moderatoren im Admin-Panel
- IP-Blocklist in ratelimit.py
Content-Schutz (4 Schichten):
- robots.txt: /api/ komplett Disallow, SSR-Seiten Allow
- Rate-Limit auf /api/wiki/rassen (60/min) + Detail (30/min)
- Honeypot /api/wiki/trap + unsichtbarer Link in index.html
- Wasserzeichen in KI-Enricher-Prompt
Wiki Temperament-Migration:
- 60-Wort Übersetzungsmap EN→DE
- Datenmüll-Filter (hunderasse, dog breed etc.)
- translate_existing_temperaments() + Admin-Button
- SW by-v318, APP_VER 306
2026-04-23 18:34:05 +02:00
71a1371b44
Session 2026-04-23: Desktop Multi-Column, Forum, Fixes, Analytics
...
- Desktop ≥1024px: page-container 680→860px
- Walks: Liste+Karte nebeneinander, View-Toggle ausgeblendet
- Forum: Rubriken 2-zeilig via CSS Grid (ceil(n/2) Spalten, zentriert)
- Welcome: max-width 920px, Feature-Sections 2-spaltig
- Wissen: Toggle-Mechanismus entfernt, Items immer sichtbar
- Übungen Plan-Karten: vertikal statt horizontal gestapelt
- Admin Analytics: Umami v2 gibt plain numbers statt {value:X}
- CSS-Spezifität: #page-forum nötig wegen layout.css < components.css
- SW by-v312, APP_VER 300
2026-04-23 17:52:28 +02:00
44081a6b9d
Session 2026-04-22: Training, Fixes, KI-Cloud, Dark-Mode
...
Training-System:
- Einheit-Dialog Bugs behoben (UI.toast callable, _dogId via _appState, activeDog.id)
- Virtueller Trainer (rein statistisch): üben/festigen/entdecken/levelup
Empfehlungen auf Basis exercise_progress + sessions, Prognose bis 80%
- Stand erfassen Modal: alle Übungen auf einmal setzen (onboarding)
- Erfolgsindikatoren auf Karten: Ø-Quote + Trend-Pfeil + Anzahl Sessions
- exercise_progress → synthetische Stats im Trainer (ohne Sessions nutzbar)
- Levelup: Tricks empfehlen wenn ≥4 Grundkommandos sitzen
- Kommandos & Fähigkeiten im Hundeprofil + öffentlichem Profil
- 2 neue Problemverhalten-Übungen: Bellen/Kläffen, Enttriggern
Mobile/UI-Fixes:
- Übungskarten: Name + Difficulty oben, Buttons eigene Zeile (kein Umbruch)
- Trainingsgrundlagen: Padding in allen Karten, Hinweis-Boxen Dark-Mode-sicher
- Tab-Sichtbarkeit: Trainer/Suggestions nur auf Übungs-Tabs
- Tagebuch FAB (Neu-Eintrag Button) + Quick-Add Eintrag
- FAB Abstand fix (nav-bottom-height + safe-bottom)
- Suggestion-Karten rgba (Dark-Mode)
- routes.js + uebungen.js: alle Hellfarben → rgba (Dark-Mode-sicher)
- ui.js: UI.toast als callable Function-Object (war nur plain Object)
KI & Backend:
- KI_MODE=cloud + ANTHROPIC_API_KEY gesetzt
- ki.py: Cloud-Fallback wenn local nicht erreichbar + KI_MODE=cloud
- KI-Trainer Tageslimit 10 Anfragen/User + ki_daily_calls Tabelle
- Admin-Panel: KI-Nutzung (heute/Monat/User)
- Status-Report Fix (lost-Tabelle) → 06:00 + 18:00 täglich
- Wiki-Anreicherung läuft jetzt (50 Rassen Startup, 20/Nacht)
- landing.html: Trainings-Features in JSON-LD + Feature-Karten
2026-04-22 19:41:22 +02:00
2b442ebd98
Admin: Moderation-Tab für Züchter + Wiki-Fotos (SW by-v280)
2026-04-21 19:44:06 +02:00
180de32e57
Session 2026-04-21: SEO, Wiki-Anreicherung, Training, Lober
...
SEO & Crawler:
- robots.txt, llms.txt, sitemap.xml (508 Seiten bei Google)
- SSR-Seiten: /info, /wiki/rassen, /wiki/rasse/{slug}, /knigge
- Open Graph, JSON-LD, Breadcrumbs in index.html
Navigation:
- Training unter "Mein Hund", Wissen collapsible
- Welcome-Seite und Landing-Page auf 5-Gruppen-Struktur
Wiki:
- KI-Anreicherung (Claude API): beschreibung, vorkommen_de, Steckbrief
- "So einen hab ich" / Züchter-Verzeichnis
- Scheduler: 50 Rassen beim Start, 20/Nacht
Training:
- Session-Logging (Erfolgsquote, Stimmung, Zufriedenheit)
- Virtueller KI-Trainer (6h-Cache)
- Trainingskalender (Habit-Tracker)
- Top-Training → automatischer Tagebucheintrag
- Gamification ohne Druck: Badges, Streak, Stats
Fortschritts-Lober:
- Jeden Montag 09:00: Claude schreibt Lob-Text pro Hund
- Push + Karte im Tagebuch
Monitoring:
- 4× täglich Status-Mail mit Scheduler-Status + Wiki-Fortschritt
2026-04-21 19:38:20 +02:00
65d1cf6c7f
Navigation, Karten-FABs, Nearby-Alerts
...
- Bottom-Nav neu: Karte | Routen | + | Tagebuch | Forum
- + reduziert auf: Giftköder, Gassi-Treffen, Verlorener Hund
- Notification-Badge auf User-Avatar (Header)
- Nearby-Alerts: Nav-Leiste pulsiert rot/orange bei Giftköder/vermisstm Hund in 20km
- SW postMessage bei poison/lost_alert → sofortiger Alert-Check
- Karten-FABs: nur Marker setzen + Standort (Route aufzeichnen + Offline entfernt)
- SW by-v272, APP_VER 262
2026-04-20 19:46:34 +02:00
5141ba9969
Session 2026-04-20: Medien-Konvertierung, Umami Analytics, Username/Privacy
...
- HEIC→JPEG, MOV/AVI→MP4 Konvertierung bei allen Upload-Endpoints (media_utils.py)
- ffmpeg im Docker-Image, Video-Thumbnails (extract_video_thumb, poster-Attribut)
- Google Analytics entfernt, Umami self-hosted eingebunden (index.html, datenschutz.js)
- Admin-Panel Analytics-Tab: Stat-Cards, Sparkline 7 Tage, Top-Seiten (Umami-API-Proxy)
- Admin-Panel Tab-Icons korrigiert (aus vorhandenem Phosphor-Sprite)
- users.real_name Spalte: Username öffentlich, echter Name privat und optional
- Registrierung: Label "Benutzername", Leerzeichen verboten, Profanity-Blockliste
- Datenschutzerklärung: GA-Abschnitt durch Umami-Text ersetzt
2026-04-20 18:36:58 +02:00
9a78121a3e
Session 2026-04-19: Navigation, Kompass, Übungsfortschritt
...
Routen-Navigation:
- POI-Marker: farbige Kreise mit Phosphor-Icons (wie Hauptkarte)
- Screensaver: Navi-Pfeil dreht sich via DeviceOrientationEvent (iOS+Android)
- Pfeil-Dämpfung: EMA α=0.12 mit Wrap-Around
- GPS-Distanz-Bug: Fortschritt nur wenn <500m zur Route
- fitBounds: User-Position nur wenn <20km von Route
- Screensaver: "zur Route" vs "verbleibend" kontextabhängig
- Richtungspfeile entlang Route (blau, max 7 Stück)
- Umkehren ins Route-Detail verschoben, Detail-Map rebuildet sich
- rk-header z-index:10 (Leaflet-Tiles liefen drüber)
- 2-Sek. Screensaver-Entsperrung
km-Tracking:
- route_walks Tabelle
- POST /api/routes/{id}/walked (≥50%)
- total_km = erstellte Routes + gelaufene route_walks
- Toast bei neuem Badge
Übungsfortschritt:
- exercise_progress + training_plan_progress Tabellen
- GET/POST /api/training/progress, /plan-progress, /suggestions
- uebungen.js: API-first + localStorage-Fallback + Auto-Migration
- Empfehlungs-Banner (regelbasiert)
- Toast bei "sitzt"
2026-04-19 20:33:01 +02:00
390176383f
Fix: Routen-Header exakte Höhen — height:46px statt min-height, View-Toggle 44×44px quadratisch
2026-04-19 12:31:32 +02:00
385b4540b3
UX: Routen-Header alle Zeilen gleiche Höhe 46px, Inline-Styles durchgängig
2026-04-19 12:28:18 +02:00
4030da3776
Fix: Bottom-Nav z-index 300→700 (über Leaflet), Routen-Buttons auf refresh() aktualisiert
2026-04-19 12:25:33 +02:00
79e88b43ca
UX: Routen-Header Buttons größer (46px Höhe, mehr Padding)
2026-04-19 12:09:34 +02:00
d374b5af61
Fix: Routen-Header Buttons mit Inline-Styles (cache-unabhängig wie Pills)
2026-04-19 12:07:37 +02:00
98dd5d74ee
UX: Routen-Header aufgeräumt — 3 saubere Zeilen, einheitliche Buttons
2026-04-19 12:05:14 +02:00
26bcd07f84
UX: Routenübersicht-Cards nutzen gleiche Pill-Darstellung wie Detail
2026-04-19 12:00:39 +02:00
01a499b740
Fix: Pills mit Inline-Styles (CSS-Cache-unabhängig) + CSS-Version gebumpt
2026-04-19 11:56:47 +02:00
eabc88f0b8
Fix: Hunde-Tauglichkeit Labels vereinfacht (Leine/gut/sehr gut/premium)
2026-04-19 11:47:26 +02:00
54a6615ebb
UX: Route-Pills kompakter, kürzere Texte, Rahmen sichtbar
2026-04-19 11:44:31 +02:00
167c8018bb
UX: Route-Detail Pills text-only, keine Icons, Farben nach Bedeutung
2026-04-19 11:38:52 +02:00
f00084deb8
Fix: Nearby-Gruppen standardmäßig eingeklappt
2026-04-19 11:34:06 +02:00
9ba78f3b16
Fix: Mehrfachauswahl bei Routen-Fotos (multiple attribute + loop)
2026-04-19 11:31:38 +02:00
3144e100f3
UX: Nearby-POIs einklappbar + klickbar + nur relevante Typen
...
- NEARBY_TYPES: Bänke/Wasserstellen entfernt → nur Restaurant, Tierarzt, Zoobedarf
- Gruppen einklappbar (Chevron dreht sich)
- POI-Namen anklickbar → öffnet Apple Maps/Google Maps am POI-Standort
- CSS: Card-Stil für Gruppen, gute Touch-Targets
2026-04-19 11:29:46 +02:00