— 19 регистраций — 8 документов создано — 15 организаций заведено
Что сказали тестеры и что починил:
🗣 «AI-интервью задаёт непонятные вопросы — что такое CRM, API, UX?» → Переписали все 12 вопросников простым языком. Запретили AI использовать термины без пояснения.
🗣 «Диктую "ООО Вершина" — бот пишет "Oromash"» → Добавили бизнес-словарь в Whisper, нормализацию (И.П. → ИП), автокавычки.
🗣 «Случайно закрыл вкладку — интервью потерялось» → Добавили защиту от случайного ухода со страницы.
🗣 «Не могу создать счёт, пока не заполню все реквизиты» → Убрали обязательный профиль. Теперь документ — сразу, реквизиты — потом.
🗣 «На телефоне таблица позиций не влезает» → Таблицы → карточки на мобилке, адаптировали 12 компонентов.
Строю продукт открыто — каждую неделю реальные цифры.
Вчера — юридическая точность промптов и мобильная адаптация. Сегодня — фрилансер перестал быть привязан к одному ИП. —
🏢 Организации — отдельная сущность
Раньше реквизиты хранились в профиле пользователя. Одно ИНН, одно название, один расчётный счёт. Но фрилансер может быть самозанятым Ивановым И.И. для мелких заказов и ИП Иванов для крупных. Или закрыть ИП и перейти на самозанятость — а старые документы должны остаться с прежними реквизитами.
Вынес организации в отдельную таблицу. 12 полей, связь 1:N с пользователем, флаг «по умолчанию». Миграция перенесла существующие данные из профиля в первую организацию автоматически — ни один пользователь ничего не потерял.
CRUD API, страница управления в кабинете, выбор организации во всех четырёх формах документов. Бот: «Мои реквизиты» стали «Мои организации» — список с ⭐️ у основной, добавление новых, переключение между ними.
—
🔀 Выбор организации при создании документа
Если организация одна — всё работает как раньше, пользователь ничего не замечает. Если две и больше — перед созданием счёта, акта, КП или договора появляется шаг «Выберите организацию-исполнителя» с inline-кнопками. Выбранная организация прокидывается в генератор и записывается в документ.
Архитектурно: _maybe_choose_org() — единый хелпер для всех четырёх FSM. Один паттерн, четыре точки вызова, ноль дублирования.
—
✏️ Редактирование всех документов в кабинете
Счета и акты можно было редактировать после создания. КП и договоры — только при создании в модалке превью. После сохранения — read-only. Почему? Потому что canEdit проверял только invoice и act.
Перенёс полную логику редактирования из модалки в страницу документа. КП: заголовок, введение, секции с пунктами, стоимость по позициям с автоподсчётом, срок действия, следующие шаги. Договор: преамбула, секции с параграфами (добавление/удаление), сумма. Теперь документ, созданный голосом в боте в 2 часа ночи, можно спокойно отредактировать утром в кабинете.
—
🧹 Три мелочи, которые раздражали
Бейджи без подписи. Документы из бота через «быстрые документы» создавались с source="quick". Фронтенд знал только "bot" и "web". 27 документов висели без метки. Поменял на "bot", обновил существующие одним UPDATE.
Навигация назад. Заходишь в раздел «Счета», открываешь конкретный счёт, нажимаешь «К документам» — попадаешь в «Все». Теперь кнопка говорит «К счетам» и возвращает в раздел счетов. Query-параметр ?tab=invoice — просто и надёжно.
Поиск в боте. Кнопка «🔍 Поиск документа» в «Мои документы». При этом документы уже разбиты по разделам, а в кабинете — полноценный поиск с фильтрами. Убрал. Меньше кнопок — меньше когнитивной нагрузки.
—
💡 Инсайт дня
Мультиорганизации — это не фича для корпораций. Это реальность фриланса. Самозанятый открывает ИП — и ему нужны оба набора реквизитов. Дизайнер работает как физлицо для российских клиентов и как ИП для зарубежных. Если продукт привязывает человека к одному юрлицу — он не понимает свою аудиторию.
—
🎯 Итого за день: модель Organization с CRUD API и миграцией, выбор организации в боте при 2+ орг, полное редактирование КП и договоров в кабинете, фикс бейджей source, навигация по табам, чистка UI.
Вчера — бриф стал редактируемым и клиент, который не пришёл. Сегодня — юридическая точность, управление документами и мобильный кабинет. —
⚖️ Промпты КП и договоров — переписаны с нуля КП звучало как «рады предложить вам наши услуги». Теперь — как senior account director: результат-ориентированные заголовки, консалтинговая лексика, запрет на клише вроде «команда профессионалов» и «индивидуальный подход».
В договорах нашёл критический баг: ссылка на ст. 139 ГК РФ в NDA-секции. Эта статья удалена из Гражданского кодекса с 2008 года. Заменил на ФЗ-98 «О коммерческой тайне» и ст. 1465–1472 ГК РФ. Добавил антикоррупционную оговорку (ФЗ-273), электронный документооборот (ФЗ-63), персональные данные (ФЗ-152), возврат материалов. Усилил ссылки по всем типам: услуги, подряд, NDA. —
💰 Стоимость: пять мест, где терялась цена фрилансера
Фрилансер ставит итоговую стоимость 700 000 в кабинете. Открывает договор — в тексте «80 000», в итого «700 000», а прописью «восемьдесят тысяч». Три разных числа в одном документе.
Причина: final_price не прокидывался в пять точек — бот-PDF, текст секции «Стоимость», итого договора, сумма прописью, КП. В каждом месте LLM подставлял свою оценку вместо реальной цены.
Исправил все пять. Добавил regex-постпроцессинг текста секции «Стоимость». И защитный пересчёт суммы прописью при рендере PDF — даже если в БД старые данные, PDF будет корректным. —
🗑 Удаление документов и проектов
Раньше документы и проекты можно было только создавать. Тестовый договор, неудачное КП, проект-черновик — всё копилось. Теперь на каждой карточке — иконка корзины. Диалог подтверждения, каскадное удаление связанных данных (бриф, ТЗ, интервью, материалы). Документы при удалении проекта сохраняются — у них обнуляется project_id. —
📱 Мобильная адаптация — 12 компонентов
Прошёлся по всему кабинету глазами мобильного экрана 320px. Поиск с фиксированной шириной вылезал за экран. Бейджи проектов толкали контент. Модалки упирались в края. Кнопки «Сохранить / Бриф / ТЗ» не влезали в шапку.
Исправил: адаптивные padding и margin, truncate на длинных текстах, скрытие второстепенных элементов на мобилке, компактные кнопки, overflow-x-auto на табах. —
💼 Кнопка «Мой кабинет»
Веб-кабинет с полным функционалом существовал давно: создание документов, контрагенты, реквизиты, PDF. Но попасть туда можно было только через проект или вручную набрав URL.
Добавил кнопку «Мой кабинет» в главное меню бота. Обычная ссылка — открывается в браузере, не Mini App. Теперь фрилансер, которому не нужны проекты и AI-брифование, может просто работать с документами в кабинете. Плюс после создания каждого документа в боте — кнопка «Открыть в кабинете». —
💡 Инсайт дня
Удалённая статья закона в шаблоне договора — это не баг, это репутационный риск. Если фрилансер отправляет клиенту NDA со ссылкой на несуществующую норму — доверие к сервису обнуляется за секунду. AI генерирует текст, но ответственность за юридическую корректность — на продукте. —
🎯 Итого за день: переработка промптов КП и договоров, исправление 5 точек потери цены, удаление документов и проектов, мобильная адаптация 12 компонентов, кнопка «Мой кабинет» в боте. —
📍Skutr Docs — День 10. Когда клиент не пришёл, а бриф нужен
Вчера — голос, который понимает бизнес. Сегодня — два больших куска: полноценное редактирование брифа в веб-кабинете и сценарий, когда клиент не пришёл на интервью.
—
📝 Бриф стал редактируемым
Раньше бриф в веб-кабинете был read-only — AI сгенерировал, фрилансер смотрит. Но на практике бриф всегда нужно подправить: уточнить ЦА, добавить интеграцию, поменять сроки. Теперь все 9 полей брифа редактируются прямо в кабинете. А после правок — кнопка «Перегенерировать ТЗ», которая пересоздаёт техническое задание и стоимость из обновлённого брифа.
—
💰 Валидация: нет цены — нет документа
Обнаружил, что фрилансер мог сохранить проект и скачать PDF без указания итоговой стоимости. Получался документ с пустым полем цены — такое отправлять клиенту нельзя.
Теперь: ручное сохранение блокируется без final_price > 0. PDF-генерация — тоже. И на фронте (toast-уведомление), и на бэкенде (400-ошибка). При этом автосохранение каждые 30 секунд работает без ограничений — чтобы промежуточные правки не терялись.
—
✏️ Мелочи, которые важны
Название проекта теперь редактируется inline — клик на заголовок, ввод, Enter. PDF переименован в «Бриф и ТЗ» — потому что теперь включает и бриф. Обновлены промпты для всех 12 типов проектов.
—
🔀 Когда клиент не пришёл на интервью
Вторая часть дня. Фрилансер создаёт проект, выбирает путь А (AI-интервью), отправляет ссылку клиенту. А клиент не приходит. Фрилансер забрифовал его сам — по телефону, в переписке — и хочет загрузить материалы в уже созданный проект. А UI для этого не было. Экран «Ожидаем клиента» крутил спиннер и ждал. Бесконечно.
Добавил кнопку «Загрузить материалы самостоятельно» на экран ожидания. Полноценная форма: текст + голос + фото + файл. Загрузил — нажал «Генерировать ТЗ» — pipeline подхватывает.
Но под капотом — pipeline падал. Проект создан с brief_source = "interview", pipeline шёл в ветку интервью, интервью пустое — ошибка. Загруженные материалы рядом лежат, но pipeline их не видит.
Исправил: теперь pipeline определяет источник по факту, а не по метке. Есть данные интервью — берёт их. Нет, но есть загруженные материалы — upload-путь.
—
💡 Инсайт дня
Продукт ломается не на happy path. Клиент не пришёл на интервью — это не edge-кейс, это половина реальности фрилансера. Если продукт не умеет с этим работать — он игрушка, а не инструмент.
—
🎯 Итого за день: редактируемый бриф с перегенерацией ТЗ, валидация итоговой стоимости, inline-редактирование названия, загрузка материалов в существующий проект, автодетекция источника данных в pipeline.