7b25eac286
Fix: envelope-simple Icon zum Sprite hinzugefügt für Outreach-Tab, SW by-v568
2026-04-30 19:14:10 +02:00
b6258db6bc
Feature: Admin Outreach — E-Mail-Versand via Hetzner SMTP, Vorlagen, Log, SW by-v567
2026-04-30 19:10:54 +02:00
47c0590364
Fix: Partner-Tab — is_founder/is_partner in Admin-Users-Liste + Checkboxen vorausfüllen + founder_number in /me, SW by-v554
2026-04-30 14:59:04 +02:00
c2a5fbba7d
Fix: /api/-Prefix in gruender.js+settings.js entfernt; Grant-Fehler sichtbar, SW by-v553
2026-04-30 14:45:16 +02:00
2f1dfd481c
Fix: Partner-Tab — /api/-Prefix entfernt (API.get fügt es auto hinzu), SW by-v551
2026-04-30 14:37:25 +02:00
62b3138c41
Fix: Partner-Tab Usersuche nutzt /api/admin/users?q= (bestehende Route), SW by-v550
2026-04-30 13:58:56 +02:00
df104c2c57
Fix: Partner-Tab Usersuche — null-Guard + Mindestzeichen 2→1 für kurze Namen, SW by-v549
2026-04-30 13:53:51 +02:00
558fdaa49e
UX: Admin Partner-Tab — Anleitungsbox mit Schritt-für-Schritt-Erklärung, SW by-v548
2026-04-30 13:46:55 +02:00
6f63a98a30
Fix: Admin Partner-Tab — null-Guard für codes, Tab-Label auf 'Partner' gekürzt, SW by-v547
2026-04-30 13:41:37 +02:00
e57c6db013
Feature: Partner-Codes + Gründer-Lizenz-System für Influencer-Kooperationen
...
- partner_codes Tabelle: Code, Label, max_uses, grants_founder, uses-Counter
- users: is_founder + is_partner Flags (DB-Migration + auth.py SELECT)
- Registrierung: Partner-Code löst Gründer-Lizenz aus (vor User-Referral geprüft)
- API: GET/POST/DELETE /api/admin/partner/codes, POST /api/admin/partner/users/{id}/grant
- API: GET /api/partner/codes/{code}/info (öffentlich, für Registrierungsvalidierung)
- API: GET /api/admin/users/search (Name-Suche für Admin-UI)
- Admin-Tab "Partner & Codes": Code anlegen, Stats, User-Status vergeben
- Registrierungsformular: Einladungscode-Feld mit Live-Validierung
- Settings: Gründer (lila) + Partner (blau) Badge neben Kostenlos/Plus
- SW by-v515, APP_VER 492
2026-04-29 21:20:16 +02:00
977fbeb0fd
Feature: Analytics Jahres-Balkendiagramm — Seitenaufrufe + Neuanmeldungen 12 Monate — SW by-v502, APP_VER 479
2026-04-29 14:32:10 +02:00
fe2e718827
Feature: ORS Admin-Card — Wochensumme + 30-Tage-Gesamt im Header — SW by-v491, APP_VER 468
2026-04-29 11:25:11 +02:00
e22dcc3c3d
Feature: Analytics 30-Tage Dual-Chart, Referrers, Umami-Credentials — SW by-v489, APP_VER 466
2026-04-29 11:06:18 +02:00
dc737d0c48
Feature: KI-Nutzung im Admin mit 30-Tage-Sparkline + Top-Nutzer-Tabelle — SW by-v486, APP_VER 463
2026-04-29 10:42:00 +02:00
392359df45
Feature: ORS-Stats im Admin-Panel — Tagesverbrauch/2000, 30-Tage-Sparkline, Top-Nutzer — SW by-v485, APP_VER 462
2026-04-29 10:10:59 +02:00
91340be5a3
Feature: Vollständige Züchter-Rolle — Antrag, Würfe, Stammbaum, Genetik
...
Basis-Features (Schritte 1–11):
- Züchter-Antrag mit Dokument-Upload, Admin-Prüfung, E-Mail-Benachrichtigungen
- Öffentliches Züchter-Profil + Karten-Marker (lila, certificate-Icon)
- Wurfverwaltung: Würfe, Welpen, Gewichtsverlauf, Foto-System
- Wurfbörse (öffentlich) mit Filtersuche nach Rasse/Status
- Läufigkeits-Tracker: Deckdatum + Wurftermin (+63 Tage, nur für Züchter)
- Interessenten-Chat: Kontakt-Button in Wurfbörse und Züchter-Profil
- Sidebar-Einträge: Zuchtkartei + Wurfverwaltung für Züchter/Admin
Stammbaum & Genetik (Schritte 1–8):
- Zuchtkartei: Hunde-Stammdaten mit Vater/Mutter-Verknüpfung
- Stammbaum-Visualisierung: 4 Generationen, horizontales CSS-Grid
- Gesundheitstests (HD, ED, OCD, Augen…) mit farbigen Ergebnis-Badges
- Genetische Tests (MDR1, PRA, DM…): clear/carrier/affected
- Titel & Auszeichnungen (CAC, CACIB, IPO…)
- Probeverpaarung: IK-Berechnung nach Wright + Ampel-Bewertung
- Teilen-Link für öffentliche Hunde-Profile
- Kaufvertrag: druckbares HTML-Dokument pro Welpe
Technisch: 4 neue Route-Dateien, 5 neue Page-Module, 11 neue DB-Tabellen,
icons shield-check + certificate + tree-structure im Sprite — SW by-v465, APP_VER 444
2026-04-28 18:25:21 +02:00
664fb2a79b
Admin: APP-Version + SW-Version im System-Panel — SW by-v439, APP_VER 418
2026-04-26 17:44:45 +02:00
5bd07d9598
Media-Previews: _preview.jpg bei Upload, alle Listenansichten — SW by-v437, APP_VER 416
...
- media_utils: generate_preview() (Pillow, max 800px, JPEG q72) + preview_url_from()
- diary.py: Preview beim Bild-Upload, preview_url in media_items + cover_preview_url
in Kalender-, Karten- und Listenabfragen
- forum.py: Preview in _save_upload(), foto_preview_url in Thread-Listen
- Frontend diary.js: cover_preview_url in Listenansicht, Mediengalerie, Kalender,
Karten-Marker + Popup; onerror-Fallback auf Original
- Frontend forum.js: foto_preview_url in Thread-Karten-Thumbnails
- Admin: 'Previews generieren (Bestand)' Button → POST /admin/media/generate-previews
2026-04-26 17:30:00 +02:00
570dcd4e93
KI-Tracking vollständig, Cloud-Limit 20/Woche, Statusmail täglich 06:00 — SW by-v434, APP_VER 413
...
- ki.complete() zählt sich selbst (user_id-Parameter, _track_usage)
- CLOUD_WEEKLY_LIMIT=20, geprüft vor jedem Cloud-Call
- user_id durchgereicht in health, diary, knigge, notes, ki-route
- Admin-Panel: 7-Tage-Ansicht, Limit-Info, Top-Cloud-User-Tabelle
- Statusmail täglich 06:00 CEST statt alle 2h
2026-04-26 17:01:05 +02:00
85836e4e6e
Scheduler aufräumen: Prewarm-Job entfernt, Rassen-Seed monatlich, Admin-Panel Wiki-Label — SW by-v433, APP_VER 412
2026-04-26 16:38:07 +02:00
fd76eddfb9
Icons: Emoji/Unicode → Phosphor in 8 Dateien + 16 neue Sprite-Icons — SW by-v415
...
Sprite: arrow-up/down, bug, check-circle, ear, fish, flask, flower,
medal, question, scissors, tent, ticket, tooth, trend-up/down
poison.js: TYPEN (❓ 🎣 ☠️ ⚗️ ⚠️ ) → question/fish/skull/flask/warning
events.js: TYPEN (🎪 🏆 🎓 🐕 🛍️ 🥇 📌 ) → ticket/trophy/graduation-cap/dog/shopping-bag/medal/push-pin
dog-profile.js: Pflege-Emojis (✂️ 💅 🦷 👂 👁🐾 🦟 🌸 ❤️ 🐶 ) → Phosphor
trainingsplaene.js: (🐶 🐕 🦮 ) → dog mit SVG-Icon
health.js: ▲▼→ → trend-up/trend-down/arrow-right
uebungen.js: ↑↓→★ → trend-up/trend-down/arrow-right/star
admin.js: ✓✗ → check/x in HTML-Templates
moderation.js: ✓✗ → check/x Buttons
2026-04-26 09:26:13 +02:00
4f58a784c7
Admin: Social-Media-Tab mit Manager-Übersicht, Plattform-Auswertung und Post-Nachweis, SW by-v370
2026-04-25 10:27:39 +02:00
b608d5635f
Admin: Kachel 'Fotos freizugeben' + pending_fotos in Stats-API, SW by-v365
2026-04-25 09:44:17 +02:00
d0921a28e9
Admin-Wartung: obsolete Buttons entfernt, Enrichment-Status + Foto-Laden hinzugefügt
...
- Temperament→Deutsch-Button entfernt (0 englische Temperamente in DB)
- Gemma-Einträge-zurücksetzen entfernt (0 Gemma-Einträge, alle Claude Haiku)
- Neuer Button: Enrichment-Status (GET /api/admin/wiki/enrichment-status)
zeigt Gesamt/Angereichert/Kein-Wiki/Ausstehend/Fotos/Modelle-Verteilung
- Neuer Button: Fotos laden (POST /api/admin/wiki/fetch-photos)
führt fetch_wiki_images.py --limit 50 aus und zählt gespeicherte Fotos
- SW by-v361, APP_VER 346
2026-04-25 08:53:28 +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
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
d90d4f1eeb
breed_enricher: Wikipedia-grounded via Haiku, ki_source-Spalte, Gemma-Reset; SW by-v337
2026-04-24 18:43:31 +02:00
fdca0a7ecc
admin: Qualitätsbewertungs-Button mit Scores-Tabelle
2026-04-24 18:33:02 +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
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
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
e56183b642
Feature: Ratings, Lightbox, Forum-Standort, Notifications, Routen-Recording, Chat-Picker
...
- Bewertungssystem (ratings.py): Sterne für Sitter/Walks/Places/Routen
- Admin: Server-Log-Viewer + OSM-Cache-Statistiken
- Chat: "Neue Nachricht"-Button mit Freundesliste-Picker
- Forum: 5 neue Kategorien, Standorteingabe (locationPicker), Absende-Toast, Lightbox
- Freunde: Aktivitäts-Filter (Chips), Freundschaftsanfrage → In-App-Notification
- Sitter: locationPicker statt manuelle Koordinateneingabe + ratingStars
- Tagebuch: Bilder-Lightbox im Detail-View, iOS-Modal-Header-Fix (90svh)
- Routen: Start/Stopp-Button wechselt Zustand, nutzt Page_map.isRecording()
- Benachrichtigungen: Delete-Button sichtbar, typ-basierte Navigation, Toast-Feedback
- OSM: globales Semaphore + 429-Retry-Logic; Scheduler: München-Umland, täglich
- SW by-v225, APP_VER 202
2026-04-19 09:40:35 +02:00
10d30bf565
Sprint 18: Lost-Dog CSS, Freunde-Aktivitäts-Feed, Events-Karte
2026-04-17 23:43:35 +02:00
cfdb3fbc19
Fix: Admin Stats-Grid 2 Spalten auf Mobile, SQL-Code umbrechend
2026-04-17 23:29:40 +02:00
bfdf6ebfae
Fix: Admin-Seite Mobile-kompatibel (Tabellen scrollbar, Filter wrap, Touch-Targets)
2026-04-17 23:25:50 +02:00
92620c2c52
Sprint 18: Notification Center, Routen entdecken, Onboarding, Admin-Erweiterungen
...
- Notifications: History-Tabelle, /api/notifications Endpoints, push.py schreibt in DB
- Notifications: Page (notifications.js) mit Badge, Typen-Icons, gelesen-Markierung
- Routen: Entdecken-Modus mit Ersteller-Anzeige, Nearby-Filter, Mine/Discover Toggle
- Onboarding: Willkommens-Modal nach Registrierung, Push-Angebot nach Login
- Admin: Scheduler-Tab (Jobs anzeigen + manuell triggern), System-Health (DB/Disk/Uptime)
- Admin: Audit-Log (wer hat was wann gemacht), erweiterte Stats (Push-Abos, aktive User, Routen)
- SW: by-v152, APP_VER 125
2026-04-17 23:21:48 +02:00
b58789373c
Sprint 12: UI-Vereinheitlichung + Läufigkeits-Tracker
...
- by-tabs/by-tab: einheitliche Tab/Pill-Navigation in allen Seiten
- by-section-label, by-toolbar: einheitliche Section-Labels und Toolbars
- Design-Tokens: fehlende --c-amber, --c-primary-soft ergänzt, Fallback-Werte entfernt
- sitting.js: sitting-layout für konsistentes flush-Layout (wie walks)
- Läufigkeits-Tracker: neuer Health-Tab für Hündinnen mit Zyklusvorhersage,
Timeline vergangener Läufigkeiten, Erinnerungen und auto-berechnetem Nächst-Datum
- emptyState-Bug: icon-Parameter muss SVG sein, nicht Icon-Name (dog/bell/warning gefixt)
- SW-Cache: by-v103, APP_VER: 79
2026-04-16 22:31:33 +02:00