К содержимому
РЫБКИН АЛЕКСЕЙ
Назад к кейсам

Кейс крупным планом · 2026

Job Search Panel панель поиска работы на hh.ru

Один исполнитель · полтора месяцаКод на GitHub

0 ₽

за API нейросети: вакансии оценивает и письма пишет Claude Code по подписке

5

источников в одной панели: hh.ru, каналы в Telegram, сайты компаний, тендеры и студии

Проблема
Поиск работы на hh.ru отнимает часы: несколько поисков дают сотни вакансий, письмо под каждую пишется заново, а отклики и ответы работодателей приходится отслеживать вручную.
Решение
Сделал панель: она находит вакансии через официальный API hh.ru и отсеивает лишнее правилами, а оценку и письмо по фактам резюме готовит Claude Code.
Результат
Вакансии приходят с оценкой и письмом, все отклики видны на одной доске, приглашения и отказы приходят в Telegram. Письмо, где не хватает фактов, не уйдёт, пока его не допишут.
01

Все вакансии и отклики видны на одной доске

Доска «Воронка» показывает, где каждая вакансия: новые, ждут подтверждения, отправлено, смотрели, ответ. Любая колонка раскрывается в рабочий список с оценкой и письмом, и разобрать его можно с клавиатуры: открыть отклик, пропустить, отложить. Такие же доски есть у тендеров и студий, так что всегда видно, где какой отклик и что с ним делать дальше.

Как это сделаносвернуть

Сохранённые поиски hh.ru проверяются по расписанию. Новые вакансии проходят жёсткие правила анкеты — стоп-⁠слова, зарплата, регион, формат — и получают предварительную оценку без нейросети, по весам навыков.

Над доской — воронка за 30 дней: сколько вакансий найдено, оценено, отправлено, просмотрено и сколько пришло приглашений. Рабочий список листается клавишами J/K, Enter открывает отклик на hh.ru, S пропускает вакансию, D откладывает её.

Доска «Воронка»: колонки от новых вакансий до ответа работодателя — открыть крупно
Где каждая вакансия — на одной доске, сверху — воронка за 30 дней. Снимки сняты на демо-⁠данных: компании, вакансии и письма вымышленные.
02

Оценку и письмо готовит Claude — по фактам резюме

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

Как это сделаносвернуть

Подходящие вакансии панель складывает в пакеты по 12 в папку обмена. Claude разбирает их в сеансе Claude Code командой /hh-⁠batch: читает профиль и правила, пишет результат по JSON-⁠схеме, а панель импортирует его сама. Вызовов API нейросети и ключей в продукте нет.

Разбор может идти и без человека: панель сама запускает claude -p, когда появляются пакеты, и сообщает в Telegram, сколько разобрано и сколько подходит. Права у фонового разбора узкие: он пишет только в папки результатов, из команд ему разрешён только сканер стиля, а .env, база и резервные копии ему не читаются.

Тексты вакансий для Claude — данные, а не инструкции: письма с похожими на секреты фрагментами панель при импорте отклоняет. Русские письма Claude пишет по скиллу humanizer-⁠ru (MIT, автор Ilya Utov), а панель проверяет тем же сканером импортированные и отредактированные письма.

Раскрытая колонка «Новые»: оценка Claude, что совпадает, чего не хватает, и письмо — открыть крупно
Оценка с объяснением и письмо — прямо в списке, клавиши подписаны на кнопках.
03

Откликается человек, а ответы работодателей не теряются

В режиме «Ассистент» панель открывает страницу отклика на hh.ru, письмо уже в буфере обмена, а отправку подтверждает человек. Где hh.ru разрешает, отклик уходит через API, с очередью, паузами и лимитами. Ответы работодателей приходят из hh.ru, из почты или из ручного журнала, а приглашения, отказы и новые вакансии с кнопками действий — в Telegram.

Как это сделаносвернуть

С 15 декабря 2025 года hh.ru ограничил методы API для соискателей, и что доступно конкретному приложению, заранее неизвестно. Поэтому панель запускает зонд и по его итогам выбирает режим: закрыт отклик через API — работает «Ассистент», закрыт список откликов — ручной журнал и письма hh.ru из почты по IMAP.

Все запросы к hh.ru идут через один клиент: OAuth с PKCE, частота запросов, повторы, ошибки, обновление токенов и капча. Методы, которых нет в публичной спецификации, вызываются только после подтверждения зондом. Панель соблюдает лимиты hh.ru и свои, более строгие, — в день, в час и окно отправки, — не эмулирует браузер, не обходит капчу и перед первым откликом просит согласия: отклики уходят от имени пользователя.

