← Zurück zum Blog

Wie diese Website entsteht: ein komplett eigener Generator in Kotlin

Mohamad Almousli · 2026-10-06 · 3 Min. Lesezeit

#kotlin#static-site#web#seo

Jede Seite, die du hier siehst, wird von einem Projekt erzeugt, das ich selbst in Kotlin geschrieben habe. Kein fertiger Website-Baukasten mit einem Theme obendrauf, sondern ein Programm, das genau auf die Bedürfnisse dieser Website zugeschnitten ist. Das macht fast alles am Betrieb einfacher.

Warum ein eigenes Projekt

Fertige Website-Baukästen sind großartig, bis man etwas will, wofür sie nicht gedacht sind. Dann verbringt man die Zeit damit, um das Werkzeug herumzuarbeiten, statt an der Website.

Bei meinem eigenen Projekt gibt es nichts, um das man herumarbeiten müsste. Kotlin ist die Sprache, mit der ich am liebsten arbeite, also ist die ganze Website einfach Kotlin-Code: Seiten, Komponenten und Styles. Der Compiler prüft alles, sodass ein Fehler schon beim Bauen auffällt und nicht erst auf der Live-Seite.

Drei Sprachen ohne Aufwand

Die Website gibt es auf Englisch, Deutsch und Arabisch, inklusive eines richtigen Rechts-nach-links-Layouts für Arabisch. Jede Seite hält ihre Texte pro Sprache getrennt, Übersetzen heißt also, eine Datei zu bearbeiten, ohne das Layout anzufassen.

Die Sprachen sind fest in die Struktur des Projekts eingebaut. Füge ich eine neue hinzu, zeigt der Build auf jede Seite, der noch die Übersetzung fehlt, und so wird nichts vergessen.

Alles Eigene ist einfach Code

Weil mir jeder Teil gehört, ist jede Funktion, die ich möchte, nur eine weitere Komponente: die Befehlspalette, die Suche über Projekte und Blog, der eigene Videoplayer, das helle und dunkle Theme, der Download-Bereich mit Prüfsummen. Ich schreibe sie einmal, und jede Seite bekommt sie.

Ich entscheide auch genau, was die Website lädt. Schriften, Icons und Bilder werden mit der Website selbst ausgeliefert, die Styles sind in jede Seite eingebaut, und die Seiten funktionieren auch ohne JavaScript.

Besser organisierter Code

Jede Seite folgt demselben Aufbau: eine Datei für die Struktur und eine für den Text jeder Sprache. Jedes Element ist eine eigene Komponente mit eigenen Styles und eigenem Verhalten. Farben, Abstände und Schriften kommen von einer gemeinsamen Stelle, damit das Design einheitlich bleibt, und eine Änderung an einer Stelle wirkt überall.

So weiß ich immer, wo etwas liegt, und eine Änderung an einer Stelle macht nicht still und leise etwas anderes kaputt.

SEO eingebaut

Jede Seite gibt ihren eigenen Titel, ihre Beschreibung und ihr Vorschaubild an, um den Rest kümmert sich die Website. Sprachvarianten, strukturierte Daten für Suchmaschinen, Sitemap und Blog-Feed entstehen alle aus denselben Inhalten wie die Seiten selbst.

Weil alles aus einer Quelle kommt, können die Daten für Suchmaschinen nie von dem abweichen, was wirklich auf der Seite steht. Kommt ein neuer Beitrag oder ein neues Projekt dazu, taucht es automatisch überall dort auf, wo es hingehört.

Auf Robustheit gebaut

Daten, die die Website von anderswo bezieht, etwa Projektstatistiken und Release-Dateien, werden zwischen den Builds zwischengespeichert. Ist ein Dienst nicht erreichbar oder begrenzt er meine Anfragen, nutzt der Build die letzte gute Kopie, statt abzubrechen.

Neu geschrieben werden nur Dateien, deren Inhalt sich wirklich geändert hat. Downloads werden mit Prüfsummen abgesichert, die beim Bauen berechnet werden, und die Website baut und veröffentlicht sich selbst, sobald sich etwas ändert. Schlägt ein Build einmal fehl, wird nichts veröffentlicht, und die letzte funktionierende Version bleibt einfach online.

Hat es sich gelohnt?

