Fix: Landing-Page — Sitting kostenlos, Phosphor-Icons, KI-Datenschutz korrekt, Pro-Features ausgeblendet (SW by-v753)
This commit is contained in:
parent
cf2191efeb
commit
1fe878924a
5 changed files with 22 additions and 39 deletions
|
|
@ -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():
|
||||
|
|
|
|||
|
|
@ -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=751"></script>
|
||||
<script src="/js/worlds.js?v=753"></script>
|
||||
|
||||
<!-- Feature-Seiten werden lazy geladen -->
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 @@
|
|||
<svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#chat-circle-dots"></use></svg>
|
||||
</div>
|
||||
<h3>Leute unter sich</h3>
|
||||
<p>Ein Forum nur für Hundemenschen. Fragen stellen, Erfahrungen teilen, lokale Gassi-Treffen organisieren — ohne Algorithmen, ohne Werbung.</p>
|
||||
<p>Ein Forum nur für Hundemenschen. Fragen stellen, Erfahrungen teilen, Tipps weitergeben — ohne Algorithmen, ohne Werbung.</p>
|
||||
</div>
|
||||
<div class="outcome-card">
|
||||
<div class="oc-icon">
|
||||
<svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#house-line"></use></svg>
|
||||
</div>
|
||||
<h3>Jemanden für die Gassi gesucht?</h3>
|
||||
<p>Du musst da oder dort hin — finde jemanden der auf deinen Hund aufpasst. Hundesitting-Vermittlung mit nur 8% Provision statt 20% bei anderen.</p>
|
||||
<p>Du musst da oder dort hin — finde jemanden der auf deinen Hund aufpasst. Hundesitting-Vermittlung kostenlos, ohne Provision. Ihr einigt euch direkt.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -636,14 +636,6 @@
|
|||
<span class="feature-icon"><svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#cloud-sun"></use></svg></span>
|
||||
<div><h3>Wetter, Gassi-Score & Zecken-Alarm</h3><p>7-Tage-Wetter, tägliche Bewertung 1–10 für Gassi-Eignung, automatische Zecken-Warnung.</p></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<span class="feature-icon"><svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#fork-knife"></use></svg></span>
|
||||
<div><h3>Ernährung & Futter</h3><p>Kalorienbedarf berechnen, BARF-Guide, Giftliste und KI-Futterberater.</p></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<span class="feature-icon"><svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#airplane"></use></svg></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"><svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#certificate"></use></svg></span>
|
||||
<div><h3>NFC-Halsband-Tags</h3><p>Öffentliche Profilseite für jeden Hund. Finder kontaktiert dich anonym — ohne deine Nummer preiszugeben.</p></div>
|
||||
|
|
@ -666,10 +658,6 @@
|
|||
<span class="feature-icon"><svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#path"></use></svg></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"><svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#paw-print"></use></svg></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"><svg viewBox="0 0 256 256"><use href="/icons/phosphor.svg#chat-circle-dots"></use></svg></span>
|
||||
<div><h3>Forum</h3><p>Öffentlich lesbar ohne Anmeldung. Kategorien nach Rasse, Region, Gesundheit und Erziehung.</p></div>
|
||||
|
|
@ -916,59 +904,59 @@
|
|||
<p class="section-intro">Ban Yaro wurde von Hundebesitzern für Hundebesitzer entwickelt — mit einem klaren Standpunkt zu Datenschutz und Fairness.</p>
|
||||
<div class="usp-strip">
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">🇩🇪</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#flag"></use></svg>
|
||||
<div>
|
||||
<h3>Deutsche Plattform</h3>
|
||||
<p>Hosting in Deutschland, deutschsprachiger Support, auf DACH-Nutzer zugeschnitten.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">🔒</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#lock-simple"></use></svg>
|
||||
<div>
|
||||
<h3>Deine Daten. Dein Eigentum.</h3>
|
||||
<p>Keine Datenweitergabe an US-Konzerne. Cookielose Analytics (Umami). Transparente Datennutzung.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">📱</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#device-mobile"></use></svg>
|
||||
<div>
|
||||
<h3>Kein App Store</h3>
|
||||
<p>Als Progressive Web App direkt über den Browser installierbar — auf iOS und Android. Sofort updatebar.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">📡</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#cloud-slash"></use></svg>
|
||||
<div>
|
||||
<h3>Offline-fähig</h3>
|
||||
<p>Service Worker sorgt dafür dass die App auch ohne Internet funktioniert — beim Gassi gehen in der Natur.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">💸</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#handshake"></use></svg>
|
||||
<div>
|
||||
<h3>Faire Provision</h3>
|
||||
<p>Hundesitting nur 8% Provision — Rover und Pawshake nehmen 20%. Mehr Geld bleibt beim Sitter.</p>
|
||||
<h3>Sitting ohne Provision</h3>
|
||||
<p>Hundesitting-Vermittlung kostenlos — keine Plattform-Provision, ihr einigt euch direkt. Rover und Pawshake nehmen 20%.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">🗺️</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#map-trifold"></use></svg>
|
||||
<div>
|
||||
<h3>OpenStreetMap</h3>
|
||||
<p>Karten von OpenStreetMap statt Google — keine Tracking-Cookies, kein API-Lock-in, günstiger für alle.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">🔐</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#shield-check"></use></svg>
|
||||
<div>
|
||||
<h3>Aktive Sicherheit</h3>
|
||||
<p>HSTS, Content-Security-Policy, Rate Limiting auf allen Endpunkten, Account-Lockout nach Fehlversuchen, E-Mail-Verifikation. Sicherheit by Default, nicht als Nachgedanke.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="usp-item">
|
||||
<span class="usp-icon">🤖</span>
|
||||
<svg class="usp-icon" viewBox="0 0 256 256"><use href="/icons/phosphor.svg#robot"></use></svg>
|
||||
<div>
|
||||
<h3>KI Made in Europe</h3>
|
||||
<p>Alle KI-Funktionen laufen über Claude (Anthropic) — kein Training mit deinen Daten, kein Opt-out nötig, deine Daten bleiben deine Daten.</p>
|
||||
<h3>KI mit Datenschutz</h3>
|
||||
<p>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.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue