Как я построил Job-сайт, с MCP, каналами и ботами
Сайт вакансий, который наполняет себя сам: парсеры собирают данные, нейросети чистят и переводят, поиск ищет по смыслу, Telegram-каналы по специальностям публикуются ботом. А искать вакансии можно не только глазами в браузере, но и через AI-агента — для этого в архитектуру заложен MCP. 100 тысяч живых вакансий — и почти ноль ручного труда.
Откуда это взялось В прошлых статьях я рассказывал, как в одиночку с AI-агентами собрал ERP-платформу на Kubernetes из 30+ микросервисов и как на ней вырос ATS с живым AI-интервью. Rekru — ещё один продукт той же платформы: публичный Job-сайт с ИТ вакнсиями. Но у него своя интересная механика, поэтому расскажу отдельно.
Классический агрегатор вакансий — это редакция: люди ищут источники, парсят, чистят, раскладывают по категориям, публикуют. Я хотел другого: каталог, который наполняет и обслуживает себя сам, а человек только задаёт правила. И чтобы искать в нём можно было не только привычным поиском, но и через AI-агента — своего ассистента, которому просто говоришь, что ищешь.
Каталог, который наполняет себя
сам Сердце сайта — конвейер парсеров. Он обходит огромное количество источников (карьерные сайты компаний, ATS-платформы, порталы, Telegram-каналы), забирает вакансии и складывает в единый каталог. Крупные агрегаторы вроде hh я сознательно не трогаю — беру первоисточники.
Дальше каждую вакансию проходит цепочка нейросетей: вытащить из сырого текста структуру (обязанности, требования, условия), перевести, если вакансия не на русском, сгенерировать краткое саммари, разложить по категориям и посчитать векторные представление для поиска.
Всё это — без единого редактора. 90% каталога приходит на английском, её переводит отдельный шаг; а тяжёлую обработку конвейер гоняет ночью, чтобы днём не занимать нейросети у «живых» функций платформы.
2 000 000 000 токенов
Звучит просто, пока не начинаешь это эксплуатировать. Самый коварный класс багов в парсерах — когда парсер молча собирает ноль. Расписание тикает каждую ночь, парсер запускается, возвращает пустой список — и не считает это ошибкой. А источник тем временем поменял вёрстку, или отдаёт данные только с правильным заголовком, или прячет вакансии за хитрой пагинацией.
Снаружи всё зелёное, а на деле один источник не приносил ни строчки два месяца. Поэтому правило: парсер проверяется только прогоном настоящего кода против живого сайта, а не чтением кода и не тестом на выдуманной фикстуре. Когда я прошёлся так по всем источникам, вскрылось, например, что архивация тихо прятала больше несколько тысяч живых вакансий (помечала устаревшими и не снимала флаг обратно). Такие вещи не видны ни в одном дашборде — только в живом прогоне.
Сайт в цифрах
Что получилось на сегодня — замер по боевой базе. На сайте видно около 119 тысяч вакансий от примерно 7 300 компаний. А если считать всё накопленное за время работы, вместе с архивом, в базе больше 350 тысяч записей.
По географии каталог перекошен в мир, и это осознанно: около 110 тысяч вакансий заграница, около 7,5 тысячи Россия, ещё около 1 100 страны СНГ. По формату: примерно 51 тысяча - удалёнка, 28 тысяч - офис, 16 тысяч - гибрид.
По направлениям (сайт показывает только ИТ-ветку):
- Разработка — около 28 тысяч
- Управление и менеджмент — около 27 тысяч
- Data и AI — около 20 тысяч
- DevOps и инфраструктура — около 15 тысяч
- Аналитика и исследования — около 10 тысяч
- Безопасность — около 5 тысяч
- Дизайн и UX/UI — около 4 тысяч
- Digital Marketing, тестирование и контент — по 2,5–3 тысячи
Честные оговорки к цифрам. Сайт показывает вакансии, которые обновлялись за последние 30 дней, и прячет дубли «название + компания + город». А категории расставляет нейросеть автоматически, поэтому часть вакансий, особенно у аппаратных компаний, может попасть не в ту корзину — цифры по направлениям это порядок величины, а не бухгалтерия.
Что ещё умеет сайт
Кроме поиска у Rekru есть набор вещей, которые обычно ждёшь от большого портала, а не от проекта одного человека.
Оценка зарплаты в карточке вакансии. Прямо на странице видно, где предложение относительно рынка: ниже или выше, какая медиана и вилка по этой роли, региону и грейду, сколько вакансий с указанной зарплатой в выборке. Заглушки вроде «зарплата = МРОТ» из госпортала я за зарплату не считаю, чтобы они не портили статистику.
Совпадение резюме с вакансией в процентах. Загрузил резюме — на каждой вакансии видно, насколько ты ей подходишь по смыслу, а не по ключевым словам. Для этого резюме тоже превращается в вектор, и в списке видно статус: считается, готово или не удалось.
Рейтинги компаний. На странице компании — рейтинг и отзывы, чтобы соискатель смотрел не только на вилку, но и на работодателя.
Шаг от вакансии к отклику. В карточке рядом с откликом две кнопки: «Улучшить резюме под вакансию» и «Тренировочное ИИ-собеседование» — подготовиться к конкретной вакансии, не выходя с сайта.
Сохранённые поиски и избранное. Настроил фильтры один раз — поиск лежит в профиле; понравившиеся вакансии откладываются в избранное, в том числе гостям без регистрации.
Одиннадцать языков интерфейса и перевод вакансий. Интерфейс переведён на одиннадцать языков, а иностранные вакансии я перевожу на русский и английский. Именно «перевожу»: из примерно 130 тысяч иностранных ИТ-вакансий переведена пока только часть, конвейер работает ночью и дозабирает остальное.
Аналитика с честным согласием. Метрики включаются только после баннера про cookie — можно принять или отказаться, а запись сессий я вообще не веду.
Поиск по смыслу, а не по словам
Обычный поиск по вакансиям ищет вхождение слов. Это бесит: «питонист» не находит «Python developer», «фронтендер» не находит «React-разработчика». У меня поиск гибридный: смысловой (по векторам-эмбеддингам) плюс классический текстовый, а результаты двух движков сливаются в одну выдачу.
Смысловой слой понимает, что «складская логистика» и «работа на складе» — про одно; текстовый подстраховывает на точных терминах и опечатках. Приятный бонус смыслового поиска — он кросс-языковой: англоязычная вакансия находится по русскому запросу. А словарь синонимов и транслита («джава» → java, «питон» → python) — это данные, а не код: добавить термин можно одной строчкой в словаре, без пересборки сайта.
Плюс фасетные фильтры (грейд, формат работы, специализация), которые сами проставляются на этапе обогащения, и рыночная аналитика прямо в карточке — медиана и вилка зарплат по этой специальности.
Telegram-каналы по специальностям
Кандидаты не сидят на сайте целый день — они сидят в Telegram. Поэтому у сайта есть сеть тематических каналов: отдельные каналы под QA, аналитику, фронтенд, бэкенд, DevOps, управление, дизайн, Data Science. Наполняет их не человек, а бот-публикатор: он раз в минуту берёт свежие вакансии, определяет, в какой канал они по специализации попадают, оформляет карточку и постит — с защитой от дублей, чтобы один работодатель не спамил канал десять раз в день.
Канал подтягивает трафик обратно на сайт, сайт кормит каналы вакансиями — замкнутый контур, который крутится сам.
Боты, которые делают всю грязную работу
Ботов тут несколько, и каждый закрывает свой кусок рутины: Бот-публикатор — раскладывает вакансии по нашим Telegram-каналам.
Парсер Telegram-каналов — отдельная история. Вакансии постят не только на сайтах, но и в тысячах Telegram-чатов «ищу работу / ищу сотрудника». Бот читает такие каналы, нейросеть классифицирует пост («это вакансия / это не вакансия»), извлекает структуру и контакт для отклика — и вакансия встаёт в общий каталог наравне со спарсенными с сайтов.
Бот-советчик соискателю — пожалуй, мой любимый. Кандидат выбирает интересные специализации и получает ленту свежих вакансий прямо в Telegram, а если пришлёт своё резюме (PDF или Word) — бот подбирает вакансии под него по смыслу, с процентом совпадения, тем же векторным движком, что и весь поиск. Плюс дайджест подходящих вакансий по утрам.
По сути это первый шаг к тому, о чём ниже: поиск работы, который делает за тебя агент. Бот-приёмщик вакансий — ловит вакансии от работодателей: проводит короткое интервью прямо в переписке, собирает поля и отправляет вакансию на модерацию, откуда она попадает и на сайт, и в каналы.
MCP: вакансии для AI-агента соискателя
А теперь то, ради чего я вообще затеял отдельную статью. Люди всё чаще ищут не в поисковой строке, а через своего AI-ассистента: «найди мне удалёнку на Python до 300 тысяч, где не нужен грейд сеньора». Поэтому у Rekru есть свой MCP (Model Context Protocol) — интерфейс, через который AI-агент соискателя обращается к сайту напрямую.
Агент ищет вакансии по смыслу, отвечает на вопросы о них, ведёт резюме с версиями и PDF, адаптирует его под конкретную вакансию, откликается и следит за статусами откликов. Всего двадцать инструментов, и ещё готовые навыки для агента, которые раздаются прямо с сайта. Не кликает по страницам, а разговаривает с каталогом на языке агентов.
Идея простая: сайт должен быть одинаково удобен и человеку в браузере, и его AI-агенту. Тот же семантический поиск, те же фильтры, та же выдача — но доступные агенту как инструмент. Кандидат говорит ассистенту, что ищет; ассистент сам ходит в Rekru через MCP и приносит подходящие вакансии, уже отсортированные под резюме.
Подключение сделано так, чтобы не требовать возни. Пакет раздаётся прямо с сайта, вход подтверждается кодом в браузере, а ключ создаётся у пользователя локально — не надо копировать секреты по чатам. Условие одно и общее для всех тарифов: без резюме агент ничего не отдаёт — подбор имеет смысл только под конкретного человека.
Это не задел «на потом»: между человеком и сервисом всё чаще стоит его собственный агент, а поиск работы — один из первых сценариев, где это по-настоящему удобно. Рутину «перебрать сто вакансий и отсеять мусор» логично отдать агенту. И выигрывает тот каталог, который для этих агентов открыт изначально, а не прикручивает MCP потом.
SEO и лендинги: чтобы находили из Google
Отдельный слой — чтобы сайт находили. На каждой вакансии стоит разметка Google for Jobs, так что вакансии попадают прямо в поиск Google. Плюс SEO-лендинги по специализациям (разработка, аналитика, дизайн, управление, DevOps, ML) с топ-вакансиями и ссылкой на профильный Telegram-канал. Googlebot при этом видит сайт без гейтов — чтобы индексация не страдала, — а гейты и антибот включаются только для живых пользователей.
Что это меняет Обычный Job-сайт — это редакция плюс отдел продаж. Этот — самонаполняющийся каталог, который собирают парсеры, чистят нейросети, раскладывают по каналам боты. Человек задаёт правила и смотрит за цифрами; рутину — поиск источников, парсинг, чистку, перевод, раскладку, публикацию — ведёт автоматика. А искать в нём умеет и человек, и его AI-агент.
И это та же платформа, на которой живут ATS, CRM и остальные модули: Job-сайт переиспользует её поиск по эмбеддингам, её AI-инфраструктуру и её наработки.
Поэтому он и собрался силами одного человека — с командой AI-агентов, которые писали код.
Telegram: @rekrutai_ru — там техническая кухня, ворклог и мысли. Если интересны детали по конкретной части — живому интервью, боту-переговорщику, копайлоту или оценке этапов — пишите в комментариях.