From 4a4e98ea6f15dcbba7a172364ac9cbccde2530b0 Mon Sep 17 00:00:00 2001 From: rene Date: Wed, 6 May 2026 19:36:44 +0200 Subject: [PATCH 01/21] =?UTF-8?q?Fix:=20Rolle-gebundene=20Chips=20(Admin/M?= =?UTF-8?q?od/Social)=20immer=20sichtbar=20unabh=C3=A4ngig=20von=20pers?= =?UTF-8?q?=C3=B6nlicher=20Config=20(SW=20by-v742)?= 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 | 2 +- backend/static/js/worlds.js | 13 ++++++++++++- backend/static/sw.js | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/backend/main.py b/backend/main.py index 8eebbd2..ee3ba1c 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 = "741" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "742" # 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 2f22a0a..45c11df 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 263fa80..c2a5089 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 = '741'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '742'; // ← 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'; diff --git a/backend/static/js/worlds.js b/backend/static/js/worlds.js index 2a56755..1b7fdda 100644 --- a/backend/static/js/worlds.js +++ b/backend/static/js/worlds.js @@ -594,7 +594,18 @@ window.Worlds = (() => { function _chipsForWorld(world) { const pages = _getConfig()[world] || _DEFAULT_CONFIG[world]; - return pages.map(_chipMeta).filter(c => c && _chipAllowed(c)); + const chips = pages.map(_chipMeta).filter(c => c && _chipAllowed(c)); + // Sicherheitsnetz: Rolle-gebundene Chips immer einfügen wenn berechtigt + const u = _state?.user; + const alreadyIn = new Set(chips.map(c => c.page)); + const defaults = _DEFAULT_CONFIG[world] || []; + for (const page of defaults) { + if (alreadyIn.has(page)) continue; + const meta = _chipMeta(page); + if (!meta?.role) continue; // nur role-gebundene Chips + if (_chipAllowed(meta)) { chips.push(meta); alreadyIn.add(page); } + } + return chips; } // ── KONFIGURATIONS-MODAL ───────────────────────────────────── diff --git a/backend/static/sw.js b/backend/static/sw.js index 9069442..55cd3b0 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-v741'; +const CACHE_VERSION = 'by-v742'; 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 From 4009a1d2a7adf2e191a2726a76e4ca15899c5ca8 Mon Sep 17 00:00:00 2001 From: rene Date: Wed, 6 May 2026 19:39:03 +0200 Subject: [PATCH 02/21] =?UTF-8?q?Fix:=20Breeder-Chips=20nie=20aus=20Sicher?= =?UTF-8?q?heitsnetz=20erzwingen=20=E2=80=94=20nur=20Admin/Mod/Social=20(S?= =?UTF-8?q?W=20by-v743)?= 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 | 2 +- backend/static/js/worlds.js | 10 +++++----- backend/static/sw.js | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/main.py b/backend/main.py index ee3ba1c..5d0a807 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 = "742" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "743" # 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 45c11df..33be94e 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 c2a5089..d5e601b 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 = '742'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '743'; // ← 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'; diff --git a/backend/static/js/worlds.js b/backend/static/js/worlds.js index 1b7fdda..f8ead1a 100644 --- a/backend/static/js/worlds.js +++ b/backend/static/js/worlds.js @@ -594,15 +594,15 @@ window.Worlds = (() => { function _chipsForWorld(world) { const pages = _getConfig()[world] || _DEFAULT_CONFIG[world]; + // Alle Chips filtern — _chipAllowed entscheidet ob angezeigt const chips = pages.map(_chipMeta).filter(c => c && _chipAllowed(c)); - // Sicherheitsnetz: Rolle-gebundene Chips immer einfügen wenn berechtigt - const u = _state?.user; + // Sicherheitsnetz: Admin/Mod/Social-Chips aus Default immer einfügen wenn berechtigt + // (nicht Breeder — der folgt strikt dem Tier) const alreadyIn = new Set(chips.map(c => c.page)); - const defaults = _DEFAULT_CONFIG[world] || []; - for (const page of defaults) { + for (const page of (_DEFAULT_CONFIG[world] || [])) { if (alreadyIn.has(page)) continue; const meta = _chipMeta(page); - if (!meta?.role) continue; // nur role-gebundene Chips + if (!meta?.role || meta.role === 'breeder') continue; // Breeder nie erzwingen if (_chipAllowed(meta)) { chips.push(meta); alreadyIn.add(page); } } return chips; diff --git a/backend/static/sw.js b/backend/static/sw.js index 55cd3b0..b3046f8 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-v742'; +const CACHE_VERSION = 'by-v743'; 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 From b8a240e8e5d668888b8490a1f326a09ff37268c0 Mon Sep 17 00:00:00 2001 From: rene Date: Wed, 6 May 2026 19:55:58 +0200 Subject: [PATCH 03/21] =?UTF-8?q?Fix:=20JETZT-Welt=20locked-Parameter=20fe?= =?UTF-8?q?hlte=20in=20features.map=20=E2=86=92=20Pro-Chips=20jetzt=20auch?= =?UTF-8?q?=20dort=2025%=20(SW=20by-v744)?= 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 | 2 +- backend/static/js/worlds.js | 2 +- backend/static/sw.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/main.py b/backend/main.py index 5d0a807..d3de1c5 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 = "743" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "744" # 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 33be94e..972677f 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 d5e601b..c0a9524 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 = '743'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '744'; // ← 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'; diff --git a/backend/static/js/worlds.js b/backend/static/js/worlds.js index f8ead1a..578136c 100644 --- a/backend/static/js/worlds.js +++ b/backend/static/js/worlds.js @@ -1049,7 +1049,7 @@ window.Worlds = (() => {
- ${features.map(f => _chip(f.icon, f.label, f.page)).join('')} + ${features.map(f => _chip(f.icon, f.label, f.page, !!(f.pro && !_hasProAccess()))).join('')}
@@ -736,7 +734,6 @@
- Wurfbörse durchstöbern — kostenlos @@ -1024,14 +1021,9 @@

