Orium Studios

PRJ-02Сауны под ключ

Your Saunas: то, что продают, ещё не существует.

Заказная CRM для строителя саун под ключ. Комнату проектируют, считают, собирают каркас и монтируют в одной системе, потому что цена зависит от формы, которая в момент решения клиента существует только как чертёж.

PRJ-02-AОбъём работ

Чем занимается бизнес.

Сауны под ключ: спроектировать комнату под пространство, которое есть у клиента, посчитать, взять предоплату, заказать материалы, собрать и смонтировать силами бригады.

Продажа происходит над чертежом. Всё дальнейшее следует из формы, о которой договорились в этом разговоре: список материалов, каркас, цена, предоплата.

В чём сложность.

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

До системы чертёж, список материалов и цена были тремя отдельными документами, сделанными тремя отдельными подходами. Три документа об одной комнате рано или поздно разойдутся, и расхождение всплывёт перед клиентом.

PRJ-02-BВыноски

Что построено.

Большая часть этого обычная CRM. Первые четыре пункта нет: это редактор чертежей для одного ремесла, около десяти тысяч строк, и планировщик на английской странице о кастомной CRM это тот же код на демо-данных. У каждого пункта указан файл, который это доказывает.

A

Редактор чертежей для саун, а не фигуры с ценами

Потянешь угол, и соседние стены двигаются вместе с ним, потому что диагональная стена даёт цену комнаты, каркас которой никто не соберёт. Площадь, расход материалов и цена идут за движением, а не пересчитываются потом вручную. Под этим лежат полки со своими привязками и толщиной, двери и окна, которые знают, с каких участков стены им можно начинаться, вентиляция, печь и подвод питания, и каждое нарисовано там, где его ставит ремесло. Это самая большая отдельная часть системы.

Доказательство

components/sauna-planner.tsx, lib/sauna-plan.ts

B

Правила в нём от заказчика, и это не настройки

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

Доказательство

lib/sauna-plan.ts · VENT_CLEARANCE_IN, POWER_FEED, BENCH_THICKNESS_IN

C

Параметры печи читаются, а не угадываются

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

Доказательство

lib/heater-spec.ts

D

Развёртки стен в одном масштабе и комплект, по которому строит бригада

Каждая стена нарисована своей развёрткой, и все в одном масштабе намеренно, чтобы две стены можно было сравнить на глаз, не читая цифр. Двери по умолчанию открываются наружу, потому что дверь внутрь, на горячий полок, это вопрос безопасности, а не вкуса, а к черновым проёмам добавляется свой запас, чтобы никто не высчитывал его на объекте. План и развёртки печатаются в PDF, и именно этот документ на деле уходит из офиса.

Доказательство

components/wall-elevations.tsx, components/sauna-plan-pdf.tsx, components/sauna-elevations-pdf.tsx

E

Карточка звонящего приходит раньше звонка

Поступает звонок, а в Telegram уже лежит карточка: кто это, номер, на который можно нажать, и последний проект, который с ним обсуждали. Контекст на месте ещё до начала разговора. Сам по себе звонок проект не двигает.

Доказательство

app/api/twilio/voice/route.ts

F

Предоплата картой и банковским переводом

Сделано на Stripe Connect, поэтому деньги приходят на счёт самого подрядчика, а не проходят через наш. ACH предлагается рядом с картой, потому что на крупной предоплате комиссия за карту это разница между несколькими долларами и несколькими сотнями. Комиссии считаются в целых центах, а при возврате возвращаются пропорционально.

Доказательство

lib/deposit-fee.ts, lib/stripe.ts

G

Электронная подпись, сделанная своими силами

Страница подписи вкладывается в настоящий PDF с обоими именами, датой и журналом действий. Брендинг берётся из карточки компании, поэтому документ выглядит как документ подрядчика, а не продавца софта.

Доказательство

supabase/migrations/028_esignature.sql, app/sign/

H

Остальной рабочий день

Товар списывается со склада, когда клиент одобряет смету, один раз, даже если вебхук сработал дважды. Выплаты бригаде идут по одному правилу вместо трёх, которые расходились. Отчёты сходятся друг с другом, потому что выручка определена ровно в одном модуле.

Доказательство

lib/inventory.ts, lib/installer-pay.ts, lib/revenue.ts

I

3 152 теста и 189 миграций

Набор тестов прогоняет 3 152 теста в 249 файлах, и каждое изменение схемы с первого дня это пронумерованная миграция. 30 из них это guard-тесты, которые читают исходный код, а не вывод, и каждый сначала должен был упасть на коде с той ошибкой, ради которой его написали, и только потом его пустили в набор.

Доказательство

supabase/migrations/ (189 файлов), lib/__tests__/

J

Намеренно без ИИ

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

Доказательство

Где ИИ на самом деле, см. /ru/ai-agents

PRJ-02-CСправка

Где это живёт.

Заказная сборка Orium Studios. Своя база, свой раннер миграций, свой деплой.

Что этот лист оставляет за кадром, и намеренно. Здесь нет ни одной цифры клиента: ни во что обошлась сборка, ни сколько он берёт, ни на какие суммы выходят его сметы, ни каков оборот бизнеса. Раскрывать их вправе только он. Нет здесь и имени владельца, и имён третьих лиц. У этого клиента есть и второй продукт, интернет-магазин: его сделали здесь, но продажами в нём занимается совсем другой человек. Этот лист описывает CRM и ничего не утверждает о том, как торгует магазин. И в этой системе намеренно нет никакого ИИ: телефония поднимает карточку звонящего до звонка, а дальше разговор ведёт человек. Ни одна строка на этом листе не говорит об ИИ у этого клиента.

Система
Your Saunas
Репозиторий
sauna-crm
Ремесло
Сауны под ключ

Файлы, названные на этом листе

  • sauna-crm · components/sauna-planner.tsx, планировщик
  • sauna-crm · lib/deposit-fee.ts, комиссии на предоплату через Stripe Connect
  • sauna-crm · lib/revenue.ts, одно определение выручки
  • sauna-crm · lib/stripe.ts, байт в байт одинаковый во всех трёх системах

Три отдельных деплоя, три отдельные базы и никаких общих данных между клиентами. Общий у них только код, который сначала доказал себя в одной из них: lib/stripe.ts байт в байт одинаковый во всех трёх репозиториях.

Журнал сборки (по-английски): что нашли и каким коммитом исправилиКо всем работам

PRJ-02-DСтоимость

Сколько стоит такая система.

Своя CRM, собранная под то, как работает твоя компания, стоит от $2 500. Подгонка одной из уже работающих систем под твой процесс стоит от $1 500. Это нижние границы, а итог считается по объёму работы.

Своя CRM
от $2 500
Подгонка готовой системы
от $1 500