РОЗНИЦА И УСЛУГИ/клиент, обезличено/архитектура и платформа ORKESTRAI

Сервис меню и рецептов по подписке: четыре старые системы — в одну современную платформу

Подписочный сервис о правильном питании жил на конструкторе сайтов, старом фронтенде и двух базах данных. ORKESTRAI спроектировал и собрал новую платформу на Next.js и PostgreSQL: каталог рецептов с расчётом КБЖУ, меню недели со списком покупок, подписка с доступами и админка редактора с черновиками и историей правок — без остановки старой системы.

Как это работает

Новая платформа собирается рядом со старой: редактор и подписчики ничего не замечают до решения о переключении.

Меню по подписке

Инфо-экран · 9:16

Что готовить и что купить на неделю

Главный вопрос подписчика — что приготовить и что купить. Платформа связывает рецепты, приёмы пищи и список покупок с порциями на всю семью, а редактору даёт черновики, версии и проверку данных при сохранении.

  • Импорт789 рецептов и меню недели перенесены из копии старой базы — в самой старой базе не изменено ни одной записи
  • КаталогПроверка данных нашла ингредиент без веса — рецепт не сохранится, пока вес не добавлен
  • ПодписчикСемья из трёх человек с аллергией на молоко — порции пересчитаны, два блюда заменены
  • РедакторРецепт сохранён черновиком, КБЖУ пересчитан, публикация пересобрала витрину
  • ПереездКарта 301 готова, стенд закрыт от индексации до переключения, старый сайт — для отката

Кабинет: восемь ситуаций

Как система ведёт себя в конкретный момент дня. Номера на экране совпадают с пунктами под ним.

Экран 1 из 8 · Архитектура

Четыре старые системы — одна платформа, старая пока работает

Что произошло. Сервис меню жил на четырёх кодовых базах и двух базах данных. Любая правка шла через несколько мест, а устаревшие фреймворки мешали развитию.

Архитектура: Четыре старые системы — одна платформа, старая пока работает

Экран листается вбок →

Как реагирует система
  1. 1Было четыре кодовые базы — стала одна, на одном языке на всех слоях.
  2. 2В каталоге 789 рецептов — все перенесены в новую базу.
  3. 3Новый личный кабинет: меню, список покупок и профили семьи.
  4. 4Старая система работает параллельно — её не трогают до решения о переключении.

Экран 2 из 8 · Каталог рецептов

У ингредиента нет веса — рецепт не сохранится

Что произошло. Редактор добавил боул, но забыл указать вес одного ингредиента. Раньше такой рецепт уходил на сайт с неверным КБЖУ.

Каталог рецептов: У ингредиента нет веса — рецепт не сохранится

Экран листается вбок →

Как реагирует система
  1. 1Ошибки данных считаются отдельно — их видно до публикации.
  2. 2Боул А не сохранился без веса ингредиента; вес добавлен — рецепт прошёл.
  3. 3Фильтры по аллергенам: без глютена, без молока, без сахара.
  4. 4КБЖУ считается из ингредиентов и пересчитывается на всю семью; с ошибкой рецепт не сохранится.

Экран 3 из 8 · Меню недели

Семья из трёх, аллергия на молоко — меню пересобрано

Что произошло. Подписчице нужно меню на неделю на троих, а у одного из семьи аллергия на молоко. Раньше она пересчитывала порции и искала замены сама.

Меню недели: Семья из трёх, аллергия на молоко — меню пересобрано

Экран листается вбок →

Как реагирует система
  1. 1Рецепты собираются в приёмы пищи, неделю и список покупок для подписчика.
  2. 2Список покупок собран по ингредиентам, с отметкой «куплено».
  3. 3Из-за аллергии на молоко 2 блюда заменены, порции пересчитаны на троих.
  4. 412 560 приёмов пищи и 30 465 связей с рецептами взяты из старой базы только на чтение.

Экран 4 из 8 · Доступы и подписка

Подписчик вошёл старым паролем — пароль перешифрован надёжнее

Что произошло. После переезда постоянный подписчик заходит со старым паролем. Он не должен ничего заметить, а доступ к закрытым рецептам должен работать.

Доступы и подписка: Подписчик вошёл старым паролем — пароль перешифрован надёжнее

Экран листается вбок →

Как реагирует система
  1. 1После покупки меню доступ выдаётся сразу, с датой окончания.
  2. 2Подписка продлевается по уведомлению платёжки, без ручной сверки.
  3. 3Старый пароль подходит, а при входе перешифровывается надёжнее.
  4. 4Открытые рецепты приводят людей из поиска, подписка даёт меню; платёжный адаптер сменный.

