Кейс 02 · NEO RENT · собственный продукт
NEO RENT — платформа аренды и проката техники
Каталог техники, онлайн-бронирование, календарь загрузки, ценовые правила и приём оплаты.
NEO RENT (https://neo.rent/) — универсальная цифровая платформа аренды и проката, которая соединяет владельцев техники и клиентов в единой среде поиска, бронирования, управления доступностью, коммуникаций и оплаты.
Ключевое отличие от обычного агрегатора: NEO RENT — это не только канал привлечения клиентов, но и рабочий инструмент управления прокатом. Календарь загрузки, карточка брони, доступность экземпляров и ценовые правила приносят пользу прокату сразу, даже без трафика с платформы.
Ядро сознательно универсальное и не заточено под одну нишу: водный транспорт, квадроциклы и багги, велосипеды и сапборды, строительный инструмент, спецтехника, автомобили, объекты размещения. В системе три роли со своими кабинетами: арендодатель, клиент и администратор платформы.
Платформа запущена и обкатывается на действующем прокате в Тольятти — катера, квадроциклы и багги.
Функционал системы
- Публичная витрина и каталог
- Главная страница платформы со статистикой, списком и картой прокатов.
- Публичная страница компании: описание проката, контакты, точки выдачи на карте.
- Единый каталожный модуль с фильтрами, подбором свободной техники на нужные даты и расчётом стоимости.
- Страница объекта со всеми условиями аренды, галереей и калькулятором цены.
- Виджет бронирования
- Пошаговый сценарий: боковая панель на десктопе, полный экран на мобильном.
- Перенос параметров из каталога и открытие сразу на первом незаполненном шаге.
- Календарь доступности с готовыми вариантами времени старта вместо свободного ввода.
- Пересчёт стоимости на любое изменение параметров и авто-пропуск ненужных шагов.
- Скрытое атомарное назначение свободного экземпляра — без двойных броней.
- Календарь загрузки и доступность
- Календарная сетка с масштабами День / Неделя / Месяц / Список.
- Выделение интервала мышью, перетаскивание и растягивание броней с пересчётом цены до сохранения.
- Доступность экземпляров интервалами, копирование графика между экземплярами, технические перерывы между арендами.
- График работы точки как ограничивающий фактор отдельно от физической доступности техники.
- Ценовой движок
- Модель «база + правила» с независимыми часовой и суточной ветками тарификации.
- Поправочные коэффициенты по периодам (сезон, выходные) с проверкой непересечения.
- Скидки за длительность аренды и за количество единиц, дополнительные услуги, предоплата.
- Расчёт стоимости через API — одинаковый в каталоге, виджете, календаре и карточке брони.
- Брони и платежи
- Единое окно управления бронью: клиент, ресурсы, расчёт, оплата, переписка, комментарии, журнал действий.
- Пересчёт стоимости до сохранения с подтверждением при недоступности, пересечении и переплате.
- Автоматическое объединение броней одного клиента.
- Платёжная ведомость: наличные, безналичные, возвраты, переплата.
- Эквайринг ЮKassa — оплата по QR-коду и по ссылке.
- Уведомления и коммуникации
- Матрица уведомлений письмами и внутри кабинета, рассылка фоновым воркером.
- Чат по брони: сообщения проката, клиента и системные события в одной ленте, переход в чат прямо из письма.
- Вход клиента по одноразовому коду на email, без пароля.
- Автоматическая отмена по таймерам ожидания оплаты и напоминания перед началом аренды.
- Кабинеты, аналитика и админпанель
- Статистика аренд и загрузки парка с фильтрами по периоду, точке и объекту.
- Выгрузка списка броней в Excel, сводный раздел платежей и истории операций.
- Кабинет клиента: персональные данные, история броней, чаты, уведомления.
- Админпанель платформы: реестры прокатов и пользователей, сквозные витрины броней и платежей, общий классификатор категорий, журнал аудита.
Технические решения
- Модульный монолит на FastAPI, полностью асинхронный (Python 3.12+, psycopg 3). Границы модулей спроектированы так, что каталог и ценовой движок переиспользуются как библиотеки, а любой модуль можно вынести в отдельный сервис.
- Параметризованный SQL без ORM и нумерованные SQL-миграции: план запроса виден, схема и запросы читаются одним языком.
- Планировщик задач на самом PostgreSQL (SELECT ... FOR UPDATE SKIP LOCKED) вместо Redis/Celery — таймеры отмены и напоминаний живут в той же транзакции, что и бронь.
- Атомарное назначение экземпляра при бронировании и единая транзакционная модель — двойная бронь невозможна на уровне БД.
- Next.js (React, TypeScript): SSR для публичных страниц ради SEO и скорости первого экрана, CSR для кабинетов; общий UI-kit на витрину, виджет и кабинеты.
- Медиапайплайн: ресайз, сжатие, EXIF-strip, генерация миниатюр.
- Интеграции: ЮKassa, Яндекс Карты и Геокодер, email-провайдер, вход через ВКонтакте.
- Безопасность: RBAC, шифрование платёжных реквизитов в БД, заголовки безопасности, журнал аудита с фактическим автором действия.
- Эксплуатация: собственный VPS без Docker — Granian, фоновый воркер и Next.js под systemd, nginx с TLS, отдельный тестовый контур, регулярные бэкапы, выкладка одной командой.
- Адаптивная вёрстка от 320px, кроссбраузерная проверка в Safari / Firefox / Edge, стенд производительности на тестовом объёме данных.
Масштаб проекта
- ~25 000 строк Python в backend (113 модулей) и ~21 000 строк TypeScript/React во frontend.
- 68 таблиц в PostgreSQL.
- Более 600 автотестов.
- 13 фаз реализации — от фундамента до нефункциональных требований и промышленного развёртывания.
Результаты
- Платформа запущена и работает на собственном VPS: https://neo.rent/
- Полный цикл проката онлайн: поиск → подбор свободной техники → бронирование → оплата → коммуникация с клиентом
- Ценовой движок «база + правила» с часовой и суточной тарификацией, сезонными коэффициентами и скидками
- Интерактивный календарь загрузки с drag & drop броней и пересчётом стоимости
- Приём оплаты через ЮKassa: QR-код и ссылка на оплату
- Три роли и три кабинета: арендодатель, клиент, администратор платформы
Интерфейс проекта

LLM Technology
Нужен похожий продукт?
Разберём задачу и предложим реалистичный план первого этапа.