diff --git a/backend/main.py b/backend/main.py
index 835da3e..40d15ce 100644
--- a/backend/main.py
+++ b/backend/main.py
@@ -406,7 +406,7 @@ async def serve_media(path: str, request: _Request):
raise _HE(404, "Nicht gefunden.")
return _media_response(filepath)
-APP_VER = "925" # muss mit APP_VER in app.js übereinstimmen
+APP_VER = "926" # muss mit APP_VER in app.js übereinstimmen
@app.get("/.well-known/assetlinks.json")
async def assetlinks():
diff --git a/backend/static/js/app.js b/backend/static/js/app.js
index 505ea98..176c0a9 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 = '925'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
+const APP_VER = '926'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
const APP_VERSION = '1.5.1'; // ← semantische Version, wird bei make release gesetzt
const IS_STAGING = location.hostname === 'staging.banyaro.app';
// Cache-Bust-Parameter nach Update-Reload sofort entfernen
diff --git a/backend/static/js/pages/settings.js b/backend/static/js/pages/settings.js
index 180069a..668275f 100644
--- a/backend/static/js/pages/settings.js
+++ b/backend/static/js/pages/settings.js
@@ -144,13 +144,61 @@ window.Page_settings = (() => {
const label = isPro ? 'Ban Yaro Pro' : 'Züchter';
const price = isPro ? '29 €/Jahr' : '49 €/Jahr';
const color = isPro ? '#16a34a' : '#C4843A';
- const features = isPro
- ? ['Mehrere Hunde verwalten', 'Ernährungsbereich mit KI-Berater', 'Erweiterte Karten-Layer', 'Alle künftigen Pro-Features']
- : ['Vollständige Züchter-Plattform', 'Warteliste, Läufigkeit & Trächtigkeit', 'Wurfverwaltung, Stammbaum, IK-Rechner', 'KI-Züchter-Assistent & Datenexport'];
+ const _group = (title, items) => `
+
+
${title}
+ ${items.map(f => `
+
+ ✓
+ ${f}
+
`).join('')}
+
`;
- const featureList = features.map(f =>
- `✓ ${f}`
- ).join('');
+ const featureList = isPro
+ ? _group('Deine Hunde', [
+ 'Bis zu 10 Hunde gleichzeitig verwalten',
+ 'Getrennte Trainingsfortschritte, Gesundheits- und Ernährungsdaten je Hund',
+ ])
+ + _group('Community & Alltag', [
+ 'Gassi-Treffen: Fotos und Rasse der Teilnehmer sichtbar, Fotos nach dem Treffen hochladen',
+ 'Direktnachrichten & Chat mit anderen Hundebesitzern',
+ 'Playdate: Spielkameraden in der Nähe finden und verabreden',
+ ])
+ + _group('Tools & Wissen', [
+ 'Ernährung: Kalorienbedarf-Rechner, BARF-Guide, Giftliste, KI-Ernährungsberater',
+ 'Reise-Checkliste & EU-Länder-Einreiseregeln',
+ 'Notizblock mit KI-Muster-Analyse',
+ 'Erweiterte Karten-Layer (Wandern, Radfahren, Satellit)',
+ 'Alle künftigen Pro-Features inklusive',
+ ])
+ : `
+ ✓ Alle Pro-Features inklusive —
+ mehrere Hunde, Ernährung, Gassi-Community, Chat, Playdate, Reise, Karten-Layer
+
`
+ + _group('Zucht-Management', [
+ 'Zuchtkartei: Stammdaten, Gesundheitstests (HD, ED, OCD, Augen, Herz, Patella, ZTP), Gentests (MDR1, PRA, DM, vWD)',
+ 'Wurfverwaltung: Welpen, Gewichtsverlauf, Fotos, automatisch ausgefüllter Kaufvertrag',
+ 'Warteliste: Interessenten mit Präferenzen (Geschlecht, Farbe, Verwendungszweck) pro Zuchthündin',
+ 'Läufigkeit & Trächtigkeit: Zykluskalender, Progesterontests, Deckdaten, Meilensteinberechnung',
+ 'Wurf-Buchstabe und Wurf-Name (z. B. A-Wurf, „Vatertags-Wurf")',
+ ])
+ + _group('KI & Analyse', [
+ 'KI-Züchter-Assistent: Wurfankündigungen schreiben, Genetik-Erklärung für Käufer, Paarungsanalyse',
+ 'Stammbaum bis 4 Generationen mit klickbaren Knoten',
+ 'Inzucht-Koeffizient (Wright\'s Formel, Ampel-Bewertung, Probeverpaarung)',
+ 'Tierschutz-Check automatisch bei jeder Verpaarung',
+ 'KI-Jahresbericht mit Trends und Empfehlungen',
+ ])
+ + _group('Sichtbarkeit & Export', [
+ 'Öffentliches Züchter-Profil unter banyaro.app/breeder/{zwingername}',
+ 'Wurfbörse: Würfe öffentlich ankündigen, Käufer schreiben direkt an',
+ 'Datenexport als HTML-Dossier und ODS-Tabelle (LibreOffice / Excel)',
+ 'Privater Züchter-Bereich mit Zwingername und Logo',
+ ]);
const inputStyle = `width:100%;box-sizing:border-box;padding:var(--space-2) var(--space-3);
border:1.5px solid var(--c-border);border-radius:var(--radius-md);
@@ -217,9 +265,9 @@ window.Page_settings = (() => {
Einmaliger Jahresbeitrag
Kündigung jederzeit möglich
-
+
${featureList}
-
+
diff --git a/backend/static/sw.js b/backend/static/sw.js
index 8f687c7..ffc4d5c 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-v925';
+const CACHE_VERSION = 'by-v926';
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