Commit graph

412 commits

Author SHA1 Message Date
80e3f0dc0d Fix: Burger-Hinweis auf Willkommensseite nur auf Mobile anzeigen
Klasse mobile-only ergänzt, damit der Hinweis ab 768px (Desktop-Sidebar sichtbar) ausgeblendet wird. SW by-v202, APP_VER 169.
2026-04-18 13:51:24 +02:00
e97bd744e9 Feature: Kamera-Fotos im Tagebuch in Mediathek speichern anbieten
Nach capture-Aufnahmen erscheint Button 'Zum Fotoalbum hinzufügen'.
Nutzt Web Share API (iOS/Android) mit <a download> als Fallback.
UI.saveToAlbum() als wiederverwendbare Utility in ui.js.
SW by-v200, APP_VER 168.
2026-04-18 13:35:59 +02:00
8fdca1f211 Feature: Passwort-Sichtbarkeits-Toggle in Login- und Registrier-Formular
Eye/Eye-Slash-Button neben Passwort-Felder (Phosphor Icons), schaltet type password/text um. SW by-v199, APP_VER 167.
2026-04-18 13:34:21 +02:00
370ae52138 Fix: Header zeigt aktiven Hunde-Namen, Klick navigiert zu Hund-Profil
- dog-sw-title zeigt dog.name statt hardcoded "Ban Yaro"
- Klick auf Namen im Header und Sidebar öffnet Hund-Profil (wie Avatar-Klick)
- sidebar-logo-text Handler greift nur noch beim Fallback ohne Hund
- SW-Cache by-v198
2026-04-18 13:32:58 +02:00
36622a6ed8 Fix: EXIF-Orientierung bei Foto-Upload korrigieren (dogs + profile)
ImageOps.exif_transpose() vor convert("RGB") aufrufen, damit
hochkant aufgenommene Portrait-Fotos korrekt ausgerichtet gespeichert
werden und nicht um 90° gedreht angezeigt werden.
2026-04-18 12:40:35 +02:00
f8d354749d Feature: Tagebuch Ort/POI, Foto/Video-Edit, Modal-UX, iOS-Fixes
Tagebuch — Ort/POI (DayOne-ähnlich):
- diary.location_name Spalte, DiaryCreate/Update mit gps_lat/lon/location_name
- GET /api/dogs/{id}/diary/nearby: Overpass + Nominatim (vor {entry_id}-Route)
- Mini-Karte im Edit-Formular: Leaflet lazy, Edit-Modus, SVG-Pin
- Meilenstein-Toggle: Button statt Checkbox, Filter in Toolbar
- Datenmigration: 97 Ort-Einträge aus text → location_name

Tagebuch — Foto/Video:
- Foto/Video im Edit: Ersetzen + Löschen, DELETE media endpoint
- Media-Picker: Kamera/Mediathek/Datei Buttons
- Video-Wiedergabe (<video controls> in Detail + Edit)

Modal-UX (alle Edit-Karten vereinheitlicht):
- Footer-Pattern: [Speichern vollbreit] / [Löschen][Abbrechen]
- diary, dog-profile, events, health, places, walks, settings, sitting
- Löschen aus Detail-Modal → Edit-Form verschoben

iOS Mobile-Fixes:
- Auto-Zoom: input/select/textarea font-size 16px !important
- Scroll-Through: html.modal-open + touch-action:none auf Overlay
- Kein position:fixed mehr auf body (kein Scroll-Sprung)

PWA & Icons:
- icon-512-any.png + icon-192-any.png (quadratisch, maskable)
- manifest.json: purpose any/maskable getrennt
- Gesundheits-Icon: syringe → first-aid