Für mich auf jeden Fall. Die Website ist schnell, respektiert standardmäßig die Privatsphäre der Besucher und funktioniert genau so, wie ich es will. Und mir macht die Arbeit daran Spaß, und genau deshalb wird eine persönliche Website überhaupt aktualisiert.

Weiterlesen

2026-10-06

Meine Haltung zu KI – von jemandem, der seit 14 programmiert

Es hat gedauert, bis ich KI akzeptiert habe. Heute nutze ich sie täglich, aber Recherche, Planung und Struktur bleiben meine, und ich versuche, sie ethisch einzusetzen.

#ai#claude-code#opinion#ethics
ThreeTabs ist jetzt im Chrome Web Store
2026-10-06

ThreeTabs ist jetzt im Chrome Web Store

Die Erweiterung mit Tab-Limit lässt sich jetzt mit einem Klick aus dem Chrome Web Store installieren, mit automatischen Updates.

#browser#extension#chrome-web-store
WayWayBack: die ganze Geschichte einer Website auf einem Heatmap-Kalender
2026-10-05

WayWayBack: die ganze Geschichte einer Website auf einem Heatmap-Kalender

Ein inoffizieller, rein clientseitiger Browser für die Wayback Machine: Jahr, Monat und Tag wählen und jeden Snapshot öffnen.

#android#flutter#wayback-machine#open-source
Claude Status Bar: deine Claude-Code-Limits immer im Blick
2026-10-05

Claude Status Bar: deine Claude-Code-Limits immer im Blick

Ein Nutzungsmesser, der beide Limits und den Countdown bis zum jeweiligen Reset zeigt, im Xfce-Panel oder Systemtray.

#linux#windows#macos#claude-code#tray
2026-10-05

Floating Mute: das Handy mit einem Tap stummschalten, in jeder App

Ein kleiner schwebender Button für Android, der mit einem Tap stumm- und wieder einschaltet, gedacht für Kurzvideos, und die Lautstärke zurücksetzt.

#android#kotlin#f-droid#open-source
2026-10-05

Floating Volume: ein Lautstärkeregler, der über jeder App schwebt

Steuere die Lautstärke deines Geräts von überall mit einem schwebenden Regler auf Android, gebaut mit Flutter und einer nativen Kotlin-Schicht.

#android#flutter#kotlin#f-droid
sddm-simplisim: ein Anmeldebildschirm, der einfach nur schwarz ist
2026-10-05

sddm-simplisim: ein Anmeldebildschirm, der einfach nur schwarz ist

Ein minimalistisches, rein schwarzes SDDM-Theme mit Live-Uhr, Benutzername- und Passwortfeld und Ausschalt-Button.

#linux#sddm#theme#minimal
2026-10-05

FiAE-AP2: eine Lernseite für die IHK-Prüfung AP2

Themen, Quizze, Karteikarten und Crashkurse für die Prüfung zum Fachinformatiker Anwendungsentwicklung, in reinem JavaScript ohne Build-Schritt.

#web#javascript#ihk#study
FullShot: Ganzseiten-Screenshots mit einem Klick, nichts wird hochgeladen
2026-10-04

FullShot: Ganzseiten-Screenshots mit einem Klick, nichts wird hochgeladen

Eine freie, quelloffene Erweiterung, die ganze Seiten scrollt, zusammensetzt und als PNG, JPEG oder PDF speichert — komplett auf deinem Gerät.

#browser#extension#screenshot
ThreeTabs: ein Browser, der nur drei Tabs erlaubt
2026-10-04

ThreeTabs: ein Browser, der nur drei Tabs erlaubt

Warum ein hartes Tab-Limit besser ist als Tab-Manager, wie ThreeTabs es durchsetzt und was es (nicht) anfasst.

#browser#extension#focus
Warum Graustufen wichtig sind (und wie schwer es Desktops machen)
2026-09-29

Warum Graustufen wichtig sind (und wie schwer es Desktops machen)

Farbe ist ein Hebel, der dich zurückholen soll. Warum ich graytoggle für XFCE gebaut habe, was du stattdessen unter GNOME und KDE nutzt, und warum das alles nicht so schwer sein sollte.

#linux#xfce#gnome#kde#accessibility
↑↓ bewegen · Enter öffnen · Esc schließen