Ban Yaro — Die deutschsprachige Hunde-Plattform

banyaro.app · DSGVO-konform · Hosting in Deutschland · Made with 🐾

diff --git a/backend/static/sw.js b/backend/static/sw.js index af8e9a9..42700bf 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-v753'; +const CACHE_VERSION = 'by-v754'; 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 From e5e95efaed8250f8208e70c5124cddfc16e22337 Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 7 May 2026 17:15:19 +0200 Subject: [PATCH 16/21] =?UTF-8?q?UX:=20Welcome-Seite=20=E2=80=94=20Anmelde?= =?UTF-8?q?-Einstieg=20vereinfacht,=20Install-Block=20prominent=20mit=20PW?= =?UTF-8?q?A-Erkl=C3=A4rung=20(SW=20by-v755)?= 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 | 2 +- backend/static/js/pages/settings.js | 4 +- backend/static/js/pages/welcome.js | 166 ++++++++++++++-------------- backend/static/sw.js | 2 +- 6 files changed, 90 insertions(+), 88 deletions(-) diff --git a/backend/main.py b/backend/main.py index 9c2fe71..bbf6804 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 = "754" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "755" # 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 d7f7a58..3501a30 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 5583c1e..e7771d5 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 = '754'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '755'; // ← 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'; diff --git a/backend/static/js/pages/settings.js b/backend/static/js/pages/settings.js index e2b9400..0197f58 100644 --- a/backend/static/js/pages/settings.js +++ b/backend/static/js/pages/settings.js @@ -50,10 +50,12 @@ window.Page_settings = (() => { // ---------------------------------------------------------- // INIT / REFRESH // ---------------------------------------------------------- - async function init(container, appState) { + async function init(container, appState, params = {}) { _container = container; _appState = appState; _render(); + if (params.tab === 'login') setTimeout(() => _renderAuth('login'), 50); + if (params.tab === 'register') setTimeout(() => _renderAuth('register'), 50); // Frischen User-State laden damit Badges (is_founder, is_partner) aktuell sind if (_appState.user) { try { diff --git a/backend/static/js/pages/welcome.js b/backend/static/js/pages/welcome.js index a6111f1..ee644b1 100644 --- a/backend/static/js/pages/welcome.js +++ b/backend/static/js/pages/welcome.js @@ -87,7 +87,6 @@ window.Page_welcome = (() => { // LANDING PAGE — nicht eingeloggte Besucher // ---------------------------------------------------------- function _renderLanding(isInstalled) { - // Browser-Besucher (kein PWA) ohne Login → auf /info weiterleiten const isPWA = window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true; if (!isPWA && !sessionStorage.getItem('by_stay_in_app')) { @@ -113,17 +112,10 @@ window.Page_welcome = (() => {
- ${hasPrompt ? ` - - ` : ` - - `} + @@ -145,7 +137,33 @@ window.Page_welcome = (() => {
- + + ${!isInstalled ? ` +
+
+
+ +
+
+
Kein App Store nötig
+
Füge Ban Yaro zum Home-Bildschirm hinzu — einmal, dann immer griffbereit
+
+
+

+ Ban Yaro ist eine Web-App (PWA). Das bedeutet: kein App-Store-Download, automatische Updates ohne dein Zutun, und sie verhält sich genau wie eine native App — mit Icon, Vollbild und Offline-Modus. +

+ ${hasPrompt ? ` + + ` : ` +
${_installHTML()}
+ `} +
+ ` : ''} + +
@@ -155,8 +173,6 @@ window.Page_welcome = (() => {

Halte jeden gemeinsamen Moment fest — Fotos, Einträge, Stimmungen. Nur für dich, privat und sicher.

- -
@@ -166,26 +182,22 @@ window.Page_welcome = (() => {

Impfungen, Gewicht, Tierarzttermine — alles an einem Ort. Du siehst immer, wann was ansteht.

- -

Community vor Ort

-

Giftköder-Warnungen, Gassi-Treffen, Events — was in deiner Gegend gerade passiert.

+

Giftköder-Warnungen, Forum, Events — was in deiner Gegend gerade passiert.

- -
-

Training & KI-Trainer

-

Über 100 Übungen mit Schritt-für-Schritt-Anleitungen. Mit KI-Unterstützung, die deinen Hund kennt.

+

Training & Übungen

+

Über 100 Übungen mit Schritt-für-Schritt-Anleitungen. Fortschritt tracken, Streaks aufbauen.

@@ -198,65 +210,21 @@ window.Page_welcome = (() => {

Kein Facebook. Kein Google. Keine Werbung.
Ban Yaro läuft auf einem eigenen Server in Deutschland — - dein Tagebuch, deine Routen, deine Gesundheitsdaten - bleiben privat. + dein Tagebuch, deine Routen, deine Gesundheitsdaten bleiben privat.

- -
- -
- ${FEATURES.map(f => ` -
-
- -
- ${f.label} -
- `).join('')} -
-
-
- ${hasPrompt ? ` - - ` : ` - - `} -

Kein App Store · Direkt auf den Home-Bildschirm

- - ${!isInstalled ? ` - - ` : ''} + +
- - ${_showInstall ? ` -
-
-
- - Immer griffbereit — kein App Store -
-
${_installHTML()}
-
-
- ` : ''} - `; @@ -811,6 +779,43 @@ window.Page_welcome = (() => { } .wc-grid.wc-grid--collapsed { display: none; } + /* Install Block */ + .wc-install-block { + background: var(--c-bg-card); + border-top: 3px solid var(--c-primary); + padding: var(--space-5) var(--space-5) var(--space-6); + } + .wc-install-block-header { + display: flex; align-items: flex-start; gap: var(--space-3); + margin-bottom: var(--space-3); + } + .wc-install-block-icon { + width: 44px; height: 44px; border-radius: var(--radius-md); + background: var(--c-primary-subtle); flex-shrink: 0; + display: flex; align-items: center; justify-content: center; + } + .wc-install-block-icon .ph-icon { width: 22px; height: 22px; color: var(--c-primary); } + .wc-install-block-title { + font-size: var(--text-base); font-weight: var(--weight-bold); + color: var(--c-text); margin-bottom: 2px; + } + .wc-install-block-sub { + font-size: var(--text-sm); color: var(--c-text-secondary); line-height: 1.4; + } + .wc-install-block-why { + font-size: var(--text-sm); color: var(--c-text-secondary); + line-height: 1.6; margin: 0 0 var(--space-4); + padding: var(--space-3) var(--space-4); + background: var(--c-surface); border-radius: var(--radius-md); + border-left: 3px solid var(--c-primary); + } + .wc-install-block-btn { + width: 100%; font-size: var(--text-base); + padding: 14px; border-radius: var(--radius-lg); + display: flex; align-items: center; justify-content: center; gap: var(--space-2); + } + .wc-install-block-steps { margin-top: var(--space-2); } + /* Bottom CTA */ .wc-bottom-cta { padding: var(--space-8) var(--space-5) var(--space-6); @@ -1194,15 +1199,10 @@ window.Page_welcome = (() => { _container.querySelector('#welcome-install-hero-btn2')?.addEventListener('click', installBtn); // Register / Login - const toSettings = () => App.navigate('settings'); - _container.querySelector('#welcome-register-btn')?.addEventListener('click', toSettings); - _container.querySelector('#welcome-register-btn2')?.addEventListener('click', toSettings); - _container.querySelector('#welcome-login-btn')?.addEventListener('click', toSettings); - - // Installationsanleitung Link - _container.querySelector('#welcome-install-link')?.addEventListener('click', () => { - App.navigate('welcome', true, { install: true }); - }); + _container.querySelector('#welcome-register-btn')?.addEventListener('click', () => App.navigate('settings', true, { tab: 'register' })); + _container.querySelector('#welcome-register-btn2')?.addEventListener('click', () => App.navigate('settings', true, { tab: 'register' })); + _container.querySelector('#welcome-login-btn')?.addEventListener('click', () => App.navigate('settings', true, { tab: 'login' })); + _container.querySelector('#welcome-login-btn2')?.addEventListener('click', () => App.navigate('settings', true, { tab: 'login' })); // Link kopieren _container.querySelector('#install-copy-btn')?.addEventListener('click', async () => { diff --git a/backend/static/sw.js b/backend/static/sw.js index 42700bf..7f45efe 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-v754'; +const CACHE_VERSION = 'by-v755'; 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 From 65193c3030786780c699c6e1b931a3755364dac4 Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 7 May 2026 17:18:26 +0200 Subject: [PATCH 17/21] =?UTF-8?q?UX:=20Welcome-Seite=20=E2=80=94=20Feature?= =?UTF-8?q?-Sektion=20und=20Privacy-Block=20entfernt,=20nur=20Hero+Install?= =?UTF-8?q?+CTA=20(SW=20by-v756)?= 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 | 2 +- backend/static/js/pages/welcome.js | 51 ------------------------------ backend/static/sw.js | 2 +- 5 files changed, 4 insertions(+), 55 deletions(-) diff --git a/backend/main.py b/backend/main.py index bbf6804..55e05cd 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 = "755" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "756" # 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 3501a30..4695be0 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 e7771d5..076bf99 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 = '755'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '756'; // ← 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'; diff --git a/backend/static/js/pages/welcome.js b/backend/static/js/pages/welcome.js index ee644b1..39745e7 100644 --- a/backend/static/js/pages/welcome.js +++ b/backend/static/js/pages/welcome.js @@ -163,57 +163,6 @@ window.Page_welcome = (() => { ` : ''} - -
-
- -
-
-

Tagebuch & Erinnerungen

-

Halte jeden gemeinsamen Moment fest — Fotos, Einträge, Stimmungen. Nur für dich, privat und sicher.

-
-
-
-
- -
-
-

Gesundheit im Blick

-

Impfungen, Gewicht, Tierarzttermine — alles an einem Ort. Du siehst immer, wann was ansteht.

-
-
-
-
- -
-
-

Community vor Ort

-

Giftköder-Warnungen, Forum, Events — was in deiner Gegend gerade passiert.

-
-
-
-
- -
-
-

Training & Übungen

-

Über 100 Übungen mit Schritt-für-Schritt-Anleitungen. Fortschritt tracken, Streaks aufbauen.

-
-
- - -
-
- -
-

Deine Daten gehören dir.

-

- Kein Facebook. Kein Google. Keine Werbung.
- Ban Yaro läuft auf einem eigenen Server in Deutschland — - dein Tagebuch, deine Routen, deine Gesundheitsdaten bleiben privat. -

-
-
` : ''} - -
- - -
- `; diff --git a/backend/static/sw.js b/backend/static/sw.js index 929ce96..52d06f1 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-v756'; +const CACHE_VERSION = 'by-v757'; 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 From 5d37c967960c7b421a9db81379eeed51ba3ad75c Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 7 May 2026 17:22:01 +0200 Subject: [PATCH 19/21] =?UTF-8?q?UX:=20Welcome-Fu=C3=9Fzeile=20=E2=86=92?= =?UTF-8?q?=20Impressum=20+=20Datenschutz=20statt=20Werbetext=20(SW=20by-v?= =?UTF-8?q?758)?= 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 | 2 +- backend/static/js/pages/welcome.js | 6 +++++- backend/static/sw.js | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/backend/main.py b/backend/main.py index 4ed156b..4927c1d 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 = "757" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "758" # 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 aec512e..bde06d2 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 263f9f9..144171b 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 = '757'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '758'; // ← 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'; diff --git a/backend/static/js/pages/welcome.js b/backend/static/js/pages/welcome.js index 258f138..0a197bc 100644 --- a/backend/static/js/pages/welcome.js +++ b/backend/static/js/pages/welcome.js @@ -163,7 +163,11 @@ window.Page_welcome = (() => { ` : ''} - + `; } diff --git a/backend/static/sw.js b/backend/static/sw.js index 52d06f1..7de414a 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-v757'; +const CACHE_VERSION = 'by-v758'; 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 From 8683de4bf23c6d2f2a913ecdaa2a236ee51c0a0b Mon Sep 17 00:00:00 2001 From: rene Date: Thu, 7 May 2026 17:26:25 +0200 Subject: [PATCH 20/21] =?UTF-8?q?UX:=20Android-Installationsanleitung=20?= =?UTF-8?q?=E2=80=94=20Hinweis=20bei=20Sicherheitswarnung=20erg=C3=A4nzt?= =?UTF-8?q?=20(SW=20by-v759)?= 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 | 2 +- backend/static/js/pages/welcome.js | 18 ++++++++++++++++++ backend/static/sw.js | 2 +- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/backend/main.py b/backend/main.py index 4927c1d..fadc939 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 = "758" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "759" # 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 bde06d2..e6a125a 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 144171b..67f2927 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 = '758'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '759'; // ← 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'; diff --git a/backend/static/js/pages/welcome.js b/backend/static/js/pages/welcome.js index 0a197bc..9e60fb0 100644 --- a/backend/static/js/pages/welcome.js +++ b/backend/static/js/pages/welcome.js @@ -1074,6 +1074,15 @@ window.Page_welcome = (() => { ['dots-three-circle','Tippe auf das Menü ⋮ oben rechts'], ['download-simple', 'Wähle „App installieren" oder
„Zum Startbildschirm hinzufügen"'], ])} +
+ +

+ Falls eine Sicherheitswarnung erscheint: Das ist normal für neuere Webseiten — unabhängig vom Inhalt. Ban Yaro läuft auf einem deutschen Server, ist DSGVO-konform und enthält keine Schadsoftware. Tippe auf „Trotzdem hinzufügen". +

+