diff --git a/backend/main.py b/backend/main.py index c00029b..8da77a4 100644 --- a/backend/main.py +++ b/backend/main.py @@ -327,7 +327,7 @@ MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") os.makedirs(MEDIA_DIR, exist_ok=True) app.mount("/media", StaticFiles(directory=MEDIA_DIR), name="media") -APP_VER = "729" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "730" # muss mit APP_VER in app.js übereinstimmen @app.get("/api/version") async def app_version(): diff --git a/backend/static/index.html b/backend/static/index.html index 20eba97..900bb48 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -578,7 +578,7 @@ - + diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 9a1a050..9c96941 100644 --- a/backend/static/js/app.js +++ b/backend/static/js/app.js @@ -3,7 +3,7 @@ Router, State-Management, Navigation, Initialisierung. ============================================================ */ -const APP_VER = '729'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '730'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.4.0'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; @@ -819,6 +819,7 @@ const App = (() => { try { localStorage.removeItem('by_wissen_open'); } catch (_) {} + _initVersionCheck(); await _checkAuth(); // Einladungslink /teilen/{token} → direkt annehmen @@ -916,6 +917,126 @@ const App = (() => { }); } + // ---------------------------------------------------------- + // ---------------------------------------------------------- + // VERSION-CHECK — persistentes Banner wenn neue Version verfügbar + // ---------------------------------------------------------- + let _updateBannerShown = false; + + async function _checkVersion() { + try { + const r = await fetch('/api/version', { cache: 'no-store' }); + if (!r.ok) return; + const { version } = await r.json(); + if (version && version !== APP_VER && !_updateBannerShown) { + _updateBannerShown = true; + _showUpdateBanner(version); + } + } catch { /* offline — ignorieren */ } + } + + function _showUpdateBanner(newVersion) { + const isIos = /iphone|ipad|ipod/i.test(navigator.userAgent); + const existing = document.getElementById('app-update-banner'); + if (existing) return; + + const banner = document.createElement('div'); + banner.id = 'app-update-banner'; + banner.style.cssText = [ + 'position:fixed;bottom:calc(env(safe-area-inset-bottom,0px) + 72px);left:12px;right:12px', + 'z-index:9000;background:var(--c-primary);color:#fff;border-radius:16px', + 'padding:14px 16px;box-shadow:0 4px 20px rgba(0,0,0,0.3)', + 'display:flex;flex-direction:column;gap:10px', + ].join(';'); + + banner.innerHTML = ` +
+
+
+ Neue Version verfügbar (v${newVersion}) +
+
+ Tippe auf Aktualisieren um die neueste Version zu laden. +
+
+
+ + +
+
+ + `; + + document.body.appendChild(banner); + + banner.querySelector('#upd-btn-close').addEventListener('click', () => banner.remove()); + + banner.querySelector('#upd-btn-reload').addEventListener('click', async () => { + const btn = banner.querySelector('#upd-btn-reload'); + btn.textContent = 'Lädt…'; + btn.disabled = true; + // SW-Update anstoßen + try { + const reg = await navigator.serviceWorker?.getRegistration(); + if (reg?.waiting) reg.waiting.postMessage({ type: 'SKIP_WAITING' }); + await reg?.update(); + } catch { /* ignorieren */ } + // Kurz warten, dann hard reload + setTimeout(() => { + location.reload(); + }, 800); + // Nach Reload: wenn Version immer noch alt, iOS-Hinweis anzeigen + sessionStorage.setItem('by_update_reload', APP_VER); + }); + } + + function _initVersionCheck() { + // Beim Start nach 10 Sekunden prüfen (nicht sofort — Prio für Auth) + setTimeout(_checkVersion, 10_000); + // Dann alle 30 Minuten + setInterval(_checkVersion, 30 * 60_000); + // Beim Wiedereinstieg in die App + document.addEventListener('visibilitychange', () => { + if (document.visibilityState === 'visible') _checkVersion(); + }); + // Nach Reload: war das ein Update-Reload? Falls Version immer noch alt → iOS-Hinweis + const reloadVer = sessionStorage.getItem('by_update_reload'); + if (reloadVer && reloadVer === APP_VER) { + // Version hat sich nicht geändert nach Reload → iOS-Cache-Problem + sessionStorage.removeItem('by_update_reload'); + setTimeout(() => { + fetch('/api/version', { cache: 'no-store' }) + .then(r => r.json()) + .then(({ version }) => { + if (version && version !== APP_VER) { + _updateBannerShown = true; + _showUpdateBanner(version); + // iOS-Hinweis sofort aufklappen + setTimeout(() => { + document.getElementById('upd-ios-hint')?.style.setProperty('display', 'block'); + }, 300); + } + }).catch(() => {}); + }, 2000); + } + } + // ---------------------------------------------------------- // ÖFFENTLICHE API // (andere Module können App.state, App.navigate etc. nutzen) diff --git a/backend/static/landing.html b/backend/static/landing.html index 860396f..f1a6b16 100644 --- a/backend/static/landing.html +++ b/backend/static/landing.html @@ -472,217 +472,176 @@ -
+ +
-

Alles für Hundebesitzer in einer App

-

Ban Yaro vereint alle wichtigen Hunde-Tools — ohne Werbung, ohne Datenweitergabe an US-Konzerne, ohne monatliche Pflichtkosten.

+

Dein Hund. Dein Alltag. Alles an einem Ort.

+

Nie wieder Impftermine vergessen. Immer wissen was heute dran ist. Und nach 30 Tagen Training endlich der Rückruf der zuverlässig klappt.

-
-
Mein Hund
-
-
- 🏠 -

Personalisiertes Dashboard

Die Startseite begrüßt dich mit einem täglich wechselnden Foto deines Hundes aus dem Tagebuch, zeigt aktuelle Stats (letzter Eintrag, nächster Termin, Gewicht, Übung des Tages) und navigiert direkt zu allen Bereichen.

Kostenlos
-
-
- 📓 -

Tagebuch

Fotos, Videos, Texte und GPS-Orte — alle Momente mit deinem Hund. Kategorien wie Spaziergänge, Meilensteine, Lustiges.

Kostenlos
-
-
- 💉 -

Gesundheit & Impfpass

Impfungen, Tierarztbesuche, Medikamente digital verwalten. Automatische Erinnerungen per Push-Notification.

Kostenlos
-
-
- 🎯 -

Training & Übungen

Einheiten loggen (Wiederholungen, Erfolgsquote, Stimmung), Fortschritt in 5 Stufen verfolgen. Virtueller Trainer empfiehlt täglich welche Übungen anstehen — inkl. Trendanalyse und Prognose bis zur Meisterschaft. Streaks, Abzeichen und Trainingskalender motivieren dranzubleiben.

Kostenlos
-
-
- 🏅 -

Kommandos & Fähigkeiten

Alle beherrschten Kommandos sichtbar im Hunde-Profil — praktisch für Hundesitter, die genau wissen müssen worauf dein Hund reagiert.

Kostenlos
-
-
- 🏥 -

Symptom-Checker

KI-gestützte Ersteinschätzung: beobachten, Tierarzt oder Notfall? Orientierung wann es wirklich dringend ist.

Kostenlos
-
-
- 🛁 -

Pflege-System

43 rassenspezifische Pflegetipps: Fell (mit Schneiden/Trimmen-Unterscheidung), Krallen, Zähne, Ohren, Augen, Pfoten und mehr — Tipp des Tages automatisch ausgewählt.

Kostenlos
-
-
- 🎉 -

Wöchentlicher Lober

Jeden Montag schreibt die KI 2-3 Sätze Lob für eure Vorwoche — nur Lob, kein Rat, kein Druck. Motivation die gut tut.

Kostenlos
-
-
- 🌤️ -

Wetter & Zecken-Alarm

Aktuelles Wetter direkt in der App (ohne API-Key). Automatische Zecken-Warnung wenn Saison und Temperatur passen.

Kostenlos
-
-
-

Gassi-Score

Tägliche Bewertung 1–10: Ist heute ein guter Tag für eine Runde? Berechnet aus Temperatur, Regenwahrscheinlichkeit und Wind. Mit 7-Tage-Vorschau und persönlichen Wetter-Rekorden.

Kostenlos
-
- 📄 -

Digitaler Heimtierausweis

Alle Gesundheitsdaten als druckbares Dokument — für Tierarzt, Tierpension oder Auslandsreise.

Kostenlos
-
-
-

Ernährung & Futter

Kalorienbedarf nach Gewicht, Aktivität und Kastration berechnen. BARF-, Nass- und Trockenfutter-Vergleich, vollständige Giftliste für Hunde und KI-Futterberater.

Kostenlos
-
-

Hunde-Persönlichkeitstest

20 Fragen, 4 Typen (Forscher, Wächter, Spieler, Treuer). Personalisierte Trainingstipps passend zum Charakter deines Hundes.

Kostenlos
-
-

Reise mit Hund

Editierbare Reisecheckliste für den nächsten Urlaub und EU-Länder-Guide mit länderspezifischen Einreiseregeln, Impfvorschriften und Besonderheiten.

Kostenlos
-
- 🆔 -

NFC-Halsband-Tags

Öffentliche Profilseite für jeden Hund. Finder kontaktiert dich anonym — ohne deine Nummer preiszugeben.

Kostenlos + Shop
-
+
+
+
🏥
+

Gesundheit im Griff

+

Impfpass, Tierarztbesuche und Medikamente digital. Automatische Erinnerungen damit du nie wieder einen Termin verpasst.

+
+
+
🎯
+

Training das wirklich funktioniert

+

Tägliche Übungsempfehlung passend zu eurem Stand. Ein KI-Trainer der analysiert wo ihr steht und was als nächstes kommt.

+
+
+
📖
+

Alles festhalten was zählt

+

Tagebuch mit Fotos, GPS und Stimmungen. Gassi-Score damit du weißt ob heute ein guter Tag für eine lange Runde ist.

-
-
Entdecken
-
-
- 🗺️ -

Karte & Umgebung

Interaktive Karte mit Giftköder-Meldungen, Gassi-Treffen, Routen und hundefreundlichen Orten in der Nähe.

Kostenlos
+ + Alle Features für Hundebesitzer ansehen ▾ + +
+
+
Mein Hund
+
+
+ 🏠 +

Personalisiertes Dashboard

Täglich wechselndes Foto deines Hundes, aktuelle Stats, nächster Termin, Gewicht, Übung des Tages.

+
+
+ 📓 +

Tagebuch

Fotos, Videos, Texte und GPS-Orte — alle Momente mit deinem Hund. Kalender-, Karten- und Medien-Ansicht.

+
+
+ 💉 +

Gesundheit & Impfpass

Impfungen, Tierarztbesuche, Medikamente digital verwalten. Automatische Erinnerungen per Push-Notification.

+
+
+ 🎯 +

Training & KI-Trainer

104 Übungen, Einheiten loggen, Fortschritt in 5 Stufen. Virtueller Trainer mit täglichen Empfehlungen, Streaks und Abzeichen.

+
+
+ 🏥 +

Symptom-Checker

KI-gestützte Ersteinschätzung: beobachten, Tierarzt oder Notfall?

+
+
+ 🛁 +

Pflege-System

43 rassenspezifische Pflegetipps in 10 Kategorien — Tipp des Tages automatisch ausgewählt.

+
+
+ 🌤️ +

Wetter, Gassi-Score & Zecken-Alarm

7-Tage-Wetter, tägliche Bewertung 1–10 für Gassi-Eignung, automatische Zecken-Warnung.

+
+
+ 🍖 +

Ernährung & Futter

Kalorienbedarf berechnen, BARF-Guide, Giftliste und KI-Futterberater.

+
+
+ ✈️ +

Reise mit Hund

Reisecheckliste und EU-Länder-Guide mit länderspezifischen Einreiseregeln und Impfvorschriften.

+
+
+ 🆔 +

NFC-Halsband-Tags

Öffentliche Profilseite für jeden Hund. Finder kontaktiert dich anonym — ohne deine Nummer preiszugeben.

+
-
- 🐾 -

GPS-Routen

Routen aufzeichnen, teilen und bewerten — Untergrund, Schatten, Leinenpflicht, Sicherheit.

Kostenlos
-
-
- 🧭 -

Tages-Gassirunde

Täglich eine neue Rundroute vorgeschlagen — 2, 4 oder 6 km ab deinem Standort. Berechnet via OpenRouteService, direkt navigierbar. 3 verschiedene Varianten pro Tag.

Kostenlos
-
-
- 📅 -

Events & Turniere

Agility-Turniere, Hundeausstellungen und lokale Veranstaltungen in deiner Region.

Kostenlos
-
-
- 📍 -

Hundefreundliche Orte

Crowd-sourced Datenbank: Restaurants, Cafés, Parks, Geschäfte — mit echten Bewertungen von Hundebesitzern.

Kostenlos
+
+ +
+
Community & Entdecken
+
+
+ ⚠️ +

Giftköder-Alarm

GPS-Meldungen mit Foto, sofortige Push-Notification für alle Nutzer im Umkreis.

+
+
+ 🚨 +

Verlorener Hund

Sofortalarm für alle Nutzer in der Nähe — mit Foto, letzter GPS-Position und direktem Kontakt.

+
+
+ 🧭 +

Tages-Gassirunde

Täglich neue Rundroute — 2, 4 oder 6 km ab deinem Standort. Berechnet via OpenRouteService.

+
+
+ 🐕 +

Gassi-Treffen

Spontane oder geplante Gassi-Treffen erstellen und finden.

+
+
+ 💬 +

Forum

Öffentlich lesbar ohne Anmeldung. Kategorien nach Rasse, Region, Gesundheit und Erziehung.

+
+
+ 📚 +

Hunde-Wiki

1003 Hunderassen — Wikipedia-grounded und von KI angereichert. Community-Fotos und Rassen-Quiz.

+
- -
-
Community
-
-
- ⚠️ -

Giftköder-Alarm

Meldungen mit GPS und Foto. Alle Nutzer im Umkreis bekommen sofort eine Push-Benachrichtigung.

Kostenlos
-
-
- 🚨 -

Verlorener Hund

Sofortalarm für alle Nutzer in der Nähe — mit Foto, letzter GPS-Position und direktem Kontakt.

Kostenlos
-
-
- 🐕 -

Gassi-Treffen

Spontane oder geplante Gassi-Treffen erstellen und finden. Mit Hunde-Profilen der Teilnehmer.

Kostenlos
-
-
- 🏠 -

Hundesitting

Vertrauenswürdige Sitter finden — nur 8% Provision statt 20% bei Rover oder Pawshake.

8% Provision
-
-
- 💬 -

Forum

Öffentlich lesbar ohne Anmeldung. Kategorien nach Rasse, Region, Gesundheit und Erziehung. Schreiben nach E-Mail-Verifikation — für Qualität statt Spam.

Kostenlos
-
-
-
- -
-
Wissen
-
-
- 📚 -

Hunde-Wiki

1003 Hunderassen — Wikipedia-grounded und von KI angereichert: Charakter, Größe, Aktivität, Lebensdauer, Temperament. Community-Fotos mit Bildrechte-Bestätigung. "Passt diese Rasse zu mir?" Quiz.

Kostenlos
-
-
- 🤝 -

Hunde-Knigge

Begegnungen mit fremden Hunden, Kindern, Radfahrern. ÖPNV-Regeln, Leinenpflicht, Haftpflicht.

Kostenlos
-
-
- 🎬 -

Hunde-Filmdatenbank

68 Filme, Serien und Dokumentationen — sortierbar nach Jahr, IMDb-Bewertung oder Community-Rating. Mit der wichtigsten Frage: "Stirbt der Hund?" Nie wieder unvorbereitet stolpern.

Kostenlos
-
-
- 🩹 -

Erste Hilfe

Notfallratgeber für häufige Situationen — Vergiftung, Wunden, Hitzschlag. Mit klaren Handlungsschritten.

Kostenlos
-
-
-

Hilfe & FAQ

Integriertes Handbuch direkt in der App — Installation, erste Schritte, Standort-Probleme, Account-Fragen. Kein App Store, kein Support-Ticket.

Kostenlos
-
-
- -
-
Für Züchter
-
-
- 🐾 -

Wurfbörse

Öffentliche Wurfankündigungen mit Filter nach Rasse und Status. Interessenten schreiben direkt per Nachricht an. Für Käufer kostenlos.

Züchter
-
-
- 🌳 -

Stammbaum

4 Generationen visuell dargestellt. Klickbare Knoten öffnen das Hunde-Profil. Teilen per Link für Käufer-Dokumentation.

Züchter
-
-
- 🧬 -

Inzucht-Koeffizient

Automatische Berechnung nach Wright's Formel. Ampel-Bewertung: optimal unter 2,5%, kritisch ab 12,5%. Probeverpaarung simuliert jeden beliebigen Anpaarungspartner.

Züchter
-
-
- 🩺 -

Gesundheitsdokumentation

HD, ED, Augen, Herz, DNA-Tests — alle Nachweise strukturiert erfasst. Farbcodierte Ergebnis-Badges auf einen Blick.

Züchter
-
-
- 🛡️ -

Tierschutz-Check

Automatische Prüfung bei jeder Verpaarung: Alter, Wurfhäufigkeit, Deckpause, genetische Risiken. Nicht abschaltbar — weil die Tiere zählen.

Züchter
-
-
- 🤖 -

KI-Assistenz

Wurfankündigungen schreiben, Genetik-Erklärungen für Käufer formulieren, Paarungsanalyse mit Empfehlung, Jahresauswertung. Nutzt Claude Sonnet direkt.

Züchter
-
-
- 📊 -

Datenexport

Alle Zuchtkartei-Daten als HTML-Dossier (druckbar, mit Stammbaum-Visualisierung) und ODS-Tabelle (editierbar in LibreOffice/Excel). Keine Datenfalle.

Züchter
-
-
- 📄 -

Kaufvertrag

Automatisch ausgefüllter Kaufvertrag pro Welpe als druckbares Dokument — mit Chip-Nummer, Geburtsdatum, Käufer- und Züchterdaten.

Züchter
-
-
-
-
-
+ +
-

Die Plattform für verantwortungsvolle Züchter

-

Ban Yaro ist die erste Hunde-App die Zucht-Management, Tierschutz-Checks und KI-Assistenz in einer Plattform verbindet — gedacht für Züchter die ihre Tiere ernst nehmen.

+

Züchten. Nicht verwalten.

+

Stammbaum, Inzucht-Koeffizient, Wurfverwaltung, Tierschutz-Check — alles was du brauchst, nichts was du nicht brauchst. Kein Excel. Keine veraltete Verbandssoftware.

-
- -
-
🐕‍🦺
-

Für Käufer

-

Finde deinen Welpen in der Wurfbörse mit vollem Einblick in Gesundheitstests, Gentests und Stammbaum der Eltern. Schreibe direkt mit dem Züchter. Keine versteckten Händler.

+
+
+
🧬
+

Transparenz die Vertrauen schafft

+

Stammbaum bis 4 Generationen, Gesundheitstests, Gentests — alles für Käufer sichtbar. Die erste Plattform die Zucht wirklich transparent macht.

- -
-
-

Transparenz als Standard

-

Verifizierte Züchter-Profile mit öffentlich sichtbaren Gesundheitsdaten. Der Tierschutz-Check läuft bei jeder Verpaarung automatisch — Ergebnisse gehen direkt an den Admin wenn kritische Grenzen überschritten werden.

+
+
⚖️
+

Tierschutz automatisch

+

Der Tierschutz-Check läuft bei jeder Verpaarung automatisch. Nicht abschaltbar — weil die Tiere zählen. Dein stärkstes Argument gegenüber Käufern.

+
+
+
📋
+

Von der Verpaarung bis zum Kaufvertrag

+

Wurfbörse, Welpen-Verwaltung, automatischer Kaufvertrag. Interessenten schreiben direkt per Chat — du hast alles an einem Ort.

-
+ + Züchter-Profil anlegen — kostenlos +
+
+ + +
+
+

Den richtigen Welpen finden. Sicher.

+

Verifizierte Züchter, transparente Gesundheitsdaten, direkter Kontakt. Kein Kleinanzeigen-Chaos.

+ +
+
+
🔍
+

Nur verifizierte Züchter

+

Jeder Züchter auf Ban Yaro wurde geprüft. Stammbaum und Gesundheitstests öffentlich einsehbar — bevor du fragst.

+
+
+
💬
+

Direkt zum Züchter

+

Kein Umweg über Kleinanzeigen. Schreib direkt per Nachricht, sieh Fotos der Eltern und des Wurfs.

+
+
+
🏠
+

Vorbereitet wenn der Welpe kommt

+

Starte direkt mit Tagebuch, Training und Gesundheitsakte. Alles bereit für den ersten Tag.

+
+
+ + Wurfbörse durchstöbern — kostenlos
diff --git a/backend/static/sw.js b/backend/static/sw.js index d021722..1a3ba98 100644 --- a/backend/static/sw.js +++ b/backend/static/sw.js @@ -3,7 +3,7 @@ Offline-Cache + Push Notifications + Tile-Cache ============================================================ */ -const CACHE_VERSION = 'by-v729'; +const CACHE_VERSION = 'by-v730'; const CACHE_STATIC = `${CACHE_VERSION}-static`; const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten const CACHE_API = 'ban-yaro-api-v1'; // API-Response-Cache