Новый проект: jobs.aizavod.top. Вводишь запрос и описываешь свои навыки — я нахожу вакансии на hh.ru и каждую оцениваю через AI. Не просто список ссылок, а отсортированный рейтинг: сверху то, что тебе реально подходит.
Проблема
Поиск на hh.ru выдаёт сотни вакансий. Из них половина — мусор: не тот стек, не тот уровень, зарплата не указана. Человек тратит часы, чтобы просмотреть 30 вакансий и понять, какие 5 стоят отклика. Фильтры на hh.ru помогают, но они текстовые: ищут точные слова, а не понимают смысл.
Я решил добавить AI-слой. Не заменить hh.ru, а использовать его данные умнее. Получить список вакансий через API, а потом каждую оценить: насколько конкретная вакансия соответствует конкретному кандидату.
Как это работает
Пользователь вводит поисковый запрос (например, “Python backend developer”) и описывает свои навыки в свободной форме. Можно указать город, зарплату, опыт, удалёнку.
Дальше происходит вот что:
1. Поиск через hh.ru API. Бэкенд отправляет запрос в публичный API hh.ru (api.hh.ru/vacancies). API возвращает до 30 вакансий с названием, компанией, зарплатой, описанием и требованиями. API бесплатный и не требует авторизации — достаточно указать нормальный User-Agent.
2. Создание задачи на скоринг. Если пользователь заполнил поле навыков, бэкенд создаёт JSON-задачу с данными вакансий и навыками кандидата. Задача сохраняется в очередь на диске — простая директория с JSON-файлами, никаких Redis или RabbitMQ.
3. AI-оценка. Воркер на отдельной машине каждые 10 секунд проверяет очередь. Нашёл задачу — забирает, отправляет в Claude. Промпт простой: “Вот навыки кандидата. Вот 15 вакансий. Оцени каждую от 0 до 100 и объясни почему.” Claude возвращает JSON с оценками.
4. Результат. Воркер отправляет оценки обратно через API. Фронтенд опрашивает бэкенд и когда оценки появляются — пересортировывает карточки по score. Сверху — самые подходящие вакансии.
Архитектура
Стандартная для моих проектов:
backend/
├── app.py — FastAPI, поиск hh.ru, очередь задач
└── requirements.txt
web/
└── index.html — фронтенд, тёмная тема
worker/
├── loop.sh — каждые 10 секунд проверяет очередь
└── process.sh — Claude Haiku оценивает вакансии
Бэкенд в Docker на основном сервере. Воркер на отдельной машине (ansible2) — там стоит Claude CLI с подпиской Max. Общаются через HTTP API с токеном авторизации.
Рейт-лимит: 10 запросов в минуту на IP. Этого хватает для нормального поиска, но защищает от abuse.
Почему очередь на диске
Задачи на скоринг — это JSON-файлы в директории. Когда результат готов, рядом появляется файл {id}_result.json. Воркер при каждом проходе ищет файлы без парного результата.
Примитивно? Да. Но надёжно, как лом. Не нужен Redis, не нужен Celery, нет лишних зависимостей. Для моих объёмов (десятки задач в день, не тысячи) это работает идеально. Если один день сломается воркер — задачи подождут на диске, ничего не потеряется.
Стоимость
Claude Haiku на скоринг 15 вакансий — доли цента. Один промпт, один ответ, никаких цепочек. Даже при 100 пользователях в день это меньше доллара. Выбрал Haiku намеренно — для задачи “сравни текст А с текстом Б и дай оценку” не нужен Opus.
Что дальше
Хочу добавить загрузку резюме: вместо текстового описания навыков — PDF или DOCX, из которого AI сам вытащит релевантную информацию. По сути, объединить это с моим проектом resume.aizavod.top. Ещё планирую уведомления: подписываешься на запрос, и когда появляется новая вакансия с высоким score — получаешь Telegram-сообщение.
Сервис работает: jobs.aizavod.top. Бесплатный, без регистрации.