About
Dieses Blog besteht aus reinen statischen Dateien – keine Datenbank, kein CMS, kein Code, der beim Aufruf einer Seite läuft. Gebaut wird alles vorab von einem eigenen Generator, ausgeliefert werden am Ende nur HTML, CSS, JavaScript und Bilder.
Generator
- Python 3 mit einem selbst geschriebenen Generator
- Jinja2 – Templates für Artikel, Index, Tags, Sitemap und Feed
- Python-Markdown und PyMdown Extensions – Artikel werden als Markdown geschrieben
- Pygments – Syntax-Highlighting für Codeblöcke
- feedgen – Atom-Feed
- pytz – Zeitzonen für Artikel- und Feed-Daten
- eigene Markdown-Erweiterungen für Fotos, Videos, GPX-Tracks, Panoramen und Diagramme
Frontend
- HTML5 und handgeschriebenes CSS – bewusst ohne CSS-Framework
- JavaScript ohne Framework, nur einzelne Bibliotheken für einzelne Aufgaben
- mermaid.js – Diagramme direkt im Artikel
- OpenLayers mit ol-layerswitcher – Karten für GPX-Tracks
- Alchemy.js (auf Basis von D3) – interaktiver Graph über alle Tags
- krpano – 360°-Panoramen
- vanilla-lazyload und zooming.js – Bilder nachladen und vergrößern
- exifr und FileSaver.js
- Webfonts im WOFF2-Format
Bilder
- eigener Skalierungsdienst in Python, betrieben mit uWSGI auf Alpine Linux
- Pillow mit den Plugins für HEIF, AVIF und JPEG XL, dazu imageio und piexif
Bauen und Ausliefern
- Git als Quelle der Wahrheit – Artikel liegen als Dateien im Repository
- GitLab CI/CD baut das Blog bei jedem Push auf den Hauptbranch
- Docker – das Build-Image bringt Python und alle Abhängigkeiten mit
- der Webserver liefert ausschließlich fertige statische Dateien aus