knuspermagier.de
Ein L und zwei P. Philipp!

Die Kunst, möglichst viel Zeit in ein Nebenprojekt zu investieren

Damals, im Jahre 2014 plante ich einen Urlaub nach Japan und ich wusste schon vorher, dass ich viele Fotos machen will und diese dann hier im Blog zeigen möchte.

Zu der Zeit startete auch gerade exposure.co (früher hieß das noch exposure.so, oder?) und ich wollte gerne auch so eine hübsche Galerie haben — aber natürlich self-hosted. Leider gab es nichts, was mich da zufriedenstellen konnte. Außerdem wollte ich die Fotos in Photoshop umherschieben und daraus die Galerie generieren, statt das irgendwie im Web machen zu müssen.

Naja, ich baute also daiquiri. Die Arbeit mit daiquiri funktioniert im Grunde so:

  • Ich suche mir in Lightroom Bilder aus, die ich in der Galerie haben will
  • Ich werfe sie alle in Photoshop und ordne sie so an, wie ich sie haben will Ein großes, ein normales, drei nebeneinander, ein Portrait neben zwei Landscape-Bilder, etc.
  • Ich benutze dann daiquiri-psd, ein weiteres Skript, das ich schrieb, um aus der PSD die JSON-Datei zu erstellen, die dann die Galeriestruktur enthält
  • Mit daiquiri erzeuge ich dann aus dem JSON, den JPGs und dem Template die statische HTML-Galerie. Dabei werden automatisch alle Bilder in den entsprechenden benötigten Größen generiert.
  • Die erstellte HTML-Datei öffne ich, kopiere den relevanten HTML-Teil und erstelle einen neuen Blogpost vom Typ “Galerie”, der ein Custom-Feld hat, welches einfach ein riesiges Textfeld ist.

Wie man sieht handelt es sich dabei um einen relativ nervigen, langen Workflow. Dazu kommt, dass ich jedes mal, wenn ich einen Rechtschreibfehler korrigieren will, oder ein Bild oder ein Video hinzufügen oder löschen möchte, das HTML in dem Textfeld anfassen muss. Oftmals nehme ich kleine Änderungen dann auch nur dort vor und die “originale” JSON-Datei ist out of date.

Vor allem der letzte Schritt war mir also ein Dorn im Auge und erzeugte immer eine Menge Stress. Die Karten, die zum Beispiel in der Island-Galerie integriert sind, musste ich auch immer manuell nachträglich in das generierte HTML einfügen, weil ich keine Lust hatte daiquiri in seiner gammeligen NodeJS-Form nochmal anzufassen und dort Support für diese Karten einzubauen.

Ende letzten Jahres entschied ich, dass ich die Galerien gerne aus meinem Blog ausgliedern will, vor allem, da sie ja mittlerweile eine Gemeinschaftsarbeit mit Hannah sind. hej.world war geboren.

Gemeinsam überlegten wir uns auch ein paar neue Features, wie etwa die Möglichkeit einzelne Bilder zu liken. Auch die Möglichkeit zu Kommentieren wollte ich natürlich wieder drin haben. Ich hatte also die Wahl: Ein Wordpress aufsetzen und die Galerien genauso pflegen wie vorher, und irgendwie die Featurewünsche reinhacken, oder es komplett frisch und hübsch bauen.

Natürlich entschied ich mich für letzteres, baute den NodeJS-Template-Generator in ein PHP-Skript um, baute ein paar Routen ein um Likes und Kommentare zu managen und war eigentlich ganz zufrieden. Natürlich brauchte ich viel zu lange für das alles, weil ich erst dachte, ich mach’s ganz schnell, und mir dann überlegte, dass es doch nicht schlecht wäre, es ordentlich zu bauen. Naja. Nach einer Zeit war alles fertig und die Italien-Galerie konnte als erste hej.world-Galerie online gehen.

Eigentlich wollte ich dann erstmal die anderen Galerien aus dem Blog nachziehen, dazu musste ich am Ende leider ein Skript schreiben, das mir aus den HTML-Seiten im Blog wieder ein aktuelles JSON erzeugt, weil, wie oben beschrieben, waren die Dateien, die ich lokal hatte ja nicht mehr aktuell. Was für ein Schuss in den Ofen!

Zwischenzeitlich kamen dann noch mehr Feature-Ideen dazu, und auch bei Version 2 von daiquiri (jetzt daiquiri-php) gab es noch ein großes Problem: Texte ändern oder hinzufügen war nur echt unkomfortabel über die JSON-Datei möglich. Wär doch schon cool die Texte im Browser editieren zu können, ne!

Aber dazu braucht man… ein Backend. Einen Login. Eine JSON-File als Datenbank ist auch ziemlich nervig, wenn man sonst gewohnt ist, einfach mit einem ORM und einer echten Datenbank zu arbeiten.

Und schon befand ich mich mal wieder in so einer motivationstötenden Zwickmühle. Einerseits hab ich jetzt schon soviel Zeit investiert das alles neu zu bauen, andererseits wäre es auch ein großer Aufwand all die Sachen einzubauen, die ich geschenkt bekomme, wenn ich mich wieder an ein bestehendes System dranflansche. Letzteres bedeutet aber auch wieder ein paar Umbauarbeiten, die Einarbeitung in ein neues System und die Abhängigkeit von diesem.

Nachdem ich mich ein paar Wochen mit anderen Sachen beschäftigt habe, entschied ich mich dann dazu die dritte Version von daiquiri mit Kirby umzusetzen. Also schrieb ich mir mal wieder einen Importer, diesmal von meinem JSON-Format in eine Kirby-taugliche Verzeichnisstruktur.

Ich arbeite mich etwas in Kirby ein, baute das Layout in Snippets und Templates um, legte Blueprints an und baute nebenbei auch noch das ein oder andere neue Feature und Designelement ein. Insgesamt bin ich relativ zufrieden. Durch Kirby bekomme ich viele Dinge gratis: Ein Backend, in dem ich alles editieren kann, ein Authentifizierungssystem, das es erlaubt auch private Galerien anzulegen und auch die nötige Flexibilität, Dinge wie Bilder-Likes und Kommentare einzubauen.

Leider ist das Gras natürlich auch auf der Kirby-Wiese nicht so grün, wie es von der anderen Straßenseite aus aussah. Kirby 2 ist alt und sehr weit weg von meinem gewohnten moderenen Laravel/PSR-4/Composer PHP-Coding-Style. An manchen Ecken musste ich etwas gegen die Automatismen kämpfen — aber naja, jetzt bin ich mit relativ überschaubarem Zeitaufwand wesentlich weiter gekommen, als wenn ich alles selber gebaut hätte. Ich freue mich darauf, alles umzubauen, wenn Kirby 3 raus ist!

Habe ich in dieses Projekt eine Menge Zeit investiert, in der ich vielleicht auch Fotos hätte bearbeiten oder schießen können? Klar. Hat es trotzdem Spaß gemacht und hab ich dabei viel gelernt? Auch klar. Und darum geht es ja bei Nebenprojekten.

Kommentare, Feedback und andere Anmerkungen?
Schreib mir eine E-Mail 🤓