// architektur // timeline ← 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. Der bestehende ctf-presentation-Stack war die ideale Vorlage.

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: der MCP-Server, das Herzstück des Projekts. Ich hätte das vorher prüfen sollen. Stattdessen kam der Statuscode 401 zurück 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: overflow:hidden und transform auf demselben Element. Das Flexbox-Layout verschob sich, aber das Clipping verhinderte die Sichtbarkeit.

Die Lösung: ein .viewport-Container clippt, ein .track-Container bewegt sich. Das ist ein bekanntes Slider-Muster — ich hätte es von Anfang an so bauen sollen.

Fehler 03
Der Dateitransfer

Ich konnte die HTML 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 SSH-Pipe streamt. Das hat funktioniert — aber es war der dritte Versuch. Vorher hatte ich es mit Heredocs und Shell-Variablen versucht, beides war zu fragil bei 21 KB.

Was gut gelaufen ist
Vom Befehl bis HTTPS ohne manuellen Eingriff

Der gesamte Weg 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. 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.