Все кейсы

Миграция платформы на React и NestJS

Переписал ядро o5.Еда с PHP/jQuery на TypeScript/React/NestJS. Модульная архитектура, типизированный API, 500+ бизнес-клиентов без простоя при переходе.

ReactTypeScriptNestJSNode.js
Миграция платформы на React и NestJS

Задача

Платформа o5.Еда - SaaS для запуска сайтов доставки еды. К моменту миграции обслуживала более 500 ресторанов по всей России. Кодовая база выросла из MVP на PHP и jQuery: монолитная архитектура, где фронтенд рендерился на сервере через шаблонизатор, бизнес-логика была размазана между контроллерами и вьюшками, а любое изменение в одном модуле могло сломать другой. Тесты отсутствовали полностью - каждый деплой был рулеткой. Добавление новой фичи вроде программы лояльности занимало 3-4 недели вместо нескольких дней. Команда росла, но скорость разработки падала из-за конфликтов в коде и отсутствия чёткого разделения ответственности.

Решение

Разработал стратегию поэтапной миграции без остановки продакшена - strangler fig pattern. Первым шагом вынес API в отдельный сервис на NestJS: типизированные эндпоинты, валидация входных данных через class-validator и DTO, Swagger-документация генерировалась автоматически. Фронтенд переписал на React с компонентным подходом: React Query для кэширования и синхронизации серверного состояния, React Router для навигации, кастомные хуки для переиспользования логики. Старая и новая системы работали параллельно - Nginx проксировал запросы: новые модули шли через React-приложение, старые продолжали работать на PHP. Каждый спринт мигрировал один модуль, покрывая его тестами (Jest + React Testing Library). Настроил CI/CD через GitLab: линтинг, тесты, билд и деплой по мёржу в main.

Результат

Миграция заняла 8 месяцев. Все 500+ клиентов перешли на новую платформу без единого часа простоя. Скорость разработки фич выросла в 3 раза - новая фича вроде промокодов теперь занимала 3-5 дней вместо месяца. Покрытие тестами достигло 70%. Время деплоя сократилось с 40 минут ручной работы до 5 минут автоматического пайплайна. Новые разработчики выходили на продуктивность за неделю вместо месяца благодаря типизации и документации API.

Похожие кейсы

Пайплайн транскодирования аудио
Серверный пайплайн: загрузка FLAC/MP3/OGG, транскодирование в нужные форматы, стриминг через S3. Lossless воспроизведение в браузере с любого устройства.
NuxtTypeScriptS3Node.js
Интеграция каталога MusicBrainz
Подключил каталог MusicBrainz (127 000+ артистов), скробблинг в ListenBrainz, Telegram Mini App для мобильного доступа к библиотеке.
NuxtTypeScriptTelegram Mini App
SEO-архитектура для сайтов доставки
Отдельные страницы товаров с Schema.org разметкой, SSR, мета-теги. Клиентские сайты выходят в топ Google по локальным запросам.
NuxtTypeScriptTailwind CSS
Онлайн-оплата без комиссии для ресторанов
Интеграция прямого эквайринга для клиентов SaaS-платформы доставки еды. 0% комиссии на заказы вместо 3-5% у агрегаторов.
NuxtTypeScriptNode.js

Нужно решить похожую задачу?

Напишите - обсудим ваш проект или идею.

© 2026 Николай Косарев