ProfiLab
← ПроектыСобственный продукт

Hourgrid — система для площадок, которые продают час

Съёмочные и фотостудии, залы и переговорные, коворкинги, репетиционные точки, кабинеты. Расписание, брони, деньги, клиенты и команда в одном месте — и публичная страница, где гость сам выбирает свободный час.

  • Next.js 16 · TypeScript
  • Supabase · PostgreSQL · RLS
  • Stripe · подписки и Connect
  • Anthropic SDK · Groq
  • 3 языка

В цифрах

5ролей с разграничением в базе, а не в разметке
3языка интерфейса: английский, русский, испанский
16разделов приложения плюс публичные страницы
41таблица базы, 84 миграции

Задача

Площадка, которая продаёт час, живёт в общем календаре и в таблице с прайсом. Пока брони ставит один человек, это работает; как только их двое, две брони встают на один зал одновременно, и находят это в день съёмки. Вечерний тариф и переработку считают в уме и забывают выставить, заявки расползаются по WhatsApp, Instagram и почте, а ссылку на таблицу с телефонами и суммами видит каждый, кому её переслали. Ошибка тут стоит не времени, а зала: накладка — это отменённый съёмочный день.

Что умеет

Расписание, где две брони не встанут рядом

День и неделя: часы по вертикали, залы или дни колонками, линия текущего момента. Пересечение запрещено самой базой — ограничением по диапазону, а не проверкой в форме: второй одновременный запрос такую проверку обходит. Буфер на уборку входит в занятый отрезок, заявка придерживает время, отмена его освобождает.

Публичная страница брони

По своему адресу площадки посторонний без учётной записи выбирает зал, день и час, видит занятое зачёркнутым и оставляет заявку. Цену считает сервер по правилам площадки, занятость отдаётся без имён гостей, на поток стоят потолки. Восемнадцать проверок сделаны от лица постороннего: состав ответа, отказы на пересечение, часы работы, горизонт записи, попытка достать таблицы напрямую.

Цена, зависящая от времени суток

55 + 55 + 90 = 200, если третий час попал в вечерний тариф: сумма собирается по отрезкам, а не умножением на одну ставку. Считается переработка с множителем и округлением блоками, предоплата и залог за ущерб лежат в разных полях, правила отмены заданы ступенями. Согласие гостя с договором сохраняется снимком текста — спор будет о том, с чем человек соглашался тогда.

Захват: фото, документ и голос становятся черновиком

Прислать можно текст, снимок чека, PDF или голосовое. Разбор предлагает черновики пяти видов — бронь, проводка, задача, обращение, клиент — и отдельные строки дополнительных услуг с суммами. Модель ничего не записывает сама: запись создаёт человек нажатием, и ошибка разбора стоит одного «отбросить». Разбор идёт на сервере, поэтому свёрнутое приложение или моргнувшая сеть его не рвут.

Деньги, которые нельзя задвоить

Итоги брони — вычисляемые колонки базы, их нельзя сложить в коде неправильно; оплачено пересчитывается триггером из истории платежей, а не хранится отдельным полем. Доходная проводка не может ссылаться на бронь — иначе одна оплата попала бы в месяц дважды. Список операций за месяц, свод по залам, каналам и статьям, порог безубыточности; границы месяца считаются в поясе площадки, а не по UTC.

Клиентская база, которая не льстит

Срезы: все, постоянные, пропадают, риск, дубли. «Пропал» считается от ритма самого клиента: тот, кто ходит раз в неделю, пропал через три недели тишины, а тот, кто раз в квартал, — нет. Дубли ищутся степенью похожести: совпавший телефон — 100 %, «ё» вместо «е» — 95 %, разные фамилии с общим началом порога не проходят. Без этого выручка одного человека поделена между двумя карточками.

Пять ролей с разграничением в базе

Владелец, управляющий, администратор, бухгалтер, сотрудник. Сотрудник не «не видит» деньги — они до него не доезжают: политики на брони, клиентов и проводки требуют роль, а своё расписание он получает функцией, где денежных колонок физически нет. Личные траты владельца не увидит даже управляющий прямым запросом. Права проверены запросами из-под настоящих токенов, а не чтением политик.

Обращения и время первого ответа

Заявки приходят по ссылке-каналу — форма на сайте, Tilda, Make, Zapier — и через собственного бота площадки в Telegram: бот хозяина, а не общий. Система отмечает момент первого ответа и сверяет его с нормативом площадки. AI-ресепшн умеет предложить свободное время и довести до заявки тем же путём, что публичная страница; каждый машинный ответ помечен как машинный.

Команда, задачи и смены

Приглашение ссылкой, а не письмом: по токену видно только название площадки и роль, ссылка принимается один раз. Задачи сортируются по срочности, исполнитель двигает статус и пишет следующий шаг. Смены — недельная сетка «люди × дни» с закреплённой колонкой имён; ставка копируется в смену снимком, поэтому поднятая ставка не пересчитывает прошлые месяцы.

Экраны

Снимки сделаны на демонстрационных данных: имена, суммы и брони придуманы. Расписание настоящей площадки мы показывать не станем — там чужие клиенты и чужие деньги. Интерфейс переключается на английский, русский и испанский.

