diff --git a/Ban Yaro - Google Play package/Ban Yaro.aab b/Ban Yaro - Google Play package/Ban Yaro.aab new file mode 100644 index 0000000..9f30247 Binary files /dev/null and b/Ban Yaro - Google Play package/Ban Yaro.aab differ diff --git a/Ban Yaro - Google Play package/Ban Yaro.apk b/Ban Yaro - Google Play package/Ban Yaro.apk new file mode 100644 index 0000000..8162c90 Binary files /dev/null and b/Ban Yaro - Google Play package/Ban Yaro.apk differ diff --git a/Ban Yaro - Google Play package/Readme.html b/Ban Yaro - Google Play package/Readme.html new file mode 100644 index 0000000..d2aabbc --- /dev/null +++ b/Ban Yaro - Google Play package/Readme.html @@ -0,0 +1,7 @@ + +
+ + + diff --git a/Ban Yaro - Google Play package/assetlinks.json b/Ban Yaro - Google Play package/assetlinks.json new file mode 100644 index 0000000..00a8b7c --- /dev/null +++ b/Ban Yaro - Google Play package/assetlinks.json @@ -0,0 +1,8 @@ +[{ + "relation": ["delegate_permission/common.handle_all_urls"], + "target": { + "namespace": "android_app", + "package_name": "app.banyaro.twa", + "sha256_cert_fingerprints": ["49:02:DC:5B:63:C0:D7:42:7F:A4:DC:2F:EB:78:73:11:CC:B9:36:22:00:01:A0:03:1C:0A:F9:41:35:9F:D4:B7"] + } + }] diff --git a/Ban Yaro - Google Play package/signing-key-info.txt b/Ban Yaro - Google Play package/signing-key-info.txt new file mode 100644 index 0000000..0a9e6c9 --- /dev/null +++ b/Ban Yaro - Google Play package/signing-key-info.txt @@ -0,0 +1,10 @@ +Keep this file and signing.keystore in a safe place. You'll need these files if you want to upload future versions of your PWA to the Google Play Store. + +Key store file: signing.keystore +Key store password: MFBcl8xJ0IpO +Key alias: my-key-alias +Key password: MFBcl8xJ0IpO +Signer's full name: Ban Yaro Admin +Signer's organization: Ban Yaro — Die Hunde-Plattform +Signer's organizational unit: Engineering +Signer's country code: US \ No newline at end of file diff --git a/Ban Yaro - Google Play package/signing.keystore b/Ban Yaro - Google Play package/signing.keystore new file mode 100644 index 0000000..701efba Binary files /dev/null and b/Ban Yaro - Google Play package/signing.keystore differ diff --git a/backend/main.py b/backend/main.py index 01f4c48..60f5cda 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 = "786" # muss mit APP_VER in app.js übereinstimmen +APP_VER = "791" # muss mit APP_VER in app.js übereinstimmen @app.get("/.well-known/assetlinks.json") async def assetlinks(): @@ -1546,6 +1546,7 @@ async def presse(): @app.get("/konto-loeschen") async def konto_loeschen(): + from fastapi.responses import HTMLResponse html = """ @@ -1594,6 +1595,36 @@ async def konto_loeschen(): return HTMLResponse(content=html, headers={"Cache-Control": "max-age=3600"}) +# /force-update — SW + Cache-Killer für hartnäckige alte Versionen +# ------------------------------------------------------------------ +@app.get("/force-update") +async def force_update(): + from fastapi.responses import HTMLResponse + html = """ + +Service Worker wird entfernt…
+""" + return HTMLResponse(content=html, headers={"Cache-Control": "no-store"}) + + # /partner — Influencer-Landingpage # ------------------------------------------------------------------ @app.get("/partner") diff --git a/backend/routes/ki.py b/backend/routes/ki.py index 708d571..de82240 100644 --- a/backend/routes/ki.py +++ b/backend/routes/ki.py @@ -232,6 +232,7 @@ async def ki_geburtstag(req: BirthdayRequest, request: Request, try: answer = await ki_module.complete( system=system, prompt=prompt, max_tokens=600, requires_premium=False, + user_id=user["id"], ) with db() as conn: conn.execute( diff --git a/backend/static/index.html b/backend/static/index.html index ba840bd..3a46c5d 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -93,9 +93,9 @@ - - - + + + diff --git a/backend/static/js/app.js b/backend/static/js/app.js index c6d7f40..b4a14ab 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 = '786'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '791'; // ← 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'; // Cache-Bust-Parameter nach Update-Reload sofort entfernen @@ -978,8 +978,7 @@ const App = (() => { // ---------------------------------------------------------- // ---------------------------------------------------------- - // VERSION-CHECK — persistentes Banner wenn neue Version verfügbar - // ---------------------------------------------------------- + // VERSION-CHECK let _updateBannerShown = false; async function _checkVersion() { @@ -1050,16 +1049,14 @@ const App = (() => { const btn = banner.querySelector('#upd-btn-reload'); btn.textContent = 'Lädt…'; btn.disabled = true; - sessionStorage.setItem('by_update_reload', APP_VER); - // ?_t= Timestamp zwingt iOS bfcache zur Aufgabe — wird beim Start sofort entfernt - setTimeout(() => location.replace('/?_t=' + Date.now()), 800); try { - const reg = await navigator.serviceWorker?.getRegistration(); - if (reg?.waiting) reg.waiting.postMessage({ type: 'SKIP_WAITING' }); - reg?.update().catch(() => {}); // kein await — kann hängen + // Alle SW deregistrieren + alle Caches löschen → sauberer Neustart + const regs = await navigator.serviceWorker?.getRegistrations() ?? []; + await Promise.all(regs.map(r => r.unregister())); const keys = await caches.keys(); await Promise.all(keys.map(k => caches.delete(k))); } catch { /* ignorieren */ } + location.replace('/?_t=' + Date.now()); }); } diff --git a/backend/static/js/worlds.js b/backend/static/js/worlds.js index 33fb509..f23f983 100644 --- a/backend/static/js/worlds.js +++ b/backend/static/js/worlds.js @@ -741,7 +741,7 @@ window.Worlds = (() => { border-radius:16px;padding:10px 4px 8px;height:80px;box-sizing:border-box; display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px; cursor:grab;position:relative;min-width:0;overflow:hidden; - user-select:none;-webkit-tap-highlight-color:transparent;touch-action:none"> + user-select:none;-webkit-tap-highlight-color:transparent;touch-action:pan-y"> ${!c.pinned ? `