homelab-brain/fuenfvoracht/STATE.md
root 82eaa1e4bc feat(redax-wp): Multi-Publish, Dashboard-Verbesserungen, ESP32-Serie Teil 2
Redax-WP (Redakteur):
- WordPressMirrorClient: Multi-Publish an mehrere WP-Instanzen
- Target-Toggles im Dashboard (Checkbox, server-side rendering)
- WP-Admin Direktzugang via socat-Proxy (bypass Cloudflare WAF)
- Drag & Drop im Redaktionsplan
- Artikel-Karten mit Titel + SEO-Snippet sichtbar
- Entwürfe ohne Datum in separater Sektion
- DB-Cleanup-Job (Sonntag 03:00 Uhr)
- openrouter.py: sync generate() Wrapper
- mirror_posts Tabelle in DB

ESP32-Serie (Arakava News):
- Teil 1 veröffentlicht (Post 1209)
- Teil 2 als WP-Entwurf erstellt (Post 1340)
- Animiertes Hydraulikschema (SVG, 4 Betriebsmodi) in Teil 2 eingebaut
- Hardware liegt in DE, Einbau ab April nach Kambodscha-Rückkehr

Doku:
- STATE.md Redax-WP vollständig aktualisiert
- STATE.md Arakava-News: Serie-Status + Hardware-Timeline

Made-with: Cursor
2026-02-28 19:25:43 +07:00

218 lines
7.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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:** ✅ Abgeschlossen — 28.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 ausgeschlossen
- `post_time` im 15-Minuten-Raster (06:00, 06:15, … 23:45)
- `notify_at` — UTC-Timestamp wann der Review-Bot benachrichtigt
- `scheduled_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`:
```json
{"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`** — kein `scheduled``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_time` wurde nicht gefunden
- **Bot `job_check_notify`:** Setzt direkt auf `approved` statt `sent_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 / Nice-to-have (nicht blockierend)
- [ ] 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
---
## Abnahme
**28.02.2026 — Projekt abgeschlossen.**
- Logs der letzten 48h: Keine Fehler
- 2 erfolgreiche Posts (26.02. + 27.02.)
- Bot, Web, Scheduler laufen stabil