Open source

Clearhire

Open-⁠source-платформа, сделана с Claude Code · AI-⁠найм с доказательствами

AI-⁠платформа для найма: проверяет резюме по каждому требованию вакансии и показывает строку резюме за каждым выводом — слепой отбор, локальная LLM, обязанная ссылаться на источник, и журнал аудита, закреплённый в блокчейне.

Clearhire — превью

Задача

Инструменты отбора ранжируют резюме по одному числу сходства, которое никто не может объяснить, на него влияют имя и возраст, и не остаётся записи, которую мог бы проверить кандидат или аудитор.

Решение

Проверка по каждому требованию с цитатой из резюме, слепой отбор до любой модели, LLM, которая может только объяснять со ссылками, и журнал аудита, защищённый от подмены и закреплённый в блокчейне.

Под капотом

nDCG@10 0,972 на 312 синтетических резюме (одни эмбеддинги — 0,603); одинаковые баллы во всех 486 слепых заменах; живое демо и CI для Python, трёх фронтендов, контракта и сквозного теста в Kubernetes.

Обзор

Clearhire — open-⁠source-платформа для найма, которую я сделал с Claude Code, чтобы показать AI-⁠продукт целиком, от разбора резюме до развёртывания. Кандидат может проверить резюме по вакансии до отклика и увидеть по каждому требованию, найдено ли оно и какая строка резюме это показывает; рекрутер видит то же самое, уже в рейтинге.

Бэкенд на Python: резюме в PDF, Word или сканах проходят через OCR Tesseract и превращаются в профиль с датированными должностями и доказательствами навыков, эмбеддинги в pgvector дают гибридный поиск, а навыки ищет матчер на C++ с запасной реализацией на Python. Рейтинг строится по требованиям, а не по одному числу сходства. Персональные данные заменяются до того, как текст прочитает модель эмбеддингов; локальная Qwen 3.5 9B пишет сводки, из которых удаляются предложения без ссылок; каждое решение попадает в журнал аудита со сцеплением SHA-256, а корни дерева Меркла раз в час закрепляются в смарт-контракте на Solidity.

Качество измерено на сгенерированном наборе из 312 резюме и 39 вакансий с известными ответами: nDCG@10 0,972 против 0,603 у одних эмбеддингов, навыки извлекаются с F1 0,997, а во всех 486 слепых заменах пола, происхождения и возраста баллы не меняются. Демо работает на GPU-сервере в Docker Compose, а Helm-чарт проверяется сквозным тестом на kind в GitHub Actions.

Что делает

  • Читает резюме в PDF, Word, сканах и фото (OCR Tesseract) на русском и английском: навыки, должности с датами, языки и образование
  • Ранжирует кандидатов сначала по невыполненным обязательным требованиям, затем по баллу и сходству, с цитатой за каждым выводом
  • Слепой отбор до того, как модель видит текст; локальная LLM (Qwen 3.5 9B) пишет сводки и ответы, обязанные ссылаться на резюме
  • Консоль на Angular, сайт вакансий на Next.js и Telegram-бот на NestJS поверх одного API на FastAPI; журнал аудита в смарт-контракте на Solidity; Helm-чарт проверяется на kind в CI

Что дальше

Ищете full-⁠stack- или Python-разработчика — или нужно сделать что-то похожее? Давайте обсудим.

Открыт к предложениям: офис или гибрид в Москве, либо удалённо; полная занятость или контракт. Отвечаю в течение 48 часов, в Telegram — быстрее.

Связаться TelegramСкачать резюме

Альхассан Альфарран.

© 2026 · Спроектировал и сделал сам. Стек сайта: Next.js, Tailwind и Framer Motion.

Моё местное время: · Москва

Заметки
Как устроен этот сайт

Стек

Next.js (App Router) и React, стили на Tailwind CSS, анимации на Framer Motion. Форма обратной связи отправляет письма через Resend, сайт размещён на Vercel.

Три языка, одна вёрстка

У английской, русской и арабской версий свои адреса (/en, /ru, /ar), а собраны они из одних и тех же компонентов. В вёрстке используются логические CSS-свойства (start/end вместо left/right), поэтому арабская версия отражается справа налево без отдельных стилей. Сервер отдаёт каждую страницу сразу с нужным языком и направлением текста, так что после загрузки ничего не перескакивает, а арабский шрифт загружается, только когда на экране есть арабский текст.

Скорость и доступность

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

Исходный код на GitHub