~/progetti/magosox/README.md

COOKIES_ADVICE PRIVACY_POLICY.

~/progetti/magosox/README.md

magosox

{ Datum: “2026-08-01”, Status: “live”, Stack_Module: 12 }

Automatisiert die Social-Inhalte einer Marke — wählt das Thema, schreibt den Text, erzeugt die Grafiken und veröffentlicht

magosox erstellt die Social-Media-Inhalte einer Marke und stellt sie selbstständig online. Zu den Zeiten, die man ihm vorgibt, entscheidet es, worüber gesprochen wird, schreibt den Text, erzeugt daraus die Grafiken und veröffentlicht: Niemand muss etwas öffnen. Der schwierige Teil ist nicht das Veröffentlichen — der schwierige Teil ist, dabei eine wiedererkennbare Stimme zu behalten. Ein automatisch erzeugter Beitrag, der wie ein automatisch erzeugter Beitrag klingt, ist wertlos; genau dort setzt dieses Projekt an.

## Der Markenkontext ist ein Datum, kein Code

Was einen Beitrag wiedererkennbar macht — die Stimme, die Art, die Lesenden anzusprechen, das, was die Marke weiß, und das, was sie bewusst nicht sagt, dazu der Themenvorrat — lebt in magosox im Produkt und nicht im Quellcode. Es wird über die Oberfläche geschrieben und korrigiert, und die Änderung gilt ab dem nächsten Beitrag, ohne Release. Daraus folgt der Rest: Eine neue Marke aufzunehmen ist Konfiguration, keine Entwicklung, und jede Marke bringt ihren eigenen Kontext mit, ohne die anderen zu berühren.

## Prosa strukturieren, nicht zerlegen

Die Qualität eines Beitrags kommt nicht aus einer Architektur, sondern aus etwa tausend gut geschriebenen Wörtern. Diese Unterscheidung wirkt banal, und fast alle Systeme dieser Art übergehen sie: Sie zerlegen jene Wörter in Spalten — Tonfall, Förmlichkeit, emojiVerwenden: false — und setzen sie wieder zusammen, wobei schlechtere Anweisungen herauskommen als die ursprünglichen. In magosox sind die Stimmregeln Zeilen, die Text wortwörtlich enthalten, samt Zeilenumbrüchen und Einrückungen. Das System weiß nur, wann es sie einfügt, in welcher Reihenfolge und unter welcher Überschrift: Es strukturiert Geltungsbereich, Gewicht und Platzierung der Prosa — nie die Prosa selbst. Damit ein Eingriff am Motor die Stimme nicht unbemerkt verändert, gibt es einen Regressionstest, der den Prompt aus den Zeilen neu zusammensetzt und Zeichen für Zeichen mit einer eingefrorenen Referenz vergleicht.

## Ein Register statt einer Abfrage

Damit sich der Feed nicht wiederholt, muss das System wissen, worüber zuletzt gesprochen wurde. Naheliegend wäre, das aus den veröffentlichten Beiträgen abzuleiten; es funktioniert aber nicht. Das Fenster zählt Beiträge, nicht Tage, und an einem Tag können mehrere Beiträge erscheinen: Keine zeitliche Sortierung bringt sie in eine Reihenfolge. Dazu kommen Beiträge auf Zuruf, die auf kein Thema im Katalog verweisen und deshalb nie Fremdschlüssel sein können. Also ist die Anti-Wiederholung ein rein additives Register mit einer eigenen fortlaufenden Nummer. Ein geplanter Beitrag verbraucht sein Thema sofort und gibt es zurück, wenn die Veröffentlichung scheitert — ein Lebenszyklus, den der Status eines Beitrags nicht abbilden könnte, ohne zu lügen.

## Angekündigte Grenzen und durchgesetzte Grenzen

Für jede Textfläche gibt es zwei verschiedene Zahlen: die angekündigte und die tatsächlich durchgesetzte. Ein Titel kann dem Modell mit 55 Zeichen angekündigt und erst bei 65 zurückgewiesen werden, während die Korrekturmeldung weiterhin 55 sagt. Dieser Spielraum von rund 18 % hält die Zahl der Wiederholungsversuche nahe null, und das wiegt schwerer, als es klingt: Der zweite Versuch liefert im Schnitt einen schlechteren Text als der erste. Beides in eine einzige Spalte zu legen, hieße entweder die Korrekturschleife zu fluten oder jeden Titel um 18 % wachsen zu lassen.

