XO Flowers — PWA-магазин доставки цветов
PWA-магазин с полным циклом: корзина, доставка по радиусу через Яндекс.Карты, онлайн-оплата ТБанк с автоотменой неоплаченных заказов, бонусная система, кабинет менеджера. С нуля за ~3 месяца.
- Клиент
- XO Flowers
- Отрасль
- E-commerce
- Роль
- Полный цикл
- Год
- 2026
- Срок
- ~3 месяца
- Сайт
- xoflowers.store
Стек
- Next.js 16
- TypeScript
- Prisma 7
- PostgreSQL 16
- Tailwind CSS 4
- Zustand
- TanStack Query
- Sharp
- Яндекс.Карты JS API
- ТБанк Acquiring
- SMS Aero
- Telegram Bot API
- PM2
- Nginx
Что было
Действующий магазин на коробочной CMS не справлялся с кастомными сценариями: расчёт доставки по радиусу через карты, бонусная система с транзакциями, выбор сборки букета на этапе оформления, автоматическая отмена неоплаченных заказов. Каждая правка требовала компромисса с шаблонной логикой CMS.
Что сделали
Магазин с нуля на Next.js 16 + Prisma + PostgreSQL. Корзина в Zustand с persist в localStorage, доставка через Яндекс.Карты JS API + Suggest API (геокодинг и подсказки адреса), онлайн-оплата ТБанк с обязательным receipt 54-ФЗ.
Бонусная система реализована через BalanceTransaction-записи в одной транзакции с заказом — никаких race-condition при параллельных операциях. Оплата с баланса совместима с бонусами.
Cron-задача для автоотмены зависших ONLINE-заказов с обязательной предварительной проверкой статуса в ТБанк — защита от потери оплаченного заказа при недолёте webhook.
Что получили
PWA-магазин работает в продакшене, заказы через мобильную версию идут стабильно. Менеджеры работают через свою админку. Интеграции с SMS Aero, email и Telegram-уведомлениями для клиентов и менеджеров реализованы и в проде.
Главный результат
PWA с полным циклом доставки за ~3 месяца разработки
32 модели данных, доставка по зонам через формулу Haversine с расчётом на стороне сервера, онлайн-оплата ТБанк с обязательным receipt 54-ФЗ, бонусная система через транзакции БД. Магазин работает в продакшене.
Похожая задача?
Опишите её — обсудим, что можно сделать.