kirkanos.net ist eine statische Hugo-Seite: schnell, wartungsarm – und ihre Inhalte liegen als Markdown und YAML im Git-Repository. Für einen schnellen Post zwischendurch ist das zu umständlich. kirkanos-admin legt eine Oberfläche darüber, dasselbe Prinzip wie bei franz-admin, nur für die Felder dieser Seite.
Was es kann
- Blog-Posts auflisten, bearbeiten und neu anlegen – jeder Post ist ein Page Bundle
unter
content/blog/<slug>/index.md - Projekte pflegen, also genau die Kacheln, in der dieser Text steht: Titel, Untertitel, Technik-Badges, Links und die Priorität für die Sortierung
- Bilder pro Post oder Projekt hochladen und direkt in den Markdown einbinden, dazu die statischen Hintergrundbilder für Banner und Funfacts – zu große Bilder werden beim Hochladen verkleinert
- TravelMap – welche Länder wie oft besucht wurden
- Skills, About, Banner und die Funfacts-Zähler der Startseite
- Veröffentlichen – der Git-Status steht in der Kopfzeile, Sync und Push sind je ein Knopf; danach baut die Woodpecker-Pipeline die Seite neu
Technik
Eine Flask-Anwendung, die das Content-Repository in ein Datenverzeichnis klont und direkt darin arbeitet. Das Frontend ist eine einzige Template-Datei, der Markdown-Editor ist EasyMDE. Läuft als Container hinter einem Reverse Proxy, die Authentifizierung übernimmt die Infrastruktur davor.
Drei Kleinigkeiten, die im Alltag den Unterschied machen:
Das Formular darf nicht alles wissen müssen. Front-Matter-Felder, die es nicht kennt
– date, aliases, was später noch dazukommt – überleben das Speichern unverändert.
Sonst hätte jedes neue Feld im Theme stillschweigend Daten gekostet.
Die Zähler der Startseite sind ganze Zahlen. Sie werden im Frontend von null
hochanimiert, ein Komma bricht die Animation. Die Einheit dahinter – das € beim
Marktwert der Magic-Sammlung etwa – ist deshalb ein eigenes Feld und nicht Teil der Zahl.
Bilder werden beim Hochladen verkleinert. Hugo baut höchstens 1900 Pixel breite
Varianten; ein Foto aus der Kamera hat 4608. Die überzähligen Pixel sieht nie jemand,
liegen aber für immer in der Git-Historie – 8,7 MB statt 810 KB, bei jedem Clone aufs
Neue. Ein Git-Hook wäre der naheliegende Ort dafür gewesen, scheidet aber aus: Hooks
werden nicht mitgeklont und müssten nach jedem Clone von Hand eingerichtet werden. Hier
greift es ohne Zutun, und das große Bild gelangt gar nicht erst ins Repo. Nebenbei kam
dabei heraus, dass Kameras .jpg-Dateien gern als MPO schreiben – ein JPEG mit
angehängten Zusatz-Frames, das eine naive Behandlung stillschweigend übergangen hätte.
Ein Teil der Inhalte kommt gar nicht von Hand: Die YouTube-Posts und die Funfacts
schreibt die Pipeline selbst ins Repo. Das Admin-Tool zieht sie sich mit
pull --ff-only und arbeitet darauf weiter.