Das Problem
Ein Taxidienst, der Buchungen per App annimmt, braucht weit mehr als ein Buchungsformular. Er muss in der Nähe einen freien Fahrer finden, ihm die Fahrt anbieten, auf eine Antwort warten und weitermachen, wenn niemand annimmt, und das innerhalb von Sekunden. Rom bringt eigene Regeln mit: von der Stadt festgelegte Festpreise für Fahrten zu und von den Flughäfen und dem Hafen. Der Kunde brauchte die gesamte Kette, von der Disposition bis zur Bezahlung.
Was ich gebaut habe
Ich habe eine Echtzeit-Plattform für Buchung und Disposition entwickelt, mit einem Backend, drei mobilen Apps und einem Web-Dashboard für die Verwaltung.
- Dispositions-Engine – Sie sucht freigegebene, verfügbare Fahrer, die in den letzten 60 Sekunden ihre Position gesendet haben, innerhalb eines Suchradius (standardmäßig 8 km). Bis zu 10 davon ordnet sie nach der tatsächlichen Fahrzeit im aktuellen Verkehr laut Google und bietet die Fahrt dann jeweils einem Fahrer an, der 20 Sekunden Zeit zum Annehmen hat.
- Tarifregeln für Rom – Der Preisdienst erkennt 9 zentrale Orte, etwa den Flughafen Fiumicino und die Altstadt. Er wendet die 12 Festpreise an, die Roma Capitale festgelegt hat (Beschluss 252/2024). Andere Fahrten werden anhand der Google-Route berechnet, zuzüglich Aufschlägen für Gepäck und Fahrgäste.
- Drei Apps – eine Fahrgast-App, eine Fahrer-App und eine Tablet-App im Fahrzeug, die die Route und Partnerbanner zeigt. Alle sind mit React Native und Expo gebaut, für Android und das Web.
- Live-Tracking und Anrufe – Socket.IO überträgt Fahrerpositionen und Fahrtstatus. Fahrgast und Fahrer können sich in der App über WebRTC anrufen, ohne die Telefonnummer des anderen zu sehen.
- Zahlungen – Stripe mit signaturgeprüften Webhooks sowie PayPal-Bestellungen. Die Zahlungsschlüssel werden im Admin-Panel hinterlegt und verschlüsselt gespeichert.
- Fahrer-Onboarding – Fahrer laden Führerschein, Dokumente und Foto hoch. Ein Administrator gibt sie frei, bevor sie online gehen können.
- Sponsoren und Gutscheine – ein Sponsorenportal mit drei Tarifen und Gutscheine mit Betrugsschutz-Tracking, dazu vorbestellte Fahrten und Bewertungen.
Womit es gebaut ist
Das Backend läuft auf Node.js 22 mit TypeScript, Express und Socket.IO. Die Daten liegen in MariaDB/MySQL, und das Schema ist über 24 versionierte SQL-Migrationen gewachsen. Zod validiert Eingaben; die Anmeldung läuft über JWT und Google Sign-in. Google Maps liefert Routen, Fahrzeiten und Geocoding. Die Apps nutzen Expo und React Native.
Warum so gebaut
Zwei Fahrgäste dürfen nie denselben Fahrer bekommen. Wenn ein Fahrer annimmt, reserviert ihn die Engine mit einem einzigen bedingten Update: belegt, aber nur, wenn er noch verfügbar ist. Ändert sich keine Zeile, wurde der Fahrer gerade vergeben, und die Fahrt geht an den nächsten Kandidaten. Die Kandidaten werden nach Fahrzeit sortiert, nicht nach Luftlinie, denn in Rom ist das nächstgelegene Auto oft nicht das schnellste. Antwortet Google nicht, greift die Sortierung auf die Entfernung zurück.


