RailJourney – Deine Zugreise einfach planen
Ein entspannter Tag mit Zwischenstopps in charmanten Dörfern und bekannten Städten? Eine Rundreise um einen der grossen Schweizer Seen mit reichlich Zwischenhalten? Oder ein Kurzbesuch bei deinen Grosseltern und zurück nach Hause? Oft planen wir eine Zugreise, die nicht nur von A nach B führt, sondern an mehreren Orten Halt macht. Wo herkömmliche ÖV-Apps bereits an ihre Grenzen stossen, kommt RailJourney ins Spiel.
In der SBB App planst du Verbindungen: Hinfahrt. Weiterfahrt. Rückfahrt. Für die eine Reise speicherst du drei Verbindungen.
Bei RailJourney planst du deine ganze Reise: Einfach gewünschten Start- und Zielpunkt eingeben und beliebig viele Zwischenstopps mit Aufenthalt hinzufügen. Du entscheidest, wie lange du an einem Ort verweilen möchtest. Für die eine Reise speicherst du eben eine Reise.
Probier’s doch aus: https://railjourney.danocreations.ch/
(eli)
Idee
Als regelmässiger Nutzer von Zugreise-Apps wie der SBB-App fiel mir auf, dass diese hervorragend für einfache Fahrten geeignet sind. Doch bei komplexeren Reisen mit mehreren Zwischenstopps und Aufenthaltszeiten stossen sie an ihre Grenzen.
Ein Beispiel: Ich wollte eine Rundreise planen – morgens losfahren, mehrere Orte besuchen und abends zurückkehren. Stattdessen musste ich jede Strecke einzeln planen, Anschlusszeiten mühsam selbst berechnen und die Suche immer wieder von vorne starten. Viele Touristen greifen bei solchen Anforderungen lieber auf das Auto zurück, weil es flexibler erscheint.
Das brachte mich auf die Frage: Warum gibt es keine App, die Zugreisen so einfach und intuitiv macht wie einen Roadtrip mit dem Auto?
Umsetzung
Meine erste Idee war, die Suchfunktion ähnlich wie in der SBB-App zu starten, dem User jedoch mehr Anpassungsmöglichkeiten innerhalb der Verbindungen zu geben. Dabei wollte ich die Schwächen der bestehenden Apps adressieren und begann mit meinem Projekt „flexjourney“.
Pain Points der SBB-App:
- Planung: Fehlende Flexibilität bei der Erstellung der Reise.
- Keine Möglichkeit, Pausen an Zwischenhalten einzubauen (nur „Via“-Punkte ohne Halt).
- Automatische Auswahl des nächstmöglichen Anschlusszugs bei „Via“-Punkten, ohne Wahlmöglichkeit.
- Fahrt: Fehlende Flexibilität während der Reise.
- Verbindungen nicht einfach um x Stunden verschiebbar.
- Keine Möglichkeit, Anschlusszüge zu ändern.
- Keine Option, Zwischenziele oder zusätzliche Endziele hinzuzufügen.
Ich begann mit der Dokumentation der OpenTransportAPI, um die Machbarkeit zu prüfen, und baute einen Prototypen der SBB-Verbindungssuche nach. Mit Hilfe von ChatGPT konnte ich nach Tagen voller Tests und Debugging meinen ersten Entwurf realisieren: flexjourney.danocreations.ch.
Nach einem Gespräch mit Nick Schneeberger erkannte ich jedoch, dass meine ursprüngliche Lösung aufgrund ihrer Komplexität meine Programmierkenntnisse überstieg. Besonders die totale Flexibilität, die ich bieten wollte – etwa individuelle Anpassungen an allen Umsteigeorten – war in JavaScript dynamisch nur schwer umsetzbar. Zusätzlich stellte ich fest, dass auch die User Experience leiden könnte, wenn die Anwendung zu kompliziert wird.
Neuer Ansatz:
Ich fokussierte mich auf eine vereinfachte Lösung, die Zwischenhalte ermöglicht. Statt wie gewohnt mit der Verbindungssuche zu starten, entwarf ich eine visuelle Eingabemaske, mit der der Nutzer die gesamte Reise direkt planen kann.
- Der User gibt alle Stopps und Zeiten als Input ein.
- Die App generiert daraus einen klar strukturierten Output, der keine weiteren Eingaben mehr zulässt.
- Die Logik wurde dadurch einfacher, insbesondere im Frontend.
Technische Umsetzung
Ich teilte die Arbeit in mehrere ChatGPT-Chats auf, um Planung, Umsetzung und Debugging zu trennen. So konnte ich effizienter arbeiten und sicherstellen, dass möglichst wenig durch ChatGPTs Fade Out vergessen ging.
Mögliche Erweiterungen:
- Live-Daten: Reisepläne mit aktuellen Informationen wie Verspätungen oder Gleisänderungen abgleichen.
- Bearbeitbarkeit: Ermöglichen, gespeicherte Reisen später zu editieren.
- User Accounts: Speicherung in einer Datenbank statt lokal, um plattformübergreifenden Zugriff zu ermöglichen.
- Reise nach Ankunftszeit planen: Planung anhand der gewünschten Ankunftszeit statt Abfahrtszeit.
GitHub-Projekt: Railjourney auf GitHub
Learnings
- Technisches Wissen: Erweiterung meiner Kenntnisse in HTML, CSS, JavaScript und PHP.
- Komplexe Funktionen: Entwicklung vernetzter Funktionen (Orchestration Functions und Helper Functions) in JavaScript.
- ChatGPT: Die Aufteilung in mehrere Chats hat die Zusammenarbeit deutlich verbessert.
- APIs sind nicht perfekt: Fehlende oder fehlerhafte Angaben – wie die falsche Berechnung der Gehzeit – erforderten manuelle Anpassungen und nahmen viel Zeit in Anspruch.
- Flexibilität vs. Komplexität: Hohe Flexibilität für den User erfordert umfangreichere Planung und erschwert die Zusammenarbeit mit ChatGPT, da es schwierig ist, die Anforderungen umfassend zu beschreiben. Die User Experience kann unter zu viel Flexibilität sogar leiden.