

Что нужно было решить
Мастеру нужен сайт, который показывает работу и результаты, а запись, анкета, подтверждение и напоминания идут сами, без долгой переписки.
Что видит и делает клиент
Сайт мастера
Первый экран, рассказ о подходе, сертификаты и дипломы, процедуры с фото, длительностью, ценой и полным описанием, «до и после», отзывы.
Запись онлайн
Выбор процедуры, даты и свободного времени. Статусы записи: ожидает, подтверждена, отклонена, отменена, завершена.
Перенос и отмена
Клиент сам переносит или отменяет запись.
Анкета перед процедурой
Личные данные, раздел «Здоровье», раздел «Кожа и уход» и три согласия: данные верны, известны возможные реакции, согласие на обработку данных. Анкету можно пропустить и заполнить позже.
Личный кабинет
Мои записи, история визитов, профиль, уведомления, заметки мастера по процедуре, которые мастер решил показать.
Чат с мастером
Переписка на сайте и в Telegram: сообщения синхронизируются.
Отзыв после визита
Оценка, текст и фото к завершённому визиту. На сайте отзыв появляется после проверки мастером.
Промокод
Клиент вводит код при записи, система проверяет его и применяет скидку.
Запись без регистрации
Отдельная мобильная страница для профиля в соцсетях: услуги, адрес, график, запись по номеру телефона.
Запись в Telegram-боте
Мини-диалог в чате бота: процедура, дата, время. Запись можно оформить, не заходя на сайт.
Вход
Почта и пароль, Google, Telegram, восстановление пароля по ссылке на почту.
Что делает мастер в кабинете
Расписание
Рабочие часы и слоты: свободен, занят, закрыт. Клиент видит только свободное время.
Записи
Подтвердить, отклонить, завершить, отменить, архивировать. Запись за клиента вручную: сразу подтверждена, пересечения с другими записями проверяются.
Клиенты
Список с поиском по ФИО, карточка с историей записей, заметки, блокировка и разблокировка, создание и правка клиента.
Анкеты клиентов
Просмотр заполненной анкеты и правка мастером.
Редактор анкеты
Вопросы разделов «Здоровье» и «Кожа и уход» правятся без разработчика: «да/нет», «да/нет с уточнением», «свободный текст», порядок и включение. Уже заполненные анкеты не ломаются.
Заметки о процедуре
Тип кожи, чувствительность, обезвоженность, состояние, план ухода, комментарий. Для каждого пункта мастер выбирает, показывать ли его клиенту.
Уведомления
Напоминания за 24 часа и за 1 час, подтверждение, отклонение, новое сообщение, новый отзыв, новая регистрация. Шаблоны с форматированием и картинкой правятся в админке, каналы: Telegram и почта.
Рассылки
Сообщение клиентам с подсчётом получателей до отправки.
Купоны
Промокоды со скидкой в процентах или суммой, срок действия, один раз на клиента.
Аналитика
Новые клиенты, записи по статусам, заработок. Периоды: сегодня, 7 дней, 30 дней, месяц или свои даты, графики по дням, неделям и месяцам.
Контент сайта
Услуги, фото, портфолио «до и после», сертификаты, главная страница, профиль мастера. Отзывы из соцсетей мастер добавляет вручную.
Какие защитные механизмы сделаны
В анкете и записях хранятся данные о здоровье и контакты клиентов, поэтому доступ строго разделён.
Пароли
Пароль хранится только в виде необратимого хэша (bcrypt). Сброс пароля по одноразовой ссылке с ограниченным сроком, в базе лежит только хэш ссылки.
Роли и доступ
Клиент и администратор разделены на сервере: каждый запрос мастера проходит проверку роли. Клиент видит только свои записи, анкету и сообщения.
Проверка входа из Telegram
Данные входа через Telegram проверяются криптографической подписью, сравнение за постоянное время, устаревшие данные отклоняются.
Блокировка
Мастер может заблокировать клиента: вход и запись для него закрыты.
Защита записи без регистрации
Не больше 5 записей за 10 минут с одного адреса и не больше 3 в час на один телефон. Номера приводятся к единому виду, неудачная попытка не оставляет пустых клиентов.
Загрузка файлов
Только для вошедших, только JPG, PNG, WEBP, GIF и PDF, до 8 МБ, имена файлов случайные.
Проверка данных
Все входящие данные проверяются по схеме, лишние поля отбрасываются. CORS открыт только для адреса сайта.
Купоны без обхода
Одноразовость проверяется на сервере внутри той же операции, что и запись, двойное использование при одновременных кликах невозможно.
Согласия и приватность
Три согласия клиента сохраняются вместе с анкетой, на сайте есть политика конфиденциальности. Ответы анкеты хранят свои формулировки, правка вопросов не меняет уже сданные ответы.
Надёжность бота
Состояние диалога записи в Telegram хранится в базе, перезапуск сервера не теряет его. Бот пишет только тем, кто сам ему написал.
Результат
Клиент видит работы и цены, записывается сам тремя способами, заполняет анкету до визита, а мастер ведёт записи, анкеты, уведомления и аналитику в одном кабинете.