9103c7950f
Feature: Generische Seiten-Hilfe (UI.pageInfo), POI Multi-Select, Tagessprüche-DB (SW by-v654)
...
- UI.pageInfo(): generische Hilfe-Funktion — erstes Öffnen zeigt Info-Banner, danach ? Button oben rechts; CSS-Klassen pinfo-*
- Übungen-Seite nutzt UI.pageInfo() als erstes Beispiel
- Karte POI: Mehrfachauswahl (außer Giftköder), Kombi-Typen entfernt, type als comma-separated im Backend
- daily_quotes Tabelle in DB (346 Einträge via import_quotes.py importiert)
- GET /widget/quote — deterministischer Tagesspruch (wechselt täglich)
2026-05-03 20:10:01 +02:00
1fdba57365
Feature: UX-Fixes — Zahnrad weg, POI-Kombi-Typen, exp-fab-Position, Welten-Config in DB (SW by-v653)
...
- worlds-settings Zahnrad komplett entfernt (war auf Mobile sichtbar, auf Desktop schon hidden)
- exp-fab: bottom jetzt calc(--nav-bottom-height + --safe-bottom + --space-2) — kein Overlap mit worlds-back auf iPhone
- Karte POI: neue Typen bank, bank_kotbeutel, bank_kotbeutel_abfall, kotbeutel_abfall (Backend + Frontend)
- Welten-Chip-Config: GET/PUT /profile/world-config, Spalte users.world_config TEXT (Migration), Sync bei Init + Speichern
2026-05-03 19:50:04 +02:00
f0b5e6e89b
Fix: Desktop-Welten-Labels — größer (13px), heller, Text-Schatten, Pill-Hintergrund aktiv, SW by-v652
2026-05-03 11:12:54 +02:00
15e2446ea7
Release v1.3.0
2026-05-03 11:09:43 +02:00
f4052fbb7d
Feature: Welten-Labels klickbar (JETZT|HUND|WELT), aktives Label hervorgehoben, Desktop-Tab-Optik, SW by-v651
2026-05-03 11:09:14 +02:00
a84df71383
Feature: JETZT-Welt — Streak+Gassirunde+Übung als kompakte 3er-Chip-Zeile, SW by-v650
2026-05-03 11:07:27 +02:00
87d3006aa7
Fix: Swipe-Begrenzung — kein Überziehen über erste/letzte Welt, SW by-v649
2026-05-03 11:04:24 +02:00
bb8ceaf114
Feature: JETZT-Welt — Gassirunde+Übungs-Vorschlag-Balken, Desktop-Zahnrad entfernt, SW by-v648
2026-05-03 11:02:57 +02:00
1d50bf1430
Fix: Desktop-Sidebar entfernt — kein padding-left, Map/Route volle Breite, SW by-v647
2026-05-03 10:57:39 +02:00
cd5aa73df3
Fix: Welten-Overlay Gradient statt flachem Schwarz — Mitte leuchtet, SW by-v646
2026-05-03 10:55:45 +02:00
0488cde13f
Fix: Zurück-Button primär-orange, Map/Route vollbild (kein weißer Balken), Map-FABs 54px und über Back-Button, SW by-v645
2026-05-03 10:52:48 +02:00
150776eab4
Feature: Welten-Navigation — Bottom-Nav+Header entfernt, Zurück-FAB (rund, dunkel), SW by-v644
2026-05-03 10:46:12 +02:00
860de6d2a7
Fix: Welten Footer-Links dezent hervorgehoben — heller, Underline, Text-Shadow, SW by-v643
2026-05-03 10:33:49 +02:00
4da2088074
Feature: Welten — Profil-Chip entfernt, Footer-Links (Impressum/Die100/Datenschutz), SW by-v642
2026-05-03 10:31:21 +02:00
9410a8bcd4
Fix: Welten Info-Cards — avatar_url statt foto_url, Hund-Name CSS-Grid 1fr-auto-1fr zentriert, SW by-v641
2026-05-03 10:26:14 +02:00
c266814aa9
Fix: worlds.js doppeltes const dog → SyntaxError behoben, SW by-v640
2026-05-03 10:22:13 +02:00
fc2002847c
Feature: Welten Info-Cards — User-Avatar in JETZT, Hunde-Avatar+Cycle+Overlap in HUND, SW by-v639
2026-05-03 10:18:11 +02:00
dfd68f2a07
Feature: Ausgaben-Formular redesigned — Kategorie-Kacheln, €-Prefix, Wiederholungs-Toggle, SW by-v607
2026-05-02 10:58:47 +02:00
c96e98917c
Fix: Ausgaben-Tab Icon → currency-eur, SW by-v606
2026-05-02 10:55:43 +02:00
798289ae5a
Feature: Daueraufträge in Ausgaben — monatlich/quartalsweise/jährlich, Scheduler, SW by-v605
2026-05-02 10:51:28 +02:00
a63a9ba197
Fix: Symptom-Check-Tab entfernt (KI-Tierarzt-Button übernimmt), SW by-v604
2026-05-02 10:45:50 +02:00
c9e7e50bf4
Fix: Staging MEDIA_DIR=/prod-media direkt (kein Symlink-Umweg), SW by-v603
2026-05-02 10:36:13 +02:00
f76f3d7056
Fix: Recalls leerer State check-circle via UI.icon(), SW by-v602
2026-05-02 10:33:25 +02:00
0994d16489
Bump SW by-v601 — Ausgaben-Redesign + Hundepass-Fixes deployen
2026-05-02 10:13:13 +02:00
b47a54db39
Fix: Media-Symlinks beim Start, Sitter-Datenschutztext, Recalls Dark-Mode, Ausweis neuer Tab, SW by-v600
2026-05-02 10:09:06 +02:00
2677cff882
Fix: Ausweis öffnet neuen Tab (kein iframe), Mein Tierarzt im Praxen-Tab integriert, SW by-v599
2026-05-02 09:57:12 +02:00
da176d477a
Bump SW by-v598 für Sprint31-Deploy auf Staging
2026-05-02 09:30:34 +02:00
742ad189e8
Feature: Sprint31 — 9 Features merged (Streak, Ausgaben, KI-Tierarzt, Rückrufe, Adoption, Vet+Befunde, Hundepass, Playdate, Rassenerkennung)
...
- Trainings-Streak: streak.py, DB training_streaks, Scheduler 19:00, Widget in welcome.js, Ping in uebungen.js
- Ausgaben-Tracker: expenses.py, expenses.js, DB expenses-Tabelle
- KI-Tierarztfragen: ki.py /tierarzt, health.js Button+Modal, DB ki_tierarzt_log
- Rückruf-Alarm: recalls.py, recalls.js, DB feed_recalls, Scheduler 08:00 RASFF
- Adoption: adoption.py, adoption.js, DB adoption_cache
- Tierarzt-Favorit + Befunde: tieraerzte.py /my-favorite+/favorite, health_docs.py, health.js, api.js, DB favorite_vets+health_documents
- Digitaler Hundepass: passport.py, dog-profile.js, main.py /pass/{token}, DB vaccinations+medications+dog_passport_meta+passport_shares, requirements.txt fpdf2
- Playdate-Matching: playdate.py, playdate.js, DB playdate_listings+playdate_requests
- Rassen-Erkennung: ki.py /rasse-erkennung (Claude Vision), dog-profile.js+wiki.js, CSS .rasse-result-card, DB ki_rasse_log
2026-05-02 09:29:48 +02:00
031c6028ac
Feature: HdM Community-Vote — alle öffentlichen Hunde wählbar, eigene ausgenommen, SW by-v597
2026-05-02 08:44:59 +02:00
83958cbb0b
Fix: Forum Tab-Marquee scrollt jetzt bis zum Textende (Padding eingerechnet), SW by-v596
2026-05-02 08:39:22 +02:00
d1572c52bc
Feature: Forum Tab-Pills — Marquee-Scroll bei Hover für abgeschnittenen Text, SW by-v595
2026-05-02 08:35:49 +02:00
ea2a83b29e
Feature: Filme-Suche, HdM ins Forum + Gewinner-Badge im Profil, SW by-v594
...
- Filme-Seite: Suchfeld (filtert live nach Titel, Rasse, Genre, Beschreibung)
- Filme-Seite: Tab "Hund des Monats" entfernt
- Forum: kompakte HdM-Kachel über der Suche (Sieger + Stimmen), Klick öffnet Abstimmungs-Modal
- Hundeprofil: goldene Badges für jeden gewonnenen Monat (🏆 Mai 2026 …)
- DB: Tabelle hund_des_monats_wins (dauerhaft, dog_id + monat + stimmen)
- Scheduler: Job am 1. des Monats 00:05 — schreibt Vormonats-Sieger, Push an Besitzer
- Dogs-API: liefert hdm_wins[] pro Hund mit
2026-05-02 08:12:29 +02:00
d00284184b
Feature: Moderation SLA — Altersanzeige + Overdue-Alarm täglich 12:00, SW by-v591
2026-05-01 19:49:02 +02:00
87039994ce
Feature: Moderation History — Log für alle 4 Bereiche, resolved_by/at Migration, SW by-v590
2026-05-01 19:44:59 +02:00
e2cd32a550
Feature: Moderation — Forum-Meldungen + POI-Korrekturen, SW by-v589
2026-05-01 19:37:46 +02:00
020153484a
Feature: Moderation-Tab — Action-Items-Karte oben, SW by-v588
2026-05-01 19:34:26 +02:00
d04110c2ae
Feature: Admin Action-Items-Karte über Tabs, SW by-v587
2026-05-01 19:29:23 +02:00
fb7bbe5ccc
Fix: UI.modal.open() statt UI.modal() im Outreach-Log, SW by-v586
2026-05-01 19:21:38 +02:00
775cda9a67
Feature: Outreach-Log — Mail-Inhalt per Klick anzeigen, SW by-v585
2026-05-01 19:19:03 +02:00
8bdd67573e
Fix: form-label Kontrast — c-text statt c-text-secondary, SW by-v584
2026-05-01 18:58:57 +02:00
da1146b047
Fix: movies-type-btn bekommt movies-filter-btn CSS + Phosphor-Icons sichtbar, SW by-v583
2026-05-01 09:49:48 +02:00
b3bd34c76a
UI: Phosphor-Icons für Jobs, Filme, Admin-Bewerbungen + Jobs-Link in Entdecken, SW by-v582
2026-05-01 09:44:51 +02:00
d5e408528b
Fix: UI.esc → UI.escape in jobs.js, SW by-v581
2026-05-01 09:37:51 +02:00
8561cffc80
Fix: page-jobs Section in index.html + SW by-v580
2026-05-01 09:34:12 +02:00
f378edab5d
Jobs: Bewerbungssystem für Social-Media-Manager/in
...
Backend:
- job_applications + job_application_docs Tabellen in DB
- luna_trial_until Spalte in users (Migration)
- routes/jobs.py: POST /apply (FormData + Datei-Upload, max 3×10MB),
GET /my-application, GET /luna-trial-status
- Admin: GET/PATCH /admin/applications, GET /admin/applications/{id}/docs/{doc_id}
- Bei Bewerbung: 14-Tage Luna-Probezugang automatisch aktiviert
- Bei Annahme: is_social_media=1 + Gründer-Status gesetzt
- Status-Mails (pending/reviewing/accepted/rejected) via email_html-Template
- auth.py: require_social_media prüft auch luna_trial_until
Frontend:
- pages/jobs.js: Stellenausschreibung + Bewerbungsformular
(Name, E-Mail, Hund, Social-Handle, Motivation, Datei-Upload)
- Luna-Probezugang Teaser mit Countdown wenn aktiv
- Bestehende Bewerbung: Status-Screen statt Formular
- app.js: 'jobs' Seite registriert
- admin.js: neuer Tab 'Bewerbungen' (filtert nach Status,
Statuswechsel per Dropdown, Detailansicht mit Anhang-Download,
Admin-Notiz-Feld)
- admin.js: Tab 'Jobs' → 'Scheduler' umbenannt
2026-05-01 09:30:05 +02:00
de1677154f
Security + E-Mail-HTML + Quartalsbericht + Registrierungspflicht
...
Registrierung & Login:
- E-Mail-Verifikation jetzt Pflicht vor erstem Login
- Register gibt keinen Token mehr zurück → "Postfach prüfen"-Screen
- Login blockt mit EMAIL_NOT_VERIFIED (403) wenn unverifiziert
- Resend-Verification ohne Auth (email-basiert)
- Frontend: _renderVerifyPending() nach Register und Login-Fehler
- Account-Lockout: 5 Fehlversuche → 15 Min gesperrt (ratelimit.py)
- Login Rate-Limit zusätzlich per E-Mail-Adresse (5/5 Min)
- Fehler-Tracking wird bei erfolgreichem Login zurückgesetzt
E-Mail-Templates (alle Mails jetzt HTML):
- email_html() Shared-Template in mailer.py (Gradient-Header, Warm-Beige)
- Verifikations-Mail, Passwort-Reset → HTML mit CTA-Button
- Admin-Outreach: plain text auto-wrapped in HTML
- Züchter-Mails (Antrag/Genehmigung/Ablehnung) → Template
- Tierschutz-Alert (litters.py) → Template
- send_support_mail → HTML
- outreach._build_message() + _send_smtp() unterstützen jetzt html= Parameter
Forum-Schutz:
- Post-Cooldown: 30 Sek zwischen beliebigen Posts (DB-Check)
- Stunden-Limit: 5 Threads / 20 Antworten pro User/Stunde
- Duplikat-Erkennung: gleicher Text in 5 Min blockiert (in-memory)
- content_filter.py: Spam-Keywords, URL-Sperre für Accounts < 7 Tage,
Sonderzeichen-Ratio-Check
Security-Headers:
- HSTS: max-age=31536000; includeSubDomains
- Content-Security-Policy: frame-ancestors none, base-uri self, …
- X-Frame-Options entfernt (CSP frame-ancestors ist moderner)
Honeypot-Fallen (13 Scanner-Pfade → 24h IP-Sperre):
- /api/admin/users, /api/v1/users, /api/.env, /api/config,
/api/setup, /api/install, /api/phpinfo, /api/debug,
/api/actuator, /api/swagger, /api/graphql u.a.
Quartalsbericht-System:
- backend/scripts/generate_reports.py: 6 Sections
(Sicherheit, Funktionsumfang, Dateien, Nutzer, Partner, Server)
- make reports: generiert alle Berichte aus dem Container, committed
- Scheduler: quarterly_report Job (1. Feb/Mai/Aug/Nov 07:00)
→ vollständige HTML-Mail an ADMIN_EMAIL
- quarterly_report erscheint im täglichen Status-Report
Admin-Panel:
- "Forum & Meldungen" → "Forum"
2026-05-01 08:20:53 +02:00
f3e4a51178
Release v1.2.1 — APP_VERSION bump, SW by-v577
2026-04-30 20:24:55 +02:00
526ff42215
Security: Passwort-Minimum, Rate Limits, Headers, Passwort-vergessen, email_verified
...
- Passwort-Minimum 8 Zeichen bei Register + Reset
- Rate Limit auf /resend-verification (3/h) und /forgot-password (3/h)
- Security-Headers: X-Frame-Options, X-Content-Type-Options, Referrer-Policy etc.
- email_verified in get_current_user SELECT ergänzt
- Forum: create_thread + create_post erfordern email_verified
- POST /auth/forgot-password + /auth/reset-password (2h-Token, via support@)
- DB-Migration: password_reset_token + password_reset_expires
- Frontend: Passwort-vergessen-Modal im Login, Reset-Formular mit Passphrase-Generator
- SW by-v576, APP_VER 553
2026-04-30 20:23:43 +02:00
b9ee67b8dd
Feature: E-Mail-Verifikation + Forum öffentlich lesbar + Launch-Vorbereitung
...
- Forum ohne requiresAuth: öffentlich lesbar, Schreiben weiter via API-Guard
- E-Mail-Verifikation: Token bei Registrierung, support@-Mail, /verify-email/{token}
- Verifikations-Banner (orange, dismissible) wenn email_verified=0
- Grüner Haken / "Nicht bestätigt"-Chip in Settings
- POST /auth/resend-verification für Chip und Banner
- DB-Migration: users.verification_token TEXT
- SW by-v575, APP_VER 552
2026-04-30 19:51:07 +02:00
e79290edb7
Feature: Mailing — Template-Manager, zwei SMTP-Accounts (partner/support)
...
- email_templates Tabelle (CRUD), Startwert-Vorlage wird einmalig geseedet
- outreach_log.from_account Spalte ergänzt
- Admin-UI: Template-Liste mit Laden/Bearbeiten/Löschen + Modal zum Anlegen
- Compose mit Absender-Auswahl (partner@/support@)
- send_support_mail() intern aufrufbar für Moderations-Trigger
- SW by-v574, APP_VER 551
2026-04-30 19:41:58 +02:00