From 1fe878924a37ab755018c775e93859fd6d402f07 Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 7 May 2026 17:05:56 +0200 Subject: [PATCH] =?UTF-8?q?Fix:=20Landing-Page=20=E2=80=94=20Sitting=20kos?= =?UTF-8?q?tenlos,=20Phosphor-Icons,=20KI-Datenschutz=20korrekt,=20Pro-Fea?= =?UTF-8?q?tures=20ausgeblendet=20(SW=20by-v753)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/main.py | 2 +- backend/static/index.html | 2 +- backend/static/js/app.js | 13 ++++-------- backend/static/landing.html | 42 +++++++++++++------------------------ backend/static/sw.js | 2 +- 5 files changed, 22 insertions(+), 39 deletions(-) diff --git a/backend/main.py b/backend/main.py index cc27d9a..37dcdc6 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 = "752" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "753" # 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 2602fbd..c64470b 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 8b8ee5a..385c6f4 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 = '752'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '753'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.5.0'; // ← semantische Version, wird bei make release gesetzt const IS_STAGING = location.hostname === 'staging.banyaro.app'; @@ -555,20 +555,15 @@ const App = (() => { } async function _checkNearbyAlerts() { - const nav = document.getElementById('bottom-nav'); - if (!nav) return; try { const pos = await new Promise((resolve, reject) => navigator.geolocation.getCurrentPosition(resolve, reject, { timeout: 5000, maximumAge: 120_000 }) ); const { latitude: lat, longitude: lon } = pos.coords; - const data = await API.get(`/alerts?lat=${lat}&lon=${lon}`); - nav.classList.toggle('alert-poison', !!data.poison); - nav.classList.toggle('alert-lost', !data.poison && !!data.lost); - // Burger-Badge: Giftköder/Verlorener Hund in der Nähe - document.getElementById('notif-nav-badge')?.classList.toggle('hidden', !data.poison && !data.lost); + await API.get(`/alerts?lat=${lat}&lon=${lon}`); + // Standort-Update für Push-Subscriptions (serverseitig in /alerts gespeichert) } catch { - // Kein Standort verfügbar — kein Alert anzeigen + // Kein Standort verfügbar — ignorieren } } diff --git a/backend/static/landing.html b/backend/static/landing.html index b24ef34..9a6af32 100644 --- a/backend/static/landing.html +++ b/backend/static/landing.html @@ -373,7 +373,7 @@ margin-top: 2rem; } .usp-item { display: flex; align-items: flex-start; gap: 0.75rem; } - .usp-icon { font-size: 1.5rem; flex-shrink: 0; margin-top: 0.1rem; } + .usp-icon { width: 1.6rem; height: 1.6rem; flex-shrink: 0; margin-top: 0.15rem; color: var(--primary); } .usp-item h3 { font-size: 0.95rem; font-weight: 700; margin-bottom: 0.2rem; } .usp-item p { font-size: 0.85rem; color: var(--text-secondary); } @@ -591,14 +591,14 @@

Leute unter sich

-

Ein Forum nur für Hundemenschen. Fragen stellen, Erfahrungen teilen, lokale Gassi-Treffen organisieren — ohne Algorithmen, ohne Werbung.

+

Ein Forum nur für Hundemenschen. Fragen stellen, Erfahrungen teilen, Tipps weitergeben — ohne Algorithmen, ohne Werbung.

Jemanden für die Gassi gesucht?

-

Du musst da oder dort hin — finde jemanden der auf deinen Hund aufpasst. Hundesitting-Vermittlung mit nur 8% Provision statt 20% bei anderen.

+

Du musst da oder dort hin — finde jemanden der auf deinen Hund aufpasst. Hundesitting-Vermittlung kostenlos, ohne Provision. Ihr einigt euch direkt.

@@ -636,14 +636,6 @@

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.

@@ -666,10 +658,6 @@

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.

@@ -916,59 +904,59 @@

Ban Yaro wurde von Hundebesitzern für Hundebesitzer entwickelt — mit einem klaren Standpunkt zu Datenschutz und Fairness.

- 🇩🇪 +

Deutsche Plattform

Hosting in Deutschland, deutschsprachiger Support, auf DACH-Nutzer zugeschnitten.

- 🔒 +

Deine Daten. Dein Eigentum.

Keine Datenweitergabe an US-Konzerne. Cookielose Analytics (Umami). Transparente Datennutzung.

- 📱 +

Kein App Store

Als Progressive Web App direkt über den Browser installierbar — auf iOS und Android. Sofort updatebar.

- 📡 +

Offline-fähig

Service Worker sorgt dafür dass die App auch ohne Internet funktioniert — beim Gassi gehen in der Natur.

- 💸 +
-

Faire Provision

-

Hundesitting nur 8% Provision — Rover und Pawshake nehmen 20%. Mehr Geld bleibt beim Sitter.

+

Sitting ohne Provision

+

Hundesitting-Vermittlung kostenlos — keine Plattform-Provision, ihr einigt euch direkt. Rover und Pawshake nehmen 20%.

- 🗺️ +

OpenStreetMap

Karten von OpenStreetMap statt Google — keine Tracking-Cookies, kein API-Lock-in, günstiger für alle.

- 🔐 +

Aktive Sicherheit

HSTS, Content-Security-Policy, Rate Limiting auf allen Endpunkten, Account-Lockout nach Fehlversuchen, E-Mail-Verifikation. Sicherheit by Default, nicht als Nachgedanke.

- 🤖 +
-

KI Made in Europe

-

Alle KI-Funktionen laufen über Claude (Anthropic) — kein Training mit deinen Daten, kein Opt-out nötig, deine Daten bleiben deine Daten.

+

KI mit Datenschutz

+

KI-Funktionen laufen standardmäßig lokal auf unserem Server in Deutschland — deine Anfragen verlassen Europa nicht. Bei Überlast Fallback auf Claude Sonnet (Anthropic, USA). Übertragen wird nur deine Frage und der Kontext (Rasse, Alter) — keine Fotos, keine sensiblen Profildaten. Kein Training mit deinen Daten.

diff --git a/backend/static/sw.js b/backend/static/sw.js index a5514c7..af8e9a9 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-v752'; +const CACHE_VERSION = 'by-v753'; 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