Der Ansatz
Die erste Entscheidung war der Schnitt zwischen App und Server. Die Flutter-App erfasst und stellt dar; was gilt, entscheidet das Backend. Die rechenintensive Geo-Mathematik – Flächen, Polygone, Überschneidungen – läuft in einem Go-Dienst auf Google Cloud Run, der bei Last automatisch skaliert. Damit beruht die Karte auf einer einzigen Quelle, Ranglisten und Team-Wertungen sind vergleichbar, und die Rechenlast liegt nicht auf einem Gerät, das parallel über eine ganze Fahrt hinweg Positionen aufzeichnen soll.
Go passt zu dieser Art Arbeit, weil Polygonoperationen CPU-gebunden sind und nicht auf Ein- und Ausgabe warten: kompilierter Code, kurze Startzeiten, geringer Speicherbedarf, Nebenläufigkeit ohne großen Überbau. Cloud Run ergänzt das um lastabhängige Autoskalierung – in Ruhephasen laufen entsprechend weniger Instanzen, bei Andrang kommen welche dazu. Das Lastprofil einer Freizeit-App ist erwartbar ungleichmäßig (Feierabend, Wochenende, gutes Wetter), und genau dafür ist eine anfragebasierte Autoskalierung gebaut. Die Kehrseite: Der Dienst muss zustandslos sein, jeder Zustand gehört in die Datenhaltung.
Auf der Karte werden die eroberten Territorien über eigene Mapbox-Layer gezeichnet statt über einzelne, auf die Karte gesetzte Overlay-Objekte. Der Unterschied liegt im Rendering: Flächen als Layer werden vom Karten-Renderer selbst gezeichnet und gestylt und bleiben beim Zoomen und Verschieben Teil der Karte, statt als wachsende Menge einzelner Elemente über ihr zu schweben. Live-Karte, Ranglisten und Teams greifen dabei auf denselben serverseitigen Stand zu.
Alles, was nicht den Kern ausmacht, wurde angebunden statt gebaut: Abos laufen plattformübergreifend über RevenueCat, sodass es einen Abostatus gibt statt zweier getrennter Zustandsautomaten für App Store und Play Store; Fitnessdaten kommen über die Garmin-API herein, damit die gewohnte Aufzeichnungshardware weiter genutzt werden kann. Die Leitlinie dahinter: selbst entwickeln, was das Produkt ausmacht – Geo-Logik, Spielmechanik, Kartendarstellung – und für den Rest etablierte Dienste nehmen. Architektur, Backend und Launch in App Store und Play Store lagen dabei in einer Hand.