6809cfae23
Rename: Benachrichtigungen → Aktuelles (Bottom-Nav + Sidebar + Seitentitel)
2026-04-19 10:52:39 +02:00
e5cbe879ff
Fix: Modal-Footer Layout Routes + Forum
...
Routen-Footer:
- 2-Zeilen-Layout: Aktions-Buttons oben, Schließen full-width unten
- GPX/Teilen/Navi als Text-Icon, Freund/Sichtbarkeit/Löschen als Icon-only rechts
- Keine Overflow/Clipping mehr
Forum-Footer:
- flex-direction:column Layout mit margin-left:auto für Icon-Buttons links
- Löschen/Bearbeiten (Icon) links, Schließen/Antworten rechts
- flex:1 Spacer-Problem behoben
2026-04-19 10:48:49 +02:00
b1053198de
Fix: Standort-Picker im Forum-Edit-Modal ergänzt
...
- _showEditThreadModal: location picker mit Vorausfüllung (thread_lat/lon/ort)
- ThreadUpdate-Schema: thread_lat/lon/ort Felder ergänzt
- PATCH /threads/{id}/content: Location wird jetzt gespeichert/überschrieben
2026-04-19 10:45:05 +02:00
062c0209e6
Fix: Forum-Buttons Icon-only, Layout-Fix (Edit+Delete rechtsbündig)
...
- Neue .forum-icon-btn CSS-Klasse: 32×32px, transparent, hover-Feedback
- Post-Aktionen: Like links, Melden/Bearbeiten/Löschen rechtsbündig gruppiert
- Thread-Footer: Löschen+Bearbeiten als Icon-Buttons, Schließen/Antworten als Text
- .forum-icon-btn--danger für rote Löschen-Buttons
2026-04-19 10:39:48 +02:00
7a25ccae90
Feature/Fix: Routen-Navi, Badge-Klick-Fix, Forum-Edit, Chat-Unread-Refresh
...
- Routen: Navi-Button öffnet Apple Maps/Google Maps mit Start/Ziel-GPS
- Routen: Teilen-Button nutzt navigator.share() mit Fallback auf Clipboard
- Routen: Icon 'share' → 'arrow-square-out' (war nicht im Sprite)
- Nav-Badge: pointer-events:none → Badge blockiert keine Klicks mehr
- visibilitychange: Badges + Chat-Liste sofort refresh bei App-Rückkehr
- Forum: eigene Threads und Antworten bearbeiten (PATCH /threads/content, PATCH /posts)
- SW by-v238, APP_VER 215
2026-04-19 10:34:01 +02:00
289158b2cd
Feature: Gasthund-Zugang für Sitter
...
- sitting_subscriptions Tabelle (dog_id, owner_id, sitter_id, valid_until)
- POST/DELETE/GET /api/sitting-access — Zugang gewähren/widerrufen/auflisten
- GET /api/dogs gibt Gasthunde zurück (is_guest=True, sitting_until, owner_name)
- Diary POST erlaubt Sitter-Schreibzugang; PATCH/DELETE nur für Besitzer
- Dog-Switcher: GAST-Badge bei fremden Hunden
- Dog-Profil: Sitter-Zugang-Sektion (nur für Besitzer), Freund auswählen + Datum
- Diary Detail-View: Bearbeiten-Button für Gasthunde ausgeblendet
2026-04-19 10:29:21 +02:00
eef787cc72
Fix: Benachrichtigungen öffnen direkt das Ziel-Item
...
- forum_reply → öffnet direkt den Forum-Thread (openThread exposed)
- walk_invite → öffnet direkt das Gassi-Treffen (openDetail exposed)
- poison_alert → öffnet direkt den Giftköder-Eintrag (openDetail exposed)
- chat_message → öffnet direkt den Chat-Thread (war schon vorhanden)
- _execNav nutzt nav.data statt nav.data?.field für konsistentes Parsing
2026-04-19 10:22:13 +02:00
05b28fcd8d
Feature: Aktivitäten in Freunde-Ansicht anklickbar
...
- diary → Tagebuch, health → Gesundheit, walk → Gassi-Treffen
- Items als <button> für iOS-Tap-Zuverlässigkeit
- fr-activity-item--link mit Hover/Tap-Stil
2026-04-19 10:19:44 +02:00
90f1c4e299
Fix: Notifications-Klick-Handler durch UI.toast-TypeError blockiert
...
UI.toast ist ein Objekt {success,error,info}, kein Funktion.
UI.toast?.('...','info') wirft TypeError → async handler crasht still
→ setTimeout(_execNav) wird nie ausgeführt → keine Navigation
Fix: UI.toast?.info?.(…) / UI.toast?.error?.(…)
2026-04-19 10:16:46 +02:00
bb0250a8b5
Fix: Benachrichtigungen anklickbar (button statt div, data-Parsing repariert)
...
- _parseData() flacht verschachteltes {data:{conversation_id:…}} auf
→ d.conversation_id war immer undefined wegen doppelter Verschachtelung aus push.py
- .notif-item als <button> statt <div> — iOS feuert clicks auf divs unzuverlässig
- closest() im Löschen-Handler auf button.notif-item angepasst
2026-04-19 10:13:11 +02:00
b6d2606a23
Feature: Bottom-Nav umgebaut, Dog-Avatar→Welcome, Routen-Filter-Panel, Recording-Fix
...
- Bottom-Nav: Tagebuch | Routen | [+] | Forum | Benachrichtigungen (mit Badge)
- Benachrichtigungs-Badge auch in Bottom-Nav (notif-nav-badge)
- Dog-Avatar-Klick → Welcome-Seite (Name bleibt → Hund-Profil)
- Routen: Filter in aufklappbarem Panel, aktive Filter zeigen roten Punkt
- Routen: Start/Stop-Button fragt Page_map.isRecording() ab, kein veralteter lokaler State
- SW by-v232, APP_VER 209
2026-04-19 10:09:02 +02:00
0113ee2fbb
Fix: Forum-Icon von 'chats' (fehlt im Sprite) auf 'push-pin' geändert
2026-04-19 09:59:51 +02:00
16150ced89
Feature: Startseite in 3 Sektionen (Mein Hund, Community, Entdecken)
2026-04-19 09:57:32 +02:00
f05ef9eeca
Fix: Benachrichtigungen navigieren jetzt in den richtigen Kontext
...
- App.callModule() öffentlich: navigiert + ruft Modul-Methode auf
- chat_message → öffnet direkt den richtigen Chat-Thread (conversation_id)
- friend_request → Freunde-Seite
- walk_invite → Gassi-Treffen (+ page-Feld im Push-Payload ergänzt)
- poison_alert → Giftköder-Seite
- health_reminder → Gesundheit
- _execNav() zentralisiert alle typ-spezifischen Navigationen
2026-04-19 09:54:46 +02:00
8386e20ca1
Feature: Welcome-Kacheln anklickbar + Hamburger-Puls-Effekt
2026-04-19 09:50:24 +02:00
08ec40228a
Fix: App-Frame bei großer Systemschrift (min-height statt height, Grid responsiv)
2026-04-19 09:48:44 +02:00
e784832a87
Fix: Sidebar schließt beim Klick auf '+ Neu erstellen'
2026-04-19 09:44:19 +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
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
fa0fcbf8c9
Feature: Tagebuch Cover-Bild (Favorit-Funktion) für diary_media
...
- Migration: diary_media.is_cover (INTEGER DEFAULT 0)
- Upload: erstes Item eines Eintrags automatisch is_cover=1
- Neuer Endpoint: PATCH /diary/{id}/media/{mid}/cover
- GET-Endpoints geben is_cover + cover_url zurück
- Frontend: Stern-Button (⭐ ) in Gallery-Detail und Edit-Formular
- Timeline-Karte verwendet cover_url als Vorschaubild
- SW by-v212, APP_VER 186
2026-04-18 19:07:37 +02:00
63ab092f5e
Feature: Tagebuch Multi-Medien (beliebig viele Fotos/Videos pro Eintrag)
...
- Backend: neue Tabelle diary_media (Migration), upload_media schreibt
jetzt in diary_media statt media_url; neuer DELETE-Endpoint
/diary/{id}/media/{media_id}; alle GET-Endpoints liefern media_items[].
- Frontend: Multi-Upload-Grid im Formular mit Vorschau und X-Button
zum Entfernen vor dem Speichern; bestehende Medien im Edit-Modus
einzeln löschbar; Detail-Ansicht zeigt horizontale Scroll-Galerie
bei mehreren Medien; Karten-Badge zeigt Anzahl bei > 1 Medium.
- Rückwärtskompatibilität: Einträge mit media_url werden weiterhin
korrekt angezeigt.
- SW by-v211, APP_VER 181
2026-04-18 18:45:48 +02:00
6581a9a88c
Feature: Suchfeld in Routen, Events und Places
...
Alle drei Seiten haben jetzt ein debounced Suchfeld (300ms) mit
Lupe-Icon über der Liste. Die Suche filtert clientseitig:
- Routen: Name, Beschreibung, Username (bereits vorhandener State verbessert)
- Events: Titel, Ort, Beschreibung
- Places: Name, Adresse, Typ
Leerer Zustand zeigt passendes UI.emptyState() mit Suchbegriff.
SW by-v209, APP_VER 178.
2026-04-18 18:42:13 +02:00
5acfa9d8f6
Feature: Onboarding-Wizard für neue User (3 Schritte)
...
Neues Seiten-Modul window.Page_onboarding mit Schritt-Indikator,
Willkommenstext, Hund-Anlegen-Formular (Name/Rasse/Geburtstag/Foto)
und Fertig-Screen mit Tagebuch-CTA. Wird nach Login bei dogs.length===0
angezeigt; localStorage-Flag by_onboarding_done verhindert Wiederholung.
2026-04-18 18:41:12 +02:00
eb3f7b94b2
Feature: Dark Mode — System/Hell/Dunkel-Toggle in Einstellungen
...
CSS-Variablen für Dark Mode in design-system.css (system + manuell via
data-theme), Flash-freies Inline-Script in index.html, Toggle in
settings.js (by_theme in localStorage). SW by-v210, APP_VER 179.
2026-04-18 18:40:34 +02:00
eb72d6f675
Feature: Offline-Banner, Online-Toast und API-Offline-Fehlerbehandlung
...
- #offline-banner in index.html (display:none, fixed oben) mit Inline-Script für window.online/offline Events
- Wieder-online Toast via UI.toast.success
- api.js fängt network-Fehler und SW-503-Offline-Antworten ab und zeigt UI.toast.warning
- SW-Cache auf by-v210 gebumpt (api.js + components.css geändert)
2026-04-18 18:40:05 +02:00
e98ce0d232
Refactor: UI.loadLeaflet, leafletMarker, escape, emptyState, locationPicker zentralisiert
...
- Task 1: UI.loadLeaflet() in ui.js (mit Cluster-Option), lokale _loadLeaflet() in
diary/walks/routes/places/poison/events.js entfernt
- Task 2: UI.escape() ersetzt lokale _esc()/_escape() in allen 5 Seiten-Modulen
- Task 3: UI.emptyState() ersetzt lokale _emptyState() in diary/routes/events.js
- Task 4: _fmtDate/_fmtDateShort in walks/poison bewusst behalten (anderes Format),
Kommentare ergänzt
- Task 5: UI.locationPicker() eingebaut in places/poison/events (ersetzt manuelle
GPS-Input-Blöcke)
- Task 6: UI.leafletMarker() factory in ui.js, Kreis-divIcon-Blöcke in walks/places/
poison ersetzt; events.js behält Diamant-Marker (andere Form)
- SW by-v207, APP_VER 175
2026-04-18 14:34:35 +02:00
066b722c5e
Feature: Walk-Einladungen und RSVP-System
...
Gassi-Treffen bekommen ein vollständiges Einladungs- und RSVP-System:
- Neue Tabelle walk_invitations (walk_id, user_id, status, Zeitstempel)
- Backend: /invite-candidates, /invite, /rsvp, /participants Endpoints
- Push-Notification beim Einladen
- Frontend: RSVP-Buttons (Zusagen/Vielleicht/Absagen), Teilnehmerliste
mit Avatar-Initialen und farbkodierten RSVP-Badges, Einladen-Modal
- SW by-v205, APP_VER 173
2026-04-18 14:14:31 +02:00
e3230237a2
Feature: Gassi-Treffen — Orts-Autocomplete, Modal-UX, Teilnehmerliste, Karten-Fix
...
- Orts-/POI-Suche mit GPS und Vorschlägen (wie Tagebuch) + Mini-Karte im Formular
- Stornieren/Austreten als Zwei-Klick-Pattern (kein UI.modal.confirm in Modals)
- Teilnehmerliste im Detail-Modal mit User-Namen und Hunden
- Leaflet invalidateSize auf 150ms (Memory-Regel), _loadLeaflet robuster
- /api/walks/nearby Backend-Endpunkt (vor /{walk_id} Route)
- SW by-v203, APP_VER 169
2026-04-18 13:52:20 +02:00
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