Przejdź do treści

Turlo: wyszukiwarka wycieczek na stronie, iOS i Androidzie

Turlo to wyszukiwarka zorganizowanych wycieczek bez prowizji: podróżni przeglądają oferty biur podróży i przewodników, a potem piszą wprost do organizatora. Dla klienta z branży turystycznej napisałem backend, aplikację webową, aplikację na Androida i natywne aplikacje 2.0 na iOS i Androida, a do tego import AI, który z linku do wycieczki robi kompletny szkic oferty, gotowy do zatwierdzenia.

Drewniana huśtawka na plaży na wyspie Saona na Dominikanie: zdjęcie kierunku z aplikacji Turlo
Saona
Kręta górska droga wśród zielonych wzgórz w Rumunii: zdjęcie kierunku z aplikacji Turlo
Rumunia
Strona oferty w aplikacji Turlo 2.0: 13-dniowa wycieczka na Sycylię, 13–25 października 2026, 2590 zł za osobę, z przyciskiem zapytania o ofertę
Strona oferty w Turlo 2.0 (iOS/Android) i dwa zdjęcia kierunków z aplikacji. Odtworzona z turlo.holiday na prawdziwych danych (wrzesień 2026); zdjęcie oferty zastąpione zdjęciem kierunku z Turlo. Wszystkie zrzuty na tej stronie pochodzą z angielskiej wersji aplikacji.
Branża
Turystyka: wycieczki zorganizowane od biur podróży i przewodników
Zakres
Backend, aplikacja webowa, aplikacja na Androida, natywne aplikacje 2.0 na iOS i Androida, import AI i panele administracyjne
Platformy i technologie
Web, iOS i Android. Spring Boot, MySQL, Elasticsearch, Angular 22, SwiftUI, Jetpack Compose
Czas
Od września 2025 do września 2026, jeden inżynier
Status
Działa na turlo.holiday, aplikacje są w App Store i Google Play
  • 16języków, w interfejsie i w każdej ofercie
  • 11walut do wyświetlania cen, po dziennych kursach NBP
  • 3platformy na jednym API: web, iOS i Android
  • 52 tys.wierszy testów backendu, więcej niż 44 tys. wierszy testowanego kodu w Javie

Policzone w repozytorium, październik 2026.

Problem

Organizatorzy w Turlo to małe biura podróży, niezależni przewodnicy i polskojęzyczni organizatorzy za granicą. Każdy z nich publikował wycieczki tylko na własnej stronie, zwykle w jednym języku i we własnej walucie.

Klify nad turkusową zatoką na wybrzeżu Hiszpanii
Hiszpania
Kolorowe drewniane domy w porcie w Bergen w Norwegii
Bergen, Norwegia
Piramida na egipskiej pustyni, w oddali jeźdźcy na wielbłądach
Egipt

Organizatorzy

Żeby pojawić się gdzie indziej, trzeba było przepisać każdą wycieczkę ręcznie: program, co jest w cenie, a co nie, każdy termin z ceną i wolnymi miejscami, do tego zdjęcia. Na tłumaczenia nie było szans.

Podróżni

Żeby porównać terminy i ceny, otwierali stronę za stroną kolejnych biur, z cenami w PLN, EUR i USD obok siebie. Duże platformy rezerwacyjne rozwiązują ten problem, ale biorą prowizję.

Operator

Prowadzony ręcznie katalog oznaczałby zatwierdzanie każdej oferty, synchronizowanie 16 wersji językowych po każdej zmianie, zbieranie opinii tylko od prawdziwych uczestników i ciągłe publikowanie w mediach społecznościowych.

Co zbudowałem

Sześć modułów na jednym backendzie. Aplikacja webowa i obie aplikacje ze sklepów korzystają z jednego API w Spring Boot, a organizatorzy i operator pracują w panelach webowych.

Wyszukiwanie zwykłym zdaniem

Podróżny wpisuje zdanie, zamiast ustawiać filtry. gpt-4o-mini wyciąga z niego kierunek, budżet, termin i długość wyjazdu. Potem Elasticsearch dopasowuje tekst, wybacza jedną literówkę i porządkuje wyniki według znaczenia.

