Hermes Agent
66f4ef59da
fix: user routes mit cleanen String-Templates — kein f-string/.format-Mix
2026-06-19 17:51:41 +02:00
Hermes Agent
392845afb4
user-profiles: Cross-Channel-Identität mit Registrierung, Login, Profil + WhatsApp/Telegram-Flow
2026-06-19 17:44:35 +02:00
Hermes Agent
ffff6d1fa3
faq-trigger: auch in /api/chat (Website-Chat) einbauen
2026-06-19 17:37:03 +02:00
Hermes Agent
99a5a8975f
chatbot-faq: Nummer-speichern-Hinweis in Willkommenstext + FAQ-Trigger für keine-Antwort-Fragen
2026-06-19 16:57:09 +02:00
Hermes Agent
05532afec6
admin-notify: WhatsApp-Benachrichtigungen an Daniel bei neuer Einsendung + Veröffentlichung
2026-06-19 16:44:20 +02:00
Hermes Agent
9f93d247eb
feat: KI-Bewertung + Begründung in Submission-Detail + #76 entblockt
2026-06-19 13:56:48 +02:00
Hermes Agent
8bc524ca9c
fix: Audio-Dateien nie auf Frontpage + Sprach-Regeln im Triage-Prompt
...
- media_publish_flags: .ogg/.mp3/.wav auf '0' (nicht veröffentlichen)
- TRIAGE_PROMPT: Sprachnachrichten-Regeln (dünn=Zusammenfassung, reichhaltig=1:1)
- threading-Import-Fix in WhatsApp/Telegram-Webhooks
2026-06-19 13:36:00 +02:00
Hermes Agent
ad3082c195
fix: published_at bei Tier-1-Triage setzen + Mobile-Triage-Badges + ⏳ für Ungeprüfte
...
- published_at = CURRENT_TIMESTAMP bei Tier-1-Publish (sonst sortieren NULLs ans Ende)
- Mobile-Cards zeigen jetzt auch Triage-Badge (🟢 🟡 🔴 ⏳ )
- Desktop-Tabelle zeigt ⏳ für noch nicht triagierte Einträge
- TRIAGE_DELAY_SECONDS env-var (default 360)
2026-06-19 13:29:31 +02:00
Hermes Agent
6eadb7342b
fix: Frontpage-Text gekürzt (erster Satz/80 Zeichen) + Triage-Timing 6min + SQLite-Fix
...
- Frontpage: Nur erster Satz pro Karte (max 80 Zeichen)
- Triage: 6 Min Verzögerung nach letzter Nachricht (Thread-Window)
- _run_triage_async: Direkt-SQLite statt get_db() (kein Flask-Context nötig)
2026-06-19 13:04:27 +02:00
Hermes Agent
bc8e599018
feat: LLM-Intake-Triage — 3-Stufen-KI-Prüfung aller Chatbot-Einreichungen
...
- Neue DB-Spalten: triage_tier, triage_reasons, triage_at, public, display_text
- triage_submission() via DeepSeek V4 Flash: klassifiziert in 🟢 /🟡 /🔴
- display_text: gute Texte 1:1, kurze/noisy Texte werden aufbereitet
- Bild-Sicherheitsprüfung via Gemini Vision (Nazi-Symbole, Gewalt etc.)
- Async nach WhatsApp/Telegram-Webhook — nicht blockierend
- Admin-Dashboard: Triage-Badges + Filter (🟢 /🟡 /🔴 )
- Öffentliches Frontend: Nur public=1 + triage_tier=1 wird angezeigt
- Auto-Antworten: 🟢 =Danke, 🟡 =Prüfung, 🔴 =keine Antwort
2026-06-19 12:56:34 +02:00
Hermes Agent
5181a09c20
feat: Telegram-Bot-Integration — Webhook-Endpoint + Download + Thread-Merge + Auto-Reply
...
- Neuer Endpoint POST /telegram/webhook (GET=Health-Check)
- Parser für alle Telegram-Nachrichtentypen (Text, Foto, Video, Voice, Audio, Dokument, Sticker, Standort)
- Media-Download via Telegram File API (getFile + Download)
- .mov → .mp4 Konvertierung (ffmpeg)
- 5-Min-Thread-Merge-Logik (gleiches Pattern wie WhatsApp)
- Auto-Reply: Willkommensnachricht für neue Nutzer, Danke für bestehende
- GDPR-Trigger 'Meine Daten löschen' integriert
- #out-Erkennung + ausverkauft-Markierung
- Hintergrund-Transkription + LLM-Auto-Analyse
- TELEGRAM_TOKEN via .env konfigurierbar
2026-06-18 18:38:09 +02:00
Hermes Agent
f6581b7de5
feat: Ausverkauft-Auto-Markierung + Chatbot-Integration
...
Webhook:
- mark_ausverkauft_in_neuheiten(): Cross-Reference-Funktion
setzt Bit 0 in neuheiten.flags bei #out-Meldungen
- Aufruf sowohl bei neuen Submissions als auch Thread-Appends
- Gefixt: lokales 'import re' entfernt (überschattete globales re)
Chatbot /api/chat:
- Neuheiten-SELECT inkludiert flags-Spalte
- [Neuheit]-Einträge zeigen '🔴 AUSVERKAUFT' bei flags & 1
- [Ausverkauft-Meldung]-Suche in published Submissions
- System-Prompt um Ausverkauft-Regeln ergänzt
Flow: WhatsApp '#out Spielname' → Submission → neuheiten.flags
→ Chatbot warnt aktiv vor vergriffenen Spielen
2026-06-18 15:11:38 +02:00
Hermes Agent
bdd7ebb006
fix: OOM-safe SQL filtering + relevance scoring for /api/chat
...
Problem: On every chat request, ALL 1015 aussteller + 1861 neuheiten rows
were loaded into Python (2876 rows × full-text processing). Multiple
concurrent requests caused OOM kills (exit 137).
Fix:
- SQL LIKE filtering with parameterized queries (WHERE ... OR ... LIMIT 30)
- Relevance scoring in SQL: longer search terms = higher weight
- Tokenization: re.findall strips punctuation ('kosmos?' → 'kosmos')
- Stopword filtering removes noise ('die', 'hat', etc.)
- Removed duplicate 'gibt' in stopwords
Verified: Kosmos, Asmodee (6 Stände), Pegasus (3 Stände), Flip & Write
2026-06-18 14:56:37 +02:00
Hermes Agent
ce25870960
fix: Multi-Stand-Merge für Aussteller — Asmodee jetzt mit allen 6 Ständen
...
- Merge-Logik fasst Aussteller mit ähnlichem Namen zusammen
- Pipe-getrennte Stände korrekt aufgelöst
- Stopwort-Problem identifiziert (wo/finde/ich matchen 558 Einträge)
2026-06-18 14:50:44 +02:00
Hermes Agent
4b50bbfd37
feat: Neuheiten-Suche — 1.861 Spiele in DB + Chatbot-Integration
...
- Neue Tabelle 'neuheiten' mit 1.861 Spielen von spiel-essen.de
- Themen-Namen aufgelöst (96 Kategorien: Flip'n'Write, Kartenspiel, etc.)
- Chatbot /api/chat durchsucht jetzt Submissions + Aussteller + Neuheiten
- Erweiterter Kontext bei Spiel/Neuheit-Fragen (bis 40 Treffer)
- 586 Verlage mit Verlags-Suche
2026-06-18 14:44:22 +02:00
Hermes Agent
ced5604799
feat: Aussteller-Suche für SPIEL Essen — 1015 Verlage in DB + Chatbot-Integration
...
- Neue Tabelle 'aussteller' mit 1015 Ausstellern von spiel-essen.de
- Chatbot /api/chat durchsucht jetzt Aussteller + Community-Beiträge
- Keyword-Scoring für relevante Treffer (bis 40 bei Hallen-Fragen)
- System-Prompt um Aussteller-Kontext erweitert
- getestet: Pegasus, Kosmos, Halle-3-Suche, Unbekannt-Fallback
2026-06-18 14:41:40 +02:00
Hermes Agent
7c96743237
Double-Opt-In Verification für Kommentare (E-Mail/WhatsApp)
...
- Neues comments.verification_token Feld (UUID)
- /api/comment: Bei VERIFICATION_REQUIRED=1 → pending + Token
- Verification-Link per E-Mail und WhatsApp versendet
- GET /verify-comment/<token>: Prüfung → LLM-Moderation → published/blocked
- Testsystem-Bypass: VERIFICATION_REQUIRED=0 → direkt published (default)
- Bestehende 40 Kommentare bleiben unangetastet (status='published')
- Token-Einmalgebrauch: 404 bei Wiederverwendung
2026-06-18 01:28:34 +02:00
Hermes Agent
77d4ec426c
LLM-Moderation mit DeepSeek V4 Flash + Admin-Kommentarverwaltung + BSN Assistent Umbenennung
...
- moderate_comment(): LLM-Filter prüft jeden neuen Kommentar auf deutsches Recht & Toxizität
- /api/comment: Moderation vor Benachrichtigung, geblockte Kommentare stillschweigend verworfen
- /admin/comments: Neue Admin-Ansicht für alle Kommentare mit Sperren/Freischalten
- /admin/comment/<id>/<action>: API zum Blocken/Entsperren
- comments.status + moderation_reason Felder in DB
- 'Chat-Assistent' → 'BSN Assistent' überall umbenannt
- System-Prompt: Beitrags-Links im Chat mit echten /beitrag/ID Verweisen
2026-06-18 01:10:02 +02:00
Hermes Agent
90bce41178
Startseite: Kommentar-Count mit Sprechblasen-Icon in BSN-Blau + 34 Demo-Kommentare
2026-06-18 01:00:05 +02:00
Hermes Agent
aa1ee564bd
Logo-Text: boardgame.network; 🔔 →SVG-Glocke in BSN-Blau
2026-06-18 00:56:21 +02:00
Hermes Agent
55da2dbc2d
Kommentarsystem: Antworten, Pflichtfelder, Like-Benachrichtigung
...
- Antworten auf Kommentare (Threading mit parent_id)
- Pflichtfeld E-Mail ODER Handynummer bei Beiträgen und Kommentaren
- Benachrichtigung bei Antworten auf eigene Kommentare (E-Mail/WhatsApp)
- Like-Benachrichtigung an Beitragsersteller (E-Mail/WhatsApp)
- Verschachtelte Kommentardarstellung mit Antwort-Button
- Web-Submit-Overlay um Phone-Feld + Validierung erweitert
- DB-Migration: comments.parent_id/email/phone, submissions.phone
2026-06-18 00:55:09 +02:00
Hermes Agent
97d9768bb5
feat: Kommentar-System mit WhatsApp- & E-Mail-Benachrichtigung
...
- Neue comments-Tabelle (submission_id, author_name, content)
- POST /api/comment/<id> — Kommentar speichern + Benachrichtigung senden
- WhatsApp: Sender wird per WhatsApp informiert mit Link
- E-Mail: Web-Einreicher mit angegebener E-Mail werden benachrichtigt
- _send_email() über sendmail für Mail-Versand
- Kommentar-Formular + Anzeige auf Detailseite (/beitrag/<id>)
- E-Mail-Feld im Web-Submit-Formular (+ Overlay)
- email-Spalte in submissions-Tabelle
2026-06-18 00:47:51 +02:00
Hermes Agent
a3706e1169
feat: 'Boardgame Social' neben Brettspiel News Logo
...
- Frontend, Detailseite, Admin: <span>Boardgame Social</span> neben Logo
- CSS: .site-logo-sub (weiss/transparent) + .admin-logo-sub (dark theme)
- Admin: Logo+Text in .admin-logo-wrap für korrektes Flex-Layout
2026-06-18 00:27:53 +02:00
Hermes Agent
2eb51b81e2
fix: Banner zeigt AUSVERKAUFT auch ohne spiel_titel
...
- Bedingung gelockert: category='ausverkauft' reicht für Banner
- spiel_titel optional — mit Titel '· Spielname', ohne nur 'AUSVERKAUFT'
- DB-Fix: spiel_titel für Submission #55 nachgetragen
2026-06-18 00:24:36 +02:00
Hermes Agent
3f56a53663
fix: debug=False in production, verhindert Reloader-Code-Stale-Bug
2026-06-18 00:22:40 +02:00
Hermes Agent
b2b207af46
feat: roter Vollbreiten-Banner für AUSVERKAUFT auf Cover
...
- CSS: .story-ausverkauft-badge → Vollbreite (top:0; left:0; right:0)
mit Rot-Gradient, grösserem Text, z-index:7
- Banner ersetzt die Zeit-Leiste bei ausverkauften Karten
- Neues Markup: 🚫 AUSVERKAUFT · Spielname
- Detailseite: eigener .detail-ausverkauft-banner mit border-radius
- Bugfix: lokales 'import re' in api_submit entfernt (UnboundLocalError)
2026-06-18 00:19:56 +02:00
Hermes Agent
05e934dd66
feat: #out detection sets category=ausverkauft + Spieltitel-Extraktion
...
- WhatsApp-Webhook: Neue Nachrichten mit #out setzen category='ausverkauft',
Spieltitel wird nach #out extrahiert (abgeschnitten an Satzzeichen/Trennern)
- Thread-Append: #out in Folgenachrichten aktualisiert category + spiel_titel
- Web-Form-Submit: #out im Text setzt category='ausverkauft' + extrahiert Titel
- Fix: lokales 'import re' in api_submit entfernt (globale 're' reicht)
- Frontend: Filter-Dropdown zeigt 'ausverkauft' dynamisch, Badge auf Karten +
Detailseite
2026-06-18 00:06:57 +02:00
Hermes Agent
1153c170a5
like-buttons: gelikte posts bleiben markiert via localStorage (frontpage + detail)
2026-06-17 23:59:04 +02:00
Hermes Agent
0f04231cee
filterleiste: zustand (offen/zu) persistent via localStorage
2026-06-17 23:42:37 +02:00
Hermes Agent
17209b5d0e
sort-dropdown: currentColor → #20228a — icons jetzt einheitlich BSN-Blau
2026-06-17 23:40:46 +02:00
Hermes Agent
235ba6968b
sort-dropdown: 👍 👁 emojis durch SVGs ersetzt
2026-06-17 23:35:52 +02:00
Hermes Agent
d363dd45cb
augen-icon: 👁 emoji durch graues SVG-auge ersetzt (frontpage + detail)
2026-06-17 23:33:14 +02:00
Hermes Agent
71a30ba73d
filter-bar: emoji-icons durch BSN-blaue SVGs ersetzt
2026-06-17 23:30:10 +02:00
Hermes Agent
151872e49d
blur nur desktop (≥901px) + textfeld 5000→20000 zeichen
2026-06-17 23:28:22 +02:00
Hermes Agent
8bfd28787e
hover blur: 1.8px → 1px — weniger unscharf
2026-06-17 23:24:21 +02:00
Hermes Agent
d0d6454f2f
hover: rest der seite leicht unscharf (blur 1.8px) via :has()-selector
2026-06-17 23:23:26 +02:00
Hermes Agent
5487012605
offcanvas: icons entfernt, seiteninhalt blur(4px) bei geöffnetem menü
2026-06-17 23:21:51 +02:00
Hermes Agent
89d092e5cf
offcanvas-nav: impressum, datenschutz, agb als rechtliche unterseiten
2026-06-17 23:16:01 +02:00
Hermes Agent
7316d36eb3
milchglas 0.55 deckkraft + text-only padding-top 2rem gegen überlappen
2026-06-17 23:09:51 +02:00
Hermes Agent
0deea0211f
milchglas: 10% mehr transparenz (0.78→0.68) für alle blöcke
2026-06-17 23:07:48 +02:00
Hermes Agent
749b8bee13
alle karten: autor mit personen-icon ganz unten, views+likes darüber — einheitliches layout
2026-06-17 23:06:13 +02:00
Hermes Agent
e97825ce2d
text-only: autor mit personen-icon unten, gleicher aufbau wie medien-karten
2026-06-17 23:04:06 +02:00
Hermes Agent
bb34386275
text-only karten: zeit-overlay oben wie bei medien-karten
2026-06-17 23:00:56 +02:00
Hermes Agent
346715faf9
background: warmes Hellgrau #E8E4DC statt knallgelb #FCE812
2026-06-17 22:59:01 +02:00
Hermes Agent
3234e5f6a4
hover: scale(1.03) statt translateY + dunklerer Schatten
2026-06-17 22:57:25 +02:00
Hermes Agent
a84a2c9885
feat: SVG-Pin-Icon für Halle-Badges (statt 📍 Emoji)
...
- Weiße Pin-SVG auf allen Frontend-Halle-Badges
- Detailseite ebenfalls mit Pin-Icon
- Konsistent mit restlichen SVG-Icons (BSN-Blau-Thema)
2026-06-17 22:54:36 +02:00
Hermes Agent
f894f84942
fix: Milchglas-Leiste spannt jetzt über die volle Kartenbreite
...
- story-time-overlay: right:0 hinzugefügt → durchgängige Bar von links nach rechts
- Halle-Badge sitzt mit z-index:5 auf dem Milchglas
- Kein abgesetzter Rand mehr — einheitliche Top-Leiste
2026-06-17 22:52:55 +02:00
Hermes Agent
4868143927
fix: Badges/Time-Overlay bündig zur Oberkante ausgerichtet
...
- story-time-overlay: top/left auf 0, border-radius zur Karte hin
- story-halle-badge: top/right auf 0
- story-ausverkauft-badge: top/left auf 0
- Alle drei Badges sitzen jetzt auf einer Linie am oberen Kartenrand
2026-06-17 22:46:13 +02:00
Hermes Agent
5c27f08f38
feat: SVG-Icons für Like-Button und Filter-Toggle (BSN-Blau)
...
- 👍 Emoji → Thumbs-up SVG (16x16, #20228a) auf allen Like-Buttons
- 🔽 /🔼 Emoji → Chevron SVG im Filter-Toggle
- JS-Handler aktualisiert (innerHTML statt textContent)
- Look konsistent mit restlichen Frontend-Icons
2026-06-17 22:33:02 +02:00
Hermes Agent
e90d38c28f
fix: Filter-Leiste jetzt korrekt in collapsible Wrapper verpackt
...
- filterBar div mit filter-collapsed Klasse umschließt alle Filter
- Behebt: Wrapper war vorher nicht im HTML (nur CSS/JS)
2026-06-17 22:20:49 +02:00