Import-Fix:
- _HTMLStripper überspringt video/audio/script → kein "Video nicht gefunden" mehr
2026-04-18 11:56:54 +02:00
88912e2746 Fix: Freunde-Seite Mobile — Wrapper entfernt, Annehmen-Button Icon-only 2026-04-18 00:05:43 +02:00
bf268e3ffd Fix: Mobile-Audit — Notifications Delete-Button, Health-Grid, Settings-Padding 2026-04-18 00:03:39 +02:00
bf57b69e36 Fix: Mobile-Layout friends + lost, GPS-Zeile wrappbar 2026-04-17 23:59:22 +02:00
9563edbdf5 Fix: UI.escHtml → UI.escape in events.js 2026-04-17 23:56:34 +02:00
80113eb0b9 Fix: services.py fehlte nach Worktree-Merge 2026-04-17 23:54:49 +02:00
89d87030a2 Sprint 19: Social, UX-Verbesserungen, Nerd2Noob-Hilfe 2026-04-17 23:53:50 +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
5927d384bf Fix: Nav-Avatar mit Zoom/Offset, renderDogSwitcher nach Foto-Änderung, Button-Padding 2026-04-17 23:09:42 +02:00
4f12c8e6a4 Fix: Foto-Editor — Prozent-Offsets (Position-Bug), Long-press, Stift-Icon 2026-04-17 23:06:24 +02:00
913cebcba1 Feature: Foto-Editor im Hundeprofil — Zoom, Drag-to-pan, Löschen 2026-04-17 23:00:21 +02:00
cb8ac8cffd Fix: Ausweis als Fullscreen-Modal statt neuem Tab, UI.modal size-Parameter 2026-04-17 22:55:09 +02:00
1af9bc0f7e Fix: events Migration PRAGMA table_info Syntax (pragma_table_info() nicht unterstützt) 2026-04-17 22:39:52 +02:00
a7753c9cf5 Sprint 16: Chat-Fotos/Online/Read-Receipts, Gesundheit-Dokumente löschen, Bugfixes
- Chat: Foto-Versand (POST /api/chat/conversations/{id}/upload, media_url/media_type)
- Chat: Online-Indikator (last_seen Heartbeat, grüner Dot, 3min-Fenster)
- Chat: Read Receipts (read_at, Einzel-/Doppelhaken-Icons)
- Gesundheit: Dokument löschen (DELETE .../dokument, Datei + DB-Eintrag)
- Bug: events.user_id NOT NULL → nullable (Table-Recreation-Migration)
- Bug: scheduler INSERT user_id 0 → NULL
- Bug: Wikidata Rate-Limit: sleep 0.3s→1.0s, retries 2→4, exponentielles Backoff
- SW: by-v146, APP_VER 119
2026-04-17 22:38:33 +02:00
34f29f9d0a Sprint 15: Suche, Ausweis, Teilen, Widget
- Volltext-Suche im Tagebuch (LIKE über Titel/Text/Tags, Debounce 350ms)
- Digitaler Heimtierausweis als druckbare HTML-Seite (/ausweis/{dog_id})
  Enthält Impfungen, Medikamente, Allergien, Tierärzte, Chip-Nr.
- Hund teilen: Einladungslink-System (dog_shares-Tabelle, /teilen/{token})
  Geteilte Hunde erscheinen in der Hundeliste, Tagebuch/Gesundheit lesbar
- Widget-Seite /#widget: zufälliges Tagebuchbild + nächste Erinnerung
  Als PWA-Shortcut im Manifest verankert
