8ad3ca8a74
Perf: Offline-Support alle Prioritäts-Seiten — Cache+Queue+Sync (SW by-v988)
2026-05-15 17:04:06 +02:00
53fcb61933
Offline-Fallbacks für diary, poison, map + SW-Erweiterung
...
- sw.js: /api/places, /api/breeder/map-markers, /api/gassi-zeiten in _CACHEABLE_GET; /api/lost/report und /api/walks in _QUEUEABLE
- diary.js: localStorage-Cache pro Hund, Fallback bei Offline mit Toast
- poison.js: localStorage-Cache, Fallback bei Offline mit Toast (sicherheitsrelevant)
- map.js: POI-Cache (places/poison/breeders) in localStorage, Offline-Toast + Fallback auf gecachte Daten
2026-05-15 17:02:26 +02:00
0c0daaad6b
Feat: Routen offline aufzeichnen — LocalStorage-Queue, Cache-Fallback, Auto-Sync (SW by-v987)
2026-05-15 16:53:38 +02:00
3fae57a0e2
Feat: Kontaktformular im Impressum + /api/contact Endpoint ohne Auth (SW by-v986)
2026-05-15 16:46:37 +02:00
0f09f5a8dd
Rechtliche Seiten überarbeitet: Impressum, Datenschutz, AGB
...
Impressum: Telefon-Placeholder entfernt, Kontakt auf E-Mail reduziert,
UGC-Haftungsklausel auf §§ 7 ff. DDG-Basis präzisiert.
Datenschutz: Neue Abschnitte Hosting & Infrastruktur (Brevo, Umami),
Technische Speicherung (TTDSG), Mindestalter, Moderation & Community;
KI-Abschnitt um US-Behörden-Restrisiko-Hinweis ergänzt; BayLDA-Adresse
korrigiert (Promenade 18) und E-Mail ergänzt; Version 3.
AGB: Neue Abschnitte Mindestalter (§ 2), Nutzungsregeln/Community (§ 4),
Nutzerinhalte/Lizenzen (§ 5), KI-Haftung (§ 11); Widerrufsrecht
auf aktive Protokollierung präzisiert; Kündigungsbutton-Hinweis nach
§ 312k BGB; Erstattungsausschluss um gesetzliche Ansprüche ergänzt;
Abschnitte neu durchnummeriert (1–15), Version 2.
2026-05-15 16:41:19 +02:00
d7f7a7e454
Neu: AGB-Seite + Impressum/Datenschutz aktualisiert (SW by-v985)
...
- Neue Seite agb.js mit 11 Abschnitten (Laufzeit, Zahlung, Widerruf etc.)
- Datenschutz: 'Abonnement & Kündigung' → 'Zahlungsdaten' (DSGVO-Fokus), DDG-Hinweis ergänzt
- Impressum: ODR-Link entfernt (EU-Plattform eingestellt 2025), Telefon-Pflichthinweis nach §5 DDG, Stand Mai 2026
- AGB-Link in alle Footer (index.html, landing.html, zuechter.html, welcome.js)
- page-section #page-agb in index.html, Route 'agb' in app.js ROUTES
2026-05-15 16:21:04 +02:00
d20e63496c
Feat: AGB-Link im Footer (Welt-Welt) + AGB-Checkbox im Upgrade-Modal
...
- worlds.js: 'Datenschutz · AGB' in der Welt-Welt-Fußzeile
- settings.js: AGB-Checkbox über Widerrufs-Checkbox; beide müssen gecheckt sein bevor 'Anfrage senden' aktiv wird
2026-05-15 16:19:46 +02:00
e714580d77
Feat: Cashflow auf paid_amount, Differenz-Badge, Kulanz-Abschreibung im Bezahlt-Modal (SW by-v984)
2026-05-15 16:06:08 +02:00
d0b0e2c671
Fix: SW-Install-Fehler — PRIORITY_PAGES nicht-blockierend cachen, kein addAll() (SW by-v983)
2026-05-15 15:53:13 +02:00
68fd9c0e38
Fix: En-Dash in PDF durch Bindestrich ersetzen + _s() Sanitizer für alle Texteingaben (SW by-v982)
2026-05-15 15:50:02 +02:00
1a8716b0b2
Perf: Prioritäts-Seiten pre-cache + Stale-While-Revalidate + Background-Warm-up (SW by-v981)
2026-05-15 15:41:55 +02:00
78f3077317
UX: Freischalten zeigt Rechnungsentwurf-Nummer im Toast + Confirm-Hinweis (SW by-v980)
2026-05-15 14:01:45 +02:00
04d8ed153b
UX: Neue Rechnung — Hinweis 'nicht für Abos', neutraler Placeholder, passender Notiz-Default (SW by-v979)
2026-05-15 13:56:13 +02:00
f0f767e466
Fix: iOS Tastatur — modal-body maxHeight begrenzen + manueller scroll statt scrollIntoView (SW by-v978)
2026-05-15 13:43:17 +02:00
ed6dd8da13
Fix: Quartalssumme korrekt (alle inkl. Storno), Netto ausgeblendet (SW by-v977)
2026-05-15 13:38:08 +02:00
6104132714
Feat: Quartalsbericht — Stornozeilen mit Minusbeträgen, nach Datum sortiert, Summen netten sich heraus (SW by-v976)
2026-05-15 13:27:05 +02:00
cabb2fd6f7
Fix: iOS Modal scrollIntoView bei Tastatur; CSV Stornierte mit 0€ + Stornonummer (SW by-v975)
2026-05-15 13:15:49 +02:00
2bbf3bc3f6
Fix: CSV-Spalten korrigiert — Netto/Brutto getrennt, Zahlungseingang statt Erstellt (SW by-v974)
2026-05-15 12:53:26 +02:00
5fd86dac4b
UX: Admin-Panel Desktop — Sidebar-Navigation, 1200px Breite, keine abgeschnittenen Tabs (SW by-v973)
2026-05-15 12:42:04 +02:00
aea5f04bc1
Fix: Von-Gründer-eingeladen → 100% dauerhaft (statt 50%); SW by-v972
2026-05-15 12:25:41 +02:00
810c78ae8b
Feat: Referral/Gründer-Rabatt vollständig integriert (SW by-v971)
2026-05-15 12:22:31 +02:00
2163169b73
Feat: Rabattsystem in Rechnungserstellung integriert (Gründer/Referral)
...
- _get_discount_info() Hilfsfunktion in admin.py (Gründer 100%, Referral-Stufen 20/30/50%, von Gründer eingeladen 50%)
- list_upgrade_requests liefert discount_pct + discount_reason pro User
- GET /admin/users/{user_id}/discount Endpoint
- _handle_upgrade_invoices nutzt Rabatt für amount_net/discount_pct/after_disc + passende Notiz
- scheduler.py _create_renewal_invoice_draft: inline Rabattberechnung + korrekte Beträge
- admin.js: Discount-Badge in Upgrade-Card, data-Attribute am Invoice-Button, _discountNote(), discount_pct + notes im Modal vorbelegt
2026-05-15 12:21:33 +02:00
db4d5cb1b6
Legal: Widerrufs-Checkbox, AGB-Abschnitt, Rechnungsnotiz (SW by-v970)
2026-05-15 12:07:13 +02:00
9a7f100855
Legal: Widerrufs-Checkbox im Upgrade-Modal + AGB-Abschnitt in Datenschutz
...
- Upgrade-Modal: Checkbox §356 Abs.4 BGB muss aktiv bestätigt werden,
"Anfrage senden" bleibt bis dahin deaktiviert
- Akzeptanz-Zeitstempel wird mit der upgradeRequest-Message mitgeschickt
- datenschutz.js: neuer Abschnitt "Abonnement & Kündigung" mit Laufzeit,
Verlängerung, Zahlung, Kündigung, Erstattung und Widerrufsrecht
2026-05-15 12:06:14 +02:00
699926cd76
Fix: Rechnung-Hinweistext auf AGB-konforme Jahresbeitrags-Notiz umgestellt
...
Alle drei Rechnungs-Einstiegspunkte (Admin-Upgrade-Button, automatische
Verlängerung via Scheduler, manuelles Upgrade via admin.py) erhalten jetzt
den einheitlichen Hinweis zum Jahresbeitrag gem. AGB ohne Rückerstattung.
2026-05-15 12:06:05 +02:00
96030304d4
Fix: Leistungszeitraum als konkreter Datumszeitraum (Rechnungsdatum bis +12 Monate)
2026-05-15 11:49:48 +02:00
24a1aecda4
Fix: Leistungszeitraum '12 Monate ab Rechnungsdatum' statt festem Datum (SW by-v969)
2026-05-15 11:45:13 +02:00
b14a251bdc
Feat: Entwurf bearbeiten (PATCH), erneut senden; SW by-v968
2026-05-15 11:33:48 +02:00
0a466ef6ce
Feat: Rechnungsadresse — Profil, Upgrade-Modal Hinweis, Rechnung-erstellen-Button in Upgrade-Cards (SW by-v967)
2026-05-15 10:59:12 +02:00
fa513be7f5
Release v1.6.0 — Rechnungs-System (SW by-v966)
...
- Rechnungserstellung mit fortlaufender Nr. RG-YYYY-NNNN
- PDF-Generierung (fpdf2) mit §14-UStG-Pflichtangaben
- Kleinunternehmer-Modus (§19 UStG) via ENV
- Mail-Versand mit PDF-Anhang (Brevo/SMTP)
- Speicherung in /scaninput + Paperless-ngx REST-API
- Admin-Panel: Invoice-Tab, Pay/Cancel-Modals, Cashflow
- Quartalsbericht als CSV-Download + Mail-Versand
- Action-Items: offene Rechnungen im To-Do-Band
- Stornonummern ST-YYYY-NNNN
- docker-compose: /volume1/scaninput:/scaninput
2026-05-15 10:07:10 +02:00
9c359bb07e
Feat: Rechnungs-Management Tab in Admin-Oberfläche
...
Neuer 'Rechnungen'-Tab mit vollständiger Invoice-Verwaltung:
- Invoice-Liste mit Status-Badges (draft/sent/paid/cancelled) und kontextuellen Aktionen
- Modal: Neue Rechnung erstellen (dynamische Positionen, Live-Vorschau Netto/Brutto)
- Modal: Als bezahlt markieren (Datum + Betrag)
- Modal: Stornieren mit Pflichtgrund
- Modal: Detail-Ansicht mit Positionen-Tabelle
- Cashflow-View: Übersichtskacheln + Monatstabelle + Quartalsbericht-CSV-Download
- Action-Items Badge für offene Rechnungen (invoices_unpaid aus action-items API)
2026-05-15 09:56:42 +02:00
129badf010
Fix: Hero-Stats zeigt vollständigen Text 'Mülleimer für Kotbeutel' (SW by-v965)
2026-05-14 22:37:29 +02:00
cf6e5920ae
Fix: APP_VER-Mismatch (Dauer-Aktualisieren-Bug), Mülleimer-Zahl im Hero (SW by-v964)
2026-05-14 22:15:17 +02:00
58046ce0c7
Fix: Kotbeutel-Stationen → Mülleimer für Kotbeutel in Stats-Band (SW by-v963)
2026-05-14 22:07:17 +02:00
07db68aea2
Fix: Geburtstag aller Hunde + Kotbeutel-Stationen in Stats (SW by-v962)
...
- worlds.js: bdayDog = _dogs.find(...) — Geburtstag gilt für alle Hunde, nicht nur den aktiven
- Banner, KI-Call, "Was hat sich X gewünscht?" nutzen bdayDog.name
- stats.py: kotbeutel-Count aus user_map_pois WHERE type='kotbeutel'
- landing: Stats-Band 5. Kachel "Kotbeutel-Stationen"
2026-05-14 22:00:52 +02:00
be87930e5b
Fix: Foto-Strip + Ban-Yaro-Bild mit Inline-Styles (SW by-v961)
2026-05-14 19:55:34 +02:00
6f8644c70f
Landing: Ban Yaro persönlich — Foto + Geschichte als Split-Section (SW by-v960)
2026-05-14 19:50:12 +02:00
59ddf047ba
Perf: Fotos JPG→WebP, 18 MB → 373 KB (SW by-v959)
...
cwebp: eric-ward 1200px, chewy 1400px, baptist-standaert 1600px,
foto-strip 700x700px — alle q80-82
2026-05-14 19:42:41 +02:00
2a59b775e2
Fix: Eric-Ward-Split mit Inline-Styles und auto-fit Grid (SW by-v958)
2026-05-14 19:33:21 +02:00
7867507e7d
Landing: 7 Unsplash-Fotos mit Fotografen-Credits eingebaut (SW by-v957)
...
- Eric Ward: emotionaler 50/50-Split nach Stats-Band
- Baptist Standaert: subtiles Hintergrundbild Demo-Section
- Alvan Nee / Nicholas Brownlow / Wade Austin Ellis / Tamas Pap: 4er-Foto-Strip vor Testimonials
- Chewy: Header-Bild Welpenkäufer-Section
- Alle Fotos mit © Name · Unsplash Credit-Overlay
2026-05-14 19:25:14 +02:00
e610613b58
Fix: Dark-Mode CSS-Syntax korrigiert — html.dark + @media getrennt (SW by-v956)
...
Ungültige Syntax (@media..., html.dark kombiniert) aufgelöst.
Zwei separate valide Blöcke: html.dark{} für JS-Klasse, @media{} als Fallback.
2026-05-14 19:15:46 +02:00
10964c6509
Fix: Dark-Mode JS-Fallback via matchMedia + html.dark Klasse (SW by-v955)
...
matchMedia-Listener setzt html.dark als Fallback für macOS 26 / Brave
die prefers-color-scheme Media Query nicht korrekt weiterleiten
2026-05-14 19:07:36 +02:00
e548c43010
Fix: Dark-Mode Landing mit color-scheme Meta-Tag und !important-Overrides (SW by-v954)
...
- <meta name="color-scheme" content="light dark"> ergänzt
- color-scheme: light dark / dark in :root
- Alle Dark-Mode-Regeln auf !important umgestellt um Inline-Styles zu schlagen
- #funktionen, #warum, #vergleich, #preise, #ueber ergänzt
2026-05-14 19:01:37 +02:00
996ee9c97e
Fix: Landing Dark-Mode, OS-Icons→Phosphor, force-update-Loop (SW by-v953)
...
- main.py APP_VER 951→953 behebt Update-Loop auf Desktop
- Dark-Mode: vollständige @media (prefers-color-scheme: dark) Regeln für alle Sections
- Emojis im Verbindung-Block (🏡 🔍 🐶 ) durch Phosphor SVG ersetzt
- 🐾 in Testimonials und Footer durch paw-print SVG ersetzt
2026-05-14 18:34:02 +02:00
f9160307bc
Landing: emotionaler Hero, Social-Proof-Stats, Testimonial-Slots, Scroll-Animationen (SW by-v952)
...
- Hero-Headline: "Weil jeder Moment mit ihm zählt." (warm/emotional statt Feature-Liste)
- CTA umbenannt: "Kostenlos starten" statt "Ich bin Hundebesitzer"
- Hero-Stats-Zeile: live Nutzer/Hunde/km-Zähler (nur wenn >0)
- Stats-Band: orangener Balken mit 4 Live-Kennzahlen nach der Zwei-Welten-Section
- Testimonial-Section: 3 Platzhalter-Karten zwischen Features und Züchter-Bereich
- Scroll-Animationen: IntersectionObserver auf alle Cards (fade-up)
- API: /api/stats/public — öffentlicher Endpoint, 5-Min-Cache
2026-05-14 18:23:23 +02:00
c8f9bd4c09
Fix: Konto-Löschen-Dialog body→message (SW by-v951)
2026-05-14 16:51:39 +02:00
da4879b4c4
Fix: Kündigung-Anzeige auch ohne Ablaufdatum (SW by-v950)
2026-05-14 16:45:36 +02:00
959fff4651
UX: Kündigung-Toast zeigt Ablaufdatum (SW by-v949)
2026-05-14 16:41:52 +02:00
b3f1c6bdf3
UX: Routen Standby — Fingerabdruck unter Ring, iOS-Banner Safe-Area (SW by-v948)
2026-05-14 16:35:09 +02:00
2cf87bab7e
UX: Routen Standby — Fingerabdruck-Button statt ganzer Bildschirm (SW by-v947)
2026-05-14 16:29:09 +02:00