FareWeave bündelt Bahn, Split-Tickets, Deutschlandticket, Flix, Flüge, Transfers und Hotels in einer selbst gehosteten Reiseplanung ohne KI.
Eigentlich wollte ich nur wieder Split-Tickets auf vernünftige Weise suchen können. BetterBahn war dafür lange Zeit sehr praktisch. Man gab die Verbindung ein, schaute, ob zwei Fahrkarten günstiger waren als das durchgehende Ticket, und fertig. Bei den letzten Anfragen hat das aber kürzlich nur noch eher schlecht als recht funktioniert. Eine Lösung musste her. Daraus entstand später FareWeave, was man sogar selbst hosten kann.
FareWeave sollte ursprünglich nur BetterBahn ersetzen
Also habe ich angefangen, mir diese Funktion selbst zu programmieren. FareWeave sollte den regulären Preis der Deutschen Bahn abfragen und daneben prüfen, ob sich dieselbe Fahrt mit getrennten Tickets günstiger zusammensetzen lässt. Mehr war zuerst gar nicht geplant.
Wer eine längere Reise selbst zusammenstellt, kennt das Problem. Zunächst öffnet man die Website der DB, dann von Flix und danach ein oder mehrere Flugportale. Für die Fahrt zum Flughafen kommt die nächste Suche hinzu. Am Zielort benötigt man unter Umständen noch einen Transfer und bei mehrtägigem Aufenthalt irgendwann ein Hotel. Am Ende hat man zahlreiche Tabs geöffnet und muss sich selbst ausrechnen, ob die gefundenen Teile überhaupt zusammenpassen. Und natürlich auch, was das Ganze am Ende kosten wird.
Genau davon wollte ich weg. FareWeave soll möglichst viele dieser Suchen an einer Stelle erledigen. Bei einer normalen Fahrt innerhalb Deutschlands gehören die Deutsche Bahn, das Deutschlandticket, Split-Tickets, FlixTrain und FlixBus dazu. Bei längeren Reisen können Flug, Zubringer zum Flughafen, Transfer am Zielort und Unterkunft hinzukommen.
Dafür brauche ich kein Reisebüro, muss nicht zwanzig Webseiten einzeln durchsuchen und möchte auch keine KI rätseln lassen, ob eine Verbindung wahrscheinlich passen könnte. FareWeave arbeitet mit den gefundenen Daten und festen Regeln. Die Uhrzeiten müssen stimmen, die Anschlüsse müssen erreichbar sein. Natürlich muss auch der angezeigte Preis zu dem Ticket gehören, für das er ausgegeben wird.
Die Version 0.0.1 steht inzwischen öffentlich auf GitHub.
BetterBahn-Code ist darin nicht enthalten. FareWeave ist weder ein Fork noch eine überarbeitete Ausgabe davon. BetterBahn war lediglich der Grund, warum ich die Split-Ticket-Suche irgendwann selbst neu programmiert habe. Trotzdem bedanken wir uns für die, wenn auch ungewollte Motivation zu diesem Projekt.
Split-Tickets direkt beim DB-Preis
Wenn die Deutsche Bahn für eine Fahrt 52 Euro verlangt, sich dieselbe Verbindung aber mit zwei Fahrkarten für zusammen 31,80 Euro fahren lässt, möchte ich beide Preise sehen. Das durchgehende DB-Ticket kostet weiterhin 52 Euro. Die 31,80 Euro gehören zum Split-Ticket.
Bei mehreren Preisquellen kann die Suche schnell durcheinandergeraten. So kann es beispielsweise sein, dass ein Verbundtarif nur für einen Teil der Strecke gilt, der DB-Preis für die komplette Verbindung und der Split wiederum aus zwei eigenen Fahrkarten besteht. FareWeave hält diese Beträge auseinander. Kann ein Preis nicht eindeutig zugeordnet werden, bleibt er offen.
Die Split-Suche läuft zusammen mit der normalen Bahnabfrage. Ich muss eine bereits gefundene Verbindung also nicht noch einmal eingeben und anschließend beide Ergebnisse selbst vergleichen.
Mit dem Deutschlandticket kam die nächste Besonderheit hinzu. So kann ein Verkehrsverbund für eine Nahverkehrsstrecke beispielsweise 8,60 Euro melden. Wer ein D-Ticket besitzt, zahlt diese 8,60 Euro trotzdem nicht noch einmal.
Wenn die Verbindung vollständig abgedeckt ist, liegen die zusätzlichen Ticketkosten bei null Euro. Kostenpflichtige Alternativen bleiben in der Suche erhalten. Ein ICE kann mehr kosten und trotzdem interessant sein, wenn der ICE eine Stunde spart oder einen Flug erreicht, den man mit dem Nahverkehr verpassen würde.
Für reine D-Ticket-Fahrten gibt es einen eigenen Modus. Dann fallen ICE-, IC- und Flix-Streckenabschnitte sowie andere weg, für die eine zusätzliche Fahrkarte notwendig wäre. Aus der kleinen Split-Ticket-Suche wurde damit relativ schnell mehr.
Möglichst viel Reiseplanung auf Knopfdruck
Für die Strecke Berlin–Dortmund reichen Bahn und Flixbus meistens aus. Doch sobald ein Flug dazukommt, wird es komplizierter.
Ein Flug für 39 Euro nützt wenig, wenn der passende Zug erst nach dem Abflug am Flughafen ankommt. Die zwei Stunden Flughafenpuffer sollten auch zwei Stunden bleiben und nicht plötzlich auf 25 Minuten schrumpfen. Wer so kurzfristig ankommt, bekommt Probleme beim Einchecken.
Solche Fehler hat man während der Entwicklung tatsächlich auf dem Tisch. Bei einer Suche nach BER wurden zeitweise Frankfurt oder Köln/Bonn als brauchbare Flughäfen akzeptiert. An anderer Stelle tauchte trotz frühester Abfahrt um 6 Uhr eine Verbindung nach Mitternacht auf.
Deshalb prüft FareWeave nach dem Abruf noch einmal, ob Zeiten, Orte und die Reihenfolge der einzelnen Reiseabschnitte zur Anfrage passen.
Zu einem Flug kann direkt ein passender Zubringer gesucht werden. Nach der Landung wird auf Wunsch auch der Transfer zum Zielort organisiert. Bleibt man dort mehrere Tage, kann FareWeave auch eine Unterkunft suchen.
Das ist inzwischen der Teil, den ich selbst am praktischsten finde. Anstatt Bahn, Flixbus, Flug, Flughafenverbindung, Transfer und Hotel nacheinander auf verschiedenen Seiten zusammenzusuchen, fasst FareWeave diese Optionen in derselben Planung zusammen. Danach muss man nur noch die für die Reise tatsächlich interessanten Angebote öffnen.
Die Bahn läuft über ein eigenes Backend
Die DB-Abfrage läuft unabhängig von trvl. FareWeave nutzt dafür unter anderem den db-vendo-client und eine eigene Verarbeitung der Daten, die man von dort erhält.
Für bestimmte HTTP-Abfragen wird außerdem curl_cffi verwendet. Das ist hilfreich bei Seiten und Diensten, bei denen gewöhnliche Clients schnell an Schutzmechanismen oder ähnlichen Sperren hängen bleiben.
Auch der Routing Service Transitous ist in das Projekt eingebunden und liefert weitere Verbindungen im öffentlichen Verkehr.
FlixTrain und FlixBus berücksichtigt FareWeave ebenfalls. Dadurch kann eine DB-Verbindung beispielsweise gegen ein günstigeres Flix-Angebot ausgetauscht werden. Gemischte Strecken sind ebenfalls möglich. Ein Teil der Strecke kann vom Deutschlandticket abgedeckt sein, danach folgt eine bezahlte Verbindung und anschließend wieder Nahverkehr.
Bei solchen Kombinationen interessiert mich nicht irgendein Preis aus einer Providerantwort. Ich möchte wissen, was ich für die konkrete Reise zusätzlich bezahlen muss.
Externe Anbieter ändern ihre Schnittstellen und Datenformate. Manchmal fügen sie auch einen neuen Schutzmechanismus hinzu. FareWeave versucht deshalb, einen Fehler auf den jeweiligen Provider zu begrenzen. Wenn eine Quelle ausfällt, soll nicht gleich die komplette Suche unbrauchbar werden.
Flüge kommen teilweise über trvl
Jede Fluggesellschaft einzeln anzubinden, hätte FareWeave zu einem deutlich größeren Projekt gemacht. Für diesen Teil nutzen wir den Assistenten trvl. trvl bringt bereits verschiedene Reiseprovider mit und wurde ursprünglich für KI-Assistenten und MCP-Clients entwickelt. MCP-Clients sind Programme, die das Model Context Protocol (MCP) unterstützen. Das ist ein offener Standard, über den KI-Assistenten mit externen Datenquellen, Tools und Anwendungen kommunizieren können. FareWeave verwendet einen Teil davon für Flug- und Unterkunftsdaten. Die Bahnlogik, Split-Tickets, die Auswertung des Deutschlandtickets und das Zusammenstellen der Reisekette stammen hingegen von FareWeave selbst.
Bei Flügen fragt die Software zunächst Skiplagged, Ryanair, Vueling und easyJet ab. Reichen die Ergebnisse nicht aus, folgen Transavia, Norwegian, Air France/KLM und Wizz Air. Jeder Provider bekommt sein eigenes Zeitlimit. Bleibt einer hängen, wartet die restliche Suche nicht endlos darauf.
Google Flights dient als Gegencheck. Dafür baut FareWeave einen passenden Suchlink mit Strecke und Reisedatum. Eine automatische Google-Flights-Abfrage gibt es in Version 0.0.1 noch nicht.
Beim Transfer kann je nach Strecke wieder der öffentliche Verkehr, die Deutsche Bahn oder Flixbus auftauchen. Findet FareWeave keine brauchbare automatische Verbindung, wird ein passender Google-Maps-Link angezeigt. Bevor dort jedoch irgendeine fragwürdige Verbindung ausgegeben wird, prüft man den Abschnitt lieber selbst.
Beim Booking kann der WAF dazwischenfunken
Die Unterkunftssuche haben wir erst später hinzugefügt. Ein Teil davon läuft ebenfalls über Trvl, wo je nach zurückgelieferten Daten unter anderem Angebote oder Quellen von Booking.com, Expedia, Hotels.com, Agoda, Trip.com, Kayak oder Trivago auftauchen können. FareWeave klappert diese Seiten nicht alle einzeln selbst ab.
Booking.com ist in der zugrunde liegenden Suche technisch vorgesehen. Der WAF- und Bot-Schutz kann automatisierte Abfragen jedoch blockieren. Die Abkürzung WAF steht für Web Application Firewall. Booking.com würde ich deshalb derzeit nicht als ständig verfügbare Quelle einplanen.
Zusätzlich ist das Online-Reisportal stay22 eingebunden. Darüber werden aktuell Expedia und Hotels.com abgefragt.
Auch bei Hotels mussten wir einige Dinge abfangen. Ein Hostel soll beispielsweise nicht in der normalen Hotelsuche landen, nur weil irgendwo Sterne im Datensatz stehen. Apartments und Resorts bleiben ebenfalls eigene Kategorien. Für Hotels sind standardmäßig mindestens drei Sterne eingestellt.
Beim Preis gilt dasselbe wie bei Fahrkarten. Wenn aus den gelieferten Daten nicht klar hervorgeht, ob 179 Euro für eine Nacht oder den kompletten Aufenthalt gelten, kann daraus kein angeblich sicherer Gesamtpreis ermittelt werden. Google Hotels kann man zusätzlich für einen manuellen Vergleich öffnen.
FareWeave sucht, gebucht wird beim Anbieter
FareWeave soll keine Tickets kaufen oder Hotelzimmer reservieren. Auch die Verarbeitung von Zahlungsdaten gehört nicht zu den Aufgaben unseres Online-Projekts. Wenn ein Provider einen brauchbaren Angebotslink liefert, kann man diesen direkt öffnen. An anderen Stellen gibt es passende Suchlinks zur Deutschen Bahn, zu Google Flights, zu Google Hotels oder zu Google Maps.
Den Preis muss man vor der Buchung sowieso noch einmal manuell kontrollieren. Gerade bei Flügen und Hotels können sich die Beträge schnell ändern, bei der Verfügbarkeit sieht es nicht anders aus.
FareWeave übernimmt diese Arbeit. Das Tool sucht Verbindungen, hält die Preise auseinander, führt verschiedene Abschnitte zusammen und sortiert Ergebnisse aus, die für die gewählte Reise zeitlich nicht funktionieren.
Damit spart man sich einen großen Teil der üblichen Reiseplanung über zig Webseiten. Ein Reisebüro braucht man dafür nicht. Eine halluzinierende KI ist zwischen Fahrplan und Ticketpreis ebenfalls komplett fehl am Platz.
Die Reiseentscheidung läuft ohne KI
Bei der eigentlichen Auswahl und Prüfung der Verbindungen verwendet FareWeave kein Sprachmodell. Stattdessen werden Abfahrtszeit, Flughafenpuffer, Ticketart, Deutschlandticket und Preise mit festen Regeln geprüft. Eine KI entscheidet dabei nicht, welche Verbindung angeblich sinnvoll ist.
Zugegeben, beim Programmieren haben wir KI-Werkzeuge benutzt. Bei der Menge an Providerantworten, Logs, Tests und Code wäre es unsinnig gewesen, darauf komplett zu verzichten. Der Programmieragent Codex hat uns an einigen Stellen Arbeit abgenommen, sodass ein Teil der Entwicklung auch unter das inzwischen viel zitierte aber zu Unrecht verachtete Vibe Coding fällt. Das entbindet einen jedoch nicht davon, den eigenen Code zu verstehen.
Wenn BER plötzlich Köln/Bonn ist, ein Splitpreis beim normalen DB-Ticket landet oder eine Verbindung eine gesetzte Abfahrtszeit umgeht, muss ich wissen, warum das passiert. Ein Sprachmodell kann zwar beim Suchen und beim Schreiben eines Tests helfen. Den Quellcode muss man aber trotzdem eigenhändig prüfen, um die Ursache herauszufinden.
Viele Tests im Repository stammen direkt aus solchen Fällen. Ein Fehler wird zuerst reproduziert. Danach bekommt er einen Regressionstest, der mit dem fehlerhaften Stand scheitern muss. Nach der Korrektur wird derselbe Test erneut ausgeführt, anschließend der komplette Testsatz. Änderungen an externen Providern prüfe ich zusätzlich mit einem echten Abruf. Vibe Coding war beim Bau ein Werkzeug von mehreren. Es ist jedoch nicht die Logik, mit der FareWeave läuft.