- SW-Cache by-v144, APP_VER 117
2026-04-17 15:51:09 +02:00
d5f09cd16b Fix: UI.escape definieren + Transponder-Karte immer im Profil anzeigen
- UI.escape() fehlte im Public-API von ui.js (crash nach Profil speichern)
- Chip-Nr.-Karte im Hunde-Profil immer sichtbar, auch ohne Wert
- "Eintragen"-Button öffnet Inline-Edit-Modal direkt im Profil
- SW-Cache by-v143
2026-04-17 15:29:57 +02:00
94e0ed3daa Feature: Tagebuch-Import (NoteStation .nsx + CSV) + Transponder in Gesundheitsdaten
- Import-Endpoint für Synology NoteStation (.nsx): HTML→Text, GPS, Bilder, Unix-Timestamp→Datum
- Import-Endpoint für CSV (Komma/Semikolon, BOM-safe, DE-Datumsformat)
- Import-Modal im Tagebuch mit Format-Auswahl-Karten und Ergebnis-Anzeige
- Transpondernummer in Gesundheitsdaten: Anzeige + Inline-Edit via Modal
- SW-Cache by-v142
2026-04-17 15:17:56 +02:00
6fcf841594 Sprint 14: Map-Fixes, City-Prewarm, Dog-Animation, Scan-Flash
Karte:
- Frankfurt-Fallback (Zoom 10→14 flyTo) mit _frankfurtTimer-Cancel
  wenn echter Standort eintrifft
- OSM-Tile-Fetch parallelisiert (asyncio.Semaphore(3))
- Bounds-Fix: invalidateSize() + pad(0.15) vor getBounds()
- map-pin-slash Icon für gesperrten Standort
- Scan-Done-Flash: Statusbar-Pill grün bei 100%
- Schnüffelhund: outer div (by-wander X) + inner SVG (by-sniff Y)
  für natürlichere zweiachsige Bewegung

Backend:
- City-Prewarm-Job: ~70 deutsche Großstädte beim Start (+90s) und
  wöchentlich (So 01:00), Fortschritts-Mails alle 5h an ADMIN_EMAIL
- ADMIN_EMAIL Env-Var in .env.example dokumentiert

