Es fing mit einer simplen Frage an: Warum schreibe ich eigentlich so wenig?
Die ehrliche Antwort war nicht Zeitmangel oder fehlende Ideen. Es war Friktion. Zu viele Klicks bis zum leeren Editor. Ein CMS das sich anfühlte wie Arbeit. Eine Plattform, die ich zwar betrieb, aber nie wirklich mochte.
WriteFreely war schön minimalistisch, aber zu minimalistisch. Ghost hatte ich früher im Einsatz, bis ActivityPub in der selbst gehosteten Docker-Variante anfing sich aufzuhängen und das Membership-System anfing mich zu nerven. WordPress kam nie ernsthaft infrage.
Also habe ich an einem Nachmittag etwas Neues gebaut.
Das Ziel
Ich wollte in Notion schreiben, dort wo ich ohnehin denke, plane und strukturiere, der Rest sollte automatisch passieren. Kein Browser-Editor, kein FTP, kein SSH für die Bearbeitung eines Artikels. Einfach schreiben, Status setzen, fertig.
Die Architektur
Das Setup ist überraschend schlank:
Ein LXC in meinem Proxmox-Cluster läuft Apache in Docker. Hugo generiert statisches HTML und legt es direkt in den htdocs-Ordner. Ein Node.js-Script holt alle 15 Minuten neue Artikel aus Notion über die offizielle API, konvertiert sie zu Markdown und triggert den Hugo-Build. Pangolin als Reverse Proxy auf dem VPS routet, wie bei allen meinen Diensten, den Traffic.
Notion → notion-to-md → Hugo → Apache → Pangolin → klein.ruhr
Kein Datenbankserver. Kein PHP. Kein permanenter Node-Prozess. Hugo baut die gesamte Site in unter 30 Millisekunden.
Was mich überrascht hat
Ich hatte erwartet, dass der knifflige Teil die Notion-Integration sein würde. War er nicht, @notionhq/client und notion-to-md sind stabil und gut dokumentiert.
Der knifflige Teil war Hugo selbst. Nicht weil Hugo schlecht wäre, sondern weil Static Site Generators eine eigene Logik haben, die man erst verstehen muss. Sektionen, Permalinks, Layouts, Taxonomien, das alles greift ineinander und wenn eine Annahme falsch ist, landet ein Artikel plötzlich unter /blog/blog/hallo-welt/.
Nach ein paar Iterationen sitzt alles. Die URLs sind sauber, die Seiten landen, wo sie hingehören. Der Workflow funktioniert.
Das Design
Ich wollte kein generisches Blog-Theme. Das Design ist komplett selbst gebaut, dunkles Waldgrün als Basis, Fraunces als Serif-Font für Überschriften, Inter für den Fließtext, JetBrains Mono für alles Technische. Alle Fonts sind lokal gehostet, kein Google Fonts.
Im Hintergrund laufen subtile Blob-Animationen die sich je nach Jahreszeit und Feiertag in der Farbe ändern. Weihnachten wird es rot, Ostern lila, Silvester gibt es Konfetti. Das ist vielleicht albern, bereitet mir jedoch Freude.
Was noch fehlt
Kommentare. Ich überlege Remark42 selbst zu hosten, ein weiterer LXC, überschaubar. Alternativ Webmentions, damit Reaktionen aus dem Fediverse direkt unter Artikeln erscheinen.
Und natürlich: mehr Artikel. Das war heute der erste Schritt.
Was ich gelernt habe
Self-hosting bedeutet nicht zwangsläufig mehr Aufwand. Manchmal bedeutet es weniger, weil man genau das baut, was man braucht, ohne den Overhead einer Plattform die für alle funktionieren muss.
Und: Der beste Workflow ist, der bei dem man nicht mehr über den Workflow nachdenkt. Dieser hier fühlt sich so an.