Час, помещение, клиент — сетка дня вместо бумажного журнала на ресепшене
Час, помещение, клиент — сетка дня вместо бумажного журнала на ресепшене
Пересланное голосовое становится черновиком брони — с исходником рядом и правом всё поправить
Пересланное голосовое становится черновиком брони — с исходником рядом и правом всё поправить
Итог месяца одним числом: выручка, расходы, долги и точка безубыточности
Итог месяца одним числом: выручка, расходы, долги и точка безубыточности
Среднее время ответа на заявку — цифра, которую до нас никто не считал
Среднее время ответа на заявку — цифра, которую до нас никто не считал
База сама показывает, кто давно не приходил и кто в зоне риска
База сама показывает, кто давно не приходил и кто в зоне риска
Публичная страница брони: гость сам выбирает свободный час — без звонков и переписки
Публичная страница брони: гость сам выбирает свободный час — без звонков и переписки

Что это заменяет

Слева — то, как расписание зала ведут в большинстве небольших площадок. Справа — то же самое одной системой.

Как ведут сейчас

Таблица и чат

не стоит ничего ровно до первой накладки

  • Общий календарь и договорённость «сначала спроси в чате»
  • Прайс в голове, вечерний коэффициент и переработка — руками
  • Заявки в WhatsApp, Instagram и на почте, без учёта времени ответа
  • Ссылку на таблицу видят все, кому её переслали
  • Вечером всё это переносится в таблицу заново

Hourgrid

Одна подписка

регистрация своя, демонстрационные данные внутри, настраивать руками нечего

  • Расписание, брони, деньги, клиенты и команда в одном месте
  • Публичная страница брони на адресе площадки
  • Цена по времени суток, переработка и залог считаются сервером
  • Пять ролей с разграничением на уровне строки в базе
  • Фото, PDF и голосовое превращаются в черновик записи

Цену на этой странице не называем: она меняется, и актуальная всегда на сайте продукта.

Чем отличается от таблицы и общего календаря

Календарь и таблицаHourgrid
Два человека и один залДва администратора ставят брони одновременно, накладку находят в день съёмкиПересечение запрещено ограничением базы вместе с буфером на уборку; заявка придерживает время, отмена его освобождает
Цена вечера и выходногоПрайс в голове или в таблице, вечерний коэффициент и переработку считают руками и забывают выставитьПравила цены по времени, переработка с множителем и округлением, доплаты за услуги — сумму собирает сервер по отрезкам
Кто что видитОдна таблица на всех: у кого есть ссылка, тот видит и суммы, и телефоны, и заметки о клиентахПять ролей, разграничение на уровне строки в базе; сотруднику денежные колонки не приходят вовсе, а не прячутся стилями
Заявка с сайта и из мессенджераСообщения расползаются по WhatsApp, Instagram и почте; отвечают когда заметят, скорость ответа никто не считаетКанал по ссылке и свой Telegram-бот сводят заявки в один список, время первого ответа фиксируется и сверяется с нормативом
Занести то, что случилось за деньВечером переносить чеки, договорённости из переписки и «свет 100, трансфер 50» в таблицу рукамиФото, PDF или голосовое превращаются в черновик брони, проводки или задачи; человек проверяет сумму и подтверждает
Часовой пояс и перевод стрелокЗарубежный сервис показывает время браузера; в сутки перевода стрелок сетка расходится с подписямиВремя хранится с поясом и показывается в поясе площадки; сутки в 23 и 25 часов проверены отдельными тестами

Сравниваем не с конкретными программами, а с тем, как расписание ведут на большинстве небольших площадок: общий календарь, таблица с прайсом и переписка в мессенджерах. Имена не называем намеренно — тарифы и состав функций меняются быстрее, чем страница. Если ваша программа что-то из правого столбца уже умеет, напишите: поправим. Неудобная таблица лучше неправдивой.

Как идёт запуск

Из всех наших продуктов этот стартовал сильнее всего. За первые три дня — больше сотни заявок и первые заказы: спрос на систему для тех, кто продаёт час, оказался острее, чем мы рассчитывали.

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

Технологии

Next.js 16 и TypeScript в строгом режиме на стороне интерфейса, Supabase и PostgreSQL на стороне данных: 41 таблица и 84 миграции. Права доступа живут там же, в базе, а не в разметке и не в проверке на входе в экран: сотрудник не увидит чужого, даже если обратится к данным в обход интерфейса. Итоги броней и оплаченные суммы тоже считает база — вычисляемыми колонками и триггерами, чтобы одно и то же число не собиралось в двух местах по-разному.

Разбор присланного делят две модели: Anthropic для текста и документов, Groq для расшифровки речи. Оформление — Tailwind 4 и свой слой стекла поверх него, интерфейс на английском, русском и испанском через next-intl, подписки и приём оплаты — Stripe и Stripe Connect, ошибки собирает Sentry. Время везде хранится с поясом и показывается в поясе площадки: сутки в 23 и 25 часов проверены отдельными тестами, потому что в день перевода стрелок сетка расходится с подписями именно у тех, кто про это не подумал.

Продаёте время своего помещения?

Студия, зал, коворкинг, репетиционная точка, кабинет — если единица продажи у вас час, посмотрите систему изнутри: регистрация своя, демонстрационные данные внутри, настраивать руками ничего не нужно. А если ваше расписание устроено иначе, чем у всех, — расскажите, и посмотрим, что под него поправить.

Заполнить анкетуОткрыть gethourgrid.com
WhatsApp