Bugfixes:
- Profil-Edit: /api/profile → /profile (doppelter Prefix)
- Friends: Mobile-Portrait-Layout (flex-wrap, overflow-x:hidden)
- Trainingspläne: Pills text-wrap (flex + white-space:normal)
2026-04-17 14:06:10 +02:00
cd3f118113 Feature: Scan-Fortschritt als SVG-Ring um das Zoom-Statusfeld 2026-04-17 10:44:52 +02:00
49d129e00c Feature: Scan-Fortschrittsbalken während OSM-Daten geladen werden 2026-04-17 10:39:58 +02:00
7096ba8fea Feature: Telefonnummer für Orte (DB-Migration + API + Formular + Detailansicht) 2026-04-17 10:32:04 +02:00
abc7e6628a Fix: FAB-Buttons orange, Kotbeutel-Tüten-Icon + grün, Mülleimer grau 2026-04-17 10:26:59 +02:00
7fddfdba0b Fix: map-fab Buttons explizit weiß (#fff) — Dark Mode machte sie schwarz 2026-04-17 10:19:09 +02:00
50ec181dba Fix: Karte — Locate-Button CSS explizit (#fff, Inline-SVG statt Sprite-Use) 2026-04-17 10:16:09 +02:00
a0e1a26bd2 Fix: Kalender-Abo — UI.escape entfernt (existiert nicht in UI) 2026-04-17 10:06:18 +02:00
0ba9354475 Fix: SW-Cache by-v116 + index.html Skript-Versionen auf v=91 bumpen 2026-04-17 10:04:38 +02:00
21e634b409 Fix: Kalender-Abo — UI.escHtml → UI.escape (Methode existiert nicht) 2026-04-17 09:59:07 +02:00
e9bfe618ad WebCal: Tierarzt-Termine, Medikamenten-Enddaten, Hunde-Geburtstage ergänzt 2026-04-17 09:41:14 +02:00
a10a6a3f06 Fix: Läufigkeit-Detail zeigt 'Impfpass' als Titel (TABS-Alias auf BASE_TABS) 2026-04-17 09:35:18 +02:00
e5784272c0 Fix: Läufigkeit — Feldname, Abstand zur letzten Läufigkeit auto-berechnen 2026-04-17 09:33:11 +02:00
e8b0ec7efb Fix: Brevo Open-Tracking für transaktionale Mails deaktivieren 2026-04-17 09:29:09 +02:00
596c11d207 Sprint 15: User-Profil (Bio, Wohnort, Erfahrung, Social, Avatar, Mitglied-seit) 2026-04-17 09:24:27 +02:00
3642995409 Merge branch 'worktree-agent-a1140340' 2026-04-17 09:24:01 +02:00
84253b724f Merge branch 'worktree-agent-a88ce9b7' 2026-04-17 09:23:58 +02:00
692e6f9378 Sprint 14: Freunde-Seite mit Profildaten (Avatar, Wohnort, Bio, Erfahrungs-Badge)
- Backend: friends-API liefert jetzt bio, wohnort, erfahrung, social_link,
  profil_sichtbarkeit, avatar_url für friends/search/incoming
- Frontend: User-Cards (Suche + Freundesliste) zeigen Avatar-Foto (statt
  Buchstaben-Kreis wenn avatar_url vorhanden), Wohnort mit Pin-Icon,
  Bio-Vorschau (2 Zeilen, max 120 Zeichen, bei private ausgeblendet) und
  Erfahrungs-Badge neben dem Namen
- Profil-Modal erweitert um Wohnort, Erfahrung, vollständige Bio und Social-Link
2026-04-17 09:23:28 +02:00
a60db21782 Sprint 14: Profil-Editor in Settings — Avatar-Upload, Bio, Wohnort, Erfahrung, Social-Link, Sichtbarkeit 2026-04-17 09:20:42 +02:00
9bd8701a1d Sprint 14: User-Profil-System (bio, wohnort, erfahrung, avatar)
- DB-Migrationen: 7 neue Spalten in users (bio, wohnort, erfahrung, social_link, profil_sichtbarkeit, avatar_url, email_verified)
- GET /api/auth/me gibt nun alle Profil-Felder + created_at zurück
- PATCH /api/profile: Profil-Felder aktualisieren (mit Validierung)
- POST /api/profile/avatar: Avatar-Upload (PIL JPEG-Konvertierung, HEIC-Support)
- Router in main.py registriert
2026-04-17 09:18:53 +02:00
41c4ba3dd6 Fix: Admin-Stats — poison_alerts → poison mit korrekter Bedingung 2026-04-17 09:10:00 +02:00
6698543d14 Sprint 14: Impressum, Datenschutz, Google Analytics (cookieless)
- Impressum-Seite (§5 TMG / §18 MStV) mit René Degelmanns Daten
- Datenschutzerklärung (DSGVO) mit GA-Erläuterung und Opt-out
- Google Analytics G-YLG780DV3Z, Option B (cookieless, kein Consent nötig)
- Sidebar-Footer-Links Impressum / Datenschutz
- APP_VER → 86, SW-Cache → by-v110
2026-04-17 09:05:32 +02:00
21e50c6c7b Fix: friends.js Auth-Guards für nicht eingeloggte User 2026-04-16 22:48:44 +02:00
44fcb9bc16 Fix: calendar_token Migration ohne UNIQUE (SQLite erlaubt kein ALTER TABLE ADD UNIQUE) 2026-04-16 22:41:51 +02:00
a4f74b6c64 Sprint 13: WebCal-Abo / Kalender-Integration
- GET /api/webcal/token: erzeugt personl. Kalender-Token (einmalig)
- GET /api/webcal/{token}.ics: iCal-Feed mit Health-Erinnerungen,
  eigenen Events, Gassi-Treffen (erstellt + beigetreten), angenommenen Sittings
- RRULE für wiederkehrende Health-Einträge (intervall_tage)
- Migration: users.calendar_token (TEXT UNIQUE)
- Settings: "Kalender abonnieren" öffnet webcal://-Link + Kopier-Button
- api.js: API.webcal.getToken() / resetToken()
- SW-Cache: by-v104, APP_VER: 80
2026-04-16 22:39:50 +02:00