Timetable application
A public-facing timetable application for a regional transport operator covering buses and trains across the entire MaĆopolska voivodeship, embedded as a widget inside client's existing website.

The challenge
Koleje MaĆopolski operates dozens of bus and train routes across the entire MaĆopolska region, but their schedule data existed only in raw GTFS format, a technical standard passengers cannot directly interact with. The solution needed to be embedded inside their existing website without touching the host page, and had to support multi-modal connection search across hundreds of stops spanning two transport types.
The solution
A Flutter web widget with a bootstrap configuration system was built, allowing the client to embed the entire application by adding a single script tag and an empty container to their existing page. On the backend, a NestJS service handles nightly GTFS ingestion, checking for dataset changes via hash comparison and refreshing the database when updates are detected. The core of the connection search is a custom implementation of the RAPTOR algorithm, built from scratch based on the original Microsoft Research paper, extended to support multiple itineraries across mixed bus and train routes. A GraphQL API serves the frontend, background workers handle PDF generation for printable schedules, and an admin panel allows the client to configure route colors, highlighted stops, and upload GTFS data manually when needed.
Technologies used
Key features
- âąMulti-modal connection search
- âą Printable PDF schedules
- âąReal-time ticket pricing
- âąReal-time ticket pricing
- âąEmbeddable widgets
Outcomes & results
Covers the entire MaĆopolska voivodeship with 60+ bus routes and 10+ train routes
Multi-modal routing across hundreds of stops with live pricing from the ticketing system
Fully embedded into the client's existing website with no modifications to the host page
Project gallery




Ready to elevate your digital presence?
Ready to start your project? We'd love to hear about your vision and help bring it to life.
Start your project