- fuenfvoracht/STATE.md: Review-Flow entfernt, direkt approved, neuer Changelog - arakava-news/STATE.md: Aktualisiert - redax-wp/STATE.md + src/app.py: Aktualisiert - flugpreisscanner/STATE.md: Aktualisiert - infrastructure/STATE.md: Aktualisiert - fuenfvoracht READMEs und Kurzuebersichten hinzugefuegt Made-with: Cursor
7 KiB
STATE: FünfVorAcht
Stand: 27.02.2026
Projektübersicht
Zweck: KI-gestützter Telegram-Kanal-Poster für die tägliche Reihe "Fünf vor Acht"
Posting-Zeit: 19:55 Uhr (Europe/Berlin) — pro Artikel individuell konfigurierbar
Kanal: Privater Kanal (-1001285446620)
Status: 🏁 Vorerst abgeschlossen — 27.02.2026
Aktiver Zustand
Container-Landschaft
| CT | Dienst | Status | Tailscale |
|---|---|---|---|
| 112 | FünfVorAcht (Bot + Dashboard) | ✅ Läuft | 100.73.171.62 |
Architektur
Stack (CT 112 auf pve-hetzner)
- Sprache: Python 3.11
- Bot-Framework: python-telegram-bot
- KI: OpenRouter API (GPT-4o-mini, konfigurierbar)
- Scheduler: APScheduler (jede Minute für Posting, alle 5 Min für Notify-Check)
- DB: SQLite mit WAL-Modus
- Dashboard: Flask + Tailwind CSS (self-hosted, kein CDN)
- Deployment: Docker Compose (2 Container: bot + web)
- Logging: JSON-Lines nach
/logs/fuenfvoracht.log
Workflow
Redakteur gibt Quelle/Thema ein
↓
KI generiert Artikel (OpenRouter)
↓
Redigieren im Dashboard + Telegram-Vorschau
↓
Einplanen: Datum + 15-Min-Zeitslot
↓
Status → approved (direkt, kein Review nötig)
Info-Nachricht an Redakteure: "Artikel eingeplant für XX:XX"
↓
APScheduler postet automatisch zum Zeitslot
↓
Bestätigung + Markenzeichen automatisch angehängt
Pfade & Konfiguration
| Was | Pfad |
|---|---|
| App-Verzeichnis | /opt/fuenfvoracht/ |
| Docker Compose | /opt/fuenfvoracht/docker-compose.yml |
| Datenbank | /opt/fuenfvoracht/data/fuenfvoracht.db |
| Logs (JSON) | /opt/fuenfvoracht/logs/fuenfvoracht.log |
| Prompts | In SQLite DB (Tabelle: prompts) |
| Tailwind CSS | Im Docker-Image gebaut (/app/static/tailwind.min.css) |
Datenbank-Schema
Tabellen
| Tabelle | Zweck |
|---|---|
| articles | Artikel-Queue mit date + post_time als Unique-Key |
| article_versions | Alle Versionen bei Neu-Generierung |
| post_history | Posting-Log mit Channel-Message-IDs |
| prompts | KI-Prompt-Bibliothek (editierbar) |
| sources_favorites | Gespeicherte Quellen-Favoriten |
| tags | Themen-Kategorien |
| article_tags | Artikel ↔ Tags (n:m) |
| channels | Kanal-Konfiguration (Zeit, Timezone) |
| locations | Aufenthaltsorte mit Reminder-Zeiten |
| settings | Schlüssel-Wert-Paare (z.B. user_location_id) |
| reviewers | Redakteure (chat_id, name, active) |
Article-Status-Lifecycle
draft → approved → posted
↘ skipped
Hinweis: Review-Schritt (sent_to_bot → approve/reject) wurde am 27.02.2026 entfernt.
Einplanen setzt direkt auf approved, Info-Nachricht statt Review-Buttons.
Zeitslot-System
UNIQUE(date, post_time)— Konflikte technisch ausgeschlossenpost_timeim 15-Minuten-Raster (06:00, 06:15, … 23:45)notify_at— UTC-Timestamp wann der Review-Bot benachrichtigtscheduled_at— wann der Artikel eingeplant wurde
Telegram-Setup
| Was | Wert |
|---|---|
| Review-Bot Token | 8799990587:AAEoQuohGdoJ2WudoOHs_j5Ns3iwft6OlFc |
| Review-Bot Name | @Diendemleben_bot |
| Kanal-ID | -1001285446620 |
| Redakteur 1 | Chat-ID 674951792 |
| Redakteur 2 | Chat-ID 1329146910 |
Dashboard-Features
- Studio: Artikel generieren, redigieren, Telegram-Vorschau in Echtzeit
- Einplan-Panel: Datum + 15-Min-Zeitslot + Bot-Benachrichtigungszeit
- Redaktionsplan: Nächste 7 Tage, mehrere Slots pro Tag, Umplanen + Löschen direkt im Board
- Monatskalender: Status-Dots pro Tag
- Prompt-Editor: Bearbeiten + Test mit Telegram-Preview
- History: Alle Posts der letzten 30 Tage
- Quellen-Favoriten: Häufig genutzte Quellen
- Redakteure-Verwaltung: Hinzufügen/Entfernen per Chat-ID
- Aufenthaltsort-Schalter: Reminder-Zeiten automatisch auf MEZ umgerechnet
- Anleitung (/hilfe): 6 Aufgabenbereiche mit Klickpfaden
Bot-Features
| Feature | Details |
|---|---|
/start |
Übersicht & Befehle (alle Redakteure) |
/heute |
Alle Slots des heutigen Tages |
/queue |
Nächste 3 Tage mit Slots |
/skip |
Hauptslot heute überspringen |
| Inline-Review | Legacy (noch im Code, nicht mehr aktiv genutzt) |
| Morgen-Briefing | 10:00 MEZ: Tagesplan + Ausblick 3 Tage |
| Nachmittags-Reminder | 18:00 MEZ: Warnung wenn kein Artikel eingeplant |
| Fehler-Alarm | Sofort bei Posting-Fehler: Ursache + Dashboard-Link |
| Willkommensnachricht | Automatisch bei neuem Redakteur |
Markenzeichen (automatisch)
Wird unter jeden Beitrag angehängt (Duplikat-Schutz aktiv):
Wir schützen die Zukunft unserer Kinder und das Leben❤️
Pax et Lux Terranaut01 https://t.me/DieneDemLeben
Unterstützt die Menschen, die für Uns einstehen❗️
Logging
Strukturiertes JSON-Logging nach /logs/fuenfvoracht.log:
{"ts": "2026-02-26T14:46:19Z", "level": "INFO", "event": "article_posted", "date": "2026-02-26", "post_time": "19:55", ...}
Events: article_generated, article_saved, article_scheduled, article_sent_to_bot, article_approved, article_posted, article_skipped, posting_failed, reviewer_added, reviewer_removed, slot_conflict, bot_started, morning_briefing_sent
Routing
- Dashboard:
https://fuenfvoracht.orbitalo.net(Cloudflare Tunnel) - Lokal:
http://100.73.171.62:8080 - Login: Holgerhh / ddlhh
- Kein öffentlicher Zugriff außer via Cloudflare Tunnel
Changelog
27.02.2026 — Review-Schritt entfernt
- Einplanen setzt direkt auf
approved— keinscheduled→sent_to_bot→ Review mehr - Info-Nachricht statt Review-Buttons: Redakteure bekommen nur Hinweis "Artikel eingeplant für XX:XX"
- Save-Endpoint Bug gefixt: Artikel mit anderer
post_timewurde nicht gefunden - Bot
job_check_notify: Setzt direkt aufapprovedstattsent_to_bot - Nachmittags-Reminder: Nur noch wenn gar kein Artikel eingeplant
- Dashboard: Button "Einplanen" statt "Einplanen & zum Bot senden", Notify-Dropdown entfernt
- Docker-Images neu gebaut (Source ist ins Image gebaut, nicht gemountet)
26.02.2026 — Board-Interaktivität
- Redaktionsplan komplett überarbeitet: Mehrere Artikel pro Tag sichtbar (vorher: einer pro Tag)
- 🔄 Umplanen: Inline-Panel direkt unter dem Artikel — Datum + Uhrzeit mit Live-Slot-Prüfung, 15-Minuten-Raster
- 🗑️ Löschen: Sicherheitsabfrage + sofortige Entfernung aus DB
- ✏️ Bearbeiten: Klick auf Artikel-Text öffnet Artikel im Studio (war schon vorhanden)
- Bei
posted-Artikeln sind Aktions-Buttons ausgeblendet
24.–26.02.2026 — Vollständiger Aufbau
- Initiales System, Multi-Reviewer, Branding, Logging, Scheduling, Morgen-Briefing, Fehler-Alarm, Reviewer-Verwaltung, Anleitung, Tailwind self-hosted, Performance-Fix
Offene Punkte / TODOs
- Redakteure-Verwaltung UI in settings.html (API vorhanden)
- Kanal-ID in Settings-UI editierbar (API vorhanden)
- Media-Einbettung im Editor (Video/Link Drag & Drop)
- Letzter-Post Zeitstempel im Dashboard anzeigen