Ein Entwurf ist erst dann fertig, wenn ihn jemand auf der echten Seite gesehen hat. RustyCMS hat dafür drei Stufen, die aufeinander aufbauen: ein Link zum Teilen, eine Vorschau beim Tippen, und ein Klick auf die gerenderte Seite, der das richtige Feld im Editor öffnet.
Der Link zum Teilen
Ein Preview-Token ist eine signierte Kurzzeit-Erlaubnis: „Zeige Entwürfe dieser Collection, für diesen Eintrag, in dieser Sprache, für 24 Stunden.” Die Admin-UI hat auf jedem Eintrag einen Preview-Button, der den Token erzeugt und die Frontend-URL öffnet. Wer den Link bekommt, braucht keinen Account.
POST /api/preview-tokens
{ "collection": "post", "slug": "hello-world", "ttl_seconds": 86400 }
# → Frontend hängt den Token an den Content-Read
GET /api/content/post/hello-world?preview=<token>&_resolve=all
Der Token ist HMAC-signiert mit demselben Geheimnis wie die Sessions. Ausstellen braucht Schreibrecht, Einlösen nur den Token. Das Frontend setzt no-store und noindex — ein Entwurf landet nie in einem Cache oder einer Suchmaschine.
Vorschau beim Tippen
Die zweite Stufe braucht kein Speichern. Während die Redaktion im Formular tippt, schickt die Admin-UI den aktuellen Stand in einen flüchtigen Speicher, und das Frontend rendert daneben genau diesen Stand — jeder Tastendruck, nicht erst der Save. Der Lesepfad umgeht Response-Cache und ETag, damit nichts hängen bleibt. Nach 30 Minuten ist die Session weg, auf die Platte kommt nichts.
Eine Session hält dabei alle Einträge, an denen gerade gearbeitet wird. Wer im Flyout einen Block einer Seite ändert, sieht ihn sofort in der Seite — auch wenn der Block über eine Referenz eingebunden ist.
Klick auf die Seite, Feld im Editor
Die dritte Stufe: Das Frontend markiert jeden gerenderten Block mit dem Eintrag und Feld, aus dem er stammt. Im Vorschau-iframe umrahmt der Mauszeiger den Block darunter, ein Klick öffnet genau dieses Feld in der Admin-UI.
Das ist bewusst kein In-Page-Editor. Kein contenteditable, kein zweiter Eingabepfad. Die Seite sagt wo, getippt wird im Formular. Was du siehst und was gespeichert wird, bleibt dieselbe Sache — und das Overlay bleibt ein paar hundert Zeilen statt ein zweites CMS.
Widget-Link
Ein einzelner Eintrag lässt sich auch ohne die Seite drumherum teilen: eine chrome-lose Route rendert einen Block für sich — zum iframen in fremde Seiten oder für einen Screenshot. Bei Entwürfen hängt die Admin-UI automatisch einen Preview-Token an.