FareWeave selbst hosten
Version 0.0.1 ist fürs Selfhosting gedacht. Docker und Docker Compose müssen bereits installiert sein. Danach reicht für den ersten Start:
git clone https://github.com/lesecuritae/FareWeave.git
cd FareWeave
./install.sh
Der Installer legt beim ersten Start die .env an und erzeugt einen zufälligen internen Token für das DB-Backend. Danach werden die Container gebaut und die vorhandenen Prüfungen ausgeführt.
Standardmäßig lauscht die Oberfläche nur auf 127.0.0.1:8791. Wer FareWeave im eigenen Netzwerk oder hinter einem Reverse Proxy nutzen möchte, kann die Adresse und den Port entsprechend ändern. Für Stay22 lässt sich optional ein eigener API-Key hinterlegen.
Angefangen hat alles mit Split-Tickets
Ursprünglich entstand FareWeave für Tarnkappe.info und meine eigenen Reisen. Anfangs war nur eine vernünftige Split-Ticket-Suche geplant. Inzwischen übernimmt das Projekt einen großen Teil der Reiseplanung, für die man zuvor mehrere Webseiten parallel öffnen musste.
Die erste öffentliche Version (0.0.1) ist auf GitHub verfügbar. Da die Zahl der externen Datenquellen sehr hoch ist, lassen sich Änderungen der Schnittstellen, Datenformate oder Schutzmechanismen einzelner Anbieter kaum vermeiden. Fehlerhafte Ergebnisse kann man über GitHub melden.
Wenn FareWeave bei einer Reise einen günstigeren Preis findet oder einem einfach einen Teil der bisherigen Sucherei erspart, hat es seinen Zweck bereits erfüllt.
Und wenn danach noch etwas vom Budget übrig sein sollte, kann man die Differenz gerne an Tarnkappe.info spenden, damit wir damit weitere Updates realisieren können. Gerne auch in Form der anonymen Kryptowährung Monero.
(*) Alle mit einem Stern gekennzeichneten Links sind Affiliate-Links. Wenn Du über diese Links Produkte oder Abonnements kaufst, erhält Tarnkappe.info eine kleine Provision. Dir entstehen keine zusätzlichen Kosten. Wenn Du die Redaktion anderweitig finanziell unterstützen möchtest, schau doch mal auf unserer Spendenseite oder in unserem Online-Shop vorbei.
























