Feature: Persistentes Update-Banner mit iOS-Anleitung, Version-Poll alle 30min (SW by-v730)

This commit is contained in:
rene 2026-05-06 17:20:19 +02:00
parent e4da75f246
commit 8b87f29f5b
5 changed files with 269 additions and 189 deletions

View file

@ -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():

View file

@ -578,7 +578,7 @@
<script src="/js/api.js?v=94"></script>
<script src="/js/ui.js?v=94"></script>
<script src="/js/app.js?v=94"></script>
<script src="/js/worlds.js?v=729"></script>
<script src="/js/worlds.js?v=730"></script>
<!-- Feature-Seiten werden lazy geladen -->

View file

@ -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 = `
<div style="display:flex;align-items:center;justify-content:space-between;gap:10px">
<div>
<div style="font-weight:700;font-size:var(--text-sm)">
Neue Version verfügbar (v${newVersion})
</div>
<div style="font-size:var(--text-xs);opacity:0.85;margin-top:2px">
Tippe auf Aktualisieren um die neueste Version zu laden.
</div>
</div>
<div style="display:flex;gap:8px;flex-shrink:0">
<button id="upd-btn-reload"
style="background:rgba(255,255,255,0.2);border:1px solid rgba(255,255,255,0.4);
color:#fff;border-radius:10px;padding:8px 14px;cursor:pointer;
font-size:var(--text-sm);font-weight:700;white-space:nowrap">
Aktualisieren
</button>
<button id="upd-btn-close"
style="background:none;border:none;color:rgba(255,255,255,0.7);
cursor:pointer;font-size:1.1rem;padding:4px 6px;line-height:1"></button>
</div>
</div>
<div id="upd-ios-hint" style="display:none;font-size:var(--text-xs);
background:rgba(0,0,0,0.2);border-radius:10px;padding:10px 12px;line-height:1.6">
${isIos
? `Falls die App nach dem Aktualisieren noch die alte Version zeigt:<br>
<strong>1.</strong> Drücke lange auf das App-Icon am Homescreen<br>
<strong>2.</strong> Wähle App entfernen" (nur das Symbol, keine Daten)<br>
<strong>3.</strong> Öffne banyaro.app in Safari und füge die App erneut hinzu`
: `Falls die App nicht aktualisiert:<br>
Öffne banyaro.app im Browser und füge sie erneut zum Startbildschirm hinzu.`}
</div>
`;
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)

View file

