diff --git a/backend/main.py b/backend/main.py index 2bf6b4a..c6181d1 100644 --- a/backend/main.py +++ b/backend/main.py @@ -220,6 +220,7 @@ STATIC_DIR = os.path.join(os.path.dirname(__file__), "static") app.mount("/css", StaticFiles(directory=f"{STATIC_DIR}/css"), name="css") app.mount("/js", StaticFiles(directory=f"{STATIC_DIR}/js"), name="js") app.mount("/icons", StaticFiles(directory=f"{STATIC_DIR}/icons"), name="icons") +app.mount("/img", StaticFiles(directory=f"{STATIC_DIR}/img"), name="img") # User-generierte Medien (Fotos aus Tagebuch, Giftköder-Alarm, etc.) MEDIA_DIR = os.getenv("MEDIA_DIR", "/data/media") diff --git a/backend/static/img/screenshots/screen-1.jpg b/backend/static/img/screenshots/screen-1.jpg new file mode 100644 index 0000000..a76d524 Binary files /dev/null and b/backend/static/img/screenshots/screen-1.jpg differ diff --git a/backend/static/img/screenshots/screen-2.jpg b/backend/static/img/screenshots/screen-2.jpg new file mode 100644 index 0000000..6ec123b Binary files /dev/null and b/backend/static/img/screenshots/screen-2.jpg differ diff --git a/backend/static/img/screenshots/screen-3.jpg b/backend/static/img/screenshots/screen-3.jpg new file mode 100644 index 0000000..1aa5e42 Binary files /dev/null and b/backend/static/img/screenshots/screen-3.jpg differ diff --git a/backend/static/img/screenshots/screen-4.jpg b/backend/static/img/screenshots/screen-4.jpg new file mode 100644 index 0000000..b22553e Binary files /dev/null and b/backend/static/img/screenshots/screen-4.jpg differ diff --git a/backend/static/img/screenshots/screen-5.jpg b/backend/static/img/screenshots/screen-5.jpg new file mode 100644 index 0000000..4c81d47 Binary files /dev/null and b/backend/static/img/screenshots/screen-5.jpg differ diff --git a/backend/static/img/screenshots/screen-6.jpg b/backend/static/img/screenshots/screen-6.jpg new file mode 100644 index 0000000..a117c9c Binary files /dev/null and b/backend/static/img/screenshots/screen-6.jpg differ diff --git a/backend/static/img/screenshots/screen-7.jpg b/backend/static/img/screenshots/screen-7.jpg new file mode 100644 index 0000000..eb7c493 Binary files /dev/null and b/backend/static/img/screenshots/screen-7.jpg differ diff --git a/backend/static/img/screenshots/screen-8.jpg b/backend/static/img/screenshots/screen-8.jpg new file mode 100644 index 0000000..6c4dea8 Binary files /dev/null and b/backend/static/img/screenshots/screen-8.jpg differ diff --git a/backend/static/img/screenshots/screen-9.jpg b/backend/static/img/screenshots/screen-9.jpg new file mode 100644 index 0000000..b61f7b9 Binary files /dev/null and b/backend/static/img/screenshots/screen-9.jpg differ diff --git a/backend/static/js/app.js b/backend/static/js/app.js index 7b4a07e..1b79752 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 = '427'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen +const APP_VER = '428'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen const App = (() => { diff --git a/backend/static/js/pages/welcome.js b/backend/static/js/pages/welcome.js index f11a1c5..1b39072 100644 --- a/backend/static/js/pages/welcome.js +++ b/backend/static/js/pages/welcome.js @@ -13,15 +13,15 @@ window.Page_welcome = (() => { // HERO-SLIDES — rotieren alle 4 Sekunden // ---------------------------------------------------------- const HERO_SLIDES = [ - { headline: 'Jeder Moment zählt.', sub: 'Fotos, Notizen, Stimmungen — das Tagebuch deines Hundes.' }, - { headline: 'Deine Gegend. Sein Revier.', sub: 'Hundeparks, Gassi-Spots und mehr — alles auf der Karte.' }, - { headline: 'Kein Termin verpasst.', sub: 'Impfungen, Gewicht, Tierarzt — mit KI, individuell auf deinen Hund angepasst.' }, - { headline: 'Wir achten auf deinen Hund.', sub: 'Gefahren in deiner Nähe — damit ihr gezielt aus dem Weg gehen könnt.' }, - { headline: 'Wie eine App. Nur ohne App Store.', sub: 'Einmal auf „Zum Homescreen" — fertig. Kein Store, keine Updates, kein Stress.' }, - { headline: 'Lieblingsrouten für immer.', sub: 'Speichere eure besten Strecken — und entdecke neue in der Nähe.' }, - { headline: 'Gassi ist kein Solosport.', sub: 'Triff andere Hundebesitzer — spontan, in deiner Umgebung.' }, - { headline: 'Dein virtueller Trainer.', sub: '100+ Übungen, Schritt für Schritt — individuell auf deinen Hund abgestimmt.' }, - { headline: 'Frag nach. Du bist nicht allein.', sub: 'Erfahrungen, Tipps, Hilfe — von Hundebesitzern für Hundebesitzer.' }, + { headline: 'Jeder Moment zählt.', sub: 'Fotos, Notizen, Stimmungen — das Tagebuch deines Hundes.', screen: '/img/screenshots/screen-1.jpg' }, + { headline: 'Deine Gegend. Sein Revier.', sub: 'Hundeparks, Gassi-Spots und mehr — alles auf der Karte.', screen: '/img/screenshots/screen-2.jpg' }, + { headline: 'Kein Termin verpasst.', sub: 'Impfungen, Gewicht, Tierarzt — mit KI, individuell auf deinen Hund angepasst.', screen: '/img/screenshots/screen-3.jpg' }, + { headline: 'Wir achten auf deinen Hund.', sub: 'Gefahren in deiner Nähe — damit ihr gezielt aus dem Weg gehen könnt.', screen: '/img/screenshots/screen-4.jpg' }, + { headline: 'Wie eine App. Nur ohne App Store.', sub: 'Einmal auf „Zum Homescreen" — fertig. Kein Store, keine Updates.', screen: '/img/screenshots/screen-5.jpg' }, + { headline: 'Lieblingsrouten für immer.', sub: 'Speichere eure besten Strecken — und entdecke neue in der Nähe.', screen: '/img/screenshots/screen-6.jpg' }, + { headline: 'Gassi ist kein Solosport.', sub: 'Triff andere Hundebesitzer — spontan, in deiner Umgebung.', screen: '/img/screenshots/screen-7.jpg' }, + { headline: 'Dein virtueller Trainer.', sub: '100+ Übungen, Schritt für Schritt — individuell auf deinen Hund abgestimmt.', screen: '/img/screenshots/screen-8.jpg' }, + { headline: 'Frag nach. Du bist nicht allein.', sub: 'Erfahrungen, Tipps, Hilfe — von Hundebesitzern für Hundebesitzer.', screen: '/img/screenshots/screen-9.jpg' }, ]; async function init(container, appState, params = {}) { @@ -99,6 +99,11 @@ window.Page_welcome = (() => {

${HERO_SLIDES[0].sub}

1 / ${HERO_SLIDES.length} +
+ +
+
${hasPrompt ? `