Веб-приложение для фотостудии: разберем слоты, буферы, переносы, штрафы, таблицу допуслуг и схему предоплаты для брони и админки.

Веб-приложение для фотостудии должно закрывать три вещи: запись на съемку, понятный расчет цены и порядок в админке. Если хотя бы одно звено слабое, начинаются накладки, споры по оплатам и вечные уточнения "а что входит".
Клиенту важно за минуту найти свободное время и сразу увидеть итог: стоимость по часам, допуслуги, размер предоплаты и правила отмены. Чем меньше шагов и переписок, тем выше шанс, что бронь дойдет до оплаты, а не зависнет на "я подумаю".
Администратору нужен контроль загрузки залов, статусов платежей и переносов. Еще важнее быстро находить бронь, видеть историю изменений и понимать, почему слот стал недоступен: буфер, уборка, пересечение по времени, блокировка под техработы.
Записи в мессенджере и таблицах перестают работать, когда брони растут. Сообщения теряются, пересылаются скриншоты, в таблице легко ошибиться со временем, а правила штрафов и переносов приходится объяснять заново.
С первого дня стоит собрать минимум данных, чтобы потом не переделывать логику:
Чтобы веб-приложение для фотостудии не превратилось в набор ручных исключений, начните с простой модели данных. Она должна одинаково хорошо работать и для клиента, который бронирует время, и для админа, который управляет расписанием и оплатами.
Роли лучше держать минимальными: клиент создает бронь, выбирает зал и услуги и оплачивает; администратор настраивает залы, тарифы и правила и видит все брони. Менеджер нужен только если вы хотите отдельного человека для спорных случаев и ручных правок по звонку.
Ключевые объекты можно описать так (поля добавляйте только когда появляется реальная потребность):
Отдельно продумайте расписание, иначе календарь быстро начнет "плыть". Проще всего держать три уровня: базовые рабочие часы по дням недели, праздники (полные закрытия) и исключения (разовые изменения, например короткий день или техобслуживание). Так вы не храните расписание на каждый день вручную.
Статусы брони должны быть короткими и однозначными: черновик, ожидает предоплату, подтверждена, отменена. Важно, чтобы платежи и бронь не спорили друг с другом: например, бронь становится подтвержденной только после успешной предоплаты или ручного подтверждения админом.
Календарь ломается не из-за дизайна, а из-за правил времени. Сначала решите, как устроены слоты: какой шаг показывать, какие длительности разрешены и как учитывать подготовку между съемками.
Шаг в календаре - это "клетка", с которой пользователь двигает начало брони. Обычно это 15, 30 или 60 минут. Чем меньше шаг, тем больше гибкости, но тем больше риск странных стыков и "дыр" в расписании.
Длительность можно сделать фиксированной, выбирать из набора (1, 2, 3 часа) или разрешать любую, но кратную шагу (например, от 1 до 6 часов по 30 минут). Для фотостудий чаще всего удобен набор 1/2/3 часа: это понятно клиенту и проще для админа.
Буфер - это время до и после брони на уборку, перестановку, проверку света, проветривание. Буфер должен блокировать время в календаре так же, как сама съемка.
Простое правило пересечений: считаете "занятость" как интервал (начало - буфер_до) .. (конец + буфер_после). Если новый интервал пересекается с занятым хотя бы на минуту, слот недоступен.
Пример: бронь 14:00-16:00, буфер 15 минут до и 30 минут после. Тогда занято 13:45-16:30. Бронь на 16:00 уже нельзя, а на 16:30 можно.
Отдельно задайте ограничение по времени до начала: например, онлайн-бронь не позже чем за 3-6 часов, чтобы команда успела подготовить зал и подтвердить детали.
Цена должна считаться одинаково и для клиента, и для админа. Самый понятный подход для веб-приложения для фотостудии: посчитать базовую стоимость по времени, затем добавить пакеты, допуслуги и скидки.
Обычно хватает тарифной сетки по типу дня и интервалу времени: будни дешевле, выходные дороже, а вечер (например, после 18:00) может иметь надбавку.
Заранее решите, что происходит, если бронь пересекает границу тарифов. Для студий чаще честнее вариант с разбиением по интервалам, чтобы 17:00-19:00 считалось как час по дневной цене и час по вечерней.
Пакеты нужны, когда вы хотите поощрять длительные съемки: 2 часа дешевле, чем 2 раза по 1 часу. Это отдельное правило расчета, которое применяется после базовой стоимости.
Полезно сразу зафиксировать совместимость скидок:
Клиенту показывайте две цифры: стоимость по времени (понятно, за что платит) и итоговую сумму с допуслугами и скидкой.
Отдельно продумайте историю цен: в момент создания брони сохраняйте снимок расчета (тариф, коэффициенты, пакет, скидка, итог). Тогда при смене прайса старые брони не "поплывут".
Чтобы клиенты не спорили, а администратор не "вспоминал, как было в прошлый раз", эти правила лучше закрепить в настройках. Условия должны быть одинаково понятны и человеку, и системе.
Обычно достаточно одного бесплатного переноса, но только если клиент предупредил заранее. Удобнее привязать правила к времени до старта:
Сразу решите два момента: перенос возможен только на слоты той же длительности (или с доплатой, если длительность меняется) и пересчитывается ли цена по новому прайсу.
Для отмены важно одно: до какого момента предоплата возвращается и какая часть удерживается позже. Пример понятной схемы:
Невыход (no-show) лучше приравнять к отмене в последний момент: слот считается занятым, а платеж удерживается полностью. Это защищает студию от "пустых окон".
Спорные случаи сделайте управляемыми: в админке нужен статус "на разборе", комментарий администратора и действие (полный возврат, частичный, перенос без штрафа). Тогда исключения не превращаются в хаос и "особые договоренности".
Чтобы допуслуги считались без ошибок, вынесите их в отдельный справочник. Тогда веб-приложение для фотостудии сможет показывать подходящие опции, считать итог и понимать, что включать в предоплату.
Минимальная структура обычно такая: название, цена, единица (час, штука, комплект), обязательность и ограничения применения (по залам, тарифам, времени).
Обязательные услуги лучше задавать не галочкой "всегда", а правилом. Пример: "Уборка после животных" становится обязательной, если выбрана услуга "Съемка с животными" или если в брони отмечено "будут животные".
Ограничения тоже стоит формализовать. Например, "Циклорама" доступна только в Зале A, а "Проектор" нельзя выбрать на тарифе "Ночной". Для количественных услуг задайте границы: максимум 2 визажиста, максимум 3 источника света, минимум 1 комплект.
Правило расчета держите простым: услуги добавляются к итогу отдельными строками. Если единица "час", то количество часов обычно равно длительности брони (или задается вручную, если услуга не на все время). Для предоплаты заранее решите: она считается только от аренды или от аренды плюс выбранные услуги. Если хотите меньше спорных ситуаций, включайте в предоплату услуги, которые требуют подготовки (визажист, ассистент, реквизит).
Предоплата нужна, чтобы удерживать слот и снижать количество отмен в последний момент. Сразу решите, что именно считается предоплатой: часть стоимости, отдельный депозит или фиксированная сумма за бронь.
Обычно используют один из трех вариантов:
Срок оплаты лучше делать коротким и явным, например 30 минут после создания брони. Пока предоплата не внесена, слот помечается как "временно удержан". Как только время вышло, бронь автоматически отменяется, а слот возвращается в доступные.
Статусы платежа держите однозначными:
Клиенту показывайте две вещи: точное время дедлайна и что будет при просрочке ("бронь автоматически отменится").
Не все платят онлайн. Для переводов и оплат "по счету" добавьте ручной сценарий: админ видит платеж со статусом "создан", выбирает способ "перевод", вводит сумму и дату, добавляет комментарий (например, последние 4 цифры) и переводит платеж в "оплачен".
Клиентский путь должен быть коротким: человек хочет быстро увидеть свободное время, понять цену и закрепить бронь.
Обычно хватает пяти шагов: выбор зала (коротко что входит и базовая цена), календарь и время, длительность и допуслуги (итог меняется сразу), контакты, предоплата и подтверждение.
Проверки лучше делать в два слоя. Сначала на экране времени: недоступные слоты скрываем или делаем неактивными с учетом буфера. Затем перед оплатой повторно проверяем занятость, потому что за пару минут слот мог забрать другой человек.
Минимальное время до начала задайте как правило (например, бронь не позднее чем за 3 часа). Если правило нарушено, лучше не ругаться, а предложить ближайшие варианты и объяснить причину простыми словами.
После оплаты покажите подтверждение и отправьте сообщение с деталями: зал, дата и время, длительность, услуги, сумма предоплаты, условия переноса и отмены.
В личном кабинете клиенту обычно достаточно трех действий: посмотреть бронь, перенести, отменить. Если перенос уже невозможен, кнопка должна быть недоступна и с понятной подсказкой.
Примеры коротких текстов для подсказок:
Админка - место, где жизнь брони становится понятной: кто, когда и на каких условиях занимает зал. В хорошем веб-приложении для фотостудии администратор видит календарь по дням и залам, а не россыпь сообщений в мессенджере.
Удобно начинать с календаря с переключателем зала и дня. В ячейке слота показывайте коротко: имя клиента, длительность, статус (черновик, подтверждена, отменена) и отметку про предоплату. Если есть буфер до или после, он должен визуально занимать время, чтобы админ не ставил соседнюю бронь "вплотную".
Дальше нужен экран "заказы" (список броней) с фильтрами: период, зал, статус оплаты, источник (самостоятельная бронь или вручную) и быстрым поиском по телефону.
Карточка брони должна собирать все в одном месте: время, зал, контакт клиента, комментарии, выбранные допуслуги и цены, итоговую сумму, предоплату (сумма, срок, статус, способ), историю переносов и причину отмены.
Админу важно править заказ без "ломания" правил: переносить время с учетом буфера, отменять с автоматическим расчетом штрафа, добавлять допуслуги (дым-машина, бумажный фон, ассистент) и сразу видеть, как меняется итог и остаток к оплате.
Чтобы настройки не прятались в коде, заведите справочники: залы, тарифы, допуслуги, правила штрафов и сроки предоплаты.
Журнал действий спасает от споров: фиксируйте кто изменил, что именно (время, зал, сумма, статус), когда и короткий комментарий.
Клиент заходит в календарь бронирования фотостудии и выбирает субботу 18:00-20:00 (2 часа). Шаг слота, например, 30 минут, а после каждой брони действует буфер 15 минут на уборку. Поэтому система помечает как занятый не только интервал 18:00-20:00, но и 20:00-20:15.
Дальше клиент добавляет допуслуги. Важно, что у услуг бывает своя длительность и привязка ко времени. Например: визаж на 1 час (нужен специалист и отдельное время) и аренда постоянного света (просто добавка к заказу).
Пример расчета:
На шаге оплаты включается предоплата 30%: 2850 руб. Система ставит дедлайн, например на 30 минут. Если клиент не успел оплатить, бронь переходит в состояние "истекла", а время возвращается в доступные слоты.
Через пару дней клиент просит перенос. Правило простое: перенос за 48 часов и больше - без штрафа, предоплата сохраняется. Если перенос позже (меньше 48 часов), удерживается часть суммы, например 50% предоплаты (1425 руб.), а остаток можно зачесть в новую дату.
В админке это выглядит как понятные статусы и суммы:
Самые неприятные баги в бронировании обычно не про дизайн, а про "мелочи" в правилах. Из-за них администратор видит одно, клиент - другое, а в итоге появляются накладки и споры.
Одна из частых ошибок - забыть про буфер. Если зал бронируется с 12:00 до 14:00, а на уборку нужно 15 минут, следующий слот нельзя начинать в 14:00. Буфер должен быть частью правила занятости, а не подсказкой в голове админа. И часто нужно учитывать буфер и до, и после съемки.
Еще одна проблема - слишком много статусов. Когда их 10+, администратор начинает "лечить" календарь вручную. Обычно достаточно: черновик (держим слот короткое время), ожидает предоплату, подтверждена, отменена, завершена.
Третья ошибка - непрозрачные штрафы. Если правило звучит как "можем удержать часть", клиент почти всегда спорит. Лучше фиксировать условия числами: до какого времени можно бесплатно перенести, какой процент удерживается, как считаются сутки.
Четвертая - допуслуги без единиц измерения. "Фон 500" без понимания, это за час, за штуку или за смену, быстро дает неверную сумму.
Пятая - нет авто-отмены при неоплате. Тогда календарь забивается "висящими" бронями.
Короткий чек:
Чтобы веб-приложение для фотостудии не спорило само с собой, сначала зафиксируйте правила брони простыми словами. Лучше потратить 30 минут на одну страницу договоренностей, чем потом неделями ловить странные кейсы в календаре.
Базовый чек-лист, который закрывает большую часть логики:
Перед сборкой подготовьте три списка: залы (название, вместимость, расписание), тарифы (будни/выходные, минимальные часы, цена за час), допуслуги (название, цена, единица, ограничения). Примеры формулировок: "Ассистент 1500 руб/час, минимум 2 часа", "Грим 3000 руб разово, бронируется за 24 часа".
Правила удобно писать в формате "если - то": "Если до начала меньше 24 часов, перенос запрещен" или "Если отмена за 48-24 часа, штраф 30% от суммы".
Внедрение проще вести по шагам: сначала залы, календарь и базовая бронь без оплат; затем буферы, переносы и штрафы; потом допуслуги и автоподсчет суммы; в конце предоплата, статусы платежей и уведомления.
Если хотите собрать прототип без длинного цикла разработки, это удобно делать в TakProsto (takprosto.ai): вы описываете правила слотов, таблицы и статусы простым текстом, а дальше в нескольких итерациях доводите клиентский поток и админку на реальных кейсах.
Минимум — выбрать зал, дату, время начала, длительность, допуслуги и сразу увидеть итоговую сумму и предоплату. Чем меньше ручных уточнений и скрытых условий, тем выше шанс, что бронь дойдет до оплаты.
Начните с четырех сущностей: залы, тарифы, бронирования и платежи. Допуслуги вынесите в отдельный справочник, а в бронировании храните итоговую сумму и «снимок» расчета на момент создания, чтобы старые брони не менялись при обновлении прайса.
Оптимальный шаг для большинства студий — 30 минут: он достаточно гибкий и при этом не создает хаоса из «дыр» в расписании. Длительность проще всего давать из набора 1/2/3 часа, потому что это понятно клиенту и облегчает работу администратору.
Буфер должен блокировать время так же, как и сама съемка. Проще всего считать занятость интервалом от «начало минус буфер_до» до «конец плюс буфер_после» и запрещать любую бронь, которая пересекается с этим интервалом хотя бы на минуту.
Самый прозрачный вариант — разбивать по времени: часть брони до границы тарифа считать по одной цене, после — по другой. Так клиент видит честный расчет, а администратор не объясняет вручную, почему «два часа вечером» внезапно стали дороже.
Сначала посчитайте базовую стоимость аренды по времени, затем добавьте допуслуги отдельными строками и только после этого применяйте скидки и пакеты по понятным правилам. Клиенту лучше показывать две цифры: стоимость по времени и итог с услугами и скидкой.
Рабочий стандарт — предоплата 30–50% с коротким дедлайном, например 30 минут, чтобы слот не зависал. Пока платеж не получен, бронь держите в статусе ожидания, а по истечении времени автоматически отменяйте и освобождайте расписание.
Держите статусы короткими и однозначными: создан (ожидает оплату), оплачен, просрочен, возвращен, отменен. Важно, чтобы бронь становилась подтвержденной только после успешной предоплаты или явного ручного подтверждения админом, иначе календарь начнет «врать».
Сделайте ручной сценарий: администратор выбирает способ оплаты, вводит сумму, дату и комментарий, после чего переводит платеж в «оплачен». Это помогает поддерживать единый учет, даже если часть клиентов платит переводом или по счету.
Зафиксируйте правила числами и привяжите их к времени до начала, например один бесплатный перенос за 24+ часа и штрафы по диапазонам. В админке обязательно храните историю изменений и комментарий, чтобы было понятно, кто и почему переносил или отменял бронь.