Zeitraum
–
Auftraggeber
Fahrservice Weiß

Kennzahlen

Anfragewege, eine gemeinsame Verarbeitung
3
Wochen, bis Freitext-Notizen spätestens gelöscht sind
4
automatisierte Tests, grün in der Pipeline vom 15.10.2026
1.592

Kontext

Fahrservice Weiß fährt Menschen zum Arzt, zur Klinik, zum Flughafen und im Alltag. Wer dort anfragt, braucht oft eine Fahrt zur Behandlung — und erzählt dabei nicht selten mehr über seine Gesundheit, als für die Fahrt nötig wäre. Die Website habe ich von Mai bis Oktober 2026 mit Laravel gebaut, mit KI-Unterstützung: 168 der 208 Commits tragen Claude als Co-Autor.

Problem

Ein Kontaktformular für einen Fahrdienst ist kein gewöhnliches Kontaktformular. Sobald jemand „Dialyse dreimal pro Woche“ in ein Freitextfeld schreibt, verarbeitet der Betrieb Gesundheitsdaten nach Art. 9 DSGVO — mit allen Pflichten, die daran hängen. Gleichzeitig darf keine Anfrage verloren gehen: Eine verpasste Krankenfahrt ist kein verlorener Lead, sondern ein verpasster Termin.

Lösung

Drei Wege, eine Verarbeitung

Es gibt ein ausführliches Anfrageformular, einen Rückrufwunsch und ein Express-Formular für Flughafentransfers. Alle drei laufen in dieselbe Verarbeitung: Doppelte Anfragen innerhalb von zehn Minuten werden erkannt, Löschfristen und Protokoll greifen ohne Sonderlogik. Alle Formulare funktionieren auch ohne JavaScript.

Datensparsamkeit statt nachträglicher Absicherung

Das Express-Formular hat bewusst kein Notizfeld: Es fragt nur Abholort, Zeit, Personen, Gepäck und Flughafen ab. Wer einen Transfer anfragt, wird dort gar nicht erst nach Gesundheitsdingen gefragt. Im ausführlichen Formular bittet die Seite bei Kranken- und Seniorenfahrten um eine freiwillige Einwilligung. Die Freitext-Notizen der Anfragenden liegen verschlüsselt in der Datenbank.

Löschen nach Regeln, nicht nach Erinnerung

Offene Anfragen verschwinden nach sechs Monaten, erledigte und abgelehnte drei Monate nach der letzten Änderung, bei einem Widerruf sofort. Die Freitext-Notizen werden schon nach spätestens vier Wochen geleert, früher, sobald die Anfrage abgeschlossen ist. Der Löschlauf startet täglich und zusätzlich beim Anmelden in der Verwaltung, falls der zeitgesteuerte Lauf einmal ausfällt. Jeder Blick in eine Anfrage wird protokolliert, und das Protokoll überlebt die Löschung.

Die Datenbank ist die Wahrheit

Die Benachrichtigung an den Betrieb geht synchron hinaus, nicht über eine Warteschlange. Schlägt der Versand fehl, bleibt die Anfrage trotzdem gespeichert und der Fehler wird protokolliert — der Betrieb sieht sie in der Verwaltung, auch wenn die Mail nie ankam.

Stack

Komponente Technologie
Framework Laravel 13, PHP 8.4
Oberfläche Blade, Alpine.js, Tailwind CSS 4
Karte Leaflet mit eigenen Kartenkacheln für das Servicegebiet
Schutz Honeypot, Rate-Limit, Cloudflare Turnstile
Betrieb tägliche Datenbanksicherung mit Überwachung, Heartbeat, Alarm-Mail
Tests Pest (Unit, Feature, Browser), Vitest, PHPStan Level 5

Ergebnis

  • Drei Anfragewege mit einer gemeinsamen Verarbeitung und Dublettenschutz
  • Freitext mit möglichem Gesundheitsbezug verschlüsselt gespeichert und nach spätestens vier Wochen gelöscht; die Einwilligung ist freiwillig
  • Gestaffelte Löschfristen mit Ersatzlauf beim Anmelden
  • 1.592 automatisierte Tests, die in der Pipeline vom 15.10.2026 grün waren; die Pipeline liefert erst nach allen Prüfungen aus

Was es nicht leistet: Die Seite plant keine Fahrten und rechnet keine Preise aus. Sie nimmt Anfragen an, schützt die Daten und übergibt sie an den Betrieb.

Was ich daraus gelernt habe

Der wirksamste Datenschutz war ein Feld, das es nicht gibt. Jede Verschlüsselung und jede Löschfrist ist Arbeit, die anfällt, weil Daten schon da sind — das Express-Formular ohne Notizfeld hat das Problem für Transferanfragen gar nicht erst entstehen lassen.

Mit KI-Unterstützung erstellt und vom Autor geprüft.

Firmenprojekt? Projekte für Unternehmen laufen über twentyonepixels — dort gibt es Leistungen, Konditionen und Referenzen. twentyonepixels.de