## Von der Idee bis zum veröffentlichten Beitrag

Die Pipeline läuft ohne Aufsicht, zu den im Kalender festgelegten Zeiten, und jeder Schritt hinterlässt eine Spur, die sich nachlesen lässt:

·Themenwahl: Taktung der inhaltlichen Säulen, Cooldown, Rotation der Kategorien nach längster Nichtnutzung, Saisonalität — mit gesätem Zufallsgenerator, damit eine Wahl reproduzierbar bleibt
·Erzeugung: aus dem Markenkontext zusammengesetzter Prompt, Structured Output, Bereinigung, Validierung und Korrekturschleife im Dialog
·Rendering: Mustache plus Headless Chrome erzeugen die JPEGs; Theme, Template und Chrome-Version werden bei jedem Rendering festgeschrieben
·Veröffentlichung: Instagram Graph API in drei Phasen, mit Wiederaufnahme bereits erstellter Container und automatischer Token-Erneuerung
·Planung: Slots, die Tage und Uhrzeit festlegen — und auf Wunsch die Säule oder das Format dieses Tages —, daraus materialisierte Termine, ein Worker, der im Voraus erzeugt und zur exakten Uhrzeit veröffentlicht

## Die Oberfläche

Der Admin-Bereich ist der Ort, an dem der Markenkontext tatsächlich bearbeitet wird, ohne dass jemand ein Repository anfassen muss. Die Anmeldung erfolgt passwortlos per E-Mail-Code; eine Registrierung gibt es nicht, Konten werden vom Terminal aus angelegt.

·Kontext: Prompt-Abschnitte, Stimmregeln und Dokumente, alle bearbeitbar
·Prompt: der exakte Text, der ans Modell ginge, ohne es aufzurufen
·Themen: der Vorrat, mit Wählbarkeit und Abstand zur letzten Verwendung in einer Spalte
·Taxonomie: Säulen mit ihrer Taktung, Kategorien, Tags mit ihrer Farbe, Formate mit angekündigten und durchgesetzten Grenzen
·Beiträge und Kalender: was wann erscheint und in welchem Zustand
·Einstellungen: Anbieter für Modell, Speicher, E-Mail und Rendering, jeder mit dem Ergebnis einer echten Prüfung

## Tech-Stack

Der Konfigurationsansatz verdient eine Anmerkung: Umgebungsvariablen sind der einzige Weg, den Dienst zu konfigurieren, bevor die Datenbank existiert, also bleiben sie. Ab dem ersten Start gewinnt jedoch der gespeicherte Wert, und die Oberfläche zeigt an, welcher der beiden sich durchsetzt. Einen Modellschlüssel um drei Uhr nachts zu wechseln, soll keinen Serverzugang erfordern.

·API: NestJS auf Fastify, Prisma und PostgreSQL
·Admin: React, Vite, HeroUI, TanStack Query und Router
·Erzeugung: Claude mit Structured Output
·Rendering: Headless Chrome; Schriften als Data-URI eingebettet, weil Chrome CORS auch zwischen file://-Dokumenten anwendet
·Speicher: Cloudflare R2 — Instagram lädt die Bilder von einer öffentlichen URL
·Anmeldung: better-auth mit E-Mail-Einmalcode, Sitzung als httpOnly-Cookie
·Betrieb: Docker Compose hinter einem gemeinsamen Caddy, mit automatischem TLS

magosox ist seit dem 1. August 2026 in Betrieb und veröffentlicht ohne Aufsicht, in dem Takt, der ihm vorgegeben wurde. Vor dem Start wurde auch der Verlauf der bereits erschienenen Inhalte eingespielt, damit die Anti-Wiederholung vom ersten Tag an ein Gedächtnis hat, statt es sich erst über Wochen aufzubauen.

// Stack
[nestjs”, fastify”, prisma”, postgres”, react”, vite”, typescript”, claude-api”, instagram-api”, docker”, caddy”, content-automation”, ]