MTB Service App: eine PWA komplett mit Claude Code gebaut

Nach ganz langer Zeit mal wieder ein Artikel zu einem kleinen Projekt von mir…

Ich fahre viel Mountainbike, und wie bei jedem Bike stellt sich irgendwann die Frage: Wann war eigentlich der letzte Service dran? Kette, Bremsen, Gabel – jedes Teil hat sein eigenes Intervall, und ohne System und beson ders bei vielen Rädern vergisst man das zuverlässig. Also habe ich mir kurzerhand eine eigene App gebaut: die MTB Service App, live unter service-log.online.

Man kann für beliebig viele Bikes protokollieren, wann welcher Service fällig ist – nach Kalenderzeit oder nach gefahrenen Stunden, je nach Verschleißteil. Neben den üblichen Verdächtigen wie Federgabel, Kette oder Bremsen lassen sich auch eigene Service-Typen anlegen. Die App läuft als PWA, funktioniert offline und ist zweisprachig auf Deutsch und Englisch.

So sieht das im Alltag aus: die Bike-Übersicht, die Service-Tabelle eines einzelnen Bikes, überfällige und erledigte Services auf einen Blick sowie der Dialog zum Eintragen eines neuen Service.

Das eigentlich Interessante an dem Projekt ist aber weniger die App selbst, sondern wie sie entstanden ist: nahezu vollständig mit Claude Code, Anthropics KI-gestützter Kommandozeile für Softwareentwicklung. Statt Copilot-artiger Zeilenvervollständigung läuft hier ein Agent, der ganze Features eigenständig umsetzt – von der Datenbank-Migration über den API-Endpunkt bis zum Alpine.js-Template im Frontend, inklusive Tests.

Damit das über viele Sessions hinweg konsistent bleibt, pflege ich eine CLAUDE.md im Repo: Architekturentscheidungen, Konventionen (etwa dass jeder Endpoint Ownership manuell per user_id prüft, weil es bewusst keine ORM gibt) und wie neue Sprachstrings durch Lang::t() beziehungsweise i18n.js laufen müssen. Claude liest diese Datei bei jeder Aufgabe und hält sich überraschend zuverlässig daran – das hat mich am meisten überzeugt, gerade bei einem Projekt ohne Framework, wo sonst leicht alles ausfranst.

Technisch ist die App bewusst simpel gehalten: PHP 8.1 prozedural mit ein paar kleinen Klassen, kein Framework, kein Router, keine ORM – Änderungen wirken sofort nach dem Neuladen, ohne Build-Schritt. Vanilla JS mit Alpine.js für die Oberfläche, MySQL als Datenbank, PHPUnit für die Tests der Business-Logik. Genau die Art von Codebase, in der ein KI-Agent seine Stärken ausspielt: überschaubar genug, um sie komplett im Kontext zu halten, aber groß genug, dass man beim manuellen Durcharbeiten Zeit verliert.

Wer selbst Mountainbikes wartet und den Überblick über Service-Intervalle behalten will, kann die App unter service-log.online kostenlos ausprobieren.

Und was das Allerbeste ist, weder diesen Text, die Bilder, noch den Artikel habe ich selbst geschrieben oder in WordPress angelegt, auch das hat Claude übernommen