справочник · для команды

Как всё устроено

Путь пользователя, расчёт заполненности, сборка резюме, сохранение данных и метрики — простыми словами, на каждый «а как это работает?». Документ отражает текущее поведение продукта.

обновлено 2026-06-13 · 13 разделов
01 / 13

Что за продукт и в чём идея

Одной строкой: «Один профиль. Резюме под каждую позицию.»

Иерархия ценности

Ядро продукта — подробный профиль кандидата. Он заполняется один раз и становится накопительным активом: под каждую вакансию из него генерируется отдельное PDF-резюме, где AI сам расставляет акценты под целевую роль. Разговор с AI-интервьюером — это механизм, который делает глубокое заполнение безболезненным, а не сама ценность. Порядок подачи во всех текстах продукта одинаковый: сначала «зачем» (один профиль → резюме под каждую позицию), потом «как» (разговор вместо анкеты), потом выгода со временем (чем полнее профиль, тем сильнее каждое следующее резюме; новая вакансия — один клик, а не вечер переписывания).

Чем это лучше «просто попросить ChatGPT»

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

Чем продукт сознательно НЕ является

  • Не джоб-борд и не матчинг с вакансиями — этой стороны нет вообще.
  • Не генератор резюме по шаблону — источник правды профиль, PDF лишь его проекция под роль.
  • Не карьерный коуч — интервьюер собирает факты, а не даёт советы.
  • Не «чат-бот про карьеру» — разговор есть, но это инструмент заполнения, а не продукт.
02 / 13

Путь пользователя: от входа до PDF

Целевой сценарий демо: новый пользователь скачивает первый PDF за один сеанс, ~20–30 минут.

Шаг 0 — вход

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

Шаг 1 — онбординг-кино (только при первом входе, ~60–90 секунд)

Три короткие режиссированные сцены в порядке иерархии ценности: 1. «Один профиль → резюме под любую роль» — показываем результат: из одного профиля собираются три разных резюме. 2. «Просто общайся» — показываем механизм: реплика в чате превращается в заполненные поля. 3. «Теперь попробуй сам» — живое мини-интервью: пользователь называет имя, желаемую роль и опыт. Ответы финальной сцены сразу записываются в настоящий профиль: имя, целевая роль, грейд (если ассистент уверенно вывел его из опыта) и короткое «о себе». Кино можно пропустить в любой момент — это фиксируется в метриках.

Шаг 2 — тур по интерфейсу (4 подсказки, только на десктопе)

Подсвечиваются по очереди: разделы профиля → чат (с упоминанием голосового ввода) → кнопка PDF (с честным текстом, что она покажет недостающее) → автосохранение. На телефоне тур не показывается — он водит по десктопной раскладке.

Шаг 3 — развилка «импорт или разговор» (один раз)

Если профиль почти пуст, чат вместо автостарта один раз предлагает выбор: «Есть старое резюме? Загрузить PDF/DOCX — разберу за минуту, и продолжим с того, что есть. Или просто начнём разговор». Импорт — самый быстрый путь к ценности для человека с готовым резюме.

Шаг 4 — интервью

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

Шаг 5 — прогресс всегда на виду

В сайдбаре: процент заполнения, текущая стадия и чек-лист «до первого PDF» (имя, целевая роль, место работы, навыки) — недостающие пункты кликабельны и отправляют вопрос в чат. Кнопка PDF в шапке показывает прогресс («PDF · 46%») — цель и дистанция до неё видны постоянно. После набора минимума чек-лист сменяется подсказкой «Дальше: …» — что заполнить следующим.

Шаг 6 — первый PDF

Как только собран минимум — кнопка открывается, и пользователь скачивает резюме под выбранную роль. Черновое резюме — само по себе мотиватор дозаполнить: «вот что есть сейчас — а будет сильнее».

Шаг 7 — повторный визит (момент «вау»)

Пользователь добавляет вторую целевую роль (например, грейд выше или смежную) — и второй PDF под неё собирается в один клик из того же профиля, с другими акцентами. Это и есть прожитое ядро ценности «один профиль → N резюме».

03 / 13

Профиль: из чего состоит

8 разделов

Общие сведения · Целевые роли · Рабочий опыт · Проекты и кейсы · Методы и инструменты · Навыки · Образование · Ожидания и ограничения. Всего порядка 50 полей.

Простые поля и карточки