Włochy w październiku do 3000 dolarów

  • Kierunek: Włochy
  • Wyjazd: październik
  • Cena maks.: 3000 $
  • Długość: dowolna
Zdanie wpisane przez podróżnego i filtry, które parser z niego wyciąga. Zrzut poniżej pokazuje to samo wyszukiwanie w angielskiej wersji aplikacji: Italy in October under $3000.
Wyniki wyszukiwania w Turlo dla zdania wpisanego po angielsku, Włochy w październiku do 3000 dolarów: trzy wycieczki od Biura Podróży Piast-Tourist, AS TRAVEL i Mozaika Tours, z cenami w złotych i euro oraz przybliżonymi kwotami w dolarach (otwórz zrzut w pełnym rozmiarze)
Wyniki wyszukiwania dla zapytania zwykłym zdaniem (web, komputer). Odtworzone z turlo.holiday na prawdziwych danych (wrzesień 2026); zdjęcia ofert zastąpione zdjęciem kierunku z Turlo i widokiem aplikacji dla oferty bez zdjęcia.
Panel Turlo, import ofert z linków: cztery wklejone adresy wycieczek i ich status: dwa zaimportowane, jeden z błędem, jeden w trakcie importu (otwórz zrzut w pełnym rozmiarze)
Import ofert z linków: AI czyta stronę organizatora (panel organizatora i administratora). Zrzut z aplikacji, dane fikcyjne.

Import z linku

Organizator wkleja linki do wycieczek ze swojej strony, po jednym w wierszu. Przeglądarka działająca w tle otwiera każdą stronę, robi jej zrzut i zbiera tekst oraz zdjęcia. GPT-4o czyta zrzut razem z tekstem i robi z tego ofertę z programem, terminami, cenami i listą świadczeń. Oferta pozostaje nieaktywna, dopóki ktoś jej nie zatwierdzi.

16 języków, 11 walut

gpt-4o-mini tłumaczy każdą ofertę na 15 kolejnych języków, a po edycji tylko te pola, które się zmieniły. Każdy język ma własny indeks wyszukiwania, adresy URL i mapę strony. Ceny zostają w walucie organizatora, z orientacyjnym przeliczeniem po dziennym kursie NBP.

  • pl
  • en
  • fr
  • de
  • es
  • it
  • pt
  • nl
  • sv
  • tr
  • uk
  • el
  • ja
  • id
  • zh-Hant
  • zh-Hans

Posty w mediach społecznościowych z harmonogramu

Operator podłącza jedno konto Meta dla Facebooka i Instagrama. GPT-4o pisze treść posta, a gpt-image-1 robi do niego trzy grafiki. Zaplanowane publikacje wychodzą same albo czekają na akceptację operatora.

Moderacja i opinie

Nowe oferty czekają na zatwierdzenie, a edycja odsyła opublikowaną ofertę do moderacji tylko wtedy, gdy zmieniła się jej treść. Dopóki zmiana kopiuje się do pozostałych 15 języków, oferta jest zablokowana. Link do opinii dostają tylko osoby, które pytały o termin, który już się odbył, a każda opinia przechodzi moderację.

Panel administratora Turlo: opinia czekająca na publikację lub odrzucenie oraz tabela ofert ze statusem, organizatorem, datami, ceną za osobę i liczbą miejsc (otwórz zrzut w pełnym rozmiarze)
Panel administratora: moderacja ofert i opinii. Zrzut z aplikacji, dane fikcyjne. Pierwsza oferta jest zablokowana, dopóki jej zmiana kopiuje się do pozostałych 15 języków.

Zapytania bez prowizji, na stronie i w aplikacjach

Zapytanie zawiera termin, liczbę osób i preferowany sposób kontaktu, a e-mail z nim trafia prosto do organizatora. Turlo nie przyjmuje płatności i nie bierze prowizji. Aplikacje 2.0, w SwiftUI na iOS i w Jetpack Compose na Androidzie, korzystają z tego samego API i tych samych tłumaczeń co strona.

Pasek zapytania na stronie oferty w Turlo 2.0: 2590 zł za osobę, zostały 3 miejsca, bez prowizji, wybór liczby osób i przycisk zapytania o ofertę (otwórz zrzut w pełnym rozmiarze)
Pasek zapytania na stronie oferty w aplikacji 2.0 (iOS/Android). Prawdziwe dane z turlo.holiday, wrzesień 2026.

Prawdziwe oferty z września 2026: polski tytuł nadany przez organizatora i angielski tytuł, który Turlo z niego wygenerowało.

  • Hola Dominikana

    Perła Dominikany - Wyspa Saona

    ENPearl of the Dominican Republic - Saona Island

    7–28 listopada 2026, 4 terminy

    od145 $

  • Mozaika Tours

    ANDALUZJA Semana Santa na południu Hiszpanii

    ENANDALUSIA Semana Santa in southern Spain

    19–24 marca 2027, 6 dni

    1420 €

  • ADBER

    Podróż przez tysiąclecia

    ENJourney Through the Millennia

    5 października i 5 grudnia 2026, 12 dni

    od9500 zł

Jedno API, trzy aplikacje

Jeden backend w Spring Boot 3.5 na Javie 21, zbudowany w DDD i CQRS, obsługuje wszystkie trzy aplikacje. Zapisy trafiają do MySQL, a wyszukiwanie czyta z Elasticsearch, który trzyma każdą ofertę we wszystkich 16 językach.

  • Aplikacja webowaAngular 22, pod adresem turlo.holiday
  • Aplikacja na iOSSwiftUI (2.0)
  • Aplikacja na AndroidaJetpack Compose (2.0)

REST API: v2 dla strony i aplikacji 2.0, zamrożone v1 dla zainstalowanych aplikacji 1.x

Na serwerze, w Docker Compose

  • Backend: Java 21, Spring Boot 3.5, DDD z CQRS
  • MySQL 8: oferty, terminy, organizatorzy, zapytania i opinie
  • Elasticsearch 9: 16 indeksów językowych do wyszukiwania tekstowego i wektorowego
  • Zadania cykliczne: kursy walut, zaproszenia do opinii, posty w mediach społecznościowych

Usługi w chmurze

  • OpenAI: GPT-4o, gpt-4o-mini, model do wektorów tekstu, gpt-image-1
  • AWS S3: zdjęcia ofert i programów wycieczek
  • Mailgun: zapytania, potwierdzenia i powiadomienia o zatwierdzeniu
  • API NBP: dzienne kursy walut
  • Meta Graph API: posty na Facebooku i Instagramie

Dokąd trafiają dane

Kroki z AI wywołują API OpenAI w chmurze i widzą treść ofert oraz frazy wyszukiwania. Zapytania z imionami i adresami e-mail podróżnych nigdy nie przechodzą przez model: Mailgun wysyła je prosto do organizatora.

Co zabezpiecza każde wydanie

Backend ma cztery poziomy testów, a testy porównujące odpowiedzi z zapisanymi wzorcami zamrażają API v1. Test kontraktu porównuje modele w Angularze z klasami DTO w Javie, a 26 scenariuszy Playwright sprawdza stronę od początku do końca.

Harmonogram

Od pierwszej zmiany w repozytorium 13 września 2025 do aplikacji 2.0 we wrześniu 2026.

  1. wrz. – paź. 2025

    Rdzeń backendu

    Oferty, terminy, programy i świadczenia w MySQL, konta organizatorów i zapytania.

  2. gru. 2025 – sty. 2026

    Pierwsze funkcje AI

    Odczyt ofert ze stron organizatorów oraz posty na Facebooku i Instagramie z generowanymi grafikami.

  3. lut. – mar. 2026

    Platforma

    Panele webowe, wyszukiwarka na Elasticsearch, import z linku, 16 języków, waluty, parser zdań i aplikacja na Androida.

  4. kwi. – lip. 2026

    Utrzymanie

    Bieżące utrzymanie, harmonogram postów w mediach społecznościowych i aplikacja na iOS dodana do tego samego repozytorium.

  5. sie. 2026

    Nowa strona publiczna

    Strona dla podróżnych zbudowana wokół wyszukiwarki: strona główna, strony ofert i organizatorów, adresy URL i mapy strony w każdym języku.

  6. wrz. 2026

    Wersja 2.0

    Opinie, zapisane wycieczki, strony kierunków, testy E2E, natywne aplikacje 2.0 i masowy import dla operatora.

Co się zmienia dla organizatorów i podróżnych

  • Dodanie wycieczki to wklejony link i sprawdzenie wyniku, a nie przepisywanie pole po polu.
  • Każda zatwierdzona oferta wychodzi w 16 językach, bez tłumaczenia po stronie organizatora.
  • Podróżni porównują wycieczki różnych organizatorów w jednym miejscu i w jednej walucie.
  • Organizatorzy dostają zapytania bezpośrednio i nie płacą prowizji, a opinie mogą wystawić tylko zaproszeni uczestnicy.
  • Jeden backend i jeden zestaw tłumaczeń obsługują stronę i obie aplikacje ze sklepów.

Sprawdzone przed wydaniem 2.0

  • 0błędów i 0 ostrzeżeń w kodzie przy czystych kompilacjach Debug i Release aplikacji na iOS
  • 2323z 2323 sprawdzeń zaliczonych w autoteście aplikacji na iOS
  • 114testów jednostkowych aplikacji na Androida zaliczonych, 0 niepowodzeń

Czyste, ponowne uruchomienie wszystkich kompilacji i testów wersji 2.0, 22 września 2026.

Pytania, które klienci zadają przed takim projektem

Ile kosztuje wyszukiwarka wycieczek taka jak Turlo?

Cena wynika z zakresu, a zakres Turlo (backend, aplikacja webowa, dwie natywne aplikacje i moduły AI) rósł etapami przez dwanaście miesięcy. Większość projektów zaczyna się skromniej: prototyp na Twoich danych (PoC) kosztuje 10–25 tys. zł netto i trwa 2–4 tygodnie, a system na danych firmy to zwykle 40–120 tys. zł netto i 2–3 miesiące pracy. Więcej o budżetach przeczytasz we wpisie Koszt wdrożenia AI w firmie produkcyjnej — realne budżety.

Ile to trwa?

Pierwsza, dobrze zawężona wersja zajmuje zwykle 2–3 miesiące. Turlo rosło inaczej, etapami przez dwanaście miesięcy: najpierw backend, potem import AI, wyszukiwarka i tłumaczenia, a na końcu natywne aplikacje 2.0.

Czy nasze dane są bezpieczne, jeśli aplikacja korzysta z AI w chmurze?

Mogą być, jeśli na początku ustalisz, co model może zobaczyć. Turlo wysyła do OpenAI treść ofert i frazy wyszukiwania. Zapytania do organizatorów, z imionami i danymi kontaktowymi podróżnych, nigdy nie trafiają do modelu, a zdjęcia Turlo trzyma w AWS S3 we Frankfurcie (eu-central-1). Gdy dane są poufne, uruchamiam lokalne modele na serwerze klienta. W Turlo krok liczenia wektorów tekstu już teraz można przełączyć na taki model w Ollamie.

Czy to się połączy z systemami, których już używamy?

Tak. Turlo łączy się z OpenAI, Mailgunem, AWS S3, Metą i Narodowym Bankiem Polskim, a import czyta strony organizatorów, które nie mają API. Jeśli pracujesz na systemie ERP, np. Comarch ERP, SAP albo IFS, łączę się z nim przez API albo widoki SQL. Zakres połączenia ustalamy na pierwszej rozmowie.

Czy nowa wersja zepsuje aplikacje, które ludzie już zainstalowali?

Nie. Zainstalowane aplikacje 1.x nadal korzystają z zamrożonego API v1, a testy kontraktu blokują wydanie, jeśli zmieni się choć jedna odpowiedź v1. Nowe funkcje trafiają do v2.

Rafał Szewc

Planujesz coś podobnego?

Napisz, co ma robić Twój produkt. Rozmawiasz ze mną, inżynierem, który pisze kod, a w dni robocze odpowiadam na WhatsAppie w ciągu godziny.

WhatsApp +48 517 297 217 (otwiera się w nowej karcie)

WhatsApp