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

Прежде чем рисовать экраны или выбирать инструменты, уточните, что именно означает «лучше» для ваших салонов. Мульти‑локационное приложение может решить множество задач, но если цели не ясны, вы выпустите функции, которыми никто не будет пользоваться.
Выберите 3–5 результатов и привяжите к ним численные показатели. Типичные примеры для салонов:
Эти цели становятся критериями приёмки для вашего MVP: если приложение не меняет эти метрики, оно не готово.
Операции в нескольких локациях обычно включают разные роли:
Для каждой роли запишите, что они делают ежедневно — и что им не должно быть разрешено менять.
Документируйте как «идеальный путь», так и реальность с её погрешностями:
Мульти‑локация — это не просто «добавьте поле локации». Решите заранее:
Ответы на эти вопросы заранее предотвратят болезненные переделки позже — особенно в правилах бронирования и отчётности.
Прежде чем проектировать календари или дашборды, нужен общий «источник правды» о бизнесе: где вы работаете, кто у вас работает, что вы продаёте и кто ваши клиенты. Сильная модель данных делает мульти‑локационное бронирование, ротацию и отчёты согласованными.
Каждая локация должна хранить практические операционные детали:
Совет: моделируйте «ресурсы» явно (Кресло 1, Комната окрашивания), а не как заметки. Это самый простой способ избежать двойного бронирования.
Профиль сотрудника должен включать больше, чем имя и телефон. Для планирования ротации и корректного бронирования добавьте:
Решение по дизайну: храните навыки как структурированные теги (с уровнями), чтобы услуга могла требовать «Навык: Окрашивание Уровень 2+», и движок бронирования фильтровал подходящих сотрудников.
Создайте единый карточку клиента, работающую по всем локациям. Включите:
Это предотвращает дубли карточек при записи в новые филиалы и сохраняет корректность отчётности (повторные визиты, LTV).
Определяйте услуги как объекты бронирования с:
Если вы рассматриваете услуги как каталог — а не свободный текст — вы получите чистые бронирования, меньше ошибок на ресепшн и надёжную аналитику.
Движок бронирования — это «источник правды» по доступности в локациях, по персоналу, комнатам и правилам услуг. Рассматривайте UI календаря как представление поверх этого движка, а не как сам движок.
Онлайн‑запись и бронирование на ресепшн должны обращаться к одному API и одним правилам. Иначе у вас окажется два календаря, которые конфликтуют.
Как минимум, доступность должна учитывать:
Определите правила конфликтов и применяйте их последовательно:
Чтобы календари оставались точными в реальном времени, используйте оптимистичную конкуренцию (номера версий) или кратковременные удержания (5–10 минут) во время оплаты. Это снижает гонки при попытке занять одно и то же время.
Буферы (подготовка/уборка), перерывы и обед должны быть первоклассными блоками расписания — а не заметками. Комбо‑услуги (например, стрижка + окрашивание) должны быть единым бронированием, разворачивающимся в несколько временных сегментов и, возможно, требующим разных ресурсов.
Избегайте жёсткой логики в коде. Храните политики как настройки по локации (и иногда по услуге), например:
Когда политики управляются данными, их можно быстро менять без правок кода и поддерживать одинаковое поведение в вебе, мобильном приложении и на ресепшн.
Ротация — это то место, где мульти‑локации либо работают честно и предсказуемо, либо превращаются в хаос. Рассматривайте планирование как набор прозрачных правил плюс безопасный способ обработки исключений.
Большинству салонов полезно поддерживать несколько шаблонов ротации:
Практичный подход — хранить шаблоны как переиспользуемые расписания (например, «Центр — Неделя A»), затем генерировать смены на диапазон дат.
Справедливость — это не «всем одинаково», а «правила видимы и последовательны». Решите, как вы будете распределять:
Встраивайте это в логику планировщика как мягкие цели (предпочтения) или жёсткие правила (ограничения). Например: «Каждый стилист должен получить хотя бы один прайм‑слот в неделю» (цель) против «Старший колорист должен быть в субботу» (правило).
Планировщик будет умным ровно настолько, насколько вы зададите ограничения. Общие ограничения:
Моделируйте это как структурированные данные, а не заметки, чтобы система предупреждала о конфликтах до публикации.
Даже лучший план нуждается в исключениях. Предоставьте инструменты для:
Это сохраняет гибкость расписания без потери ответственности — важно при спорах, вопросах по зарплате или проверках соответствия.
Когда у вас несколько локаций, «кто что может» становится не менее важным, чем функции бронирования. Права защищают приватность клиентов, снижают дорогостоящие ошибки и повышают доверие к цифрам — особенно когда менеджеры, ресепшн и стилисты работают в одной системе.
Начните с того, какие права нужны каждой роли для просмотра и редактирования:
Затем добавьте правила кросс‑локаций. Например, ресепшн может бронировать только для своей точки, а региональный менеджер — просматривать календари по всем локациям, но не редактировать расчёт зарплаты.
Вместо одного большого права «админ», разбейте доступы по функциям:
Это упрощает повседневную работу и ограничивает чувствительные действия нужными людьми.
Утверждения — простой способ избежать тихих потерь маржи и хаоса в расписании. Типичные триггеры:
Делайте утверждения быстрыми: показывайте причину, влияние (сумма, затронутая запись) и кто должен одобрить.
Журнал аудита должен отвечать: что изменено, кто изменил, когда и откуда. Отслеживайте правки записей, корректировки выплат/комиссий, возвраты и изменения запасов. Добавьте фильтры по локации, сотруднику и дате, чтобы владельцы могли быстро решать споры без долгого копания в сообщениях.
Касса — это место, где запись превращается в выручку, поэтому ей нужно быть быстрой для ресепшна и точной для отчётов.
Начните с «суммы по доставленным услугам», подтягиваемой из записи: услуги, длительность, сотрудник(и) и локация. Затем разрешите ресепшн быстро добавить позиции, не покидая экрана: доп. услуги, розничные товары, скидки (промокод или вручную), чаевые и налоги.
Сделайте порядок вычислений предсказуемым (например: скидки применяются к услугам, налог считается после скидки, чаевые — пост‑налог). Что бы вы ни выбрали, поддерживайте консистентность между локациями, чтобы отчёты были сопоставимы.
Решите, что разрешать:
Также определите поведение по частичным платежам: можно ли оставлять счёт с балансом, или каждая запись должна быть полностью оплачена в день оказания услуги? Если разрешаете кредиты, уточните, когда услуга считается «оплаченной» для целей комиссий и отчётности.
Возвраты и аннулирования должны требовать причины (выпадающий список + опциональная заметка), фиксировать исполнителя и сохранять запись в аудите. Разграничьте понятия:
Блокируйте чувствительные действия правами (см. /blog/permissions-and-audit-logs), чтобы персонал не мог легко обходить правила.
Выберите провайдеров платежей и способ отправки чеков (email/SMS) заранее — они влияют на модель данных. Даже если интеграция с бухгалтерией отложена, храните аккуратные финансовые записи: счёт, позиции, попытки оплаты, успешные платежи, чаевые, налоги и возвраты. Такая структура облегчает будущие экспорты и надёжную панель аналитики.
Ваша аналитика должна быстро отвечать на два вопроса: «Сколько мы заработали?» и «Почему это изменилось?» Начните с небольшого, согласованного набора показателей, чтобы каждая локация отчитывалась одинаково.
Минимум стандартизируйте:
Опишите, как вы будете решать пограничные случаи (разделённые платежи, частичные возвраты, подарочные карты, депозиты), чтобы дашборды не становились предметом спора.
Обеспечьте лёгкое сравнение по:
Практичный паттерн: строка заголовков (чистая выручка, записи, средний чек), затем таблицы с возможностью клика на локацию или сотрудника для детализации.
Выручка — это результат; операции — рычаги. Включите:
Эти KPI помогают объяснять «почему», не требуя сложного анализа.
Держите фильтры простыми и всегда видимыми: диапазон дат, локация, сотрудник, услуга. Не прячьте важное за «расширёнными настройками».
Каждый отчёт должен экспортироваться в CSV с теми же колонками, что показаны на экране (плюс ID и временные метки). Это упрощает передачу данных бухгалтерам, кадрам или BI‑инструментам.
Комиссии — то место, где выигрывается или теряется доверие. Сотрудники должны видеть прозрачные расчёты, менеджеры — быстрые проверки, а владельцы — суммы, готовые к зарплате без хаоса в таблицах.
Начните с поддержки распространённых правил и показывайте их в настройках услуг:
Для мульти‑локации разрешайте назначать планы по локации, роли или индивидуально. Стилист, который работает в другом филиале, может получать по своему домашнему плану или по плану филиала — приложение должно поддерживать оба варианта.
Упростите ввод данных для расчёта зарплаты, но сделайте его гибким:
Здесь же определите, считается ли комиссия с gross (до скидок) или net (после) и как учитывать возвраты.
Реальная жизнь порождает исключения: переделы, чарджбеки, доброжелательные скидки и бонусы. Добавьте тип записи Корректировка с требованием:
Такой журнал уменьшит споры и упростит объяснение итогов позже.
Генерируйте ведомость в понятном виде:
Менеджеры должны видеть сводку по локации с опцией экспорта для кадров и расчёта зарплаты. При интеграции с POS согласуйте категории ведомости с настройками кассы для удобной сверки (см. /blog/build-salon-pos-payments).
Учёт запасов опционален для некоторых салонов, но если вы продаёте розницу или хотите контролировать расход расходников (краска, окислитель, перчатки), базовый учёт предотвратит неожиданные нехватки и упростит отчётность.
Начните с простого каталога товаров с поддержкой нескольких локаций. Каждый товар должен иметь: SKU/штрихкод (опционально), название, категорию (розница vs расходник), себестоимость, цену и текущее количество на каждой локации. Для расходников добавьте флаг «не для продажи», чтобы их можно было учитывать без появления в розничном меню.
Мульти‑локационные салоны нуждаются в трансферах. Сделайте это лёгким: выберите «Из локации», «В локацию» и количество — и создайте запись о переводе, чтобы обе точки обновили остатки.
Для инвентаризации поддерживайте быстрые циклические подсчёты (подсчитать часть ассортимента) и полные списания (в конце месяца). Храните корректировки с причиной (пересчёт, брак, истечение срока), чтобы владельцы видели закономерности.
Оповещения о низком запасе должны быть на уровне локации. Позвольте персоналу задавать порог для заказа и опционально привязывать поставщика и размер упаковки. Избегайте превращения учёта в полноценную систему закупок — большинству салонов достаточно видеть «что и где заканчивается».
Товары розницы должны продаваться через тот же поток кассы, что и услуги, чтобы инвентарь и выручка совпадали. При добавлении товара в чек система должна:
Это сохраняет отчёты в согласии с реальностью без лишних шагов на ресепшн.
Приложение для салона живёт или умирает скоростью работы у стойки и удобством на телефоне. Стремитесь к небольшому набору ключевых экранов, которые быстро загружаются, хорошо смотрятся на тач‑устройствах и помогают персоналу фокусироваться на следующем клиенте.
Сделайте навигацию вокруг того, что происходит каждый час:
Остальное должно быть в один клик, а не в основном потоке.
Персонал ресепшна должен уметь выполнять три действия за <10 секунд:
Календарь по умолчанию — вид дня с крупными зонами для нажатия и минимальным скроллом. Используйте липкий заголовок (дата, локация, фильтр), чтобы персонал не «терялся».
Статусы должны подсказывать следующее действие, а не только констатировать факт. Практичный набор:
Цвета помогают, но всегда добавляйте текст для доступности.
Занятые команды ошибаются. Добавьте мягкие механизмы:
Если вы планируете MVP, приоритет отдайте этим базовым потокам перед настройками и продвинутой аналитикой. Для чистой последовательности релизов смотрите /blog/rollout-plan-mvp-pilot-training.
Приложение для салона живёт или умирает надёжностью: бронирования не должны задерживаться, персонал не должен терять доступ в смену, а владельцы должны доверять цифрам. Начните с проверенных инструментов, которые ваша команда умеет поддерживать.
Большинство мульти‑локационных приложений хорошо работают с классическим набором:
Если вы будете принимать платежи, выбирайте провайдера с хорошей документацией и вебхуками (например, Stripe) и строьте систему так, чтобы события оплаты можно было безопасно ретраить.
Если хотите двигаться быстрее на первом рабочем варианте (календарь + касса + дашборды), подход vibe‑кодинга может помочь. Например, Koder.ai позволяет командам сгенерировать React‑приложение с Go‑бэкендом и PostgreSQL из структурированного чата, использовать режим планирования перед сборкой и экспортировать исходный код, когда вы будете готовы перейти на внутреннюю разработку.
Начните с 3–5 измеримых результатов и укажите целевые числа (например, снижение неявок с 12% до 7%). Используйте эти метрики как критерии приёмки MVP.
Практические цели для салонов часто включают:
Перечислите каждую роль и их ежедневные задачи, а затем определите, что они не должны иметь права изменять.
Типичные роли:
Рассматривайте мульти‑локацию как набор правил бизнеса, а не как простое поле «локация».
Решите заранее:
Эти решения влияют на логику бронирования и структуру отчётности — их изменение позже дорого обходится.
Моделируйте ключевые сущности как структурированные данные (не свободный текст), чтобы расписание и отчёты оставались корректными:
Постройте единый движок доступности и используйте его во всех каналах (онлайн + фронт‑деск).
Как минимум, доступность должна учитывать:
Чтобы предотвратить гонки при бронировании, используйте (5–10 минут) или при сохранении записи.
Поддерживайте повторно используемые шаблоны ротации и генерируйте смены на диапазон дат, а не собирайте каждую неделю вручную.
Полезные шаблоны:
Держите вмешательства под контролем: утверждения и журнал аудита для обменов и внеочередных изменений.
Используйте ролевые права доступа по локации и по функциям, затем добавьте согласования для действий с высоким риском.
Общие триггеры для утверждений:
Также храните удобные для поиска журналы аудита (кто/что/когда/откуда) для возвратов, правок расписания и изменений, влияющих на зарплату. Для смежной информации см. /blog/permissions-and-audit-logs.
Постройте кассу вокруг предсказуемого счёта, сформированного из записи, и дайте возможность быстро добавить позиции:
Заранее определите правила по частичным платежам (разрешены ли), а также различайте аннулирование (void) и возврат (refund) с требованием указать причину и проверкой прав.
Стандартизируйте определения прежде, чем строить дашборды. Минимальные показатели:
Операционные KPI, объясняющие изменения:
Сделайте правила комиссий явными и проверяемыми, синхронизируйте их с расчётом на кассе.
Распространённые модели:
Для мульти‑локационных команд назначайте планы по , или , и определите, считается ли комиссия с (до скидок) или (после скидок), а также как возвраты влияют на выплаты. Внесение корректировок должно требовать причины и утверждения.
Все отчёты должны экспортироваться в CSV с постоянным набором колонок (включая ID и метки времени).