Разделы бывают двух видов. Простые — один набор полей (общие сведения, навыки, ожидания). Карточные — записей несколько: каждое место работы, каждый проект, каждая целевая роль — отдельная карточка со своими полями. Заполненные карточки сворачиваются в компактную строку-сводку, новые открыты; когда ассистент пишет в свёрнутую карточку — она раскрывается сама.

Кейсы — связаны с местами работы

Кейс (проект) заполняется один раз в разделе «Проекты и кейсы», а потом привязывается ссылкой к месту работы и/или методу. Один кейс можно показать в нескольких местах без дублирования. При экспорте кейсы подтягиваются к «своему» месту работы.

Профиль — единственный источник правды

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

Фото

Загружается кликом или перетаскиванием, ужимается прямо в браузере, пользователь выбирает круглую область (можно перекадрировать в любой момент без повторной загрузки). Фото показывается в интерфейсе (аватар); на партнёрский сервер и в PDF оно сейчас не передаётся.

04 / 13

Как считается процент заполнения

Главный принцип: процент взвешенный — важные для резюме поля двигают его сильнее, чем мелочь.

Веса полей

У каждого поля есть вес важности для резюме, заданный вручную картой приоритетов: — 10 — обязательное: имя, название компании, должность, название целевой роли, название проекта, «что было сделано»… — 7 — важное: грейд, формат работы, обязанности, навыки, инструменты, образование… — 4 — желательное: периоды, достижения, контакты, метрики… — 1 — мелочь: ссылки на дипломы и результаты. Это ТА ЖЕ карта, по которой интервьюер выбирает следующий вопрос — поэтому подсказки «что заполнить дальше», вопросы ассистента и рост процента всегда согласованы между собой.

Формула

Процент = сумма весов заполненных полей ÷ сумма весов всех полей, которые имеет смысл заполнять. Пример: ответ «работал в Яндексе продакт-менеджером» закрывает сразу два поля по 10 — процент заметно прыгает. Ссылка на диплом добавляет всего 1.

Что не считается вовсе

  • Фото — не влияет на процент.
  • Автоматические поля (например, «% соответствия» роли — его считает система, не пользователь).
  • Поля-связки «Кейсы» у мест работы и методов — они заполняются привязкой, а не текстом.

«О себе» — особый случай

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

Карточные разделы

Считаются только НАЧАТЫЕ карточки: если пользователь зашёл в раздел и ничего не написал, пустая карточка процент не занижает. Но совсем пустой раздел кладёт в «цель» одну виртуальную карточку — чтобы незаполненный «Рабочий опыт» честно тянул общий процент вниз, а не делал вид, что его не существует.

Почему процент иногда немного падает

Когда ассистент (или пользователь) добавляет новую карточку — например, второе место работы, — «цель» вырастает, и процент чуть проседает, пока карточка не заполнится. Это осознанное поведение: процент отражает полноту относительно всего, что уже начато. Все «награды» (тосты стадий) срабатывают только на рост до новой максимальной стадии — на такие технические просадки ничего не дёргается.

05 / 13

Чек-лист минимума и стадии резюме

Доступ к PDF открывает не абстрактный процент, а конкретный чек-лист. Процент управляет стадиями качества.

Чек-лист «до первого PDF» — 4 пункта

Имя · Целевая роль · Одно место работы (компания + должность) · Навыки. Пока минимум не набран, чек-лист виден сразу в двух местах: в сайдбаре слева (с галочками, прямо под прогресс-баром) и в кнопке PDF. Каждый недостающий пункт кликабелен — клик открывает нужный раздел и отправляет ассистенту вопрос «спроси меня про …». На телефоне первый недостающий пункт показывается строкой над лентой разделов.

Три стадии поверх процента

— «Минимум для резюме» (~40%) — базовый профиль собран; экспорт уже доступен по чек-листу. — «Хорошее резюме» (~65%) — добавлены проекты с результатами, образование; экспорт в полном режиме. — «Сильное резюме» (~85%) — достижения в цифрах, методы; кнопка PDF подсвечивается зелёным кольцом. Пересечение стадии вверх отмечается ненавязчивым тостом («Резюме стало заметно сильнее»). Текущая стадия всегда видна в сайдбаре рядом с процентом.

Три состояния кнопки PDF