Экран 5 из 8 · Админка редактора

Рецепт «Суп А» готов — редактор публикует с телефона

Что произошло. Редактор дописал суп и загрузил 6 фото. В старой админке не было ни черновиков, ни истории правок — ошибку было не откатить.

Админка редактора: Рецепт «Суп А» готов — редактор публикует с телефона

Экран листается вбок →

Как реагирует система
  1. 1Теперь есть черновики, версии каждой правки и откат в один клик.
  2. 2«Суп А» прошёл путь от черновика до витрины, КБЖУ пересчитан сам.
  3. 3Порция без веса не сохранится — проверка при сохранении.
  4. 4Редактору приходит задача: рецепт готов, ошибок данных нет, кнопка «Опубликовать».

Экран 6 из 8 · Импорт контента

789 рецептов перенесены — в старой базе изменено 0 записей

Что произошло. Контент нужно перенести, но старая система продолжает обслуживать подписчиков. Ошибка в её базе ударила бы по живому сервису.

Импорт контента: 789 рецептов перенесены — в старой базе изменено 0 записей

Экран листается вбок →

Как реагирует система
  1. 1Перенос шёл из копии базы: в самой старой базе изменено 0 записей.
  2. 2Дубли названий ингредиентов склеены при импорте.
  3. 3Пользователи пока остаются в старой системе.
  4. 4Редактор работает как раньше; переключение — отдельным решением.

Экран 7 из 8 · Переезд без потери поиска

Переезд сайта — старые адреса ведут на новые

Что произошло. У сервиса есть страницы, которые люди находят через поиск. При смене платформы они могли бы выпасть из выдачи.

Переезд без потери поиска: Переезд сайта — старые адреса ведут на новые

Экран листается вбок →

Как реагирует система
  1. 1Порядок переезда: опись адресов, карта 301, закрытый стенд, переключение, контроль 404.
  2. 211 адресов страниц меню совпадают один в один.
  3. 3Старые разделы перенаправляются на новые кодом 301.
  4. 4После переключения ошибки 404 смотрят ежедневно, старый сайт держат для отката.

Экран 8 из 8 · База и медиа

Одна база и хранение в России — поддержка проще

Что произошло. Контент и пользователи лежали в двух разных базах. Связать подписчика с его меню и доступами было сложно.

База и медиа: Одна база и хранение в России — поддержка проще

Экран листается вбок →

Как реагирует система
  1. 1Серверы и данные — в России.
  2. 2Контент и пользователи в одной базе, связаны по ключам.
  3. 3Поиск по ингредиентам понимает русский язык.
  4. 4Один процесс без микросервисов: схема сразу даёт миграции и API, поддержка проще и дешевле.

Экспертность

Экраны перерисованы на вымышленных данных: рецепты, подписчики и тарифы клиента не показаны.

Один язык, одна база

Вместо четырёх кодовых баз и двух баз данных — один монолит на TypeScript и одна PostgreSQL: контент и доступы связаны ключами, поддержка проще.

Схема — это всё

Из одной схемы данных получаются миграции, интерфейс редактора и API: новое поле появляется везде сразу, без ручной синхронизации.

Старое не ломаем

Контент импортируется только из копий базы, старая система продолжает работать, редактор не переезжает до отдельного решения о переключении.

Вход без сброса пароля

Подписчики входят старым паролем, а при входе пароль перешифровывается более надёжным алгоритмом — никакой массовой рассылки «смените пароль».

Данные проверяются при сохранении

КБЖУ считается из ингредиентов, порции пересчитываются на семью, а рецепт с ошибкой данных просто не сохранится.

Переезд без потери поиска

Опись всех адресов, карта 301, стенд закрыт от индексации до переключения, контроль 404 после, старый сайт держим для отката.

Хотите так же — но для вашего бизнеса?

30 минут разбора — бесплатно. Покажем, что реально автоматизировать в вашем случае и что это даст. Отвечает тот, кто ведёт проект.

Прямой контакт

Позвоните или напишите в мессенджер — ответим в рабочий день.
+7 499 500-96-88

Заказать разбор

Ответ в рабочий день · данные обрабатываем только для ответа на заявку
Нажимая «Отправить», вы соглашаетесь с политикой обработки персональных данных (152-ФЗ).
✓

Готово — заявка отправлена

Спасибо! Ответим в рабочий день. Можно написать на hello@orkestrai.ru.