Inhalt (12 Abschnitte)
- Das Briefing: ein Fahrer, ein Postfach, kein Backoffice
- Die Architektur in vier Bausteinen
- Der Zaubertrick: kein zustandsbehaftetes Backend
- Der Lebenszyklus einer Fahrt in 6 Schritten
- Geocoding ohne Datenleck
- Postmark und seine EU-Alternativen
- Die DSGVO-Bilanz
- Was es kostet (und wie lange es hält)
- Für wen das funktioniert und für wen nicht
- Lessons learned, ein Jahr danach
- Zusammengefasst
- Quellen und Referenzen
Als Ghislain, Fahrer von Taxi Ghis in Belfort, mich um eine Buchungswebsite bat, habe ich mir zuerst angesehen, was die Konkurrenz Selbstständigen verkauft: amerikanische SaaS-Angebote für 80 bis 150 € im Monat, mit einer Oberfläche im Stil von Booking, fünfundzwanzig Auftragsverarbeitern in der Datenschutzerklärung (sofern es eine gibt), einem Cookie-Banner mit drei Spalten und dem hübschen Satz „Ihre Daten können in die Vereinigten Staaten übermittelt werden“, versteckt ganz am Ende. Für einen einzelnen Fahrer, der nur Fahrtanfragen per Mail erhalten will, ist das ein überladenes Monstrum, das Probleme löst, die er nicht hat.
Dieser Artikel beschreibt die Architektur, die wir stattdessen gebaut haben: eine statische Next.js-Website, ein Buchungsformular, das europäische APIs aufruft, und ein Outlook-Postfach, das als Datenbank dient. Kein Proof of Concept: Das läuft seit April 2026 produktiv auf www.taxighis.com.
Das Briefing: ein Fahrer, ein Postfach, kein Backoffice #
Taxi Ghis ist ein Fahrer in Belfort, der seit 2014 für Krankenfahrten bei der CPAM (der französischen gesetzlichen Krankenkasse) zugelassen ist. Der Bedarf passt in fünf Zeilen:
- Fahrtanfragen per Mail erhalten (mit allen nützlichen Angaben: Adressen, Datum, Telefon)
- Vom Telefon aus annehmen oder ablehnen können, ohne eine App installieren zu müssen
- Dem Kunden vor der Bestätigung eine ehrliche Preisschätzung zeigen
- Dafür kein Monatsabo bezahlen
- Die DSGVO strikt einhalten, denn ein zugelassenes Taxi befördert Patienten (Artikel 9 DSGVO)
Keine dieser Zeilen verlangt eine Datenbank, ein Benutzerkonto, eine Administrationsoberfläche oder einen amerikanischen Drittanbieterdienst. Genau das bestimmt die Architektur.
Die Architektur in vier Bausteinen #
Die Website beruht auf vier Elementen, die alle in Europa gehostet oder betrieben werden:
- Next.js 16 + React 19 + Tailwind v4, Standalone-Build, als Container auf einem dedizierten SoYouStart-Server in Frankreich bereitgestellt (Rechenzentrum von OVH).
- OpenRouteService (HeiGIT, Heidelberg, Deutschland) für das Geocoding europäischer Adressen und die Berechnung der tatsächlichen Straßenentfernung.
- Base Adresse Nationale (Etalab, Frankreich), das nationale Adressverzeichnis, für die Autovervollständigung französischer Adressen, genauer als jeder Konkurrent.
- Postmark für die Zustellung der Transaktions-E-Mails (ja, USA, aber wir reduzieren den gesendeten Inhalt so stark, dass es vertretbar bleibt, dazu später mehr).
Für die Sicherheit des Formulars: Cloudflare Turnstile (unsichtbarer Spamschutz, ohne Rätsel für den Nutzer, anders als reCAPTCHA), ein Honeypot und ein Rate-Limit auf Anwendungsebene: fünf Übermittlungen pro Stunde und IP. Kein Bot kommt durch.

