Сайт бронирования туров на электрических тук-туках по Барселоне и система для работы компании: оплата PayPal, картой или Bizum, синхронизация с Bókun для GetYourGuide и Viator, диспетчерская для водителей и финансовый учёт.
Клиенты
Сервер
Данные и внешние сервисы
Наведите на блок или нажмите на него: что он делает и с чем связан.
Hola Tuk Tuk возит туристов по Барселоне на электрических тук-туках. Компании нужен был сайт, на котором турист сам выбирает тур, дату и время и сразу платит, а владелец в одном месте видит все брони — с сайта, от отелей-партнёров и из GetYourGuide и Viator — и распределяет их по водителям и машинам.
Система состоит из трёх частей: сайт на Next.js на английском и испанском, админка на React (Vite, React Query) и API на Laravel с базой MySQL. На сайте турист выбирает день в календаре и время выезда, вводит данные и платит через PayPal, банковской картой или Bizum — карта и Bizum проходят через платёжный шлюз Redsys. Перед оплатой место резервируется на 15 минут, на экране идёт обратный отсчёт: если время вышло, клиент возвращается к выбору, а не платит за занятый слот. Бронь можно найти по номеру или по email после ввода кода из письма; там же скачиваются счёт и ваучер и завершается прерванная оплата. Отели и турагентства приходят по партнёрской ссылке и оформляют бронь без оплаты, сразу получая ваучер.
Bókun связан с системой в обе стороны: каждые десять минут оттуда подтягиваются свободные места и цены, брони GetYourGuide и Viator приходят по вебхуку, а брони сайта отправляются в Bókun, чтобы площадки видели эти места проданными. В админке владелец задаёт число тук-туков, их вместимость и цены для разных размеров группы, рисует маршрут тура на карте, собирает страницы из блоков, ведёт блог и медиатеку и заполняет SEO-поля с предпросмотром. Сайт ставится на телефон как приложение (PWA).
Тук-туки общие для всех туров, поэтому слот ограничен не только своим расписанием, но и бронями других туров, которые в это время ещё в пути. Каждая бронь хранит время окончания, и места считаются по всему парку: если двухчасовой тур в 10:00 занял все машины, выезд в 11:00 закрыт, а в 12:30 снова открыт. Несколько правил делают этот расчёт надёжным:
Все брони — с сайта, от партнёров и из Bókun — сводятся в одну операционную таблицу, и на ней построена диспетчерская доска дня. На доске видно, кто из водителей работает, а кто отдыхает по восьминедельному графику ротации, какие туры у каждого, когда он вернётся, где простои, обед и переработка и какие брони ещё не распределены. Когда водителю назначают тур, он получает письмо на своём языке, а для назначения формируется PDF-лист без цен. Оплаченные брони и выручка из GetYourGuide и Viator попадают в финансовый журнал с дашбордом, счета собираются в PDF с QR-кодом, а доступ сотрудников к разделам админки разграничен ролями и правами.
Тестовая оплата PayPal включается только явной настройкой, которую сервер не принимает в продакшене, а без ключей PayPal он возвращает ошибку, а не фиктивный заказ — поэтому на боевом сервере нельзя случайно «принять» несуществующий платёж. Service worker кеширует только картинки и манифест — страницы, данные, скрипты и стили всегда идут из сети, так что цены и свободные места не устаревают. Карта маршрута обходится без платных сервисов: плитки OpenStreetMap, линия по дорогам от OSRM через кеширующий прокси на сервере, поиск адреса в редакторе маршрута через Nominatim.
Сайт работает на двух языках и принимает брони: holatuktuk.com. Бэкенд покрыт тестами: пересечение туров по времени, вместимость парка, неоплаченные брони, пересчёт при смене длительности, а также синхронизация с Bókun, диспетчерская и финансовый журнал.
