Разбираем, как спроектировать веб-приложение для доставки цветов: каталог букетов, статусы сборки, расписание курьеров и фото перед отправкой.

Веб-приложение для доставки цветов нужно не ради «красивого интерфейса», а чтобы каждый заказ проходил один понятный путь: принят, собран, проверен, передан курьеру, доставлен. Когда этого пути нет, начинаются звонки, уточнения в мессенджерах, потерянные адреса и спорные ситуации с качеством.
Обычно в системе работают несколько ролей, и у каждой своя зона ответственности:
Три проблемы, которые стоит закрыть с первого дня: путаница со статусами (кто и что сделал), забытые доставки (заказ есть, а в расписание никто не поставил) и отсутствие контроля качества (букет уехал, а фото никто не сделал). Еще важнее - одна версия правды. Если менеджер думает, что заказ «в пути», а курьер еще не выехал, клиенту сложно объяснить задержку.
Чтобы не переделывать все через месяц, фиксируйте базовые данные сразу. Они простые, но именно они спасают в спорных случаях:
А вот что можно отложить, чтобы быстрее запуститься: сложные акции и промокоды, личный кабинет с историей, «умные» рекомендации букетов, интеграции с кассами и внешними CRM. Сначала важнее сделать так, чтобы заказ не терялся и всегда было видно, на каком он шаге.
Если вы собираете это в TakProsto, удобно начать с простого сценария по ролям и статусам, а затем через чат добавить расписание курьеров и правило: «без фото перед отправкой заказ не закрывается».
Для первого запуска важнее не витрина каталога, а контроль процесса: любой заказ должен быть виден, и его текущий этап должен читаться за секунду. Это быстрее дает пользу и снижает риск ошибок в пиковые часы.
Основа минимальной версии - короткая цепочка статусов, которую все видят одинаково. Обычно хватает таких: принят, в сборке, готов, передан курьеру, доставлен, отменен. Важно, чтобы статус был один, а не «где-то в комментариях». Иначе менеджер и сборщик быстро окажутся в разных реальностях.
Карточка заказа должна быть удобной для двух ролей: менеджера и сборщика. Менеджеру нужно быстро принять решение и связаться с клиентом. Сборщику - понять, что именно собрать и в каком порядке.
Хороший минимум в карточке:
Дальше - действия в один клик. Чем меньше «надо открыть еще один экран», тем меньше ошибок. На практике чаще всего нужны: смена статуса, быстрый звонок клиенту и короткий комментарий вроде «нет белых роз, согласована замена на кремовые».
Чтобы разбирать спорные случаи, храните историю изменений статуса. Это несложно, но очень помогает: кто и когда перевел заказ в «готов», кто отметил «передан курьеру», какие были комментарии. В истории фиксируйте время, пользователя и старое/новое значение. Тогда если клиент говорит «курьер не приезжал», вы видите реальную цепочку действий, а не пытаетесь восстановить ее по памяти.
Если начать с правильных сущностей, приложение не придется «перепрошивать», когда появятся курьеры, замены цветов или контроль качества. Частая ошибка - хранить все в одном «заказе» и дописывать поля по мере роста. Лучше сразу разнести данные по понятным блокам.
Базовый набор, который закрывает и каталог, и сборку, и доставку:
Чтобы дальше было удобно, разделяйте «что продаем» и «что реально собрали». В позиции заказа храните выбранный клиентом букет (ссылку на шаблон из каталога) и зафиксированную цену на момент покупки. А для сборки заведите поля «фактическая комплектация»: что заменили, что добавили, что убрали. Тогда вы спокойно учитываете ситуацию, когда розы закончились и их заменили на другой сорт после согласования.
Минимально обязательные поля, без которых все ломается:
Заказ: номер, дата, сумма, способ оплаты, статус.
Позиция заказа: товар (шаблон букета), количество, цена, комментарий сборщику.
Клиент/получатель: имя, телефон (как минимум один контакт), признак «анонимная доставка».
Адрес: город/район, улица, дом, квартира/офис, интервал доставки.
Доставка: привязка к заказу, статус доставки, плановое время, фактическое время, поле courier_id (может быть пустым).
Опциональные поля добавляйте так, чтобы они не мешали основному потоку: текст открытки, подпись, «не звонить в дверь», код домофона, фото подъезда, комментарий «позвонить за 10 минут». Для анонимной доставки важно хранить, кому можно звонить: получателю, отправителю или никому.
Допы (лента, шарики, открытка) лучше хранить отдельными строками как дополнительные позиции заказа, а не одним текстом. Тогда проще считать себестоимость, печатать сборочный лист и видеть, что забыли вложить.
Связка «заказ - доставка - курьер» должна работать даже если курьер назначается позже. Практично создавать запись доставки сразу при оформлении заказа, а назначение курьера и точное время фиксировать отдельными изменениями. Пример: заказ приняли в 10:15, поставили доставку на 13:00-14:00, курьера назначили в 12:30, а фото перед отправкой прикрепили в 12:55. Все шаги видны и не требуют перестраивать модель данных.
Каталог - витрина, которая помогает выбрать букет за минуту, а не заставляет листать бесконечную ленту. В приложении лучше сразу заложить простую структуру: несколько понятных категорий (например, «Розы», «Сборные», «Подарочные наборы», «Свадебные») и быстрые фильтры, которые не перегружают экран.
Хорошо работают фильтры по цене и по поводу. Поводы удобнее делать как теги: «день рождения», «свидание», «маме», «коллеге», «извиниться». Поиск по названию тоже нужен, но не как главная опора. Люди чаще ищут «пионовидные» или «красный букет», поэтому стоит поддержать поиск по ключевым словам и тегам.
В карточке не нужно «продавать текстом». Важно снять вопросы до оформления заказа. Обычно достаточно:
Если цветы сезонные или поставка нестабильна, лучше сказать об этом прямо: «сезонный состав, возможна замена» или «доступно по предзаказу на завтра». Для клиента это понятнее, чем «нет в наличии» в конце оформления. Можно также ограничивать выбор времени доставки, если букет требует долгой сборки.
Для постоянных клиентов полезен быстрый повтор заказа: копирование адреса и комментария к сборке, а также возможность повторить с заменой размера. Пример: клиентка раз в месяц заказывает «Нежный M» маме. Ей достаточно двух кликов, чтобы подтвердить тот же букет, а вам - сразу получить понятный заказ без уточнений.
Чтобы доставка работала без нервов, процесс сборки должен быть одинаковым для всех: администратор видит, что обещано клиенту, флорист понимает, что собирать, а курьер получает заказ вовремя. На практике это укладывается в простую цепочку статусов и понятные правила: кто и когда может их менять.
Начните с короткого набора статусов, которые отражают реальные действия в салоне. Например:
Смысл не в количестве статусов, а в том, что каждый статус отвечает на один вопрос: что происходит сейчас и кто следующий.
Фиксируйте два времени: обещанное время доставки и плановое время готовности (когда букет должен быть упакован). Плановую готовность удобно считать от обещанной доставки назад, с запасом на дорогу курьера.
Простой пример: клиент просит доставку к 18:00. Если дорога обычно занимает 35 минут, а упаковка и подготовка 10 минут, то плановая готовность должна быть не позже 17:10. Тогда курьер забирает в 17:20 и есть буфер на пробки.
Чтобы это работало, в карточке заказа храните: время подтверждения, время старта сборки, время упаковки и время передачи курьеру. По этим отметкам легко увидеть, где возникают задержки.
Сделайте одно поле «Примечания клиента» (не редактируется после подтверждения) и одно поле «Комментарий команды» (для внутренних пометок). В примечаниях чаще всего встречаются: замена цветов, пожелания по упаковке, просьба позвонить перед доставкой, код домофона.
Хорошее правило: любые изменения после подтверждения фиксируются отдельной записью «Изменение», чтобы было видно, кто и когда согласовал замену и не возникало споров.
Отмена и возврат должны быть отдельными состояниями, а не «сброшенным» статусом. Добавьте причины (например, клиент отменил, нет нужных цветов, не дозвонились, отказ при вручении) и итоговое действие: возврат денег, перенос доставки, повторная отправка.
Если вы собираете приложение через TakProsto, удобно сразу попросить в чате: «Добавь статусы отменен и возврат, причины и журнал изменений по заказу». Тогда в истории будет видно, почему заказ не дошел до этапа передачи курьеру.
Расписание курьеров логично добавлять сразу после того, как у вас заработали заказы и статусы сборки. Тогда оператор не гадает, кому отдать заказ, а видит понятный выбор.
Начните не с экранов, а с правил. Их удобно задать прямо в чате: по каким районам кто ездит, какие смены бывают, сколько заказов курьер может взять одновременно и как учитывать время доставки.
Хороший минимальный набор выглядит так: курьер работает в своей зоне, смена длится N часов, на ближайшие 60 минут берем только тех, кто свободен, при равных условиях выбираем меньшую загрузку.
Дальше через чат попросите сделать экран, где диспетчер видит день как таблицу слотов. В TakProsto это удобно формулировать так: «Сделай экран расписания курьеров и форму редактирования смен».
На экране достаточно нескольких полей, чтобы он был полезным с первого дня:
После этого добавьте в заказ карточку курьера: имя, телефон, статус доставки, время выезда и комментарий.
Попросите систему при создании заказа предлагать курьера автоматически, но оставьте диспетчеру право быстро заменить. Удобная логика: кнопка «Подобрать курьера» показывает 3 лучших кандидата, а рядом есть «Назначить вручную» с поиском.
Чтобы не путаться, при замене сохраняйте причину (например, «затор», «курьер заболел») и фиксируйте время переназначения.
Проверьте сценарии, которые ломают расписание, и сразу попросите учесть их:
Когда эти вещи учтены, расписание перестает быть «табличкой» и реально помогает доставлять вовремя.
«Фото перед отправкой» - простой шаг, который снижает число споров и возвратов: видно, что именно уехало клиенту, в каком виде и с какой комплектацией. Это лучше заложить сразу, чтобы контроль качества не превратился в хаос из переписок.
Важно выбрать точку контроля. Обычно удобнее делать фото уже после финальной сборки и упаковки, но до передачи курьеру: на снимках виден итоговый результат, и еще есть время быстро исправить ошибку.
Чтобы фото действительно помогало, задайте короткий стандарт, одинаковый для всех заказов. Чаще всего хватает 2-3 снимков:
Дальше решите, кто подтверждает. В небольшом магазине подтверждение часто делает сборщик, а выборочно проверяет менеджер. В загруженные дни удобнее наоборот: сборщик снимает, менеджер подтверждает перед вызовом курьера.
Полезно добавить два статуса: «Фото загружено» и «Фото подтверждено». Если менеджер отклоняет, заказ не должен уходить в доставку. Вместо этого сделайте понятное действие «Вернуть на доработку» с причиной (например, «не тот цвет ленты», «нет открытки», «пятна на упаковке»).
Фото стоит хранить прямо внутри заказа как отдельные вложения с временем, автором и комментарием. Для порядка настройте доступ по ролям:
Если вы собираете приложение в TakProsto через чат, попросите сделать блок «Фото перед отправкой» в карточке заказа, добавить обязательность фото для определенных статусов и правила видимости по ролям. Тогда контроль качества станет частью процесса, а не дополнительной нагрузкой.
Статусы и уведомления должны работать как общий язык для клиента, флориста и курьера. Один и тот же статус в карточке заказа должен быть источником правды, а уведомления - просто сообщать о важном изменении, не создавая «параллельную реальность».
Клиенту важны простые и честные этапы: заказ принят, готовится, в пути, доставлен. Иногда нужен промежуточный статус вроде «ожидаем уточнения» (например, если нет выбранных цветов и требуется замена). Главное правило: статус меняется только при реальном событии, а не «по плану».
Команде статусы обычно чуть детальнее, чтобы были видны узкие места: «в сборке», «ожидает фото», «ожидает курьера», «курьер назначен». Но не делайте отдельную «внутреннюю» вселенную. Проще держать один набор статусов и раздать разные права и видимость полей.
Каналы удобно разделить на обязательные и опциональные. Базу делайте внутри приложения (центр уведомлений и события в заказе), а SMS или мессенджеры подключайте по мере готовности.
Клиенту обычно достаточно 3-4 сообщений за весь заказ:
Команде важны уведомления, которые помогают не сорвать срок: срочные заказы, просрочка этапа (например, сборка дольше 20 минут), замена курьера, отмена или смена времени. Представьте ситуацию: флорист отметил «готово», но курьер задержался. Тогда система должна подсветить риск и предложить действие: переназначить курьера или согласовать новое окно с клиентом.
Чтобы уведомления не превратились в шум, задайте простые правила: отправляйте только изменения статуса и критические отклонения, объединяйте мелкие события в одно сообщение, включайте «тихий режим» ночью и делайте понятные настройки для роли (клиент, флорист, курьер, администратор).
Если вы собираете это в TakProsto, удобно начать с одного статуса на событие и сразу описать условия отправки: «когда меняется статус на X, отправь уведомление в приложении и, если отмечено, SMS».
Утро, 09:10. Клиент оформляет заказ: букет «Нежный розовый», доставка сегодня к 12:00, адрес офиса, комментарий: «позвонить за 5 минут». Заказ сразу появляется у менеджера со статусом «Новый» и временем доставки.
Менеджер открывает карточку заказа и видит: состав букета, сумму, пожелания, выбранный интервал и контакт получателя. В 09:15 менеджер созванивается с клиентом. Выясняется, что нужной эустомы нет, но можно заменить на похожую по цвету. Менеджер фиксирует замену прямо в заказе (чтобы сборщик не гадал) и меняет позицию в составе. Клиент просит перенести доставку на 12:30. Менеджер меняет время и переводит заказ в статус «Подтвержден».
Дальше менеджер ставит заказ в работу: статус «В сборке» и назначает сборщика. Если у вас есть правила, например «заказы на ближайшие 2 часа всегда в приоритете», это удобно показывать меткой или сортировкой в очереди.
К 10:40 сборщик заканчивает букет, отмечает «Собрано» и добавляет «фото перед отправкой». Фото нужно не для контроля ради контроля, а чтобы:
Менеджер в 10:45 проверяет фото, видит, что лента не того оттенка, и просит поправить это комментарием в карточке. Через 10 минут сборщик обновляет фото, и менеджер переводит заказ в статус «Готов к выдаче курьеру».
В 11:20 курьер получает задачу в своем списке: адрес, время 12:30, контакт, пометка «позвонить за 5 минут» и кнопки статусов. Курьер забирает букет и отмечает «В пути». В 12:25 отмечает «На месте», звонит получателю. В 12:33 вручает и ставит «Доставлено», добавляя короткую заметку (например, «вручил охране, получатель спустился через 2 минуты»).
Такой сценарий легко собрать в TakProsto: начинаете с заказов и статусов, а затем через чат добавляете поля для замен, загрузку фото и экран курьера с кнопками «В пути» и «Доставлено».
Перед запуском важнее не доделать еще одну кнопку, а убрать то, что сломает работу в первый же день. Чаще всего проблемы три: статусов сделали слишком много (никто не понимает, какой выбрать), у заказа нет конкретного ответственного и нет истории изменений (почему поменяли адрес, кто сдвинул время, где потерялось фото).
Пройдитесь по этим пунктам и исправьте слабые места до того, как подключите реальных клиентов:
После этого прогоните приложение на реальных сценариях. Хороший минимум - 10-20 тестовых заказов, где вы специально создаете неудобные ситуации: клиент меняет адрес после оплаты, сборщик заменяет цветы из-за отсутствия на складе, курьер задерживается, фото не загружено, заказ отменяют за 5 минут до выезда. Проверьте, что в каждом случае ясно: кто отвечает, какой статус ставить и что видит администратор.
Когда базовый процесс работает стабильно, добавляйте функции, которые дают деньги или экономят время:
Если вы собираете прототип через TakProsto, проще всего описать в чате экраны и правила (статусы, права, когда требовать фото, как назначать курьера), включить planning mode и согласовать логику до деталей. А когда процесс «устаканится», можно экспортировать исходники, развернуть проект с хостингом и подключить свой домен - и уже дальше развивать продукт без пауз. Если нужно, ориентируйтесь на takprosto.ai как на базовую площадку, где удобно итеративно добавлять функции по мере роста бизнеса.
Минимально нужно провести заказ по понятной цепочке: приняли, собрали, проверили, передали курьеру, доставили. Если на каждом шаге есть ответственный и один общий статус, пропадают звонки «а где заказ» и снижается число ошибок.
Хватит 6–8 статусов, которые отражают реальные действия: новый/принят, подтвержден, в сборке, готов (или упакован), передан курьеру, в пути, доставлен, отменен. Главное — чтобы статус менялся только после факта, а не «по плану».
Сделайте два блока: «примечания клиента» и «комментарий команды». Примечания клиента лучше фиксировать после подтверждения и не переписывать, а изменения в заказе оформлять отдельной записью, чтобы было видно, кто и когда согласовал замену или перенос времени.
Обязательны адрес с деталями (подъезд, этаж, домофон), окно доставки и отметка «не раньше/не позже», контакты заказчика и получателя, состав и цена на момент заказа, оплата и один текущий статус. Эти поля чаще всего спасают в спорных ситуациях и при передаче заказа между ролями.
Разделяйте «что продаем» и «что реально собрали». В заказе фиксируйте выбранный букет и цену, а в фактической комплектации — согласованные замены и изменения. Тогда вы сможете честно объяснить клиенту, что именно уехало, и не сломаете учет при росте.
Создайте отдельную запись «доставка», привязанную к заказу, сразу при оформлении. Курьера можно назначать позже, но у доставки должны быть окно, статус и плановое/фактическое время — так расписание и контроль просрочек появятся без переделки модели.
Определите одну точку контроля: после упаковки, но до передачи курьеру. Сделайте правило, что без загруженного фото заказ не может перейти в этап передачи курьеру, и храните у фото автора, время и короткий комментарий — тогда это реально снижает споры.
Начните с простых правил: зоны/районы, смены, максимальная загрузка и ограничение для ближайшего часа. Затем добавьте экран дня со слотами и в карточке заказа кнопку автоподбора курьера с возможностью быстрой ручной замены и фиксацией причины переназначения.
Клиенту обычно достаточно подтверждения, сообщения при вопросе по замене, уведомления «курьер выехал» и «доставлено». Команде важнее уведомления о просрочках, переносах и смене курьера; если сообщений слишком много, люди перестают их читать и снова начинается хаос.
Попросите сделать заказы, роли и права, статусы, историю изменений и обязательность фото для нужных этапов. Дальше добавляйте расписание курьеров, экран курьера с кнопками статусов и правила автоподбора; лучше идти маленькими шагами и проверять на 10–20 тестовых заказах с неудобными сценариями.