Der Zaubertrick: kein zustandsbehaftetes Backend #
Der Ablauf sieht so aus. Ein Kunde füllt das Buchungsformular aus. Der Next.js-Server validiert die Daten, berechnet die Schätzung, prüft Turnstile serverseitig und sendet dann zwei Mails über Postmark: eine Bestätigung an den Kunden und eine Benachrichtigung an den Fahrer. Die Mail an den Fahrer enthält zwei Links: „Annehmen“ und „Ablehnen“.
Diese beiden Links zeigen nicht auf eine Datenbank. Sie enthalten ein per HMAC signiertes Token, das alle Informationen zur Fahrt mitführt (Referenz, Kunde, Adressen, Datum, Preis). Wenn Ghislain klickt, prüft der Server die Signatur, erzeugt eine Bestätigungsmail an den Kunden (mit seiner Fahrtnummer), und das war's. Auf dem Server wurden keine Daten gespeichert. Ghislains Outlook-Postfach übernimmt die Rolle der Datenbank.
// Signiertes Token, das dem Fahrer in der Benachrichtigungsmail geschickt wird.
// Keine serverseitige Speicherung: Alles steckt in der URL.
const token = signBookingToken({
ref,
clientName,
clientEmail,
clientPhone,
pickup,
destination,
when,
priceEur,
});
const acceptUrl = `${siteUrl}/accepter-course?t=${token}`;
const declineUrl = `${siteUrl}/refuser-course?t=${token}`;Das HMAC-Geheimnis kennt nur der Server, daher kann niemand einen Annahme-Link fälschen. Das Token läuft nach einigen Tagen ab. Wenn Ghislain den Verlauf einsehen will, öffnet er Outlook: Das ist seine maßgebliche Quelle. Kein Backoffice nötig, kein Passwort zum Merken, keine Oberfläche, für die man schulen muss.