В Telegram однотипные события за пять минут склеиваются в одно сообщение. Вакансия с письмом приходит с кнопками «Да, отправлено», «Пропустить» и «Отложить», а команды боту принимаются только из чата владельца.

Страница «Отклики»: статусы откликов и кнопки «Открыть и подтвердить» — открыть крупно
Отклики со статусами. Где hh.ru не отдаёт приложению список откликов, панель так и пишет и ведёт ручной журнал.
04

Аналитика показывает, где шансы выше

Аналитика делит рынок на сегменты по поискам, должностям и навыкам: зарплаты, конкуренция, тренды и то, кто отвечает на отклики. Она подсказывает, какие поиски завести, какие слова добавить в стоп-⁠слова и какие навыки поднять в резюме, а правки резюме под сегмент готовит Claude.

Как это сделаносвернуть

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

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

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

Аналитика: сегменты по поискам, навыки и пробелы, зарплаты — открыть крупно
Рынок по поискам: зарплаты, конкуренция и навыки, которых нет в резюме.
05

Кроме hh.ru — каналы, сайты компаний, тендеры и студии

Панель читает публичные Telegram-⁠каналы с вакансиями, карьерные сайты компаний и тендеры workspace.ru на digital-⁠услуги, а ещё находит студии разработки и дизайна, которым может пригодиться опыт. Отклики на тендеры и письма студиям, в деловом или простом стиле, пишет Claude, а отправляет человек.

Как это сделаносвернуть

Каналы читаются через публичную веб-⁠версию t.me/s, без входа в Telegram. Сайты компаний и студий панель читает без браузера, соблюдает robots.txt и не обходит защиту от роботов.

Тендеры панель проверяет раз в час и сравнивает с анкетой. Студиям, найденным через hh.ru, она предлагает только инициативный отклик: соглашение hh.ru разрешает использовать его данные лишь для поиска работы.

Тендеры workspace.ru: бюджет, срок заявок и совпадение с анкетой — открыть крупно
Тендеры с бюджетом, сроком заявок и совпадением с анкетой.
Студии разработки и дизайна: направление, город, контакты, статус письма — открыть крупно
Студии, которым может пригодиться опыт: письмо пишет Claude, отправляет человек.
06

Работает на своём сервере и открывается с телефона

Панель работает на компьютере или постоянно на своём Linux-⁠сервере. Обновление и откат — одной командой, а если после обновления панель не ответила за четыре минуты, возвращается прежняя версия. Копия базы делается каждую ночь, а свежую можно каждый день забирать с сервера. Открыть панель можно в любом браузере по одноразовой ссылке от бота, и интерфейс работает на телефоне.

Как это сделаносвернуть

На сервере панель — служба systemd в песочнице, с лимитами памяти и CPU. Проверка живости раз в две минуты перезапускает службу, если она трижды подряд не ответила, и сообщает об этом в бота. Установку можно поручить Claude Code: команда /setup ставит зависимости, собирает интерфейс, запускает панель и проводит по шагам, которые человек делает сам, — ключи hh.ru, вход, резюме, бот.

Обновление ждёт окончания задач панели, делает копию базы, переключает код и проверяет /api/health. Выкладывается только коммит, слитый в master с зелёным CI на Windows и Ubuntu: 744 автотеста (625 у бэкенда, с моками hh.ru и Telegram, и 119 у интерфейса), ruff и mypy в строгом режиме. Восстановление из копии проверяется: скрипт поднимает её второй панелью без входа в hh.ru и без бота и сверяет данные.

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

Интерфейс — на своей дизайн-⁠системе: цвета OKLCH, шесть размеров текста, все компоненты во всех состояниях на странице /ui. Страница никогда не прокручивается вбок, таблицы прокручиваются внутри своего блока, и каждая страница проверяется на ширине 1280–⁠1536 px и на телефоне.

Карточка вакансии на телефоне: оценка Claude, кнопка отклика и письмо — открыть крупно
С телефона — та же панель: оценка, письмо и кнопка отклика.

Как шла работа

Работал в паре с Claude Code: архитектуру и приёмку держал за собой, код по техническому заданию писал агент, и каждый этап закрывался тестами, линтерами и проверкой страниц в браузере. Поэтому весь продукт — от каркаса и работы с API hh.ru до аналитики, сервера и нового интерфейса — сделал один человек. Код открыт, лицензия MIT: github.com/chaoseye/job-⁠search-⁠panel.

Python FastAPI SQLAlchemy Alembic SQLite APScheduler React TypeScript Vite Tailwind CSS TanStack Query Claude Code Telegram Bot API systemd Caddy GitHub Actions

Есть похожая задача? Опишите её — предложу, с чего начать.

Написать в Telegram