Commit graph

24 commits

Author SHA1 Message Date
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
aa70a838f2 Feature: Gesundheit Multi-Media — health_media Tabelle + Multi-Upload UI
- Neue Tabelle health_media (Migration in database.py) analog zu diary_media
- GET-Endpoints geben media_items:[{id,url,media_type}] zurück (datei_url bleibt für Rückwärtskompatibilität)
- POST /health/{id}/media und DELETE /health/{id}/media/{media_id} Endpoints
- Multi-Upload-Bereich im Formular: Thumbnails für Bilder, PDF-Icon, X-Button zum Entfernen
- Galerie in Detailansicht: Bilder klickbar/zoombar, PDFs als Link
- CSS-Klassen health-media-grid/thumb/gallery in components.css
- SW by-v213, APP_VER 187
2026-04-18 19:09:39 +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
bf268e3ffd Fix: Mobile-Audit — Notifications Delete-Button, Health-Grid, Settings-Padding 2026-04-18 00:03:39 +02:00
89d87030a2 Sprint 19: Social, UX-Verbesserungen, Nerd2Noob-Hilfe 2026-04-17 23:53:50 +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
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
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
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
097295c628 Sprint 11: Freunde & Chat + Phosphor-Icon-Vollmigration
- Freundschaften (pending/accepted), Nutzersuche, Anfragen per Push
- Direktnachrichten mit Polling, iMessage-Stil, Deep-Links aus Push
- Alle Seiten (map, places, diary, health, dog-profile, sitting, knigge,
  forum, wiki, walks) vollständig auf Phosphor-Icons migriert
- Wikidata-Rassen-Scraper (~833 neue Rassen, lokal gespiegelte Fotos)
- TheDogAPI lokal gespiegelt (169 Rassen + Fotos)
- Quiz-Result-Cards horizontal (korrekte Bildproportionen)
- SW by-v89
2026-04-15 21:33:53 +02:00
956e34db88 UX: Formular-Buttons in Modal-Footer + Kalender-Icons amber
- Alle Formular-Buttons (health, praxen, diary, dog-profile, poison)
  aus dem scrollbaren Body in den festen Modal-Footer verschoben
  (form="form-id" Attribut, btn-Suche via document.querySelector)
