- Rola
- Pomysł, projekt, kod, wdrożenie, utrzymanie
- Miasto
- Kościan, woj. wielkopolskie
- Od
- kwiecień 2026
- Adres
- busek.pl/koscian
- Status
- Działa i jest utrzymywana
Skąd się wzięła
1 kwietnia 2026Kościańska Komunikacja Publiczna ruszyła 1 kwietnia 2026 roku. Rozkłady istniały od pierwszego dnia — w plikach PDF na stronie urzędu i na słupkach przystankowych. Nie istniało natomiast nic, co odpowiadałoby na pytanie, o której konkretny autobus podjedzie na konkretny przystanek.
Busek zaczął się od tego jednego pytania i rozrósł do pełnej aplikacji miejskiej. Powstał obok urzędu, nie na jego zlecenie, i działa dziś pod adresem busek.pl/koscian.
Wszystkie zrzuty na tej stronie pochodzą z działającej produkcji, nie z projektu graficznego.
Najbliższe odjazdy
ekran startowyPierwsze, co widać po otwarciu: trzy kolejne odjazdy z przystanku, przy którym mieszkaniec stoi, z odliczaniem „za 14 min” i podziałem na kierunki. Nad nimi wyszukiwarka i skróty do linii; nic nie wymaga logowania ani wchodzenia w podstrony.
Wybrany przystanek i zestaw linii zostają zapamiętane w przeglądarce, więc przy kolejnej wizycie nie trzeba klikać niczego. Gdy przewoźnik zmieni nazwę przystanku, stary zapis jest tłumaczony na aktualny, więc zakładka nigdy nie prowadzi w pustkę.
- Pamięć
- Przystanek i linie zapisane lokalnie, bez zakładania konta
- Instalacja
- Baner „dodaj do ekranu” z osobną instrukcją dla iPhone’a
- Odporność
- Automatyczne mapowanie starych identyfikatorów przystanków
Rozkład jazdy
3 linie · 50 przystankówCała trasa linii w kolejności przejazdu, z mapą i z przystankami odwiedzanymi w pętli dwukrotnie, oznaczonymi ① i ②. Po wybraniu przystanku widać trzy najbliższe kursy, a pod przyciskiem pełną tabelę godzin, tę samą co na słupku.
Wybór linii i przystanku ląduje w adresie strony, więc rozkład da się komuś wysłać linkiem, a przycisk „wstecz” działa zgodnie z oczekiwaniem. Gdy linia danego dnia nie kursuje, rozkład nadal jest widoczny, z wyraźną adnotacją zamiast udawanych godzin.
- Linie
- Dwie całoroczne i sezonowa weekendowa na plażę nad Jeziorem Wonieść
- Mapa
- Prawdziwe przebiegi tras po sieci drogowej, nie linie proste
- Tabela
- Klasyczna siatka godzina × minuty z podświetlonym najbliższym kursem
Autobusy na żywo
odświeżanie co 20 sZamiast planowej godziny mieszkaniec dostaje realny czas dojazdu, liczony z pozycji konkretnego pojazdu: „za 39 min”, „na czas”, „spóźniony o 4 minuty”, „autobus na przystanku”. Pod spodem pozycja na mapie i oś całego kursu z kolejnymi przystankami.
Pozycje pochodzą z publicznego feedu GTFS-Realtime serwisu zbiorkom.live i są odświeżane co dwadzieścia sekund. Przy każdej informacji na żywo interfejs podaje źródło i czas ostatniego odczytu.
Najwięcej pracy kosztowały sytuacje, w których danych nie ma. Aplikacja rozróżnia „dziś nie kursuje”, „autobus już minął ten przystanek”, „chwilowy brak pozycji” i „jesteś offline” zamiast jednego ogólnego komunikatu o błędzie. Dane planowe i dane z GPS są w interfejsie rozdzielone, żeby prognoza nigdy nie wyglądała na potwierdzoną pozycję pojazdu.
- Źródło
- Publiczny feed GTFS-Realtime (zbiorkom.live), atrybucja widoczna w aplikacji
- Świeżość
- Pojazd bez odczytu dłużej niż 5 minut znika z mapy
- Przypomnienie
- Powiadomienie 5 minut przed przyjazdem, liczone z realnej pozycji
Wyszukiwarka połączeń
z adresu na adresSkąd–dokąd nie tylko z przystanku na przystanek: podpowiedzi adresów i miejsc pochodzą z OpenStreetMap i są ograniczone do Kościana z okolicą. Wynik zawiera dojście pieszo z policzonym dystansem i czasem, ewentualną przesiadkę i podgląd trasy na mapie.
Algorytm nie wybiera przystanku najbliższego, tylko najlepszy: porównuje kilku kandydatów i karze nadmierny spacer, więc czasem podpowie przystanek dalszy, za to z szybszym połączeniem. Warianty gorsze pod każdym względem są z wyników usuwane.
- Pieszo
- 83 m/min, z poprawką na rzeczywisty przebieg ulic
- Przesiadki
- Do jednej, z oczekiwaniem nie dłuższym niż 60 minut
- Tryb
- „Wyjazd o” albo „przyjazd na”, z wyborem daty i godziny
- Link
- Całe zapytanie zapisane w adresie — wynik da się przesłać
PWA: offline i instalacja
bez sklepu z aplikacjamiBusek instaluje się na ekranie telefonu jak zwykła aplikacja, ale nie przechodzi przez żaden sklep. To PWA — progresywna aplikacja webowa. Przeglądarka czyta manifest z kompletem ikon, własnym kolorem motywu i trybem pełnoekranowym, a service worker zapisuje w pamięci urządzenia to, co ma działać bez sieci.
Rozkład i wyszukiwarka są zapisywane od razu przy instalacji, w trzech językach naraz. Dane rozkładowe są wkompilowane w aplikację, więc połączenie z adresu na adres liczy się lokalnie na telefonie — bez ani jednego zapytania do serwera.
Po utracie sieci pojawia się ekran Buska z drogą powrotu, a nie komunikat przeglądarki. Nie wszystko jest jednak zapisywane: mapa offline nie zadziała, bo kafelki OpenStreetMap zostały wykluczone z pamięci podręcznej ze względu na objętość.
- Manifest
- Tryb pełnoekranowy, własny kolor motywu, komplet ikon łącznie z maskowalną
- Zapisane
- Rozkład i wyszukiwarka w trzech językach; zasoby statyczne trzymane 30 dni
- Nigdy z pamięci
- Pozycje pojazdów — każde zapytanie idzie do serwera
- Poza zapisem
- Kafelki mapy i pliki reklam
- Instrukcja
- Kroki instalacji per przeglądarka i system opisane w samej aplikacji, w sekcji Info
§Pliki reklam są celowo wyłączone z pamięci podręcznej, żeby blokery reklam nie psuły instalacji aplikacji.
Języki i dostępność
592 klucze × 3Polski, angielski i ukraiński: pełny interfejs w każdej wersji, łącznie z polityką prywatności, formularzami i komunikatami błędów. Nazwy przystanków zostają po polsku niezależnie od języka: mają brzmieć tak, żeby dało się o nie zapytać kierowcy.
Warstwa dostępności obejmuje link „przejdź do treści”, widoczny focus na każdym elemencie interaktywnym, komunikaty ogłaszane czytnikom ekranu przez aria-live, cele dotykowe w dolnej nawigacji nie mniejsze niż 44 piksele, honorowanie prefers-reduced-motion oraz motyw ustawiany przed pierwszym renderem, bez mignięcia bieli.
- Tłumaczenia
- Komplet 1 : 1, po 592 klucze w każdym z trzech języków
- Adresy
- Wszystkie z prefiksem języka, ścieżki po polsku
- Motyw
- Jasny i ciemny, z zapamiętaniem wyboru i domyślnym ustawieniem systemu
Pozostałe funkcje
6 pozycji
Jak jest zbudowana
Next.js 16 · React 19Next.js 16 na App Routerze, React 19, TypeScript, Tailwind CSS 4, Leaflet do map, next-intl do trzech języków, Serwist do trybu offline. Całość działa w kontenerze Dockera za reverse proxy Caddy na własnym VPS-ie.
- Rozkłady
- Dane GTFS przewoźnika
- Geometria tras
- OSRM, przebiegi po rzeczywistej sieci drogowej
- Adresy
- Photon (OpenStreetMap), zawężony do Kościana z okolicą
- Pozycje pojazdów
- Publiczny feed GTFS-Realtime zbiorkom.live
- Monitoring
- Publiczny endpoint zdrowia: awarię źródła danych wykrywa automat, nie zgłoszenie mieszkańca
§Aplikacja nie odpytuje bezpośrednio systemów przewoźnika; warstwa live opiera się wyłącznie na publicznie udostępnianym feedzie danych otwartych.
Wdrożenie w kolejnym mieście
Kościan jest pierwszym wdrożeniem. Kod od początku traktuje miasto jako warstwę wymienną: linie, kolory, przystanki, rozkłady i zakres funkcji opisuje konfiguracja, a nie osobna aplikacja pisana od zera.
Dla urzędu
Zakres usługi: instancja aplikacji pod adresem miasta, widżet rozkładu do osadzenia w ramce na stronie urzędu, miesięczny raport z działania. Aplikacja działa w przeglądarce, więc po stronie urzędu nie ma instalacji, wdrożenia ani utrzymania infrastruktury.
Czego potrzeba na start
Aktualnych rozkładów i listy przystanków. Geometria tras, dane przystanków i konfiguracja miasta powstają po mojej stronie. Mogę pokazać działające wdrożenie w Kościanie i oszacować zakres pracy dla Państwa gminy.