f229f6f4d0
Knigge: Padding direkt auf Frage/Options/Bars-Elemente — SW by-v422
2026-04-26 10:11:24 +02:00
993a3b9a32
Knigge: padding space-5 (20px) statt card-body — SW by-v421
2026-04-26 10:05:52 +02:00
acf8040238
Knigge: card-body statt inline Padding — SW by-v420
2026-04-26 10:02:10 +02:00
aa49ff1f85
Knigge: Padding auf Voting/KI-Rat/Haftpflicht-Cards — SW by-v419
2026-04-26 09:50:44 +02:00
c272812661
Knigge: page-container (kein Doppel-Padding), Radfahrer-Icon, SW by-v418
2026-04-26 09:43:31 +02:00
aeed35078f
Knigge: page-container + Padding — kein Rand-zu-Rand-Layout, SW by-v417
2026-04-26 09:39:32 +02:00
231f7976c5
Icons Runde 2: poison/wiki/movies/social + 16 Sprite-Icons — SW by-v416
...
Sprite: thermometer-hot, heartbeat, bone, lightning, plant, pill,
circle-dashed, stethoscope, backpack (erste-hilfe),
music-notes, lightbulb, sparkle, link-simple, globe,
heart-straight, check-circle (social/movies)
poison.js: ✅ → check-circle (Bestätigt-Badge, Button, Popup, Toast)
wiki.js: 📸 → camera (Community-Fotos Heading)
movies.js: ✅ ⚠️ ★🐾 🎬 ⭐ → check-circle/warning/star/paw-print/film-slate
social.js: 🎵 📸 🌐 Plattformen, ✓👁📌 ✨ 🏷🔗 ✅ 🤍 💬 ↗️ → Phosphor
2026-04-26 09:36:31 +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
f6586c88ee
Giftköder: Tiergift-Nummern raus, Erste-Hilfe-Button direkt zu Vergiftung
...
poison.js: nur noch Polizei 110 + Button → Erste Hilfe (Tab lebensgefahr)
erste-hilfe.js: init() akzeptiert params.tab zum direkten Tab-Sprung
SW by-v414, APP_VER 393
2026-04-26 09:04:10 +02:00
5ca522780b
SW: app.js/ui.js/api.js auf Network-First — iOS cached nie alte Versionen
...
Cache-First für app.js führte dazu dass iOS im normalen Safari-Tab
den alten APP_VER servierte → alte Seiten-Skripte wurden geladen.
Alle Kern-JS-Dateien sind jetzt Network-First wie CSS und Seiten-Module.
SW by-v413, APP_VER 392
2026-04-26 08:56:10 +02:00
4353994c68
iOS PWA: reg.update() beim Start + visibilitychange — SW by-v412
...
iOS prüft im Standalone-Modus nicht automatisch ob ein neuer SW vorliegt.
reg.update() erzwingt die Prüfung beim App-Öffnen und beim Zurückkehren
aus dem Hintergrund — der bestehende controllerchange→reload greift dann.
2026-04-26 08:38:50 +02:00
1400033862
Welcome: Redesign — Hero-Gradient, Icon-Grid, luftiger — SW by-v411
...
- Hero: warmer Gradient-Hintergrund, großes Icon, CTA direkt darin
- Features: 4×4 Icon-Grid (Desktop 8-spaltig) statt dense Kachel-Karten
- Eingeloggte User: persönliche Begrüßung im Hero
- Install: kompakte Karte am Ende
- Burger-Hinweis entfernt (unnötig)
2026-04-26 08:35:31 +02:00
a698bec817
Desktop: Settings max-width 640→860px via page-container — SW by-v410
2026-04-26 08:30:06 +02:00
e2af505eac
Desktop: Forum, Chat, Walks auf 860px — einheitliche Breite, SW by-v409
2026-04-26 08:26:35 +02:00
770d75100e
Desktop: Nachrichten + Gassi-Treffen auf max-width 1100px — SW by-v408
...
Chat: position:absolute→width:100%, page-body als zentrierter flex-Container
Walks: max-width none→1100px (konsistent mit Forum)
2026-04-26 08:20:13 +02:00
6930e6f848
OSM: Auto-Retry max 3x (30/60/90s), doppelte Tile-Fetches verhindert
...
Retry-Limit verhindert Endlos-Loop. Delay wächst (30s→60s→90s) damit
mehr Tiles gecacht sein können. Kartenbewegung setzt Counter zurück.
_fetching-Set im Backend verhindert parallele Doppel-Requests pro Tile.
SW by-v407, APP_VER 387
2026-04-25 22:54:12 +02:00
66af669653
Karte: Auto-Retry nach 20s wenn 0 Marker — SW by-v407
...
Wenn der erste Scan 0 OSM-Marker liefert (Cache leer, Hintergrund-Fetch
läuft), automatisch nach 20 Sekunden nochmal scannen. User muss die
Karte nicht manuell verschieben um Marker zu sehen.
2026-04-25 22:47:25 +02:00
c96283fa87
OSM: lz4.overpass-api.de an erste Stelle — kumi gibt 404
2026-04-25 22:43:49 +02:00
6f320c1225
OSM: Referer-Header gegen 406 — overpass-api.de sofort wieder nutzbar
...
406 von overpass-api.de wird durch fehlenden Referer-Header ausgelöst,
nicht durch einen zeitbasierten IP-Ban. Mit Referer: https://banyaro.app/
antwortet der Server sofort mit 200. OVERPASS_HEADERS enthält jetzt
User-Agent + Referer.
2026-04-25 22:40:47 +02:00
190db6ac51
OSM: Debug-Logging entfernt
2026-04-25 22:35:29 +02:00
b47daf54a0
OSM: Debug-Logging für Hintergrund-Task
2026-04-25 22:30:31 +02:00
eaf7884a1f
OSM: create_task GC-sicher — Task-Referenz in _bg_tasks speichern
...
asyncio.create_task ohne gespeicherte Referenz wird vom Garbage Collector
sofort gelöscht bevor der Task läuft (dokumentiertes Python-Verhalten).
Fix: _bg_tasks-Set hält Referenz bis done_callback sie wieder entfernt.
2026-04-25 22:24:38 +02:00
ddff1d3571
OSM: asyncio.create_task statt BackgroundTasks — Hintergrund-Fetch funktioniert jetzt
...
BackgroundTasks wurde nicht ausgeführt (Bug in der Starlette-Integration).
asyncio.create_task() plant den Overpass-Fetch direkt im Event-Loop ein,
Argumente explizit übergeben statt Closure um Capture-Probleme zu vermeiden.
2026-04-25 22:22:39 +02:00
8cc528350d
OSM: Overpass-Fetch non-blocking — Antwort sofort, Kacheln im Hintergrund
...
Stale-Tile-Fetches blockierten den HTTP-Request minutenlang → _overpassActive
blieb auf true → Frontend-Scan konnte nicht neu starten.
Fix: BackgroundTasks statt await — /pois antwortet sofort mit DB-Daten,
Overpass-Fetch läuft im Hintergrund. Beim nächsten Kartenschwenk sind
die frisch gecachten Tiles dann verfügbar.
2026-04-25 22:16:18 +02:00
163b942ea4
OSM: Fair-Use-Rate-Limit + User-Agent für Overpass-Anfragen
...
Semaphore 2→1 (nur 1 gleichzeitige Anfrage), 2s Mindestabstand,
User-Agent mit App-Name und Kontakt — Standard-Höflichkeit für
Community-Dienste wie kumi.systems.
2026-04-25 22:09:50 +02:00
92d583e661
OSM: Prewarm deaktiviert, CACHE_DAYS 14→90 — kein Overpass-Spam mehr
...
23.500 Overpass-Anfragen täglich haben die Server-IP geblockt (406).
Fix: OSM-Cache füllt sich nur noch on-demand wenn Nutzer die Karte benutzen.
CACHE_DAYS auf 90 erhöht damit selten besuchte Bereiche länger frisch bleiben.
2026-04-25 22:05:12 +02:00
91389b9a3f
Fix: Overpass-Fallback auf kumi.systems — overpass-api.de gibt 406 zurück
...
overpass-api.de und lz4.overpass-api.de blockieren die Server-IP mit 406.
OVERPASS_URLS-Liste mit Fallback: kumi → lz4 → overpass-api.de.
_fetch_overpass probiert jede Instanz, springt bei 4xx-Fehler zur nächsten.
2026-04-25 22:00:26 +02:00
8d3a620275
Fix: Karte-Scan wenn Diary-Karte vorher geöffnet — SW by-v406
...
diary.js lädt Leaflet ohne MarkerCluster. Wenn der User zuerst die
Diary-Karte öffnet, findet _loadLeaflet() in map.js ein gesetztes
window.L und überspringt das Laden komplett — inklusive MarkerCluster.
L.markerClusterGroup() schlägt dann still fehl (catch { return 0; }),
und alle OSM-Layer zeigen 0 Marker.
Fix: Leaflet-Basis und MarkerCluster separat prüfen:
- window.L fehlt → lade Leaflet-Basis
- window.L.markerClusterGroup fehlt → lade MarkerCluster
2026-04-25 21:46:36 +02:00
553e9e7854
Sprint 12+13: Tagebuch Day-One-Redesign, Notiz-Feature, Icon-Fixes, SW by-v405
...
Tagebuch:
- Day-One-Listenansicht: Wochentag + Tageszahl + Meta-Zeile (Zeit/Ort/Wetter)
- 4 Ansichten: Liste, Medien-Mosaik, Kalender (mit Sprungbuttons), Karte (GPS-Marker)
- Detail-Ansicht inline im Content-Bereich (kein Fullscreen-Overlay mehr)
- Hero-Bild vollständig sichtbar (object-fit:contain), Lightbox mit Safe-Area
- 2-Spalten-Layout Desktop: Text + Leaflet-Karte + POI-Liste
- EXIF-GPS-Extraktion bei Foto-Upload, historisches Wetter via Archive-API
- NoteStation-Import: Fotos in diary_media (80 Einträge migriert, 94 Medien)
- Stats-Endpoints: /diary/stats, /diary/calendar, /diary/locations
Notiz-Feature:
- Generische notes-Tabelle (parent_type + parent_id + meta_json)
- 📝 -Button in 8 Bereichen, Notizblock-Seite mit KI-Analyse
- KI-Toggle in Einstellungen, notes_ki_enabled in User-Profil
Icons & Design:
- fill:currentColor Fix für welcome/onboarding/friends.js
- --c-icon Variable, --c-text-muted Dark Mode aufgehellt
- 15+ neue Phosphor-Icons aus lokaler Kopie
- CSS Network-First im SW, Cache-Control-Middleware
Infrastruktur:
- Wiki-Anreicherungs-Scheduler-Jobs entfernt (abgeschlossen)
- auth.py: notes_ki_enabled + is_social_media im User-Response
2026-04-25 20:44:46 +02:00
95f91fdc00
PROJEKT.md: Stand 2026-04-25 Sprint 11 — Moderation, Wiki-Fotos, Social, Admin-Social-Tab, SW by-v370
2026-04-25 10:39:01 +02:00
f168961c44
Landing-Page + llms.txt: Featurestand 2026-04-25
...
- Neue Feature-Karten: Pflege-System (43 Tipps), Wöchentlicher Lober, Wetter & Zecken-Alarm
- Symptom-Checker: Tag von Plus → Kostenlos korrigiert
- Hunde-Wiki: 1003 Rassen, Community-Fotos, Wikipedia-grounded
- Pricing: nicht implementierte Features entfernt (Barcode, EU-Reisepass, Smart Collar, Jahresrückblick, PDF-Export); Plus als "In Entwicklung" markiert
- Vergleichstabelle: neue Zeile "Pflege-Tipps rassenspezifisch"
- JSON-LD featureList + datePublished (2026-04-25) aktualisiert
- llms.txt vollständig überarbeitet: KI-Integration (LM Studio + claude-sonnet-4-6), Breed-Enricher 97,6%, Community-Features, korrekte Monetarisierung
2026-04-25 10:34:18 +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
e2bb1a4b2d
Social: Vorschläge merken ( 📌 ), Post-Link nachträglich eintragen, Quick-Post ohne prompt(), SW by-v369
2026-04-25 10:23:17 +02:00
092230c4e1
Wiki: Placeholder-Icon auf Phosphor 'dog' umgestellt (statt unförmigem Custom-SVG), SW by-v368
2026-04-25 10:15:29 +02:00
af4b1a4a55
Registrierung: Hundepassphrase-Generator (3 Wörter + Zahl, 60+ Hundewörter), SW by-v367
2026-04-25 10:08:42 +02:00
6064a1d750
Wiki-Foto-System: Gallery-Flow, Community-Fotos, Wiki-Fotos-Badge
...
- review_submission: Fotos ins gallery/-Verzeichnis statt breeds/ kopieren;
foto_url der Rasse nur überschreiben wenn noch keins vorhanden (Erstbild)
- Rassen-Detail-API: user_fotos (approved submissions) mitliefern
- Rassen-Listen-API: user_foto-Subquery als Fallback wenn foto_url leer
- achievements: neue Badge-Kategorie "Wiki-Fotos" (bronze 1, silber 3, gold 10)
mit wiki_fotos-Metrik in check_and_award und my_achievements
- Badge-Check + Push nach Foto-Approval
- wiki.js: Karten-Bild nutzt r.foto_url || r.user_foto
- wiki.js: Detail-Ansicht zeigt Community-Foto-Galerie (scrollbar, clickable)
- Dockerfile: breeds/gallery + breeds/submissions im Image anlegen
- SW by-v366, APP_VER 351
2026-04-25 09:53:24 +02:00
b608d5635f
Admin: Kachel 'Fotos freizugeben' + pending_fotos in Stats-API, SW by-v365
2026-04-25 09:44:17 +02:00
034f7ef21f
Moderation: Foto-Freigabe repariert (rasse_id join, delegate an wiki-API), SW by-v364
2026-04-25 09:41:56 +02:00
d603b7bae1
Wiki: Bildrechte-Bestätigung bei Foto-Einreichung (Checkbox + DB + Mod-Badge), SW by-v363
2026-04-25 09:35:06 +02:00
de73c7901e
Wiki: Hunde-Silhouette als Placeholder für fehlende Rassenfotos (SW by-v362)
...
- _DOG_SILHOUETTE Phosphor-SVG als Modul-Konstante in wiki.js
- Karten-Fallback zeigt SVG statt UI.icon('dog')
- Detail-Ansicht zeigt 56px SVG + „Kein Foto verfügbar" wenn kein Foto
- CSS: wiki-breed-photo-fallback mit Gradient, neue wiki-detail-photo-placeholder-Klasse
- SW by-v362, APP_VER 347
2026-04-25 09:27:19 +02:00
2fed44fbd4
fetch_wiki_images: Commons File-Namespace-Suche entfernt
...
_commons_search() und deren Aufruf (Stufe 4+5) entfernt.
Nur WP pageimages DE/EN + Commons pageimages (exakter Treffer) bleiben.
urllib.parse Import entfernt.
2026-04-25 09:25:48 +02:00
26074a42db
Scraper: Commons-Suche nur bei vollständigem Namensmatch im Dateinamen
2026-04-25 09:22:14 +02:00
fc4cfcf19b
Scraper: fetch_wiki_images striktere Bildfilterung (kein PDF/Stadtfoto/Dokument)
2026-04-25 09:19:15 +02:00
93ea8a69fd
Scraper: fetch_wiki_images mit Commons-Dateisuche (File-Namespace)
2026-04-25 09:17:40 +02:00
c3d33547c7
Wiki: sehr_gross Pill-CSS + Moderation Icon auf eye geändert
2026-04-25 08:59:19 +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
0af3078a2a
Breed Enricher: sqlite3.Row zu dict konvertieren in _enrich_one
2026-04-25 08:40:30 +02:00
77f6af8817
Breed-Enricher: verbesserte Wikipedia-Suche + retry_missed für ki_enriched=2
...
- _NAME_ALIASES-Dict mit 20 Rassen-Mappings (z.B. Zwergpinscher → Miniature Pinscher)
- exsentences=5 statt exintro=1 + Threshold 80 statt 150 Zeichen (fixiert Zwergpinscher, Spinone, Thai Bangkaew)
- Neue Fallback-Kette: direkt DE/EN → name_de → Aliasse → normalisierte Namen → opensearch DE/EN
- Neue Funktion retry_missed(limit) für ki_enriched=2 ohne DB-Reset
- CLI-Flags --retry-missed und --dry-run
2026-04-25 08:36:27 +02:00
5aba366b21
Deploy: SW by-v360, APP_VER 345
2026-04-25 08:23:45 +02:00
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