Commit graph

362 commits

Author SHA1 Message Date
062794c61a landing.html: SEO-Update, 68 Filme, Hundeo-Vergleich, Sicherheits-USP, Social-Links, featureList aktualisiert 2026-05-01 09:59: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
59856e61a1 Filme: DB-Migration, 68 Einträge, Sort + Typ-Filter
- movies-Tabelle in SQLite (statt hardcoded Liste)
- seed_movies(): 68 Filme/Serien/Dokus beim ersten Start
- Felder: titel, originaltitel, jahr, genre, typ, hund_rasse,
  stirbt_der_hund, beschreibung, bild_emoji, imdb_rating, streaming
- GET /api/movies/filme?sort=&typ= — serverseitig sortiert
  Sort: default | titel | jahr_desc | jahr_asc | imdb | bewertung
  Typ: alle | film | serie | doku
- Admin-CRUD: POST/PATCH/DELETE /api/movies/filme
- Frontend: Sort-Dropdown, Typ-Filter-Buttons (Filme/Serien/Dokus),
  Zähler, IMDb-Rating + Streaming auf der Karte
- Promis ebenfalls erweitert (10 statt 6 Einträge)
2026-05-01 08:50:01 +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
3291930d07 Fix: arrow-bend-up-left Icon zum Sprite hinzugefügt (Vorlage laden) 2026-04-30 20:05:52 +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
b17b061496 Fix: Karten-Pin-Setzen erfordert Login — Weiterleitung zu Welcome
SW by-v573, APP_VER 550
2026-04-30 19:33:39 +02:00
a16f0268cc Fix: Nicht-eingeloggte User werden bei geschützten Seiten zu Welcome umgeleitet
Forum erhält requiresAuth, Auth-Guard navigiert zu Welcome statt Inline-Gate.
SW by-v572, APP_VER 549
2026-04-30 19:30:28 +02:00
87aeed8de8 Fix: Nicht eingeloggte User landen immer auf Welcome — auch bei direktem Hash-Link
navigate() beim Start prüft jetzt state.user; #forum, #wiki etc. werden
für Nicht-Eingeloggte auf welcome umgeleitet. SW by-v571, APP_VER 548
2026-04-30 19:27:48 +02:00
de02169c57 Fix: Nicht eingeloggte User landen immer auf Welcome-Seite (nicht Forum)
SW by-v570, APP_VER 547
2026-04-30 19:24:45 +02:00
6aae03191e UX: Auth-Gate mit Screenshot-Preview (blur+lock), bessere Texte, Register-CTA prominent, SW by-v569 2026-04-30 19:19:08 +02:00
7b25eac286 Fix: envelope-simple Icon zum Sprite hinzugefügt für Outreach-Tab, SW by-v568 2026-04-30 19:14:10 +02:00
b6258db6bc Feature: Admin Outreach — E-Mail-Versand via Hetzner SMTP, Vorlagen, Log, SW by-v567 2026-04-30 19:10:54 +02:00
230455c250 Feature: Gründer-Aktivierung nach Hunde-Profil mit Plausibilitätsprüfung
- is_founder_pending: bei Registrierung mit Code gesetzt (statt sofort is_founder)
- dogs.py: erstes Hunde-Profil → Plausibilitätsprüfung → is_founder aktivieren
- Prüfung: Name min. 2 Zeichen + Buchstaben, Rasse gültig, Geburtsjahr realistisch
- Settings: gelbes 'Gründer-Platz reserviert' Badge mit Link zu Hunde-Profil
- Onboarding-Toast informiert über nötiges Hunde-Profil
- SW by-v566, APP_VER 543
2026-04-30 18:59:20 +02:00
7fd71342da Config: mail@motocamp.de → banyaro.app-Adressen überall — ADMIN_EMAIL=admin@, hallo@ in Impressum/Datenschutz, SW by-v565 2026-04-30 18:29:51 +02:00
fd97145507 Feature: /partner Influencer-Landingpage — Live-Counter, Vorteile, Ranking, CTA, SW by-v564 2026-04-30 17:39:55 +02:00
128aee52de UI: Sidebar-Footer — Impressum/Datenschutz zentriert (wie 'die 100'), SW by-v563 2026-04-30 17:23:18 +02:00
89c75bed81 Release v1.1.4 2026-04-30 16:58:36 +02:00
f8861f3939 Fix: SW skipWaiting() sofort beim Install — kein Warten auf Cache, Update greift sofort, SW by-v562 2026-04-30 16:54:03 +02:00
c657ac6ab8 Fix: Update-Check vergleicht Server-Version mit lokaler — lädt Seite neu wenn Update gefunden, SW by-v561 2026-04-30 16:48:37 +02:00
7cf60a848f Feature: Notizblock — Neue Notiz direkt erstellen mit Kategorie-Vorauswahl, SW by-v560 2026-04-30 16:43:16 +02:00
b3e81f4504 Release v1.1.3 2026-04-30 15:39:54 +02:00
bb73ca801c Fix: Grant is_founder=0 löscht founder_number; /me gibt is_founder zurück; DB direkt gefixt 2026-04-30 15:38:17 +02:00
3373c19cdc Fix: /me Endpoint gibt is_founder/is_partner/founder_number zurück — SW by-v558 2026-04-30 15:35:48 +02:00
105262eff3 Fix: Settings refresh() lädt auch frischen /me-State, SW by-v557 2026-04-30 15:31:47 +02:00
97154be246 Release v1.1.2 2026-04-30 15:28:05 +02:00
f31f219ad6 Fix: Settings lädt frischen /me-State beim Init — Badges immer aktuell ohne Re-Login, SW by-v556 2026-04-30 15:18:02 +02:00
125fb3c7e7 Feature: Gründer/Partner-Badge im User-Profil-Modal + Freunde-Suche, SW by-v555 2026-04-30 15:08:59 +02:00
47c0590364 Fix: Partner-Tab — is_founder/is_partner in Admin-Users-Liste + Checkboxen vorausfüllen + founder_number in /me, SW by-v554 2026-04-30 14:59:04 +02:00
c2a5fbba7d Fix: /api/-Prefix in gruender.js+settings.js entfernt; Grant-Fehler sichtbar, SW by-v553 2026-04-30 14:45:16 +02:00
2f1dfd481c Fix: Partner-Tab — /api/-Prefix entfernt (API.get fügt es auto hinzu), SW by-v551 2026-04-30 14:37:25 +02:00
62b3138c41 Fix: Partner-Tab Usersuche nutzt /api/admin/users?q= (bestehende Route), SW by-v550 2026-04-30 13:58:56 +02:00
df104c2c57 Fix: Partner-Tab Usersuche — null-Guard + Mindestzeichen 2→1 für kurze Namen, SW by-v549 2026-04-30 13:53:51 +02:00
558fdaa49e UX: Admin Partner-Tab — Anleitungsbox mit Schritt-für-Schritt-Erklärung, SW by-v548 2026-04-30 13:46:55 +02:00
6f63a98a30 Fix: Admin Partner-Tab — null-Guard für codes, Tab-Label auf 'Partner' gekürzt, SW by-v547 2026-04-30 13:41:37 +02:00
ad988db25e Fix: APP_VERSION 1.1.1 in app.js + Makefile aktualisiert APP_VERSION bei release, SW by-v546 2026-04-30 11:32:41 +02:00
4df95bbe8b Release v1.1.1 2026-04-30 11:25:18 +02:00
7c66e0b9d4 Fix: CSS ?v=545 (nie gecacht) — SW by-v545, overflow-y:visible auf Desktop endgültig 2026-04-30 11:22:29 +02:00
ca44a53fb2 Fix: CSS ?v=540→543 — Browser-Cache invalidieren, overflow-y:visible auf Desktop, SW by-v544 2026-04-30 11:06:13 +02:00
d2e3009402 Fix: Desktop overflow-y:visible auf #page-content — verhindert Event-Capture, SW by-v543 2026-04-30 10:57:52 +02:00
466b4a3d6d Fix: overscroll-behavior-y:none nur mobile (max-width:767px) — Desktop-Mausrad freigegeben, SW by-v542 2026-04-30 10:42:47 +02:00
a37a944998 Fix: CSS-Version ?v=500→540 — immutable-Cache erzwingt Browser-Reload, SW by-v541, APP_VER 518 2026-04-30 10:38:11 +02:00
c0a1b2e922 Restore: CSS exakt auf v1.1.0 + overscroll-behavior-y:none auf #page-content — SW by-v540 2026-04-30 10:06:45 +02:00