Feature: Hilfe/FAQ, Übungen-Content, Navigation-Fixes (SW by-v727)
Hilfe & FAQ:
- Neue Seite /hilfe mit Akkordeon + Live-Suche (6 Kategorien, 25 Artikel)
- DB-Tabelle help_articles — Inhalte admin-seitig ohne Deploy änderbar
- Admin-Tab Hilfe/FAQ zum Bearbeiten aller Artikel
- Link in Einstellungen (unter Welten einrichten, über Abmelden)
- routes/help.py: GET (public), POST/PATCH/DELETE (Admin)
Übungen:
- 110 Übungen: beschreibung (kurz), schritte (JSON 4-6 Schritte), tipp — gutes Deutsch mit Umlauten
- Admin-Tab Übungen: Inline-Editor für alle drei Felder
- PUT /training/exercises/{id} (Admin) neu
- Übung-des-Tages Chip → scrollt jetzt korrekt zur Übung (exercise_id-Feldname-Fix)
Welten-Navigation:
- hide() stellt app-header + bottom-nav wieder her (worlds-hidden wurde nie entfernt)
- init() mit _setupDone-Guard (keine doppelten Event-Listener)
- Login ruft Worlds.init(_appState) statt show() — _state war null → falscher Render
- X-Button in Welten-Konfiguration: 30×30px, Icon 17px, besser sichtbar
Wetter:
- Motivation bei blockiertem Standort: 6-Schritte-iOS-Anleitung + Flugmodus-Tipp
- Auto-locate bleibt (kein Button-Only mehr)
achievements.py:
- my_achievements(): d.user_id → JOIN dogs (zweite Funktion war noch kaputt)
This commit is contained in:
parent
55069d246b
commit
05ecf3b94a
13 changed files with 1158 additions and 43 deletions
|
|
@ -2058,3 +2058,214 @@ def _migrate(conn_factory):
|
|||
ON gassi_zeiten(user_id, aktiv);
|
||||
""")
|
||||
logger.info("Migration: Gassi-Zeiten-Tabelle bereit.")
|
||||
|
||||
# ---- Feature: Hilfe/FAQ ----
|
||||
conn.executescript("""
|
||||
CREATE TABLE IF NOT EXISTS help_articles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
kategorie TEXT NOT NULL,
|
||||
frage TEXT NOT NULL,
|
||||
antwort TEXT NOT NULL,
|
||||
sort_order INTEGER DEFAULT 0,
|
||||
aktiv INTEGER DEFAULT 1,
|
||||
created_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_help_kat ON help_articles(kategorie, sort_order);
|
||||
""")
|
||||
_seed_help_articles(conn)
|
||||
logger.info("Migration: Hilfe/FAQ-Tabelle bereit.")
|
||||
|
||||
|
||||
def _seed_help_articles(conn):
|
||||
"""Befüllt help_articles mit Starter-FAQs — nur wenn die Tabelle noch leer ist."""
|
||||
count = conn.execute("SELECT COUNT(*) FROM help_articles").fetchone()[0]
|
||||
if count > 0:
|
||||
return
|
||||
|
||||
_SEED = [
|
||||
# ── installation ──────────────────────────────────────────────
|
||||
("installation", "Was ist eine PWA?",
|
||||
"Eine Progressive Web App (PWA) ist eine Website, die sich wie eine richtige App verhält. "
|
||||
"Du kannst Ban Yaro direkt im Browser nutzen oder als App auf deinem Startbildschirm speichern — "
|
||||
"ohne den App Store.\n\n"
|
||||
"Vorteile: immer aktuell, kein Download, funktioniert auch offline.",
|
||||
1),
|
||||
("installation", "Warum ist Ban Yaro nicht im App Store?",
|
||||
"Als PWA können wir Ban Yaro viel schneller mit neuen Funktionen ausstatten und Fehler sofort "
|
||||
"beheben. App-Store-Apps müssen oft tagelang auf Freigabe warten.\n\n"
|
||||
"Außerdem sparst du Speicherplatz auf deinem Handy — Ban Yaro braucht nur wenige Megabyte.",
|
||||
2),
|
||||
("installation", "iPhone: Wie füge ich Ban Yaro zum Startbildschirm hinzu?",
|
||||
"1. Öffne banyaro.app in Safari (nicht Chrome oder Firefox).\n"
|
||||
"2. Tippe auf das Teilen-Symbol (Quadrat mit Pfeil nach oben) unten in der Mitte.\n"
|
||||
"3. Scrolle im Menü nach unten und wähle 'Zum Home-Bildschirm'.\n"
|
||||
"4. Bestätige mit 'Hinzufügen'.\n\n"
|
||||
"Ban Yaro erscheint jetzt als App-Icon auf deinem Startbildschirm.",
|
||||
3),
|
||||
("installation", "Android: Wie füge ich Ban Yaro zum Startbildschirm hinzu?",
|
||||
"1. Öffne banyaro.app in Chrome.\n"
|
||||
"2. Tippe oben rechts auf die drei Punkte (Menü).\n"
|
||||
"3. Wähle 'App installieren' oder 'Zum Startbildschirm hinzufügen'.\n"
|
||||
"4. Bestätige die Installation.\n\n"
|
||||
"Bei manchen Android-Geräten erscheint auch automatisch ein Banner am unteren Bildschirmrand.",
|
||||
4),
|
||||
("installation", "Wie aktualisiere ich die App?",
|
||||
"Ban Yaro aktualisiert sich automatisch im Hintergrund. Wenn ein Update bereit ist, "
|
||||
"siehst du einen Hinweis in der App.\n\n"
|
||||
"Falls du Probleme hast und die App sich komisch verhält: Einstellungen öffnen, "
|
||||
"ganz unten 'Auf Update prüfen' tippen. Danach die App schließen und neu öffnen.",
|
||||
5),
|
||||
|
||||
# ── erste_schritte ────────────────────────────────────────────
|
||||
("erste_schritte", "Wie lege ich meinen Hund an?",
|
||||
"Tippe in der Navigation unten auf den Hund-Tab (HUND) und dann auf 'Hund hinzufügen'. "
|
||||
"Du gibst Name, Rasse und Geburtsdatum ein — ein Foto ist optional, macht aber gleich mehr Spaß.\n\n"
|
||||
"Du kannst mehrere Hunde anlegen und zwischen ihnen wechseln.",
|
||||
1),
|
||||
("erste_schritte", "Wie navigiere ich zwischen den Welten?",
|
||||
"Ban Yaro ist in drei Welten aufgeteilt: JETZT, HUND und WELT. "
|
||||
"Du kannst links-rechts wischen oder die drei Buttons unten in der Navigation tippen.\n\n"
|
||||
"JETZT zeigt dir alles, was gerade relevant ist. HUND ist alles über deinen Vierbeiner. "
|
||||
"WELT verbindet dich mit der Hunde-Community.",
|
||||
2),
|
||||
("erste_schritte", "Was bedeuten JETZT, HUND und WELT?",
|
||||
"JETZT: Dein persönliches Dashboard — Wetter, Gassi-Planer, aktuelle Hinweise in deiner Nähe.\n\n"
|
||||
"HUND: Alles rund um deinen Hund — Tagebuch, Gesundheit, Training, Ernährung, Tierarzt.\n\n"
|
||||
"WELT: Die Community — Forum, Wiki, Events, andere Hundebesitzer, Gassi-Treffen, Karte.",
|
||||
3),
|
||||
("erste_schritte", "Wie passe ich die Chips auf der JETZT-Seite an?",
|
||||
"Tippe oben rechts auf der JETZT-Seite auf das Zahnrad-Symbol. "
|
||||
"Dort kannst du auswählen, welche Funktions-Chips du sehen möchtest "
|
||||
"und in welcher Reihenfolge sie angezeigt werden.",
|
||||
4),
|
||||
("erste_schritte", "Wie schreibe ich mein erstes Tagebuch?",
|
||||
"Gehe in die HUND-Welt und tippe auf 'Tagebuch'. "
|
||||
"Mit dem Plus-Button kannst du einen neuen Eintrag anlegen.\n\n"
|
||||
"Du kannst Text schreiben, Fotos hinzufügen, deine Stimmung eintragen und den Ort markieren. "
|
||||
"Alle Einträge sind nur für dich sichtbar.",
|
||||
5),
|
||||
|
||||
# ── standort ──────────────────────────────────────────────────
|
||||
("standort", "Wie gebe ich den Standort auf dem iPhone frei?",
|
||||
"1. Öffne die Einstellungen deines iPhones.\n"
|
||||
"2. Scrolle zu Safari.\n"
|
||||
"3. Tippe auf 'Standort'.\n"
|
||||
"4. Wähle 'Beim Benutzen der App erlauben'.\n\n"
|
||||
"Alternativ: Wenn Ban Yaro fragt, ob es deinen Standort nutzen darf, "
|
||||
"tippe auf 'Erlauben'. Diese Abfrage erscheint beim ersten Öffnen der Karte oder Wetter-Funktion.",
|
||||
1),
|
||||
("standort", "Wie gebe ich den Standort auf Android frei?",
|
||||
"1. Öffne die Einstellungen deines Handys.\n"
|
||||
"2. Gehe zu Apps → Chrome → Berechtigungen → Standort.\n"
|
||||
"3. Wähle 'Beim Benutzen der App erlauben'.\n\n"
|
||||
"Beim ersten Öffnen der Karte oder Wetter-Funktion fragt Ban Yaro automatisch nach der Berechtigung.",
|
||||
2),
|
||||
("standort", "Der Standort ist blockiert — wie setze ich das zurück?",
|
||||
"Wenn du versehentlich 'Ablehnen' getippt hast, kannst du das zurücksetzen:\n\n"
|
||||
"iPhone: Einstellungen → Safari → Standort → 'Beim Benutzen erlauben'\n\n"
|
||||
"Android: In Chrome tippe auf das Schloss-Symbol links in der Adresszeile → "
|
||||
"Website-Einstellungen → Standort → Erlauben.\n\n"
|
||||
"Tipp: Manchmal hilft es, die Website-Daten zu löschen und Ban Yaro neu zu öffnen.",
|
||||
3),
|
||||
("standort", "Das Wetter lädt nicht — was kann ich tun?",
|
||||
"Das Wetter benötigt deinen aktuellen Standort. Prüfe zuerst, ob die Standort-Berechtigung "
|
||||
"erteilt ist (siehe 'Standort freigeben').\n\n"
|
||||
"Falls es trotzdem nicht klappt: Schließe Ban Yaro vollständig und öffne es erneut. "
|
||||
"Bei anhaltenden Problemen tippe in den Einstellungen auf 'Auf Update prüfen'.",
|
||||
4),
|
||||
|
||||
# ── account ───────────────────────────────────────────────────
|
||||
("account", "Ich habe mein Passwort vergessen — was nun?",
|
||||
"Auf der Anmeldeseite findest du den Link 'Passwort vergessen'. "
|
||||
"Gib dort deine E-Mail-Adresse ein — du erhältst innerhalb weniger Minuten "
|
||||
"einen Link zum Zurücksetzen.\n\n"
|
||||
"Schau auch im Spam-Ordner, falls die E-Mail nicht ankommt.",
|
||||
1),
|
||||
("account", "Die E-Mail-Bestätigung ist nicht angekommen.",
|
||||
"Bitte prüfe deinen Spam- oder Junk-Ordner. E-Mails von Ban Yaro kommen von noreply@banyaro.app.\n\n"
|
||||
"Falls du die E-Mail dort nicht findest, kannst du die Bestätigung in den Einstellungen "
|
||||
"unter 'Konto' erneut anfordern.\n\n"
|
||||
"Stelle sicher, dass deine E-Mail-Adresse korrekt geschrieben ist.",
|
||||
2),
|
||||
("account", "Wie kann ich mein Konto löschen?",
|
||||
"Gehe in die Einstellungen (Zahnrad-Symbol) → Konto → 'Konto löschen'.\n\n"
|
||||
"Achtung: Die Löschung ist endgültig. Alle deine Daten, Hunde-Profile und "
|
||||
"Tagebuch-Einträge werden dauerhaft entfernt. Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
3),
|
||||
("account", "Wie ändere ich meine E-Mail-Adresse?",
|
||||
"Das Ändern der E-Mail-Adresse ist aus Sicherheitsgründen aktuell nur über den "
|
||||
"Support möglich. Schreibe uns an support@banyaro.app mit deiner aktuellen und "
|
||||
"gewünschten neuen E-Mail-Adresse.",
|
||||
4),
|
||||
|
||||
# ── features ──────────────────────────────────────────────────
|
||||
("features", "Was ist der Gassi-Score?",
|
||||
"Der Gassi-Score zeigt dir auf einen Blick, wie gut das Wetter gerade für einen Spaziergang ist. "
|
||||
"Er berücksichtigt Temperatur, Regen, Wind, UV-Index und — bei heißem Wetter — "
|
||||
"die Asphalt-Temperatur.\n\n"
|
||||
"Grün = super. Gelb = geht noch. Rot = lieber warten oder kürzer machen.",
|
||||
1),
|
||||
("features", "Was kann der KI-Tierarzt?",
|
||||
"Der KI-Tierarzt beantwortet allgemeine Fragen rund um die Gesundheit deines Hundes — "
|
||||
"zum Beispiel zu Symptomen, Ernährung oder Verhalten.\n\n"
|
||||
"Wichtig: Er ersetzt keinen echten Tierarzt. Bei ernsten Symptomen oder Notfällen "
|
||||
"wende dich bitte sofort an einen Tierarzt in deiner Nähe.",
|
||||
2),
|
||||
("features", "Wie funktioniert der Offline-Modus?",
|
||||
"Ban Yaro speichert die wichtigsten Funktionen lokal auf deinem Gerät. "
|
||||
"Auch ohne Internet kannst du dein Tagebuch lesen, Einträge anlegen und "
|
||||
"gespeicherte Karten nutzen.\n\n"
|
||||
"Neue Daten werden automatisch synchronisiert, sobald du wieder online bist.",
|
||||
3),
|
||||
("features", "Wie richte ich Push-Benachrichtigungen ein?",
|
||||
"Gehe in die Einstellungen (Zahnrad-Symbol) und tippe auf 'Push-Benachrichtigungen'. "
|
||||
"Dort kannst du auswählen, für welche Ereignisse du Benachrichtigungen erhalten möchtest — "
|
||||
"z.B. Giftköder-Warnungen, neue Nachrichten oder Gassi-Erinnerungen.\n\n"
|
||||
"Auf dem iPhone muss Ban Yaro als App auf dem Startbildschirm installiert sein, "
|
||||
"damit Push-Nachrichten funktionieren.",
|
||||
4),
|
||||
("features", "Kann ich mein Tagebuch-Hintergrundbild ändern?",
|
||||
"Ja! Im Tagebuch tippe oben auf das Bild-Symbol oder auf 'Hintergrund anpassen'. "
|
||||
"Du kannst ein eigenes Foto wählen oder eines der vorhandenen Motive nutzen.\n\n"
|
||||
"Das Hintergrundbild gilt für alle Einträge und macht dein Tagebuch ganz persönlich.",
|
||||
5),
|
||||
("features", "Was ist der Giftköder-Alarm?",
|
||||
"Der Giftköder-Alarm zeigt dir gemeldete Giftköder in deiner Nähe auf einer Karte. "
|
||||
"Du kannst selbst Funde melden und andere Hundebesitzer warnen.\n\n"
|
||||
"In den Einstellungen kannst du Push-Benachrichtigungen aktivieren, "
|
||||
"damit du sofort gewarnt wirst, wenn in deiner Nähe ein Giftköder gemeldet wird.",
|
||||
6),
|
||||
|
||||
# ── probleme ──────────────────────────────────────────────────
|
||||
("probleme", "Die App zeigt alte Daten — was tun?",
|
||||
"Tippe in den Einstellungen ganz unten auf 'Auf Update prüfen'. "
|
||||
"Danach schließe Ban Yaro vollständig (App aus dem Multitasking entfernen) "
|
||||
"und öffne sie erneut.\n\n"
|
||||
"Falls das nicht hilft: Lösche die Website-Daten in deinem Browser und öffne "
|
||||
"Ban Yaro erneut. Du bleibst dabei angemeldet.",
|
||||
1),
|
||||
("probleme", "Das Wetter lädt nicht.",
|
||||
"Stelle sicher, dass die Standort-Berechtigung erteilt ist. "
|
||||
"Ohne Standort kann Ban Yaro kein lokales Wetter laden.\n\n"
|
||||
"Prüfe außerdem deine Internetverbindung. Bei schlechtem WLAN oder Mobilfunk "
|
||||
"kann es zu Verzögerungen kommen. Eine kurze Wartezeit und erneutes Tippen hilft meist.",
|
||||
2),
|
||||
("probleme", "Die App reagiert nicht oder friert ein.",
|
||||
"Schließe Ban Yaro vollständig (aus dem Multitasking entfernen) und öffne sie erneut.\n\n"
|
||||
"Falls das Problem anhält, prüfe ob dein Gerät ausreichend Speicher hat. "
|
||||
"Starte dein Handy neu — das löst in den meisten Fällen temporäre Hänger.",
|
||||
3),
|
||||
("probleme", "Wie melde ich einen Fehler?",
|
||||
"Wir freuen uns über Feedback! Schreibe uns an support@banyaro.app mit einer kurzen "
|
||||
"Beschreibung des Problems.\n\n"
|
||||
"Hilfreich sind: Was hast du getan? Was hast du erwartet? Was ist stattdessen passiert? "
|
||||
"Welches Gerät und Browser nutzt du?\n\n"
|
||||
"Wir melden uns so schnell wie möglich.",
|
||||
4),
|
||||
]
|
||||
|
||||
for kat, frage, antwort, sort in _SEED:
|
||||
conn.execute(
|
||||
"INSERT INTO help_articles (kategorie, frage, antwort, sort_order) VALUES (?, ?, ?, ?)",
|
||||
(kat, frage, antwort, sort),
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue