Turism
Rezervări online pentru o agenție de turism, cu prețul calculat singur
O agenție de turism din Ploiești, cu plecări din patru orașe. Site-ul de prezentare a devenit unul care primește cereri de rezervare, calculează singur totalul, cu tot cu Early Booking, și își construiește din plecări paginile /oferte și /calendar.
- Client
- 4 Seasons Holidays
- Sector
- Turism
- Publicat
Problema
Site-ul arăta excursiile, dar nu putea primi o rezervare: singurele căi erau telefonul și WhatsApp-ul. Totalul pe persoane și prețul Early Booking se calculau de mână, iar la întrebarea „ce plecări avem luna asta?” răspundea cine parcurgea excursiile una câte una.
Soluția
Pe pagina fiecărei excursii, o cerere de rezervare pentru adulți, copii și infanți, care calculează totalul pe loc și aplică prețul Early Booking până la data setată. Cererea ajunge în admin, cu email către agenție și confirmare către client. Plecările alimentează automat /oferte, cu filtre după categorie, destinație, preț și lună, și /calendar, grupat pe luni. Adminul e în română, cu filtre pe fiecare listă.
Arhitectura
Laravel a trecut de la 11 la 13, Livewire de la 3 la 4, iar adminul e pe Filament. Pozele urcate trec printr-un flux automat: o variantă WebP de afișare de cel mult 800px și o miniatură de cel mult 300px, generate la încărcare. Butonul de contact decide pe server, pe ora Bucureștiului, dacă oferă telefonul sau WhatsApp-ul, așa că răspunsul e același pentru orice vizitator și pentru orice pagină din cache.
Rezultatul
Cerere de rezervare online cu total și Early Booking calculate automat; /oferte și /calendar generate din plecări; 66 de teste de business.
În detaliu
Plecările au decis forma lucrării. O excursie nu e o pagină: are plecări, fiecare cu data ei, și un preț care se schimbă când expiră Early Booking. Un editor de pagini poate ține un text despre o excursie, dar nu poate ține excursia. De aceea totul pornește de la plecări: cererea de rezervare, pagina de oferte și calendarul citesc aceleași date, iar agenția le introduce o singură dată.
Cererea de rezervare a fost bucata cu cel mai mare efect. Clientul alege câți adulți, copii și infanți sunt, iar totalul apare pe loc, cu prețul Early Booking aplicat cât timp e valabil. Când trece data setată, prețul redus dispare singur, fără ca cineva să-și amintească să-l scoată. Cererea se salvează în admin, ca rezervare și ca lead, iar emailurile pleacă în același moment: unul către agenție, unul de confirmare către client.
/oferte și /calendar răspund la două întrebări diferite. /oferte e pentru cine caută: toate plecările viitoare, cu filtre după categorie, destinație, preț și lună, plus un link care păstrează filtrele. /calendar e pentru cine vrea să vadă lunile care urmează: plecările în ordine, grupate pe luni. Niciuna nu se scrie de mână. O excursie nouă apare în amândouă în clipa în care are o plecare.
Butonul de contact pare un detaliu, dar e singura bucată de logică de aici care a avut nevoie de o justificare. Să decizi în browser dacă agenția e deschisă se scrie în cinci minute și greșește în două feluri: se bazează pe un ceas pe care îl controlează vizitatorul și nu poate fi pus în cache. Evaluat pe server, pe fusul de la București, răspunsul e același pentru toată lumea: telefon cât timp are cine să răspundă, WhatsApp când nu are.
Două versiuni majore dintr-o singură mișcare e exact genul de lucru de care un om cu experiență se ferește fără o plasă de siguranță. Plasa sunt cele 66 de teste de business, care nu testează framework-ul. Testează ce ar observa agenția dacă s-ar strica: ce arată /oferte și /calendar, ce fac filtrele, cum se salvează o rezervare, ce cale de contact se oferă la o anumită oră. Ele au făcut din upgrade ceva ce se poate verifica, nu ceva ce se speră.
Tehnologii
- Laravel 13
- Livewire 4
- Filament
- Intervention Image
- Docker
Competență
- Rezervare online
- Admin
- Modernizare de platformă
Contact