1. Закрыта (минимум не набран): кнопка показывает «PDF · N%», по клику — чек-лист недостающего с кнопками «спросить в чате». Каждый такой клик фиксируется в метриках — это сигнал «пользователь захотел ценность и не получил». 2. Черновик (минимум есть, но меньше «Хорошего»): скачивание РАЗРЕШЕНО, рядом честная подсказка «резюме будет коротким — добавь ещё вот это» с конкретными пунктами. 3. Полный режим (от «Хорошего» и выше): список целевых ролей, скачивание под выбранную.

Почему ушли от «заполните на 80%»

Старый порог был худшим видом гейта: высокий, абстрактный и не говорил, что делать. На реальной схеме это час с лишним работы — пользователь не доходил. Чек-лист говорит, что конкретно сделать; черновой PDF даёт быструю ценность и мотивирует дозаполнять.

06 / 13

Как работает AI-интервьюер

Разговор, а не анкета

Пользователь отвечает обычным текстом или голосом — ассистент сам раскладывает сказанное по нужным полям. Один содержательный ответ может закрыть сразу несколько полей.

Внутри — два независимых шага

На каждое сообщение пользователя работают два разных «специалиста»: 1. Извлекатель читает последние реплики и записывает факты в поля профиля. Только он умеет писать в профиль. 2. Собеседник отвечает пользователю и задаёт следующий вопрос. Писать в профиль он не может, а подтверждать ему разрешено строго то, что извлекатель реально записал — ему передаётся честный список записанного. Это защита от ситуации «ассистент сказал „записал!“, а в профиле пусто».

Порядок вопросов

Сверху вниз по той же карте приоритетов, что и процент: сначала общие сведения, затем целевая роль, опыт, проекты, образование, навыки, ожидания, методы. В карточных разделах правило «добей одну карточку целиком → спроси „есть ещё?“ → дальше». Поэтому интервью ощущается осмысленным, а не хаотичным.

Запись видна и обратима

Каждая запись показывается «вживую»: подсветка раздела → подсветка поля → печать значения по буквам. У каждой записи есть кнопка отката (Undo). Если ассистент удаляет карточку — это тоже видно и тоже обратимо.

Гарантии записи: гард, курсор, честный переспрос

Раньше полнота записи держалась на «прилежности» модели — и реальная сессия фокус-группы показала, чем это кончается: потерянные обязанности, «вахта», молча записанная как «Офис», выдуманный уровень навыка. Теперь между моделью и профилем стоит кодовая проверка (гард): — значение для поля-справочника, которого в справочнике нет, физически не записывается — ассистент честно говорит «такого варианта нет», предлагает выбрать из существующих, а само пожелание сохраняет в свободное поле «Ожиданий»; — уровень навыка или языка записывается только если пользователь явно его называл — иначе навык сохраняется без уровня, и ассистент уточняет; — система помнит, до какого сообщения разговор уже разобран (курсор): любой сбой не теряет факты — следующий ход дочитывает с того же места; — незаписанное превращается в явный «долг»: ассистент сам напоминает и переспрашивает (до трёх ходов, потом отпускает — не наседает); — просьба «запиши всё, о чём мы говорили» запускает проход по всей беседе и дописывает только пустые поля — ручные правки не перетираются; — каждый ход пишет в журнал «что сказано vs что записано» — потери видны администратору в выгрузке событий, а не предполагаются. Проверяется автоматическим реплеем той самой проблемной сессии: все потерянные тогда факты должны записаться, ложных значений быть не должно.

Честность и сомнительные данные

Ассистенту запрещено выдумывать факты, компании, цифры. Если пользователь просит записать что-то, что звучит как преувеличение или непроверяемое утверждение, запись делается, но молча помечается во внутреннем списке «сомнительных данных». Пользователю об этой пометке не сообщается (намеренно: не обвинять человека в разговоре). Страница просмотра этих пометок сейчас закрыта для всех (и в интерфейсе, и на уровне API) — функция отложена до отдельного решения, сами пометки продолжают копиться.

Голос

Кнопка микрофона в чате: речь распознаётся на лету и дальше работает ровно как текст. Распознавание идёт через защищённый канал — ключи доступа в браузер не попадают.

Кнопки «спросить в чате»

Из чек-листа и подсказки «Дальше» можно одним кликом отправить ассистенту вопрос («Спроси меня про последнее место работы…»). Это видимое сообщение от лица пользователя — ассистент отвечает вопросом по теме, и разговор продолжается с нужного места.

