Wie diese Website entsteht: ein komplett eigener Generator in Kotlin
Mohamad Almousli · 2026-10-06 · 3 Min. Lesezeit
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
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.

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.

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.

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.
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.
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.

sddm-simplisim: ein Anmeldebildschirm, der einfach nur schwarz ist
Ein minimalistisches, rein schwarzes SDDM-Theme mit Live-Uhr, Benutzername- und Passwortfeld und Ausschalt-Button.
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.

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.

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.

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.