Deutsch | English | Änderungsprotokoll | TODO | Installation | Bedienung
Ein Redaktionskalender für die eigenen Seiten und die sozialen Netzwerke.
POSTKutsche sieht auf Ihren Blogs und in Ihren Shops nach, was es Neues gibt, lässt daraus für jedes Netzwerk eine eigene Fassung schreiben – von Claude, von einem Modell auf Ihrem eigenen Rechner oder von Ihnen selbst –, legt sie Ihnen im Kalender zur Ansicht vor und veröffentlicht sie zu dem Zeitpunkt, den Sie bestimmt haben. Für Facebook und Instagram, solange Metas Prüfung aussteht, legt es Text und Bild fertig zum Kopieren bereit.
Entwickelt unter Arch Linux und Debian.
Es findet die Anlässe selbst. WordPress über die REST-Schnittstelle, Shops über ihre Seitenkarte und ihre Kategorieseiten – auch Shopware 6, und zwar ohne Zugangsschlüssel. Ein neuer Blogbeitrag oder ein neues Produkt landet als Vorschlag im Kalender.
Es plant ganze Wochen. Ein Thema, eine Kalenderwoche, ein paar Kategorien – daraus entstehen ein bis zwei Beiträge je Tag. Bei Shops ist das der eigentliche Arbeitsweg, denn dort ist kein Produkt »neu«, es wird ausgewählt. Bei Blogs geht es genauso: Ein Beitrag vom März ist im September nicht schlechter geworden.
Es malt auch das Bild dazu. Zwei wöchentliche Formate liefern aus einer einzigen Eingabe Text und Grafik: »Produkt der Woche« braucht einen Verweis in den Shop, »Tipp der Woche« ein Thema. Heraus kommen eine Querformat-Grafik für Facebook und LinkedIn, eine im Hochformat für Instagram – keine zugeschnittene, sondern eine eigens angeordnete – und ein Alternativtext für alle, die einen Vorleser benutzen. Beide Formate teilen dasselbe Gerüst: Wer sie nebeneinander sieht, erkennt denselben Absender, bevor er ein Wort liest. Der Preis kommt dabei ausschließlich aus der Auszeichnung der Produktseite, nie aus dem Fließtext; fehlt er, entsteht kein Beitrag. Eine Anzeige mit falschem Preis ist schlimmer als keine.
Der Tipp schreibt die Webseite mit. Aus demselben Lauf entsteht eine fertige HTML-Datei für die eigene Seite – der Tipp ausführlich, die Grafik anklickbar im Text, passende Artikel als Kästchen. Der ablaufende Tipp zieht dabei auf eine eigene Archivseite um, mit eigenem Titel und eigenem Canonical, und wird in eine chronologische Übersicht eingetragen, aus der nichts verschwindet. Hochgeladen wird von Hand, und der Hinweis danach nennt Zielpfad und Rechner.
Du entscheidest, wer schreibt. Claude Code über das vorhandene Abo, jeder Dienst in der OpenAI-Form – Ollama auf dem eigenen Rechner, ChatGPT, OpenRouter –, die Anthropic-Schnittstelle mit eigenem Schlüssel, oder gar niemand: Bei »von Hand« stehen Titel und Anriss im Entwurf und du schreibst selbst. Einstellbar je Projekt, damit der eine Blog von Hand geht, während der Shop weiterläuft.
Es nimmt auch Beiträge ohne Seite. Betriebsferien, ein Dank, ein Termin – »Beitrag von Hand« stellt einen Eintrag in den Kalender, für den es nirgends eine Adresse gibt.
Es schreibt je Netzwerk anders. Ein Mastodon-Beitrag hat 500 Zeichen, ein LinkedIn-Beitrag wird nach dem ersten Satz zugeklappt, bei Instagram ist kein Verweis anklickbar. Dieselbe Meldung viermal einzufügen führt dazu, dass sie dreimal nicht passt.
Es kennt Ihre Leser. Terminvorschläge richten sich nach Netzwerk und Zielgruppe – und für das Handwerk nach dem Handwerk, nicht nach den Ratgebern: Ein Dachdecker schaut um halb sieben aufs Handy, nicht um zehn.
Es lässt nichts ungelesen raus. Beiträge stehen als Entwurf im Kalender, bis Sie sie freigeben. Je Projekt kann man das abschalten.
Es kann wiederholen. Ein Beitrag, der im Juni gut lief, lässt sich im nächsten Juni erneut einstellen. Der alte bleibt mit seinem Datum stehen, der neue ist ein Entwurf – Sie sehen also, was schon lief, und können es abwandeln. Das müssen Sie auch: Facebook und Instagram drosseln wortgleiche Wiederholungen.
Keine Videos. Aus Bildern kleine Filme zu machen war der ursprüngliche Plan und wurde am 2026-08-28 gestrichen. Es gibt Bilder, auf 4:5 beschnitten.
Kein Anmelden mit Benutzername und Passwort. Die Netzwerke lassen das nicht zu und haben recht damit. Es braucht Zugangstoken, und die legen Sie selbst an.
Kein Umgehen von Metas Prüfung. Facebook und Instagram automatisch zu bespielen setzt eine geprüfte Meta-App voraus. Bis dahin: Handbetrieb.
git clone https://github.com/Stephan-Lefty/POSTKutsche.git
cd POSTKutsche
pip install -e .
postkutsche einrichten
Der Kern läuft ohne Fremdpakete. Zwei Dinge sind Kür:
pip install -e ".[bilder]" # Bilder auf 4:5 beschneiden (Pillow)
pip install -e ".[schluessel]" # Token im Schlüsselbund statt in einer Datei
pip install -e ".[alles]" # beides
Für die Wochengrafiken wird Firefox gebraucht. Gezeichnet wird mit HTML und CSS, ausgegeben im Kopflosbetrieb – kein zusätzliches Paket, aber der Browser muss installiert sein. Fehlt er, entsteht der Beitrag trotzdem, nur ohne Bild und mit einer Meldung dazu.
Den ganzen Weg – festlegen, wer die Texte schreibt, Konten einrichten, Dauerbetrieb über systemd – beschreibt die Installationsanleitung. Wie man danach damit arbeitet, steht mit Bildern in der Bedienungsanleitung.
postkutsche einrichten # Ablage anlegen, Beispielprojekte eintragen
postkutsche projekt liste # was da ist
postkutsche netzwerke # Farben, Zeichengrenzen, Eigenheiten
postkutsche plan --monat 2026-09 # was ansteht
Projekte lassen sich jederzeit ergänzen:
postkutsche projekt neu meinblog "Mein Blog" https://meinblog.example --art wordpress
Und anhalten, ohne etwas zu verlieren:
postkutsche projekt pausieren meinblog # nichts mehr holen, nichts mehr senden
postkutsche projekt starten meinblog # weiter wie zuvor
Pausieren und Ausblenden sind zweierlei: Das Häkchen im Kalender räumt nur die Ansicht auf, Pausieren hält den Betrieb an. Was ausgeblendet ist, bleibt es auch nach dem Neuladen – gemerkt wird das im Browser, also je Rechner und Browser eigen. Ein Projekt, das später dazukommt, ist sichtbar.
Im Repository stehen nur Beispiele unter .example. Die eigenen Seiten kommen
nach ~/.config/postkutsche/projekte.json – dort und nirgends sonst:
[
{
"kennung": "meinblog",
"name": "Mein Blog",
"adresse": "https://meinblog.example",
"art": "wordpress",
"farbe": "#16a34a",
"einstellungen": {
"rest": "https://meinblog.example/wp-json/wp/v2",
"zielgruppe": "verbraucher",
"ausschliessen": ["/en/"]
}
}
]ausschliessen übergeht Adressen, die ein Bruchstück enthalten – nötig bei
zweisprachigen Seiten, die jeden Beitrag doppelt liefern. zielgruppe steuert
die Terminvorschläge und ist eines von handwerk, verbraucher, betroffene
oder gemischt.
Wer Kampagnen nach Hersteller fahren will, legt daneben eine
hersteller.json an:
{
"musterwerk": {
"namen": ["musterwerk", "muster-werk"],
"reihen": ["mw12", "mw40"]
}
}Unter namen stehen die Schreibvarianten, unter reihen die
Modellbezeichnungen – für Produkte, die den Hersteller nicht im Namen tragen.
Beide Dateien stehen in .gitignore und werden von einem Test bewacht.
Im Schlüsselbund, wenn keyring da ist. Sonst in
~/.config/postkutsche/zugaenge.json mit Rechten 600. In der Datenbank stehen
sie nicht, im Repository erst recht nicht – ein Test wacht darüber.
Was Sie je Netzwerk brauchen:
| Netzwerk | Aufwand | Was nötig ist |
|---|---|---|
| Mastodon | zwei Minuten | Zugangstoken aus den Kontoeinstellungen |
| LinkedIn (eigenes Profil) | eine halbe Stunde | eigene App, „Share on LinkedIn", w_member_social. Token läuft nach 60 Tagen ab und wird erneuert. |
| Facebook-Seite | Wochen | Meta-App mit geprüften Berechtigungen |
| Wochen | dasselbe, dazu ein Business-Konto (nicht Creator) mit verknüpfter Facebook-Seite |
Frühe Fassung. Was steht und was noch fehlt, steht im Änderungsprotokoll und in der Aufgabenliste.
MIT. Siehe LICENSE.