Skip to content

About

PA-сервис бронирования междугородних поездок. Многошаговый виджет, интерактивная 3D-схема выбора мест в салоне и динамическое расписание

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🎫 K-ticket — Сервис бронирования междугородних поездок

Веб-приложение для онлайн-бронирования билетов на междугородние трансферы. SPA-одностраничник с интерактивным многошаговым виджетом покупки, 3D-схемой выбора мест в салоне, динамической подгрузкой расписания из БД и полностью адаптивной вёрсткой.

🌐 Сайт: k-ticket-project.vercel.app


📸 Превью

Десктоп Виджет бронирования
desktop widget

📋 Структура и функционал

1. Главный экран (Hero)

Вводный блок с презентацией направления (Ростов-на-Дону — Волгодонск), автомобиля (Haval M6) и стартовой стоимости поездки. Содержит прямую CTA-кнопку «Купить билет», запускающую процесс бронирования.

2. Преимущества сервиса

Блок карточек с ключевыми удобствами для пассажиров:

  • Страховка — защита каждого пассажира на протяжении всего маршрута.
  • Вода — бесплатная питьевая вода в салоне.
  • Чистота — обязательная уборка салона перед каждым рейсом.
  • WiFi — высокоскоростной интернет на всём пути.
  • Мультимедиа — фильмы и музыка в дороге.
  • Комфорт — индивидуальный подход к каждому клиенту.

3. Выбор маршрута (Шаг 1 виджета)

Виджет с выбором направления. На экране отображаются два города: Ростов-на-Дону и Волгодонск. Между ними расположена кнопка реверса с анимированными стрелками: при клике города меняются местами с плавной анимацией перестановки.

4. Выбор даты и времени (Шаг 2 виджета)

После клика на «Купить билет» виджет плавно трансформируется:

  • Отображается календарь с доступными днями недели и датами.
  • Доступные даты не захардкожены, а динамически подгружаются из базы данных через Prisma ORM на основе графика, установленного водителем.
  • После выбора даты открывается список доступных временных слотов.

5. Интерактивная 3D-схема салона (Шаг 3 виджета)

Основная фича сервиса — визуал салона автомобиля (вид сверху):

  • На схеме выделены 3 доступных пассажирских места (1 переднее, 2 задних).
  • Реализован кастомный 3D-эффект: при наведении курсора выбранное кресло физически «приподнимается» над схемой салона за счёт CSS-трансформаций. При уходе курсора кресло плавно возвращается в исходное положение.
  • Выбранное место фиксируется в состоянии формы.

6. Данные пассажира (Шаг 4 виджета)

Форма сбора информации с валидацией полей:

  • ФИО — проверка на корректность ввода.
  • Дата рождения — выбор даты для оформления страхового полиса.
  • Email — валидация формата почты для отправки электронного билета.

7. Подтверждение и оплата (Шаг 5 виджета)

Итоговый экран воронки со сводкой всех выбранных параметров (маршрут, дата, время, номер места, данные пассажира).

  • На любом из предыдущих шагов доступна кнопка «Назад», позволяющая изменить данные без потери контекста.
  • Кнопка «Оплатить» эмулирует переход на платёжный шлюз банка (СБП / банковская карта).

8. Галерея автомобиля

Слайдер с фотографиями экстерьера и интерьера авто Haval M6, позволяющий оценить реальное состояние машины перед поездкой.

9. Условия поездки

Информационный блок с правилами провоза багажа, отмены бронирования и правилами поведения в салоне.

10. Футер

Контактные данные, режим работы, ссылки на мессенджеры и социальные сети.


🛠 Стек

Категория Технологии
Frontend React, JavaScript (ES6+)
Сборщик Vite
Стилизация CSS3, SCSS (3D-transforms, Transitions), резиновая вёрстка
Backend / БД Prisma ORM, NodeJs
Управление состоянием React State (Многошаговая логика виджета)
Деплой Vercel

⚙️ Технические особенности

Резиновая вёрстка. Сайт и интерфейс виджета адаптируются под любые разрешения экранов от 320px до 4K без переломов сетки и появления горизонтального скролла.

Многошаговое состояние (Stepper UI). Вся система бронирования работает в рамках одного SPA-компонента. Реализована сохраняемость данных (State Persistence) при навигации вперед/назад между шагами без перезагрузки страницы.

Интерактивные 3D-эффекты. Схема автомобиля реализована на чистом CSS с использованием transform: perspective() translateZ() для создания объёма при взаимодействии с элементами салона без использования тяжёлых 3D-библиотек (Three.js).

Интеграция с Prisma ORM. Серверная часть связывает виджет с базой данных, гарантируя, что пассажир видит только актуальные даты и свободен ли конкретный рейс.


👥 Команда

Роль Имя Работа
Frontend Рустам Вёрстка, разработка интерактивного виджета, работа с 3D-эфектами, разработка логик состояния, работа с Prisma ORM, разработа с API, создание Web-хуков
Роль Имя Работа
UI/UX дизайн Альбина Проектирование UI/UX виджета бронирования, создание дизайн-макета и прототипа, анимациий, стилизации, типографики, рвабота с цветами

🚀 Запуск проекта

1. Клонировать репозиторий:

git clone https://github.com/Rusta-16/K-ticket-project.git

2. Перейти в директорию проекта:

cd K-ticket-project

3. Установить зависимости:

npm install

4. Настроить переменные окружения:

Создайте файл .env в корне проекта и укажите строку подключения к базе данных:

env

DATABASE_URL="postgresql://user:password@localhost:5432/kticket_db"

5. Генерация Prisma Client:

npx prisma generate

6. Запустить сервер:

npm run dev

7. Собрать билд:

npm run build

Локальная версия будет доступна по адресу http://localhost:3000.

About

PA-сервис бронирования междугородних поездок. Многошаговый виджет, интерактивная 3D-схема выбора мест в салоне и динамическое расписание

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages