Native App: Mein Side Project Gassi-Geh-App
Gassi Koordination durch eine native App – mit React, Supabase, Capacitor und Claude Code als Coding Agent.
Wer war wann mit dem Hund draußen? Klassisches Koordinationsproblem im Mehrpersonenhaushalt. Irgendwann hab ich entschieden, das einmal ordentlich zu lösen.
Ergebnis: Gassi-Geh-App – Echtzeit-Koordination für Hundegruppen. Gruppencode teilen, sofort loslegen, keine Pflicht-Registrierung. Klingt simpel. Unter der Haube steckt mehr drin als erwartet.

Der Stack
- Vite + React + TypeScript mit shadcn/ui
- Supabase: PostgreSQL, Realtime, Anonymous Auth, Edge Functions, RLS
- Capacitor 7: Web-to-Native (Android live, iOS in Arbeit)
- Firebase FCM V1: Push Notifications via Supabase Edge Function

Architektur-Entscheidungen, die ich bewusst getroffen habe
Anonymous Auth als Default-Session. Kein Onboarding-Formular, kein erzwungener Account. Der User landet in der App, bekommt einen Gruppencode, kann sofort einladen. Registrierung ist optional – und übernimmt die bestehende Session nahtlos über Supabase's linkIdentity. Wer sich registriert, bekommt dafür Zugang zu erweiterten Funktionen – ein echtes Incentive, ohne den anonymen Einstieg zu erzwingen. Das spart Friction, kostet fast nichts und fühlt sich trotzdem nicht unsauber an.
RLS als einzige Autorisierungsschicht. Ich wollte keine serverseitige Filterlogik, die irgendwann aus dem Sync läuft. Alle Policies sitzen direkt auf den Tabellen, der Gruppencode-basierte Zugriff ist vollständig auf DB-Ebene abgebildet. Einfacher zu reviewen, deutlich schwerer zu umgehen – und bei einem Solo-Projekt genau der richtige Kompromiss.
Capacitor statt React Native. Keine separate Native-Codebasis. Dieselbe React-App wird als APK/IPA gebaut. Push Notifications, lokale Erinnerungen, Deep Links – alles läuft nativ über Capacitor-Plugins. Der Tradeoff ist Webview-Performance, aber für diesen Use Case völlig irrelevant. Eine Codebasis, zwei Plattformen – das war mir mehr wert als nativer Render-Speed für eine Hundekoordinations-App.
Was tatsächlich komplex war
Realtime + Mobile App Lifecycle. Supabase Realtime ist in zehn Minuten aufgesetzt. Aber Subscriptions, die im Android-Hintergrund einschlafen, sauber reconnecten und beim Resume keine Duplicate Events produzieren – das hat mehrere Debugging-Sessions gekostet. Das Problem liegt nicht in der API, sondern im Zusammenspiel zwischen Browser-Lifecycle, Android-Backgrounding und dem Supabase-Channel-State.
FCM V1 Notification Chain. Die vollständige Kette sieht so aus: FCM V1 API → Supabase Edge Function (Deno) → Capacitor Push Plugin → Android Notification Service → Device. Wenn eine Notification verloren geht, hat jede Ebene eigene Logs und eigene Fehlerbilder. Das systematische Debugging dieser Kette war der aufwändigste Teil des gesamten Projekts – und hat mir beigebracht, dass verteilte Systeme auch im Kleinen verteilte Komplexität bedeuten.

Mit Claude Code entwickelt – Erfahrungen aus der Praxis
Das Projekt hab ich größtenteils mit Claude Code gebaut. Nicht im "AI schlägt Snippets vor"-Modus, sondern als echter Coding Agent: Files lesen, Migrations schreiben, Tests ausführen, Fehler debuggen.
Wo das richtig gut funktioniert hat: DB-Schema-Iterationen, RLS-Policies schreiben und reviewen, boilerplate-lastiger Capacitor-Setup. Aufgaben mit klarem Scope und definierten Inputs – da ist der Agent schnell und zuverlässig.
Wo es weniger gut funktioniert: komplexe Interaktionen zwischen mehreren Systemen gleichzeitig. Die FCM + Capacitor + Supabase Edge Function Kette ist genau das Gegenbeispiel. Der Agent optimiert lokal sauber, verliert aber bei tief verschachtelten System-Abhängigkeiten den globalen Kontext. Man merkt, wenn er in einer lokalen Lösung steckt, die das eigentliche Problem nicht trifft.

Das wichtigste Learning aus dem Projekt: Coding Agents funktionieren am besten mit klar abgegrenzten Aufgaben und explizit mitgeliefertem Systemkontext. Je mehr Abhängigkeiten zwischen Systemen, desto mehr Oversight braucht man – nicht weil der Agent schlecht ist, sondern weil das Problem es erfordert. Vibe Coding funktioniert, solange man weiß, wann man aufhören muss zu viben und anfängt zu denken.
Stand
Web-App live unter app.gassi-geh-app.de. Android-App ist gebaut, Play Store Submission läuft. iOS kommt, wenn Android durch ist.