Der Papagei und der Pokalschrank
Vor zehn Tagen habe ich das Tagebuch beendet, dann kam doch v1.1: ein Maskottchen, das sich die ganze Zeit im App-Namen versteckt hatte, achtzig Pokale und ein neues KI-Modell in der Co-Author-Zeile.

Vor zehn Tagen habe ich dieses Entwicklungstagebuch mit "Wir sehen uns auf den Trails" beendet. Version 1 war draußen, die Geschichte erzählt, und ich habe es so gemeint. Dann habe ich das Projekt trotzdem immer wieder geöffnet. Zum ersten Mal seit Februar gab es keine Liste von Dingen, die die App brauchte, und es stellt sich heraus: Das ist nicht das Ende des Bauens, sondern der Anfang einer anderen Art davon. Diese Woche ging Version 1.1.0 live, und es ist das erste Update, das ich nicht gemacht habe, weil etwas fehlte, sondern weil ich wollte, dass die App mehr Spaß macht. Nicht lauter, nicht voller. Mehr Spaß, ohne im Weg zu stehen, und ein Stück weit einfach um seiner selbst willen.
Es gibt jetzt einen Papagei. Ich erkläre das.
Der Vogel steckte im Namen
"Runara" sollte nie etwas bedeuten. Ich wollte ein Wort, das nach Bewegung klingt und mit "Run" anfängt, das war der ganze Auftrag. Erst Monate später, beim ungefähr hundertsten Anstarren des Namens, habe ich die zweite Hälfte wirklich gelesen: ein Ara. Ein Ara ist ein Papagei, die große, laute, leicht alberne Sorte. Der Name war zuerst da; der Vogel hatte sich die ganze Zeit darin versteckt und gewartet, dass ich ihn bemerke.
Einmal gesehen, konnte ich es nicht mehr nicht sehen, und die App, die absichtlich nirgends Maskottchen-Energie hat, nur Haarlinien und Instrumenten-Ziffern, hatte plötzlich trotzdem eines. Also habe ich mich darauf eingelassen, vorsichtig:
feat(design): motion tiers, ParrotMark, Reduce-Motion gate feat(parrot): mascot moments — idle perch, summary celebration, empty states
Ein kleiner bunter Papagei sitzt jetzt in einer Ecke des Ruhebildschirms der Watch und macht etwa alle acht Sekunden einen kleinen Hüpfer. Beende ein Training, und er fliegt über die Kopfzeile der Zusammenfassung, während darunter deine Werte einlaufen, mit einem Erfolgs-Tippen am Handgelenk. Das ist fast alles, was er tut. Er redet nicht, er nörgelt nicht wegen irgendwelcher Ringe, er hat keine Meinungen. Er sitzt, er hüpft, und er feiert, wenn du tatsächlich etwas geschafft hast. Ich finde, das ist die korrekte Menge Papagei.
Spaß ohne Ablenkung
Das ganze Update hängt an einer einzigen Gestaltungsregel: Randmomente feiern, Live-Ziffern bleiben still.
Während du mitten im Lauf dein Tempo abliest, bleibt die App ein Instrument. Nichts pulsiert, nichts hüpft, keine Zahl führt ein Tänzchen auf, während du bei Kilometer neun versuchst, einen Blick darauf zu werfen. Aber die Momente an den Rändern, in denen du keine Daten liest, haben Wärme bekommen: Der Countdown lässt seine Ziffern aufploppen und blitzt GO, das Pausieren dimmt den Bildschirm und morpht den Button, Splits gleiten herein, der Wassersperre-Tropfen macht einen kleinen Hüpfer, und die Ziffern der Zusammenfassung rollen hoch wie ein Kilometerzähler. Es ist der Unterschied zwischen einem Freund, der an der Ziellinie klatscht, und einem, der den ganzen Lauf hindurch klatscht.
Und all das klappt unter "Bewegung reduzieren" zusammen. Schalte das in den Bedienungshilfen ein, und der Papagei steht still, die Feiern werden zu leisen Überblendungen, und die App ist wieder vollkommen nüchtern. Freude sollte etwas sein, das man abwählen kann.
Der Pokalschrank
Dann, weil ich offenbar noch nicht fertig war, Erfolge:
feat(core): achievement model, engine, 68-entry catalog feat(ios): achievement detection, unlock celebrations, trophy room
Achtzig zum Release-Tag, über sechzehn Trainingsarten. Distanzleitern fürs Laufen, Radfahren und Schwimmen, lange kumulative Anstiege wie tausend Lebenskilometer, Serien, Zähler, und ein paar, auf die ich unverhältnismäßig stolz bin, etwa Early Bird und All-Weather Parrot. Sie wohnen in einem Pokalschrank im Verlauf-Tab: freigeschaltete Pokale mit Datum, gesperrte mit ehrlichen Fortschrittsbalken, und jeder Pokal trägt seine eigene Gravur, "10K", "42.2", "Σ100". Schaltest du einen am Handgelenk frei, wächst an der Trainingszusammenfassung ein kleiner NEW-TROPHY-Streifen; am Telefon feiert der Papagei richtig, mit fünf verschiedenen Flugstilen und einem Schauer aus Feder-Konfetti.
Zwei Details, die mir mehr bedeuten, als je jemand bemerken wird. Erstens: Das Konfetti ist deterministisch. Jede Feier wird vom Erfolg selbst geseedet, sodass das erneute Abspielen einer Pokal-Freischaltung jedes Mal exakt denselben Flug zeigt, wie eine Erinnerung statt eines Spielautomaten. Zweitens: Die Buchführung ist ehrlich. Nur Trainings, die Runara selbst aufgezeichnet hat, zählen für Pokale, und löschst du ein Training, geht jeder damit verdiente Pokal mit. Eine Medaille, die du behältst, nachdem du den Lauf dahinter gelöscht hast, ist keine Medaille.
Die Laufleiter hatte außerdem ein Lückenproblem. Ursprünglich sprang sie von eins auf zehn auf fünfzehn Kilometer, womit dir dein zweiter 2-km-Lauf überhaupt lange Zeit nichts einbrachte. Das hat mich gestört, wie einen eine fehlende Treppenstufe stört, also hat der letzte Feature-Commit vor dem Release jede Sprosse von eins bis fünfzehn gefüllt:
feat(achievements): filter, per-km ladder, cup engravings, reconcile
Eine Kleinigkeit. Aber Leitern sollten keine fehlenden Sprossen haben.
Ein kleiner ehrlicher Schalter
Zwischendrin ein winziges Feature, das nie in einem Screenshot auftauchen wird: eine Einstellung "Töne im Stummmodus abspielen", plus ein Lautsprecher-Schalter auf der Aktionsseite der Watch, der sie nur für das aktuelle Training übersteuert. Ich habe es eingebaut, weil meine eigene Watch dauerhaft stumm ist und die Sprachhinweise, die ich im Mai gebaut habe, von meinen eigenen Einstellungen pflichtbewusst stummgeschaltet wurden. Manchmal ist der Nutzer, für den du die App reparierst, du selbst.
Die ehrliche Abrechnung, Teil zwei
Der letzte Beitrag endete mit einer Bilanz, wie es wirklich war, diese App mit Claude zu bauen, und ich habe versprochen, beim KI-Teil ehrlich zu bleiben. Also ein Update, denn der KI-Teil hat sich geändert.
Dieser ganze v1.1-Sprint wurde mit Anthropics neuem Modell gebaut, Fable 5, das ungefähr zu der Zeit erschien, als Version 1 auslieferte. Die Co-Author-Zeile in meinen Commits hat sich mit geändert: Co-Authored-By: Claude Fable 5. Gleiche Abmachung, neueres Hirn. Und ja, der erste Entwurf dieses Beitrags kam aus demselben Modell und wurde dann überall dort umgeschrieben, wo er nicht nach mir klang.
Ist es besser? Ehrlich: ja, spürbar. Der Feier-Flug ist eine handgebaute Canvas-Animation, Bézier-Flugbahnen, der Papagei legt sich in die Kurven, Flügelschläge mit Squash-and-Stretch, Federn, die entlang der Bahn abfallen, und der erste Entwurf dieses Codes hat größtenteils einfach funktioniert. Im v1.0-Sprint hätte ich für so etwas einen Abend Nacharbeit eingeplant. Die Erfolgs-Engine, ein Katalog mit achtzig Einträgen, lokalisierten Namen in zwei Sprachen und einem Haufen Grenzfälle, kam ungefähr so strukturiert heraus, wie ich sie selbst strukturiert hätte. Weniger falsche Fixes, weniger plausibel-hohle Vorschläge.
Aber die Form der Zusammenarbeit hat sich nicht geändert, und da will ich präzise sein, weil das der Teil ist, den Leute in beide Richtungen falsch verstehen. Die erste Version des Feier-Flugs funktionierte und war langweilig, der Papagei rutschte über den Bildschirm wie eine Folienüberblendung, und "das fühlt sich nicht nach Fliegen an" ist nichts, was ein Modell fühlen kann. Ich habe es die ganze Szene als echten Flug neu bauen lassen. Und zwei Tage vor dem Release verwandelte sich jeder Erfolgsname im Pokalschrank still in einen rohen Lokalisierungsschlüssel, achievement.%@.name starrte aus einem goldenen Pokal, wegen einer subtilen String-Interpolations-Falle in Swifts Lokalisierungs-API. Fable 5 hat diesen Bug geschrieben. Es hat auch den Fix und den Regressionstest geschrieben, innerhalb von Minuten, sobald ich ihm den Screenshot vorgelegt habe. Die Augen auf dem echten Bildschirm, der Geschmack, der sagt, bau das neu, das Urteil darüber, was einen Pokal verdient und was Lärm ist, dieser Teil kommt immer noch nicht aus der Maschine.
Schnelleres Pferd, gleicher Reiter. Das ist die ehrliche Version.
Ab jetzt draußen
Version 1.1.0 ist als kostenloses Update im App Store. Gleicher Deal wie immer: kein Konto, kein Abo, nichts wird gesammelt, und die Trainingshistorie hinter deinen Pokalen verlässt nie deine Geräte. Der Papagei lebt vollständig an deinem Handgelenk.
Ich habe letztes Mal gesagt, ich wisse nicht, ob noch mehr kommt. Offenbar kommt noch mehr. Wir sehen uns auf den Trails, und wenn du fünfzehn Kilometer läufst, wartet ein Pokal.