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

Задача
Платформа 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.
Похожие кейсы
Нужно решить похожую задачу?