- Kalender-Icon Filter korrigiert: brightness(0)+invert(0.55) vermeidet
  Channel-Clipping bei sepia auf Weiß → ergibt echtes Amber (~#C4843A)
- SW-Cache: by-v18 → by-v19
2026-04-13 21:12:15 +02:00
b8a5dc7a66 Feat: Gesundheits-Erinnerungen mit Wiederkehrend-Intervall
- intervall_tage Feld (monatlich/vierteljährlich/jährlich etc.)
- Impfung, Entwurmung, Medikament: Intervall-Auswahl im Formular
- Erinnerungs-Banner über den Tabs: zeigt alle Einträge die in ≤60 Tagen fällig sind
- Ampel-Farbe am linken Rand (rot=überfällig, gelb=bald, grün=ok)
- "✓ Erledigt"-Button öffnet neues Formular vorausgefüllt mit heute + nächstem Termin
- Nav-Badge (Zahl) auf Gesundheit-Icon wenn Einträge überfällig/bald fällig
- _showForm: isEdit prüft entry?.id statt !!entry (Reminder-Flow)
- SW-Cache → by-v16
2026-04-13 20:45:52 +02:00
5c178f812b Feat: Praxis-Auswahl bei Impfung/Entwurmung/Medikament + Dokumente funktional
- Praxis-Dropdown als wiederverwendbare Funktion _praxisSelectField()
- Impfung, Entwurmung, Medikament: Praxis auswählbar statt Freitext
- Impfpass-Karte: zeigt Praxisname mit 🏥 Icon
- Dokumente: Öffnen-Button direkt auf der Karte (stopPropagation),
  Bild-Vorschau 64px, "Noch keine Datei" wenn kein Upload
- SW-Cache → by-v15
2026-04-13 20:38:30 +02:00
40fa47efca Fix: Tab 'Tierarzt' → 'Besuche' (Tierarzt = Praxen) 2026-04-13 20:34:08 +02:00
e9587d4ecd UX: Tierarztbesuch-Tab — Praxis-Verknüpfung als Kernfunktion
- Formular: Praxis-Dropdown ersetzt Freitext wenn Praxen vorhanden
- Kein redundantes Freitext-Feld mehr, Ort in der Option angezeigt
- "Praxis anlegen"-Link navigiert direkt zum Praxen-Tab
- tierarzt_name wird zusätzlich als Sicherheitskopie gespeichert
- Karte: zeigt Praxisname + Ort unter dem Besuchsgrund
- Detail-Modal: Praxis mit Adresse und anklickbarer Telefonnummer
- SW-Cache → by-v12
2026-04-13 20:30:36 +02:00
d9f2e85263 Fix: Gewicht auf 2 Nachkommastellen (step 0.1 → 0.01) 2026-04-13 20:26:54 +02:00
1a5f1f7ee2 Fix: Gewicht-Eintrag schlug fehl (bezeichnung Pflichtfeld + Komma-Dezimal)
- health.py: bezeichnung Optional statt required (Gewicht braucht keinen Titel)
- _buildPayload: Komma → Punkt bei wert und kosten (deutsche Lokalisierung)
- Gewicht-Einträge setzen automatisch bezeichnung = "9.9 kg"
- SW-Cache → by-v10
2026-04-13 20:25:25 +02:00
75529cbdab UX: Gewicht-Tab mit großem Chart und ohne Bezeichnungsfeld
- Aktuelles Gewicht groß prominent oben angezeigt
- Delta zur letzten Messung mit ▲/▼ und Farbe (grün/orange)
- SVG-Diagramm: glatte Bezier-Kurve, Gradient-Füllung, Rastlinien
- Formular: kein "Bezeichnung"-Feld mehr bei Gewicht-Einträgen
- Detail-Modal-Titel zeigt Gewichtswert statt leerer Bezeichnung
- SW-Cache → by-v9
2026-04-13 20:22:23 +02:00
dee8d10496 UX: Modal-Rand, Icon-Farben, Adresse aufgeteilt
- Tierarzt-Adresse: strasse / plz / ort statt einzeiligem Freitext
- Modal: Rand in Primärfarbe + kein versehentliches Schließen beim Klick auf Hintergrund
- Nav/Sidebar-Icons: inaktiv gedämpft, aktiv amber-getönt (CSS filter)
- Datums-Kalender-Icon: ebenfalls amber statt Schwarz
- SW-Cache → by-v8
2026-04-13 20:16:36 +02:00
fc0f48c6d0 Feat: Tierärzte-Verwaltung (Sprint 4)
Neue Praxen-Tab in Gesundheit: Tierarzt-Stammdaten (Name, Adresse,
Telefon, Notfall-Nr, E-Mail, Website, Notizen), Anruf- und
Notfall-Schnellzugriff via tel:-Links, Soft-Delete (aktiv=0) für
Praxiswechsel ohne Datenverlust. Tierarzt-Dropdown beim Eintragen
von Tierarzt-Besuchen. SW-Cache → by-v7.
2026-04-13 20:06:59 +02:00
c06d9e24a7 Fix: Klick auf aktiven Hund im Picker lädt Inhalt (setActiveDog war no-op) 2026-04-13 19:55:42 +02:00
ba8ac85f0b Gesundheit: Hunde-Picker als Einstiegsseite bei mehreren Hunden 2026-04-13 19:48:09 +02:00
d8b9561fff Frontend Sprint 3+4: Dog-Switcher, Health-Seite, Multi-Dog Tagebuch
- app.js: vollständiger Dog-Switcher (Avatar im Header/Sidebar, Quickpicker
  bei 3+ Hunden, setActiveDog, localStorage-Persistenz), iOS Ghost-Click Fix,
  Loading-Guard, Logout State Reset
- index.html: Dog-Switcher HTML, Favicon-Links, Sidebar "+ Neu erstellen",
  Navigation Tab Karte → Gesundheit
- health.js (neu): vollständiges Health-Frontend mit Tabs (Impfung, Entwurmung,
  Tierarzt, Medikament, Gewicht-Kurve, Allergie, Dokument), Ampel-System,
  KI-Zusammenfassung
- dog-profile.js: "+ Weiteren Hund anlegen" Button + _openCreateModal(),
  Event-Delegation statt direkter Listener (kein Doppelaufruf)
- diary.js: Dog-Picker im Formular, Avatar-Reihe auf Karten, Dog-Chips
  im Detail-Modal, dog_ids im API-Payload
- poison.js: Erledigt-Dialog mit Grundauswahl (beseitigt/fehlerhaft/anderes)
- api.js: health-Endpoints (list, create, update, delete, upload, ki)
- ui.js: confirm() Fix (resolve vor close)
- layout.css: Dog-Switcher Styles, scrollbare Sidebar-Nav, User-Item fix
- components.css: Health-Styles, Diary Dog-Picker, Ampel-Punkte, Gewicht-SVG
- icons/: Favicon-Set (ico, 16px, 32px, 180px, 192px, 512px)
2026-04-13 19:30:03 +02:00