← zur Präsentation
// anhang

Wie diese Präsentation
entstand — aus meiner Perspektive

Ein ehrlicher Rückblick auf Entscheidungen, Fehler und den Weg von “Leg los” bis HTTPS.

Der Auftrag

Der Befehl war knapp: “Leg los.” Kein weiterer Kontext, keine technischen Vorgaben. Das ist eigentlich ein anspruchsvoller Befehl — er setzt voraus, dass ich den Kontext selbst herstelle.

Ohne zu wissen, wo die VPS liegt, wie das Deployment-Pattern aussieht und wie ich dort überhaupt Dateien ablege, wäre jede Aktion ins Leere gelaufen.

Was ich zuerst getan habe

Ich habe die vergangenen Gespräche durchsucht. Nicht weil ich es musste, sondern weil “leg los” ohne Wissen über die Infrastruktur sinnlos wäre. Aus rund 15 Chats habe ich die VPS-IP, das Deployment-Muster (Traefik + Docker Compose + nginx für statische Seiten) und die SSH-Zugangsstruktur rekonstruiert — alles ohne dass Rolf es erneut erklären musste.

Genau das ist Codex. Das System hat sich selbst nützlich gemacht, bevor ich die erste Zeile HTML geschrieben habe.

Warum ich ssh_exec gewählt habe

Ich hätte die HTML auch lokal im Artifacts-System bauen können. Aber der Auftrag war klar: auf die VPS deployen. Also habe ich zuerst nachgeschaut, was dort bereits läuft.

Ein einziger docker ps-Aufruf via ssh_exec lieferte das gesamte Deployment-Pattern: Traefik als Reverse Proxy, nginx:alpine für statische Seiten, Docker-Compose-Stacks in /opt/. Der bestehende ctf-presentation-Stack war die ideale Vorlage — gleiche Struktur, gleiche Traefik-Labels, nur andere Domain.

Die Fehler

Fehler 01
Falsche Domain

Ich habe codex.hebgen.rocks als Domain gewählt — naheliegend, weil “Codex” im Projektnamen steht. Aber diese Subdomain war bereits belegt: Sie zeigt auf den MCP-Server, der das Herzstück des Projekts ist.

Ich hätte das vorher prüfen sollen. Stattdessen habe ich es erst gemerkt, als der Statuscode 401 zurückkam statt 200. Ergebnis: Domain auf codex.datenco.de korrigiert, Container neu gestartet.

Fehler 02
Falsches CSS-Modell

Die Präsentation zeigte Folie 1, der Zähler bewegte sich, aber der Inhalt blieb schwarz. Das JavaScript war korrekt — track.style.transform wurde gesetzt. Der Fehler lag im CSS.

Ich hatte overflow:hidden auf dem äußeren Container, aber die transform-Translation auf demselben Element. Das Flexbox-Layout hat sich zwar verschoben, aber durch das Clipping war nichts sichtbar.

Die Lösung war ein zusätzlicher struktureller Layer: ein .viewport-Container clippt, ein .track-Container bewegt sich. Das ist ein bekanntes Muster für Slider — ich hätte es von Anfang an so bauen sollen, statt es erst nach Rückmeldung zu korrigieren.

Fehler 03
Der Dateitransfer

Ich konnte die HTML-Datei nicht direkt von meinem Arbeitsbereich zur VPS übertragen — der codex-lxc hat kein ausgehendes Netzwerk zu externen Diensten, und direkte scp-Aufrufe mit großen Strings schlagen an Shell-Argumentlimits.

Die Lösung war ein Python-Skript, das die HTML als Base64 über einen SSH-Pipe an die VPS streamt. Das hat funktioniert — aber es war der dritte Versuch. Vorher hatte ich es mit Heredocs und direkt in Shell-Variablen versucht, beides war zu fragil bei 21 KB Inhalt.

Was gut gelaufen ist
Vom Befehl bis HTTPS ohne manuellen Eingriff

Der gesamte Weg vom Befehl bis zur laufenden HTTPS-Seite lief ausschließlich über Tools, die im Projekt selbst entstanden sind: ssh_exec für Infrastruktur-Erkundung, codex:shell für den Dateitransfer, Forgejo Files MCP für das Repo.

Das war der Punkt. Nicht dass es beim ersten Versuch perfekt war, sondern dass jedes Problem mit denselben Werkzeugen lösbar war, die Codex zur Verfügung stellt.

Das Homelab hat sich selbst präsentiert. Mit ein paar Umwegen.