diff --git a/VERSION b/VERSION index 71935f0..41edc23 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1140 \ No newline at end of file +1141 \ No newline at end of file diff --git a/backend/main.py b/backend/main.py index a582355..df5124d 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1702,6 +1702,146 @@ async def presse(): return FileResponse(f"{STATIC_DIR}/presse.html", headers={"Cache-Control": "max-age=3600"}) +@app.get("/help") +async def help_page(): + """Öffentliche, server-gerenderte Hilfe/FAQ-Seite. Kein Login nötig — + Apple-Reviewer und Suchmaschinen kommen hier direkt rein.""" + from fastapi.responses import HTMLResponse + import html as _html + from routes.help import _load_active_help_articles + + KAT_LABEL = { + "installation": "Installation & PWA", + "erste_schritte": "Erste Schritte", + "standort": "Standort & Wetter", + "account": "Account & Passwort", + "features": "Features erklärt", + "probleme": "Technische Probleme", + } + articles = _load_active_help_articles() + # Gruppieren nach Kategorie, Reihenfolge aus KAT_LABEL + by_kat: dict[str, list] = {} + for a in articles: + by_kat.setdefault(a["kategorie"], []).append(a) + kat_order = [k for k in KAT_LABEL.keys() if k in by_kat] + [ + k for k in by_kat.keys() if k not in KAT_LABEL + ] + + sections_html = "" + for kat in kat_order: + label = KAT_LABEL.get(kat, kat.replace("_", " ").title()) + items = "".join( + f'
{_html.escape(a["frage"])}' + f'
{_html.escape(a["antwort"]).replace(chr(10), "
")}
' + for a in by_kat[kat] + ) + sections_html += f'

{_html.escape(label)}

{items}
' + + html = f""" + + + + + Hilfe & FAQ — Ban Yaro + + + + + + +

Hilfe & FAQ

+

+ Antworten zu Ban Yaro und Ban Yaro Go — der nativen iOS-App für unterwegs. +

+ + {sections_html} + +
+

Direkt-Kontakt

+

Wenn du hier nichts findest, schreib uns:

+

support@banyaro.app

+

+ Mehr Hilfe gibt es nach dem Anmelden im Suchbereich von + banyaro.app/#hilfe. +

+
+ +

+ Impressum · Datenschutz · AGB +

+ +""" + return HTMLResponse(content=html, headers={"Cache-Control": "max-age=600"}) + + @app.get("/konto-loeschen") async def konto_loeschen(): from fastapi.responses import HTMLResponse diff --git a/backend/static/index.html b/backend/static/index.html index 31dbe9b..a85a5a8 100644 --- a/backend/static/index.html +++ b/backend/static/index.html @@ -86,14 +86,14 @@ Ban Yaro - + - - - - - + + + + + @@ -617,11 +617,11 @@ - - - - - + + + + + @@ -631,7 +631,7 @@ - + diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 38c2f5a..187a0e1 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 = '1140'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '1141'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const APP_VERSION = '1.6.0'; // ← semantische Version, wird bei make release gesetzt window.APP_VER = APP_VER; // global verfügbar für andere Module (z.B. offline-indicator) window.APP_VERSION = APP_VERSION; diff --git a/backend/static/landing.html b/backend/static/landing.html index c3acc56..59277a8 100644 --- a/backend/static/landing.html +++ b/backend/static/landing.html @@ -4,7 +4,7 @@ - + Ban Yaro — Die Hunde-App für Deutschland, Österreich & Schweiz diff --git a/backend/static/sw.js b/backend/static/sw.js index 2760572..63e8646 100644 --- a/backend/static/sw.js +++ b/backend/static/sw.js @@ -4,7 +4,7 @@ ============================================================ */ // ← EINZIGE Stelle für die Version — STATIC_ASSETS und CACHE_VERSION leiten sich ab -const VER = '1140'; +const VER = '1141'; const CACHE_VERSION = `by-v${VER}`; const CACHE_STATIC = `${CACHE_VERSION}-static`; const CACHE_TILES = 'ban-yaro-tiles-v1'; // bleibt über SW-Updates erhalten