Бланк результатов. Кейс № 3
IZILAB
Написано
с нуля
Заказ анализов онлайн. Написал сервис с нуля: админку, каталог, корзину, оплату, письма и запуск.
- Исследуемый
- izilab.ru
- Биоматериал
- старый сайт на React и Node.js
- Взято
- 27.03.2025, договор
- Выдано
- 30.09.2025, 23:00 МСК
- Исполнитель
- Никита Митусов, сервис написан с нуля
- Кто ещё
- Заказ вело агентство Solution: аналитика, дизайн, вёрстка и данные. Руководитель агентства подключился к коду на финише и дописал расчёт прибыли и заказ комплексов
Старый сайт не трогали. Написал новый
| Показатель | Результат | Референс, как было | Откл. |
|---|---|---|---|
| Основа | написана с нуля на Laravel | старый сайт на React и Node.js | норма |
| Админка | 12 разделов | заказов за месяц не посчитать | норма |
| Заказ в лабораторию | письмом после оплаты, сам | передавали вручную | норма |
| Лаборатории в базе | 233 | не задан | норма |
| Сети | 5, у каждой свои артикулы | не задан | норма |
| Письма после оплаты | 3 | не задан | норма |
| PDF после оплаты | 2 | не задан | норма |
| Комплексы в заказе | пропуск, закрыт на финише | должны попадать | ↓2 |
| Срок, дней | 187 | 45 | ↑1 |
- 45 дней были планом на программирование. Дизайн согласовали 8 июля, вёрстку передали 11 августа. От вёрстки до запуска прошло 50 дней.
- Комплексы не попадали в заказ: мой пропуск. Закрыл его на финише руководитель агентства вместе с расчётом себестоимости.
Один анализ живёт в трёх измерениях
Город задаёт цену. Сеть задаёт артикул и себестоимость. Медофис задаёт день и часы. Поэтому карточка анализа и прайс-листы в админке сложнее обычного каталога.
Город цена
Сеть артикул и себестоимость
Медофис день и часы
Ферритин
- Цена
- 450 ₽цена города
- Артикул
- СЛ-1040свой в каждой сети
- Приём
- пн–сб, 7:30–11:00справкой в оформлении
30 дней записи вперёд. Выходные и особые даты закрыты.
Учебная модель. Города и сети настоящие, цены, артикулы и часы условные.
Корзина гасит сети
Отметьте анализы. Сети без них погаснут, останутся те, где можно сдать весь набор. Потом оплатите и посмотрите, что уходит дальше.
Анализы, Казань
Где сдать
Итого
450 ₽
Сдать в сети Ситилаб
Перечень услуг у сети и вкладка артикулов мои. Подбор сети под всю корзину дописал руководитель агентства на финише. Цены и состав сетей условные.
После оплаты всё уходит само
Раньше заказы передавали в лаборатории вручную. Теперь вебхук ЮKassa запускает цепочку, и письма уходят только после оплаты.
- ОплатаЮKassa подтвердила платёж
- Вебхукзаказ отмечен оплаченным, данные чека переданы
- PDF Направление пациенту
Казань, Медофис 1
- PDF Гарантийное письмо лаборатории
Казань, Медофис 1
- Письмо Заказ оплачен клиенту
Казань, Медофис 1
- Письмо Новый заказ администратору медофиса
Казань, Медофис 1
- Письмо Состав заказа лаборатории
- Ферритин, СЛ-1040
Приложения к бланку
Дизайн и вёрстка от агентства. Натянул их на Laravel и собрал витрину: каталог, карточки, корзину, оформление. Страницы можно листать прямо в рамке.




Раздел 4. 30 сентября 2025, время московское
Ночь запуска
-
За день до запуска
На сервере заказчика нет части окружения, база работает в контейнере. Ставлю окружение, переношу дамп, разбираюсь с картинками, которые перестали открываться.
-
Старый сайт
Последняя продажа на старом сайте. Заказчик торговал почти до конца.
-
Домен
Меняем запись домена, сервис поднимается. SSL слетает, как и ждали. Выпускаю новый.
-
Первый покупатель
Оплата не проходит: ЮKassa возвращает ошибку про чек. Эту дыру заметили вечером и отложили на завтра. Завтра наступило раньше.
-
Первая оплата
Добавляю данные для чека той же ночью. Деньги прошли, сервис работает.
23:32 восстановлено по логу с поправкой на часы сервера.
Что ломалось
Лаборатории потеряли города
- Жалоба
- Сайт перестал находить лаборатории по городу, фильтр в админке тоже молчал.
- Причина
- Импорт заполнял поле city_id, а админка и витрина читали связь через таблицу city_laboratory. Заметил, что ручное пересохранение всё чинит, сравнил две записи и увидел расхождение.
- Назначение
- Привязывать логику к заполненному полю не стал: таблица связей нужна всему сервису. На поиск ушло около 4 часов. 233 записи перенёс скриптом руководитель агентства.
PDF, который нельзя отладить без оплаты
- Жалоба
- Локально файлы создавались, на сервере ссылок на них не было.
- Причина
- PDF собирался внутри вебхука, поэтому каждая проверка требовала настоящего платежа. Лог нашёл руководитель агентства: библиотеке для PNG-логотипа нужно расширение PHP GD.
- Назначение
- Поставил расширение, убрал отладчик, который копил гигабайты логов. Теперь при правке заказа файлы создаются заново.
Цена, которой уже нет
- Жалоба
- Заказ оплатили по акционным ценам, удалённым 31 октября.
- Причина
- Вероятная причина: цена комплекса бралась из сессии. Я сделал так, чтобы не нагружать базу. Повторить случай не удалось.
- Назначение
- Цены комплексов теперь идут только из базы и городской таблицы, просроченные скидки не применяются. Срок акции снимает цену сам в 00:01.
Заключение
«Всё понятно и чисто»
Смотрел код, всё очень понятно и чисто.
Руководитель агентства, 2025. Пересказ из переписки.
Я работал быстро, и местами это било по точности: часть вёрстки разошлась с макетом, комплексы не попали в заказ. С тех пор сверяю страницы с вёрсткой по чек-листу и прогоняю данные и деньги на боевых данных до показа.
Запущен
01.10.2025
- Что я делал
- Весь сервис с нуля: база, админка, каталог, корзина, оформление, оплата, письма, PDF и запуск на сервере заказчика
- Кто ещё работал
- Заказ вело агентство Solution: аналитика, дизайн, вёрстка и данные. Руководитель агентства подключился к коду на финише и дописал расчёт прибыли и заказ комплексов
- Когда
- март – декабрь 2025, запуск в ночь на 1 октября
- Инструменты
- Laravel, Orchid, MySQL, ЮKassa, Яндекс Карты, DomPDF
- Сайт
- izilab.ru