Gassi-Geh-App: Koordination von Hundespaziergängen
Eine native App für Android und iOS aus einer Web-Codebasis, ohne Registrierungspflicht und ohne Standortverfolgung.
Einordnung
Ein Nebenprojekt aus dem eigenen Haushalt: wer war wann mit dem Hund draußen, wer geht als Nächstes. Die App steht in beiden Stores, daneben läuft eine Web-Version, die Daten synchronisieren zwischen Browser und Gerät.
Problem
Klassische Koordination im Mehrpersonenhaushalt. Nachfragen und Chatnachrichten gehen unter, und der Hund war dann entweder zweimal oder gar nicht draußen. Zwei Vorgaben hatte ich an mich selbst: der Einstieg ohne Registrierung, und keine Standortverfolgung. Beides schließt die bequemen Wege aus, über einen Account als Ankerpunkt und über Positionsdaten als Wahrheit.
Ansatz
Eine anonyme Sitzung ist der Standard. Die App startet ohne Formular, ein geteilter Gruppencode genügt zum Einladen. Wer sich später registriert, behält seine Sitzung, weil die Anmeldung an die vorhandene Identität geknüpft wird. Die Berechtigungen liegen ausschließlich als Regeln auf den Tabellen, nicht in einer Serverschicht, die mit der Zeit auseinanderläuft. Für die nativen Fassungen wird dieselbe Web-Codebasis verpackt, statt eine zweite Codebasis zu pflegen.
Stack
React mit TypeScript und Vite, Tailwind und shadcn/ui für die Oberfläche, Supabase für Datenbank, Echtzeit, anonyme Anmeldung und Edge Functions, Capacitor für Android und iOS, Firebase Cloud Messaging für die Push-Nachrichten. Gebaut habe ich das Meiste mit Claude Code.
Ergebnis
Beide Apps sind kostenlos, die Preisumstellung ist in beiden Stores vollzogen. Finanzieren soll das später ein Partnerprogramm, ausgespielt wird davon noch nichts. Bei Android ist der Rückweg zu einem Kaufpreis damit zu, das war vorher klar und ich habe es trotzdem so entschieden.
Learnings
Der Tradeoff bei einer verpackten Web-App ist die Darstellung im Webview. Für diese App ist das ohne Belang, für ein zeichenintensives Produkt wäre es das nicht. Teuer waren zwei andere Stellen. Erstens Echtzeit im Lebenszyklus einer mobilen App: Verbindungen schlafen im Hintergrund ein, und beim Zurückkommen sauber neu zu verbinden, ohne doppelte Ereignisse zu erzeugen, hat mehrere Sitzungen gekostet. Zweitens die Kette bis zur Push-Nachricht, über Edge Function, Plugin, Systemdienst und Gerät, mit eigenen Protokollen und eigenen Fehlerbildern je Ebene. Daraus stammt auch mein Bild vom Arbeiten mit einem Coding-Agenten: bei klar abgegrenzten Aufgaben schnell und verlässlich, bei tief verschachtelten Abhängigkeiten zwischen Systemen verliert er den Überblick.