@ -472,217 +472,176 @@
<nav>
<div class="container">
<span class="nav-brand">Ban Yaro</span>
<a href="#funktionen">Funktionen</a>
<a href="#funktionen">Hundebesitzer</a>
<a href="#zuechter">Züchter</a>
<a href="#welpen">Welpen</a>
<a href="#vergleich">Vergleich</a>
<a href="#preise">Preise</a>
<a href="#warum">Warum Ban Yaro?</a>
<a href="/wiki/rassen">Rassen-Wiki</a>
<a href="/knigge">Knigge</a>
<a href="/">App öffnen</a>
</div>
</nav>
<section id="funktionen">
<!-- Sektion A: Für Hundebesitzer -->
<section id="funktionen" style="background: #f5f5f5;">
<div class="container">
<h2>Alles für Hundebesitzer in einer App</h2>
<p class="section-intro">Ban Yaro vereint alle wichtigen Hunde-Tools — ohne Werbung, ohne Datenweitergabe an US-Konzerne, ohne monatliche Pflichtkosten.</p>
<h2>Dein Hund. Dein Alltag. Alles an einem Ort.</h2>
<p class="section-intro">Nie wieder Impftermine vergessen. Immer wissen was heute dran ist. Und nach 30 Tagen Training endlich der Rückruf der zuverlässig klappt.</p>
<div class="feature-group">
<div class="feature-group-label">Mein Hund</div>
<div class="feature-grid">
<div class="feature-card">
<span class="feature-icon">🏠</span>
<div><h3>Personalisiertes Dashboard</h3><p>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.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">📓</span>
<div><h3>Tagebuch</h3><p>Fotos, Videos, Texte und GPS-Orte — alle Momente mit deinem Hund. Kategorien wie Spaziergänge, Meilensteine, Lustiges.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">💉</span>
<div><h3>Gesundheit & Impfpass</h3><p>Impfungen, Tierarztbesuche, Medikamente digital verwalten. Automatische Erinnerungen per Push-Notification.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🎯</span>
<div><h3>Training & Übungen</h3><p>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.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🏅</span>
<div><h3>Kommandos & Fähigkeiten</h3><p>Alle beherrschten Kommandos sichtbar im Hunde-Profil — praktisch für Hundesitter, die genau wissen müssen worauf dein Hund reagiert.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🏥</span>
<div><h3>Symptom-Checker</h3><p>KI-gestützte Ersteinschätzung: beobachten, Tierarzt oder Notfall? Orientierung wann es wirklich dringend ist.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🛁</span>
<div><h3>Pflege-System</h3><p>43 rassenspezifische Pflegetipps: Fell (mit Schneiden/Trimmen-Unterscheidung), Krallen, Zähne, Ohren, Augen, Pfoten und mehr — Tipp des Tages automatisch ausgewählt.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🎉</span>
<div><h3>Wöchentlicher Lober</h3><p>Jeden Montag schreibt die KI 2-3 Sätze Lob für eure Vorwoche — nur Lob, kein Rat, kein Druck. Motivation die gut tut.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🌤️</span>
<div><h3>Wetter & Zecken-Alarm</h3><p>Aktuelles Wetter direkt in der App (ohne API-Key). Automatische Zecken-Warnung wenn Saison und Temperatur passen.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div></div>
<div><h3>Gassi-Score</h3><p>Tägliche Bewertung 110: Ist heute ein guter Tag für eine Runde? Berechnet aus Temperatur, Regenwahrscheinlichkeit und Wind. Mit 7-Tage-Vorschau und persönlichen Wetter-Rekorden.</p><span class="feature-tag">Kostenlos</span></div>
<div class="feature-card">
<span class="feature-icon">📄</span>
<div><h3>Digitaler Heimtierausweis</h3><p>Alle Gesundheitsdaten als druckbares Dokument — für Tierarzt, Tierpension oder Auslandsreise.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div></div>
<div><h3>Ernährung & Futter</h3><p>Kalorienbedarf nach Gewicht, Aktivität und Kastration berechnen. BARF-, Nass- und Trockenfutter-Vergleich, vollständige Giftliste für Hunde und KI-Futterberater.</p><span class="feature-tag">Kostenlos</span></div>
<div></div>
<div><h3>Hunde-Persönlichkeitstest</h3><p>20 Fragen, 4 Typen (Forscher, Wächter, Spieler, Treuer). Personalisierte Trainingstipps passend zum Charakter deines Hundes.</p><span class="feature-tag">Kostenlos</span></div>
<div></div>
<div><h3>Reise mit Hund</h3><p>Editierbare Reisecheckliste für den nächsten Urlaub und EU-Länder-Guide mit länderspezifischen Einreiseregeln, Impfvorschriften und Besonderheiten.</p><span class="feature-tag">Kostenlos</span></div>
<div class="feature-card">
<span class="feature-icon">🆔</span>
<div><h3>NFC-Halsband-Tags</h3><p>Öffentliche Profilseite für jeden Hund. Finder kontaktiert dich anonym — ohne deine Nummer preiszugeben.</p><span class="feature-tag">Kostenlos + Shop</span></div>
</div>
<div class="outcome-grid">
<div class="outcome-card">
<div class="oc-icon">🏥</div>
<h3>Gesundheit im Griff</h3>
<p>Impfpass, Tierarztbesuche und Medikamente digital. Automatische Erinnerungen damit du nie wieder einen Termin verpasst.</p>
</div>
<div class="outcome-card">
<div class="oc-icon">🎯</div>
<h3>Training das wirklich funktioniert</h3>
<p>Tägliche Übungsempfehlung passend zu eurem Stand. Ein KI-Trainer der analysiert wo ihr steht und was als nächstes kommt.</p>
</div>
<div class="outcome-card">
<div class="oc-icon">📖</div>
<h3>Alles festhalten was zählt</h3>
<p>Tagebuch mit Fotos, GPS und Stimmungen. Gassi-Score damit du weißt ob heute ein guter Tag für eine lange Runde ist.</p>
</div>
</div>
<div class="feature-group">
<div class="feature-group-label">Entdecken</div>
<div class="feature-grid">
<div class="feature-card">
<span class="feature-icon">🗺️</span>
<div><h3>Karte & Umgebung</h3><p>Interaktive Karte mit Giftköder-Meldungen, Gassi-Treffen, Routen und hundefreundlichen Orten in der Nähe.</p><span class="feature-tag">Kostenlos</span></div>
<span class="section-cta-link" onclick="var c=document.getElementById('hundebesitzer-details');c.classList.toggle('open');this.textContent=c.classList.contains('open')?'▴ Weniger anzeigen':'+ Alle Features für Hundebesitzer ansehen ▾'">+ Alle Features für Hundebesitzer ansehen ▾</span>
<div id="hundebesitzer-details" class="collapsible-content">
<div class="feature-group">
<div class="feature-group-label">Mein Hund</div>
<div class="feature-grid">
<div class="feature-card">
<span class="feature-icon">🏠</span>
<div><h3>Personalisiertes Dashboard</h3><p>Täglich wechselndes Foto deines Hundes, aktuelle Stats, nächster Termin, Gewicht, Übung des Tages.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">📓</span>
<div><h3>Tagebuch</h3><p>Fotos, Videos, Texte und GPS-Orte — alle Momente mit deinem Hund. Kalender-, Karten- und Medien-Ansicht.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">💉</span>
<div><h3>Gesundheit &amp; Impfpass</h3><p>Impfungen, Tierarztbesuche, Medikamente digital verwalten. Automatische Erinnerungen per Push-Notification.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🎯</span>
<div><h3>Training &amp; KI-Trainer</h3><p>104 Übungen, Einheiten loggen, Fortschritt in 5 Stufen. Virtueller Trainer mit täglichen Empfehlungen, Streaks und Abzeichen.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🏥</span>
<div><h3>Symptom-Checker</h3><p>KI-gestützte Ersteinschätzung: beobachten, Tierarzt oder Notfall?</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🛁</span>
<div><h3>Pflege-System</h3><p>43 rassenspezifische Pflegetipps in 10 Kategorien — Tipp des Tages automatisch ausgewählt.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🌤️</span>
<div><h3>Wetter, Gassi-Score &amp; Zecken-Alarm</h3><p>7-Tage-Wetter, tägliche Bewertung 110 für Gassi-Eignung, automatische Zecken-Warnung.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🍖</span>
<div><h3>Ernährung &amp; Futter</h3><p>Kalorienbedarf berechnen, BARF-Guide, Giftliste und KI-Futterberater.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">✈️</span>
<div><h3>Reise mit Hund</h3><p>Reisecheckliste und EU-Länder-Guide mit länderspezifischen Einreiseregeln und Impfvorschriften.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🆔</span>
<div><h3>NFC-Halsband-Tags</h3><p>Öffentliche Profilseite für jeden Hund. Finder kontaktiert dich anonym — ohne deine Nummer preiszugeben.</p></div>
</div>
</div>
<div class="feature-card">
<span class="feature-icon">🐾</span>
<div><h3>GPS-Routen</h3><p>Routen aufzeichnen, teilen und bewerten — Untergrund, Schatten, Leinenpflicht, Sicherheit.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🧭</span>
<div><h3>Tages-Gassirunde</h3><p>Täglich eine neue Rundroute vorgeschlagen — 2, 4 oder 6 km ab deinem Standort. Berechnet via OpenRouteService, direkt navigierbar. 3 verschiedene Varianten pro Tag.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">📅</span>
<div><h3>Events & Turniere</h3><p>Agility-Turniere, Hundeausstellungen und lokale Veranstaltungen in deiner Region.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">📍</span>
<div><h3>Hundefreundliche Orte</h3><p>Crowd-sourced Datenbank: Restaurants, Cafés, Parks, Geschäfte — mit echten Bewertungen von Hundebesitzern.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-group">
<div class="feature-group-label">Community &amp; Entdecken</div>
<div class="feature-grid">
<div class="feature-card">
<span class="feature-icon">⚠️</span>
<div><h3>Giftköder-Alarm</h3><p>GPS-Meldungen mit Foto, sofortige Push-Notification für alle Nutzer im Umkreis.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🚨</span>
<div><h3>Verlorener Hund</h3><p>Sofortalarm für alle Nutzer in der Nähe — mit Foto, letzter GPS-Position und direktem Kontakt.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🧭</span>
<div><h3>Tages-Gassirunde</h3><p>Täglich neue Rundroute — 2, 4 oder 6 km ab deinem Standort. Berechnet via OpenRouteService.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">🐕</span>
<div><h3>Gassi-Treffen</h3><p>Spontane oder geplante Gassi-Treffen erstellen und finden.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">💬</span>
<div><h3>Forum</h3><p>Öffentlich lesbar ohne Anmeldung. Kategorien nach Rasse, Region, Gesundheit und Erziehung.</p></div>
</div>
<div class="feature-card">
<span class="feature-icon">📚</span>
<div><h3><a href="/wiki/rassen">Hunde-Wiki</a></h3><p>1003 Hunderassen — Wikipedia-grounded und von KI angereichert. Community-Fotos und Rassen-Quiz.</p></div>
</div>
</div>
</div>
</div>
<div class="feature-group">
<div class="feature-group-label">Community</div>
<div class="feature-grid">
<div class="feature-card">
<span class="feature-icon">⚠️</span>
<div><h3>Giftköder-Alarm</h3><p>Meldungen mit GPS und Foto. Alle Nutzer im Umkreis bekommen sofort eine Push-Benachrichtigung.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🚨</span>
<div><h3>Verlorener Hund</h3><p>Sofortalarm für alle Nutzer in der Nähe — mit Foto, letzter GPS-Position und direktem Kontakt.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🐕</span>
<div><h3>Gassi-Treffen</h3><p>Spontane oder geplante Gassi-Treffen erstellen und finden. Mit Hunde-Profilen der Teilnehmer.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🏠</span>
<div><h3>Hundesitting</h3><p>Vertrauenswürdige Sitter finden — nur 8% Provision statt 20% bei Rover oder Pawshake.</p><span class="feature-tag">8% Provision</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">💬</span>
<div><h3>Forum</h3><p>Öffentlich lesbar ohne Anmeldung. Kategorien nach Rasse, Region, Gesundheit und Erziehung. Schreiben nach E-Mail-Verifikation — für Qualität statt Spam.</p><span class="feature-tag">Kostenlos</span></div>
</div>
</div>
</div>
<div class="feature-group">
<div class="feature-group-label">Wissen</div>
<div class="feature-grid">
<div class="feature-card">
<span class="feature-icon">📚</span>
<div><h3><a href="/wiki/rassen">Hunde-Wiki</a></h3><p>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.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🤝</span>
<div><h3><a href="/knigge">Hunde-Knigge</a></h3><p>Begegnungen mit fremden Hunden, Kindern, Radfahrern. ÖPNV-Regeln, Leinenpflicht, Haftpflicht.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🎬</span>
<div><h3>Hunde-Filmdatenbank</h3><p>68 Filme, Serien und Dokumentationen — sortierbar nach Jahr, IMDb-Bewertung oder Community-Rating. Mit der wichtigsten Frage: "Stirbt der Hund?" Nie wieder unvorbereitet stolpern.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🩹</span>
<div><h3>Erste Hilfe</h3><p>Notfallratgeber für häufige Situationen — Vergiftung, Wunden, Hitzschlag. Mit klaren Handlungsschritten.</p><span class="feature-tag">Kostenlos</span></div>
</div>
<div></div>
<div><h3>Hilfe & FAQ</h3><p>Integriertes Handbuch direkt in der App — Installation, erste Schritte, Standort-Probleme, Account-Fragen. Kein App Store, kein Support-Ticket.</p><span class="feature-tag">Kostenlos</span></div>
</div>
</div>
<div class="feature-group">
<div class="feature-group-label">Für Züchter</div>
<div class="feature-grid">
<div class="feature-card">
<span class="feature-icon">🐾</span>
<div><h3>Wurfbörse</h3><p>Öffentliche Wurfankündigungen mit Filter nach Rasse und Status. Interessenten schreiben direkt per Nachricht an. Für Käufer kostenlos.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🌳</span>
<div><h3>Stammbaum</h3><p>4 Generationen visuell dargestellt. Klickbare Knoten öffnen das Hunde-Profil. Teilen per Link für Käufer-Dokumentation.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🧬</span>
<div><h3>Inzucht-Koeffizient</h3><p>Automatische Berechnung nach Wright's Formel. Ampel-Bewertung: optimal unter 2,5%, kritisch ab 12,5%. Probeverpaarung simuliert jeden beliebigen Anpaarungspartner.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🩺</span>
<div><h3>Gesundheitsdokumentation</h3><p>HD, ED, Augen, Herz, DNA-Tests — alle Nachweise strukturiert erfasst. Farbcodierte Ergebnis-Badges auf einen Blick.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🛡️</span>
<div><h3>Tierschutz-Check</h3><p>Automatische Prüfung bei jeder Verpaarung: Alter, Wurfhäufigkeit, Deckpause, genetische Risiken. Nicht abschaltbar — weil die Tiere zählen.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">🤖</span>
<div><h3>KI-Assistenz</h3><p>Wurfankündigungen schreiben, Genetik-Erklärungen für Käufer formulieren, Paarungsanalyse mit Empfehlung, Jahresauswertung. Nutzt Claude Sonnet direkt.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">📊</span>
<div><h3>Datenexport</h3><p>Alle Zuchtkartei-Daten als HTML-Dossier (druckbar, mit Stammbaum-Visualisierung) und ODS-Tabelle (editierbar in LibreOffice/Excel). Keine Datenfalle.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
<div class="feature-card">
<span class="feature-icon">📄</span>
<div><h3>Kaufvertrag</h3><p>Automatisch ausgefüllter Kaufvertrag pro Welpe als druckbares Dokument — mit Chip-Nummer, Geburtsdatum, Käufer- und Züchterdaten.</p><span class="feature-tag" style="background:#7c3aed22;color:#7c3aed">Züchter</span></div>
</div>
</div>
</div>
</div>
</section>
<section id="zuechter" style="background: linear-gradient(135deg, #7c3aed08 0%, #a78bfa10 100%); border-top: 1px solid #ede9fe; border-bottom: 1px solid #ede9fe;">
<!-- Sektion B: Für Züchter -->
<section id="zuechter" style="background: #fffbf0;">
<div class="container">
<h2>Die Plattform für verantwortungsvolle Züchter</h2>
<p class="section-intro">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.</p>
<h2>Züchten. Nicht verwalten.</h2>
<p class="section-intro">Stammbaum, Inzucht-Koeffizient, Wurfverwaltung, Tierschutz-Check — alles was du brauchst, nichts was du nicht brauchst. Kein Excel. Keine veraltete Verbandssoftware.</p>
<div style="display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 2rem; margin-top: 2rem;">
<div style="background: white; border-radius: 12px; padding: 1.5rem; border: 1px solid #ede9fe;">
<div style="font-size: 2rem; margin-bottom: 0.75rem;">🐕‍🦺</div>
<h3 style="color: #7c3aed; margin-bottom: 0.5rem;">Für Käufer</h3>
<p style="color: #4b5563; font-size: 0.95rem; line-height: 1.6;">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.</p>
<div class="outcome-grid">
<div class="outcome-card">
<div class="oc-icon">🧬</div>
<h3>Transparenz die Vertrauen schafft</h3>
<p>Stammbaum bis 4 Generationen, Gesundheitstests, Gentests — alles für Käufer sichtbar. Die erste Plattform die Zucht wirklich transparent macht.</p>
</div>
<div style="background: white; border-radius: 12px; padding: 1.5rem; border: 1px solid #ede9fe;">
<div style="font-size: 2rem; margin-bottom: 0.75rem;"></div>
<h3 style="color: #7c3aed; margin-bottom: 0.5rem;">Transparenz als Standard</h3>
<p style="color: #4b5563; font-size: 0.95rem; line-height: 1.6;">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.</p>
<div class="outcome-card">
<div class="oc-icon">⚖️</div>
<h3>Tierschutz automatisch</h3>
<p>Der Tierschutz-Check läuft bei jeder Verpaarung automatisch. Nicht abschaltbar — weil die Tiere zählen. Dein stärkstes Argument gegenüber Käufern.</p>
</div>
<div class="outcome-card">
<div class="oc-icon">📋</div>
<h3>Von der Verpaarung bis zum Kaufvertrag</h3>
<p>Wurfbörse, Welpen-Verwaltung, automatischer Kaufvertrag. Interessenten schreiben direkt per Chat — du hast alles an einem Ort.</p>
</div>
</div>
<a href="/" class="section-cta-btn">Züchter-Profil anlegen — kostenlos</a>
</div>
</section>
<!-- Sektion C: Für Welpenkäufer -->
<section id="welpen" style="background: white;">
<div class="container">
<h2>Den richtigen Welpen finden. Sicher.</h2>
<p class="section-intro">Verifizierte Züchter, transparente Gesundheitsdaten, direkter Kontakt. Kein Kleinanzeigen-Chaos.</p>
<div class="outcome-grid">
<div class="outcome-card">
<div class="oc-icon">🔍</div>
<h3>Nur verifizierte Züchter</h3>
<p>Jeder Züchter auf Ban Yaro wurde geprüft. Stammbaum und Gesundheitstests öffentlich einsehbar — bevor du fragst.</p>
</div>
<div class="outcome-card">
<div class="oc-icon">💬</div>
<h3>Direkt zum Züchter</h3>
<p>Kein Umweg über Kleinanzeigen. Schreib direkt per Nachricht, sieh Fotos der Eltern und des Wurfs.</p>
</div>
<div class="outcome-card">
<div class="oc-icon">🏠</div>
<h3>Vorbereitet wenn der Welpe kommt</h3>
<p>Starte direkt mit Tagebuch, Training und Gesundheitsakte. Alles bereit für den ersten Tag.</p>
</div>
</div>
<a href="/wurfboerse" class="section-cta-btn">Wurfbörse durchstöbern — kostenlos</a>
</div>
</section>

View file

@ -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