Тон

Короткий, уверенный, без пересказа сказанного обратно. Один вопрос за раз.

07 / 13

Импорт старого резюме

Как работает

Пользователь загружает PDF, DOC или DOCX. Из файла извлекается текст И гиперссылки (в PDF ссылка «LinkedIn» хранится отдельным слоем — теперь в контакты попадает реальный адрес, а не слово). Ассистент видит полный текст резюме и полный текущий профиль, за один проход возвращает только то, что нужно заполнить или изменить, и изменения применяются по правилам. Прогресс в окне импорта настоящий: видно, какой раздел разбирается прямо сейчас.

Правила слияния: резюме — источник правды для фактов

У каждого поля своя политика. — Объективные факты (имя, дата рождения, город, контакты, образование, компании и периоды работы): значение из резюме главнее — оно перезаписывает профиль. — Списки (контакты, языки, навыки): объединяются поэлементно — телефон из резюме заменит старый, но Telegram, которого в резюме нет, не потеряется. — Описания (о себе, обязанности, достижения, проекты): ассистент собирает финальную версию — за основу более сильный текст, дополненный фактами из второго; цифры и конкретика не теряются, шаблонные клише запрещены. — Цели (желаемая роль, зарплата, формат): резюме их не перезаписывает — заполняются только пустые. Каждая запись проходит ту же кодовую проверку, что и записи из чата: значение не из справочника не записывается, выдуманные уровни навыков срезаются.

Отчёт и откат

После импорта — честный отчёт: сколько полей заполнено новых, сколько обновлено из резюме, что записать не удалось и почему. Если имя в файле не совпадает с именем в профиле — заметное предупреждение «тот ли это файл?». Рядом кнопка «Откатить импорт»: профиль возвращается к состоянию до загрузки (снимок делается автоматически). Повторная загрузка того же файла ничего не «дёргает» — система видит, что всё уже на месте.

Где находится

  • Кнопка «Импорт PDF/DOCX» в подвале сайдбара (на телефоне — в меню-аватаре).
  • Одноразовое предложение в чате при пустом профиле (развилка «импорт или разговор»).
  • После импорта интервью продолжается автоматически — ассистент видит, что уже заполнено.
08 / 13

Экспорт PDF: как собирается резюме

Резюме всегда собирается под выбранную целевую роль — это переупаковка фактов профиля, не генерация выдумки.

Сценарий

Кнопка «Скачать PDF» в шапке → список целевых ролей пользователя → выбор роли → через ~полминуты скачивается готовый PDF, названный по роли.

Что значит «под роль»

Ассистент-составитель получает весь профиль целиком и целевую роль. Релевантное роли выносится вперёд и раскрывается подробнее; нерелевантное сжимается или опускается; формулировки и порядок навыков подстраиваются под призму роли. Учитываются ожидания и стоп-лист пользователя. Зарплатные ожидания в PDF не попадают (используются только как контекст).

Структура резюме

— Саммари: если в профиле заполнено «О себе» — берётся за основу (адаптируется под роль, но не пишется с нуля и не теряет авторскую фактуру). Шаблонные самоописания вида «имею опыт…» запрещены. — По каждому месту работы: 3–5 коротких конкретных тезисов — что именно сделал и с каким эффектом. Не список обязанностей. — Кейсы прикрепляются к «своему» месту работы отдельными пунктами («Кейс — название: задача → что сделал → результат») и не дублируются в отдельном списке проектов; там остаются только внерабочие проекты. — Пустые формулы запрещены явно: «управлял полным циклом», «руководил кросс-функциональной командой» без конкретики и т.п.

Контроль качества: второй ассистент-рецензент

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

Честность на уровне механики

  • Имя и контакты не генерируются — копируются из профиля как факт (модель не может переврать email).
  • Цифры и метрики — только из профиля; если числа нет, пишется качественный тезис без выдуманного числа.
  • Названия компаний, должности, периоды, вузы — как в профиле, без переименований.

Файл

A4, аккуратная типографика, «чистый» текстовый слой: текст из PDF корректно копируется и без ошибок читается роботами-парсерами HR-систем (ATS). Шрифт с полноценной кириллицей. Длина — следствие релевантности: насыщенный профиль может занять 2 страницы, и это нормально. Английская версия резюме поддержана на уровне движка (перевод содержимого с сохранением имён собственных); переключатель языка в интерфейс пока не выведен.

