source code for my website as a professional writer https://tobias-radloff.de
Go to file
2025-06-11 16:33:06 +02:00
content switched to favicons generated from realfavicongenerator.net, removed browserconfig.xml, manifest.json is now site.webmanifest 2025-04-01 14:46:26 +02:00
theme modified footer text 2025-05-21 17:33:31 +02:00
utils removed a debug line 2025-03-21 14:53:11 +01:00
.gitignore minor changes 2025-06-10 20:10:29 +02:00
config.example.ini added comments 2025-06-11 16:33:06 +02:00
DEPENDENCIES.md published site now uses minified Pico stylesheet and gets font files from CDN 2025-03-21 14:57:07 +01:00
deploy-via-ftp.sh migrated last config file to .ini format 2025-05-04 16:14:05 +02:00
Makefile initial commit 2025-02-03 12:10:06 +01:00
pelicanconf.py switched to favicons generated from realfavicongenerator.net, removed browserconfig.xml, manifest.json is now site.webmanifest 2025-04-01 14:46:26 +02:00
publishconf.py pico color now only needs to be set in one config file instead of two 2025-03-25 12:21:02 +01:00
README.md created readme file, partially motivated by https://tom.preston-werner.com/2010/08/23/readme-driven-development.html 2025-06-11 12:17:01 +02:00
t-r.de.code-workspace Revert "removed vscodium workspace file from repo" 2025-03-20 13:58:44 +01:00
tasks.py initial commit 2025-02-03 12:10:06 +01:00

Autorenwebseite tobias-radloff.de

Eine moderne statische Autorenwebseite mit Werksseiten, Neuigkeiten, Terminkalender, Newsletterabonnentenverwaltung und Kontaktformular auf Basis von Pelican.

Dependencies

Pelican

In einer eigenen venv-Umgebung verwende ich Pelican (v4.11.0) mit Markdown-Support, installiert mittels pip install pelican[markdown]. Pelican setzt python3 voraus.

Plugins für Pelican:

  • pelican-yaml-metadata ermöglicht das Einlesen von Metadaten im YAML-Format
  • pelican-image-process erlaubt das Bearbeiten von Bildern beim Erzeugen der Seite

CSS und Schriften

  • Pico CSS tatsächlich verwende ich einen Fork, der zusätzlich Hamburger-Menüs unterstützt
  • Libertinus Sans im Development Mode greife ich auf lokale Dateien zurück, im Production Mode stammen sie von einem CDN

Werke und Texte

  • TODO: die Sourcefiles für meine Werke und Texte sollen direkt aus der the_works-Datenbank erzeugt werden

Termine

Das Script utils/refresh-events.py benötigt folgende Python-Packages (beide via pip installierbar):

  • caldav
  • vobject

Bildverarbeitung

@TODO: benutze ich das Script überhaupt noch?

Das Script utils/crop_image_to_bbox.py setzt die Python-Bibliothek PIL voraus.

Favicon

Um aus einer einzelnen SVG-Datei Favicons in allen nötigen Größen zu erzeugen, nutze ich das Script utils/favicon-from-svg.sh. Es setzt voraus:

  • inkscape
  • pngquant
  • image-magick

Deployment Tool

  • lftp

Auf dem Produktionsserver

  • php (aktuell 8.1)
  • Datenbanktreiber, aktuell pdo_sqlite
  • PHPMailer (im Repository enthalten)

Konfiguration

Das Projekt wird in diesen Dateien konfiguriert:

  • pelicanconf.py und publishconf.py enthalten die Pelican-Konfiguration für Development bzw. Production Mode
  • config.ini enthält die Zugangsdaten für Datenbank und SMTP-Server); üblicherweise ist diese Datei ein Symlink zu einer der folgenden Dateien
    • config.dev.ini Werte für den Development Mode
    • config.prod.ini Werte für den Production Mode
    • und config.example.ini ist ein Beispieldatei mit Dummy-Werten
  • deploy.ini FTP-Zugangsdaten für den Produktionsserver
  • events.ini Zugangsdaten für den CalDAV-Server

Ausführen

Seite im Development Mode (neu) erzeugen

  • make clean Output-Verzeichnis leeren
  • make html alle HTML-Seiten neu erzeugen, die nicht im Output-Verzeichnis vorhanden sind oder deren Sourcefiles sich seit dem letzten Erzeugen verändert haben
  • make regenerate auf Änderungen in Sourcefiles lauschen und entsprechende Seiten neu erzeugen
  • sudo lighttpd -f lighttpd.conf Test-Webserver starten (Kontaktformular und Newsletteran-/-abmeldung erzeugen POST-Requests, doch der mit Pelican mitgelieferte Webserver verarbeitet nur GET-Requests; ich teste die Seite daher mit lighttpd)
  • utils/refresh-events.py CalDAV-Termine neu einlesen

Seite im Production Mode (neu) erzeugen

  • make clean Output-Verzeichnis leeren
  • make publish Seite mit Produktionsparametern neu erzeugen (liest automatisch Termine neu ein)

Deployment

  • deploy-via-ftp.sh Seite auf den Produktionsserver hochladen

Dokumentation

Aufbau der Webseite

Pelican kennt Artikel und Seiten. Ich verwende diese wie folgt:

  • meine einzelnen Werke sowie News-Posts sind Artikel; die Sourcefiles liegen in content/posts/
    • die Kategorie entspricht der Werksart (Romane, Kurzprosa, Lyrik, Weitere, News); alle Sourcefiles einer Kategorie liegen im gleichnamigen Unterverzeichnis (zB content/posts/romane/)
    • Schlagworte entsprechen weitgehend den Genres, geben aber auch zB englischsprachige Texte an
  • alles andere sind Seiten; die Sourcefiles liegen in content/pages/

Templates

Termine neu einlesen

TODOs

  • Seite schneller laden (lazy loading?)
  • the_works anbinden, sodass die Werk-Seiten aus der DB automatisch übernommen werden