Der Lebenszyklus einer Fahrt in 6 Schritten #
Um die Architektur greifbar zu machen: Das passiert zwischen dem Klick eines Patienten auf „Buchen“ und dem Moment, in dem der Fahrer seine abschließende Bestätigungsmail erhält.
- Eingabe: Der Kunde füllt das Formular aus. Die Autovervollständigung der Adresse läuft serverseitig über
/api/autocomplete, nie direkt zur BAN oder zu ORS. Die IP des Besuchers kommt bei den Auftragsverarbeitern nicht an. - Prüfung und Schätzung: Der Next.js-Server prüft die Stimmigkeit der Daten (französische Telefonnummer, Datum in der Zukunft, nicht leere Adressen), fragt bei OpenRouteService die Straßenentfernung ab, berechnet den Preis nach dem geltenden Tarif (Haupt- und Nebenzeiten, Zuschläge) und prüft das Token von Cloudflare Turnstile serverseitig.
- Sofortige Bestätigung an den Kunden: Eine Zusammenfassung wird über Postmark gesendet. Der Kunde erhält die Einzelheiten seiner Anfrage und einen Hinweis: Die Fahrt ist erst bestätigt, wenn der Fahrer sie angenommen hat.
- Benachrichtigung an den Fahrer: Ghislain erhält parallel eine strukturierte Mail in seinem Outlook-Postfach mit zwei per HMAC signierten Links: „Annehmen“ und „Ablehnen“. Die Mail enthält alle betrieblichen Angaben, die um 6 Uhr morgens nützlich sind (Adresse, Telefon, geschätzte Entfernung).
- Entscheidung des Fahrers: Ghislain klickt auf seinem Telefon. Der Server prüft die HMAC-Signatur (Ablehnung, wenn sie verändert oder abgelaufen ist), liest die Daten aus dem Token und löst die passende Mail aus.
- Abschließende Bestätigung an den Kunden: Eine letzte Mail bestätigt die Annahme mit der Fahrtnummer und der direkten Telefonnummer des Fahrers (oder erklärt höflich die Ablehnung mit der Einladung, sich erneut zu melden). Auf dem Server bleibt keine Spur: Der Zyklus ist beendet.
Sechs Schritte, zwei Mails an den Kunden, eine Mail an den Fahrer, ein Klick zur Bestätigung. Keine Datenbank berührt, kein Konto angelegt, keine Sitzung geöffnet. Der Server weiß nach den 30 Sekunden des Formulars buchstäblich nichts mehr über die Fahrt: Das Gedächtnis liegt in Outlook.
Geocoding ohne Datenleck #
Auf den üblichen Taxi-Websites ruft die Autovervollständigung von Adressen Google Maps direkt aus dem Browser des Kunden auf. Die Folge: Google erhält die Privatadresse des Kunden + seine IP + seinen User-Agent, sobald er zu tippen beginnt, noch bevor er irgendetwas bestätigt hat. Das ist eine Übermittlung außerhalb der EU, für die mindestens eine vorherige Einwilligung nötig wäre.
Auf taxighis.com läuft die Autovervollständigung über unsere eigene Next.js-API (/api/autocomplete), die die Base Adresse Nationale und OpenRouteService serverseitig abfragt. Der Kunde hat keinen direkten Kontakt mit diesen Diensten. Seine IP kommt weder bei OpenRouteService auf OVH noch bei data.gouv.fr an. Wir haben es mit einer Netzwerkaufzeichnung in Playwright geprüft: keine einzige Anfrage an eine externe Domain, wenn Sie „1 avenue de la République“ tippen.
Postmark und seine EU-Alternativen #
Das ist das einzige Zugeständnis außerhalb der EU im Stack. Postmark hat seinen Sitz in den USA (Wildbit Inc.) und ist dem EU-US Data Privacy Framework beigetreten, einem rechtlichen Rahmen, den die Europäische Kommission im Juli 2023 anerkannt hat und der die Übermittlung absichert. Um die Exposition gering zu halten, ist der Inhalt der Mails bewusst reduziert: keine Anhänge, kein Tracking-Pixel, kein aktiviertes Open-Tracking.
Für Kunden, die 100 % EU verlangen (öffentliche Verwaltungen, Gesundheitswesen mit strengen Anforderungen, öffentliche Aufträge), gibt es vier glaubwürdige Alternativen mit denselben Transaktionsfunktionen.
- Tipimail (Brevo): Frankreich, Sitz in Paris. Tochter von Brevo, verarbeitet 100 Milliarden Mails pro Jahr. Transaktions-SMTP + REST-API. Preise vergleichbar mit Postmark.
- Mailjet: Frankreich, Sitz in Paris (seit 2019 Teil der Sinch-Gruppe, Betrieb in Frankreich beibehalten). SMTP + API + optionales, abschaltbares Tracking.
- Brevo: Frankreich, ehemals Sendinblue. Stärker auf Marketing ausgerichtet, aber mit solidem Transaktionsangebot.
- Mailtrap: Polen (Railsware). Gute Option für Setups aus Entwicklung/Staging + Produktion, Infrastruktur zu 100 % in der EU.
Bei Taxi Ghis haben wir uns aus zwei Gründen für Postmark entschieden: die Qualität der Zustellbarkeit (Zustellrate in den Posteingang > 99 % gegenüber ~95 % bei den französischen Anbietern) und das DPF, das rechtlich für ein von der CPAM zugelassenes Beförderungsunternehmen ausreicht. Wenn Sie eine öffentliche Verwaltung sind oder einen öffentlichen Auftrag ausführen, ist der Wechsel zu Tipimail oder Mailjet eine Sache von 10 Minuten Konfiguration in Next.js.
Die DSGVO-Bilanz #
Wenn man die Kette der Auftragsverarbeiter einer von der CPAM zugelassenen Taxi-Website ehrlich auflistet, erwartet man das Schlimmste: Es ist ein Bereich, in dem Artikel 9 DSGVO (Gesundheitsdaten) über jedem eingegebenen Ziel schwebt (eine Fahrt ins Krankenhaus verrät einen Gesundheitszustand). Am Ende sieht es so aus:
- Cédric Santiago (ich): Hosting und Managed Services, in Frankreich, mit vertraglicher Verpflichtung.
- OpenRouteService (HeiGIT, Deutschland): europäisches Geocoding, reine Auftragsverarbeitung in der EU.
- Base Adresse Nationale (Etalab, Frankreich): Autovervollständigung für Frankreich.
- Cloudflare Turnstile (Cloudflare Germany GmbH für EU-Belange): Spamschutz im unsichtbaren Modus
managed, ohne Tracking-Cookie, berechtigtes Interesse nach Art. 6 Abs. 1 lit. f. - Postmark / Wildbit Inc. (USA): Transaktions-SMTP, abgesichert durch das EU-US Data Privacy Framework (Angemessenheitsbeschluss der EU-Kommission vom Juli 2023).
- Microsoft Outlook (Irland, Betrieb in den USA): Postfach des Fahrers, direkter Kundenvertrag (Microsoft 365 Business).
Sechs Auftragsverarbeiter, davon vier in der EU und zwei in den USA unter dem DPF. Kein Cookie zur Reichweitenmessung, kein Werbepixel, kein Einwilligungsbanner. Das einzige mögliche technische Cookie ist das von Turnstile für die Dauer der Prüfung, laut Beschluss 2020-091 der CNIL, der französischen Datenschutzbehörde, von der Einwilligung freigestellt.
Für Gesundheitsdaten, die möglicherweise offengelegt werden (Ziel = Krankenhaus, Erwähnung einer Dialyse im Feld „Bemerkungen“), stützen wir uns auf Artikel 9 Abs. 2 lit. h DSGVO in Verbindung mit der beruflichen Schweigepflicht der Krankentransportunternehmen (Artikel L.1110-4 des französischen Gesetzbuchs über die öffentliche Gesundheit). Das ist schwarz auf weiß in der Datenschutzerklärung der Website dokumentiert.
Was es kostet (und wie lange es hält) #
Laufende monatliche Kosten für Ghislain: null für Next.js (gehostet auf der gemeinsam genutzten Infrastruktur, die ich betreibe), null für OpenRouteService und BAN (das kostenlose Kontingent reicht für das Volumen), null für Cloudflare Turnstile (kostenlos), Postmark wird pro Versand abgerechnet (~5 € im Monat für 1.500 Transaktionsmails pro Monat). Domain und SSL-Zertifikat: ~10 € pro Jahr. Jahressumme ohne Entwicklungszeit: weniger als 100 €.
Bei der Wartung: keine Datenbank zu sichern, kein CMS zu aktualisieren, keine Erweiterung nach einer WordPress-CVE zu patchen. Die Website ist statisch, sie übersteht jeden Sinneswandel des Fahrers auf unbestimmte Zeit. An dem Tag, an dem Ghislain eine neue Leistung anbieten will, fügen wir eine Next.js-Seite hinzu und stellen in fünf Minuten neu bereit.
Für wen das funktioniert und für wen nicht #
Diese Architektur ist für Kleinunternehmen gemacht, die vereinfachen wollen, nicht alles auf Software umstellen. Sie funktioniert sehr gut für:
- Selbstständige Fahrer, die Anfragen per Mail oder Telefon annehmen (1 bis 3 Fahrer)
- Handwerker und Dienstleistungsberufe mit einem moderaten Anfragevolumen (10 bis 50 pro Tag)
- Zugelassene Fachleute (Taxis mit CPAM-Zulassung, Physiotherapeuten, Osteopathen), die ein schlankes Formular zur Terminbuchung wollen
- Jede Unternehmenswebsite mit einem Kontakt- oder Angebotsformular, das streng DSGVO-konform sein muss
Sie eignet sich nicht für große Flotten, die eine Disposition in Echtzeit, eine Live-Ortung der Fahrer oder ein Backoffice für mehrere Benutzer brauchen. Dort braucht es ein echtes Backend (zum Beispiel Next.js + Postgres + WebSockets). Aber 80 % der KMU, die mir begegnen, haben diesen Bedarf nicht: Sie haben ihn sich vielleicht beim Anschauen von SaaS-Demos eingebildet, das ist alles.
Lessons learned, ein Jahr danach #
Einige Erkenntnisse im Rückblick, nach mehreren Hundert Fahrten über das Formular und einem Jahr Rückmeldungen der Nutzer.
- Die Mail als „Datenbank“ funktioniert besser als erwartet: Ghislain hat nie einen Verlauf in einer Anwendung gebraucht, die Outlook-Suche (nach Name, Datum, Adresse) deckt 100 % der Fälle ab, in denen eine vergangene Fahrt wiedergefunden werden muss.
- Das HMAC-Token reicht völlig aus: Seit dem Go-live gab es keinen einzigen Fälschungsversuch. Das Geheimnis liegt serverseitig in
.env, das Token ist zeitlich begrenzt (7 Tage), und niemand auf der Straße wird den HMAC erraten. - Die Autovervollständigung der BAN schlägt Google auf dem Land: Viele Adressen im Territoire de Belfort und in den Vogesen sind bei Google Maps schlicht nicht indexiert, stehen aber in der BAN. Im Umland hatten wir sogar bessere Ergebnisse als die landesweiten Taxi-Apps.
- Das Formular ohne Cookie-Banner hat eine starke psychologische Wirkung: Mehrere ältere Patienten kommentierten das positiv mit „Ach, das ist mal was anderes, man muss nichts bestätigen“. Die beseitigte Reibung fällt genauso auf wie die technische Leistung.
- Lokale Suchmaschinenoptimierung verlangt nichts Außergewöhnliches: Dank sorgfältig verfasster Ortsinhalte (Belfort + angefahrene Gemeinden) und des Fehlens eines Banners, das die Darstellung verlangsamt, rankt die Startseite ohne bezahlte Backlinks für „taxi conventionné Belfort“ (zugelassenes Taxi Belfort) und „VSL Territoire de Belfort“ (sitzender Krankentransport).
Zusammengefasst #
Taxi Ghis läuft auf statischem Next.js, mit sechs dokumentierten Auftragsverarbeitern (vier in der EU), ohne Datenbank, ohne Tracking-Cookie und mit einem Outlook-Postfach als maßgeblicher Quelle. Der Betrieb der Website kostet weniger als 100 € im Jahr, erfordert keine Anwendungswartung, und die Datenschutzerklärung passt ohne Beschönigung auf eine Seite. Es ist das genaue Gegenteil der Roadmap, die Ihnen ein Vertriebsmitarbeiter eines Booking-Klons vorschlägt, und wahrscheinlich das, was Sie als Selbstständiger oder Kleinunternehmen brauchen.
Wenn Sie Fahrer sind (Taxi, Mietwagen mit Fahrer, Krankenfahrten für die CPAM), Therapeut oder Handwerker und eine Website zur Terminbuchung suchen, die nicht nach amerikanischem Marktplatz riecht, sprechen wir darüber: Der Stack ist erprobt, die Datenschutzerklärung ist fertig, und die Zeit bis zum Go-live misst sich in Wochen, nicht in Monaten.
Quellen und Referenzen #
Die juristischen, technischen und institutionellen Referenzen, an denen sich die Architektur und die Konformität des Projekts orientiert haben, geprüft mit Stand Mai 2026.
- EUR-Lex, Verordnung (EU) 2016/679, DSGVO, Artikel 9 (besondere Kategorien personenbezogener Daten, darunter Gesundheit): https://eur-lex.europa.eu/eli/reg/2016/679/oj
- Légifrance, Code de la santé publique (Gesetzbuch über die öffentliche Gesundheit), Artikel L.1110-4 (berufliche Schweigepflicht der Krankentransportunternehmen): https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000041721185
- Légifrance, Artikel 82 des Gesetzes Nr. 78-17 Informatique et Libertés (französisches Datenschutzgesetz): https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000037813978
- CNIL, Beschluss Nr. 2020-091 (Cookies und Tracker, Ausnahme für Reichweitenmessung): https://www.cnil.fr/fr/cookies-et-autres-traceurs-la-cnil-publie-des-lignes-directrices-modificatives-et-sa-recommandation
- CNIL, Praxisleitfaden zum Kontaktformular: https://www.cnil.fr/fr/securite-des-donnees-personnelles-les-bonnes-pratiques-formulaire-en-ligne
- Europäische Kommission, Angemessenheitsbeschluss EU-US Data Privacy Framework (Juli 2023): https://commission.europa.eu/document/fa09cbad-dd7d-4684-ace2-be9a59a44d70_en
- Etalab / data.gouv.fr, Base Adresse Nationale (BAN), amtliches Adressverzeichnis: https://adresse.data.gouv.fr/
- Etalab, API zur Autovervollständigung der BAN (Dokumentation): https://adresse.data.gouv.fr/api-doc/adresse
- OpenRouteService, HeiGIT, Universität Heidelberg: https://openrouteservice.org/
- OpenRouteService, Dokumentation zum Pelias-Geocoding: https://openrouteservice.org/dev/#/api-docs/geocode
- Cloudflare Turnstile, offizielle Dokumentation (Modus managed ohne Cookie): https://developers.cloudflare.com/turnstile/
- Postmark, Zertifizierung nach dem EU-US Data Privacy Framework: https://postmarkapp.com/eu-privacy
- Next.js, offizielle Dokumentation (Standalone-Output, Bereitstellung): https://nextjs.org/docs/app/api-reference/config/next-config-js/output
- Brevo / Tipimail, französische Alternative für Transaktions-SMTP: https://www.brevo.com/fr/produits/email-transactionnel/
- Mailjet, französische Alternative: https://www.mailjet.com/fr/
- Caisse Nationale d'Assurance Maladie (nationale Krankenversicherungskasse), Vereinbarung über Krankentransporte: https://www.ameli.fr/transporteur-sanitaire
- RFC 2104, HMAC: Keyed-Hashing for Message Authentication: https://www.rfc-editor.org/rfc/rfc2104