09 / 13

Сохранение и синхронизация

Кнопки «Сохранить» нет

Правка поля сохраняется сама: через ~3 секунды после остановки ввода или сразу при уходе из поля. У заголовка поля коротко загорается «✓ сохранено», в шапке — общий статус («сохранено» / «не сохранено · N»). Записи ассистента сохраняются мгновенно. Закрытие вкладки посреди правки данные не теряет.

Двухуровневое хранение

Каждое изменение мгновенно фиксируется в локальной копии на нашем сервере. На партнёрский сервер (там живут логины и хранилище резюме) резюме уезжает целиком пакетом: через 5 секунд после последнего изменения, но не позже 15 секунд при непрерывной печати — сервер не бомбардируется запросом на каждую букву. Если отправка упала, данные не теряются: автоматические повторы + видимый статус «сервер недоступен · повторяем».

Защита от потери при входе

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

Мелочи, которые спрашивают

  • Несколько вкладок одновременно — можно; побеждает последнее сохранение.
  • История чата хранится у нас, рядом с профилем; в любой момент можно очистить — профиль не пострадает.
  • Фото хранится только у нас и на партнёрский сервер не уходит.
  • Даты: в интерфейсе ДД.ММ.ГГГГ, хранятся и передаются в международном формате.
10 / 13

Метрики для фокус-группы

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

Какие события пишутся

  • Вход в продукт.
  • Онбординг: досмотрел или пропустил (и на какой сцене).
  • Тур: прошёл до конца или закрыл (и на каком шаге).
  • Первое собственное сообщение в чате (автостарт не считается).
  • Импорт резюме (и сколько полей он дал).
  • Чекпоинты заполненности: достижение каждой стадии с процентом.
  • Клик по закрытой кнопке PDF — главный сигнал «захотел ценность и не получил».
  • Каждое скачивание PDF: какая роль, какая стадия полноты, какой процент.
  • Длительность сессии при закрытии вкладки.

Воронка, на которую смотрим

вошёл → закончил онбординг → отправил первое сообщение → достиг «Минимума» → скачал PDF. Ориентиры для фокус-группы (n≈5–10): ≥80% доходят до первого сообщения, ≥60% — до «Минимума», ≥50% скачивают PDF за сеанс; медианное время до первого PDF ≤25 минут.

Как смотреть

Администратор скачивает один JSON-файл со всеми событиями всех пользователей: меню-аватар → «Скачать события (JSON)». По каждому пользователю — его цепочка событий с временными метками; воронка и время до PDF считаются из неё напрямую.

11 / 13

Роли и приватность

Две роли

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

Что видит администратор

  • Настройки (выбор моделей, тексты промптов, тумблеры поведения).
  • Накопленную стоимость AI-запросов — по пользователю и суммарно.
  • Выгрузки: все чаты (CSV), все профили (JSON), все события (JSON) — в событиях по каждому ходу ассистента виден diff «что сказано vs что записано».

Чего не видит обычный пользователь

Стоимость запросов и служебные пометки скрыты. Это не только скрытие кнопок: сервер проверяет права на каждый такой запрос.

12 / 13

Стенды, обновления, надёжность

Два стенда

Основной — devmatch.nagornik.ru. Тестовый — devmatch-test.nagornik.ru: отдельная копия приложения с полностью изолированными данными (профили, чаты, фото). Большие изменения сначала выкатываются на тест, проверяются, и только потом уезжают на основной.

Как происходит обновление

Разработчик отправляет изменения — в течение минуты сервер сам их подтягивает, собирает новую версию «в сторонке» (работающий сайт этого не замечает), прогоняет все автотесты и только при зелёных тестах мгновенно переключается на новую версию. Плохое обновление до пользователей физически не доходит. Простоя при обновлении нет — лишь секунды на перезапуск.

Контроль качества

  • 174 автотеста на логику: расчёт процента, чек-лист минимума, подсказки, синхронизация, хранение.
  • Автоматический проверщик раскладки интерфейса: на четырёх ширинах экрана (телефон → большой монитор) ищет наложения текста, перекрытия и вылезания за экран; любая такая проблема — ошибка, блокирующая выпуск.
  • Тексты и поведение проверяются на реальных данных, а не на красивых заглушках.
13 / 13

Чего пока нет (честный список)

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