Привет, Хабр. Расскажу про проект, который делал последние несколько месяцев. Это не очередная «убийца HH» и не «революция в рекрутинге». Это попытка решить одну конкретную проблему, которая бесит меня лично.

Живая ссылка: https://devraid.ru

Как я к этому пришёл

Я отправлял резюме. Много. Разным компаниям, на разные позиции. И каждый раз получал одно и то же:

  • Ответ через две недели: «К сожалению, мы выбрали другого кандидата».

  • Или тишину.

  • Или автоответ от HR‑бота, который даже не открыл мой GitHub.

При этом в моём GitHub лежали реальные проекты. Собранные, работающие, с тестами. Но никто не собирался их запускать, чтобы это проверить. HR смотрит на «опыт 3+ года», тимлид смотрит 30 секунд на резюме. Всё решает не то, что ты умеешь, а то, как ты упаковал резюме.

С другой стороны — я сам был по эту сторону баррикад, когда искал людей. Читаешь 200 резюме, из них 190 пишут «уверенное владение React». И как понять, кто реально умеет, а кто просто видео посмотрел?

Идея пришла внезапно: что если найм — это не «отправить резюме и ждать», а игра?

Что такое DevRaid

Представь RPG. Только вместо мечей и магии — код.

Ты создаёшь героя. Выбираешь класс: Frontend Mage, Backend Warrior, DevOps Paladin, QA Rogue. Берёшь квест — например, «Создать интернет‑магазин». Пишешь код у себя в VS Code, как обычно. Пушишь в GitHub. Сдаёшь ссылку на платформу.

Дальше начинается интересное.

Платформа разбивает проверку на фазы. Первая — «Репозиторий открыт». Вторая — «README и структура». Третья — «Docker‑сборка». Четвёртая — «Тесты». Пятая — «ESLint и безопасность». Шестая — «AI‑ревью».

Каждая фаза — это удар по боссу. Если суммарный урон превышает порог — победа.

И вот тут ключевое отличие от всех остальных платформ: проверка настоящая.

Что происходит, когда ты сдаёшь код

Ты вставляешь ссылку на репозиторий и нажимаешь «Принять квест». На экране появляется шкала HP босса: 110 из 110.

Через 2 секунды:

text

⚔️ Репозиторий открыт     -10 HP

Ещё через секунду:

text

⚔️ README и структура     -10 HP

А потом платформа зависает на 2–3 минуты. Это не баг. В этот момент на сервере происходит вот что:

  1. Скачивается твой репозиторий.

  2. Запускается Docker‑контейнер с чистым Node.js 20.

  3. Внутри — npm install твоих зависимостей.

  4. Потом npm run build — реальная сборка твоего проекта.

  5. Если сборка упала — фаза провалена. И ты видишь в логе настоящий стек ошибки.

Потом:

text

⚔️ Сборка проекта         -15 HP

Дальше — ESLint. Не «есть ли файл.eslintr», а настоящий прогон твоего кода через линтер. Он находит any, console.log, неиспользуемые переменные. Всё, что ты оставил, потому что «потом почищу».

Потом — Semgrep с правилами безопасности. Ищет хардкод ключей, SQL‑инъекции, небезопасные вызовы.

Потом — AI‑ревью. GPT читает 3 самых крупных файла и пишет замечания с номерами строк:

app/dashboard/page.tsx:42 — Ошибки при загрузке продуктов не обрабатываются. Добавь try/catch и покажи пользователю сообщение.

Всё это стримится в интерфейс в реальном времени. Не «подождите, идёт проверка». Ты видишь, как каждая фаза проходит или проваливается, и почему.

Через 3–4 минуты — финальный отчёт. Босс повержен или выстоял. Если победа — лут, XP, уровень, артефакты. Как в WoW.

Почему это работает лучше резюме

Смотри, что получается.

Работодатель не читает «опыт 3 года, уверенное владение React». Он открывает публичный профиль героя и видит:

  • 5 квестов пройдено

  • 3 босса повержено

  • 12 артефактов

  • Достижение «Чистый код» — ни одной ошибки ESLint

  • Победа над «Драконом Технического Долга» — покрыл legacy проект тестами

  • Победа над «Лордом Эндпоинтов» — написал REST API

И вот это подтверждено. Не «я умею», а «вот код, вот сборка, вот тесты, вот AI‑ревью». Ссылку на профиль можно кинуть в резюме — как портфолио, только проверяемое.

Разработчик не отправляет резюме в пустоту. Он проходит квесты и видит прогресс в реальном времени. У него есть мотивация — уровень, XP, лидерборд. Игра, которая даёт пользу.

Обе стороны экономят время. Не нужно ждать две недели, не нужно проходить пять раундов интервью, чтобы понять, что человек не умеет писать код. Всё видно сразу.

Что уже работает

Платформа живая. https://devraid.ru

7 квестов:

  • Создать интернет‑магазин (Frontend)

  • Настроить CI/CD (DevOps)

  • Написать REST API (Backend)

  • Покрыть legacy тестами (QA)

  • Оптимизировать запросы в БД (Backend)

  • Развернуть мониторинг (DevOps)

  • И кастомный квест от работодателя

Что есть у каждого героя:

  • Публичный профиль /u/никнейм со ссылкой на все победы

  • Артефакты за победы над боссами (с редкостями: common / rare / epic / legendary)

  • Достижения — например, «Чистый код» за 0 ошибок ESLint или «Мультикласс» за победы в 4 разных квестах

  • Лидерборд с подиумом для топ-3

  • Приглашения от работодателей — шортлист, интервью, найм

Что есть у работодателя:

  • Создание квестов через админку

  • Список сдач с фильтрами

  • Воронка найма: шортлист → интервью → нанят / отказ

  • Заметки по каждому кандидату

Немного про технику (для тех, кто дочитал до сюда)

Под капотом:

  • Next.js 16 с App Router и Turbopack

  • Neon (serverless Postgres) + Drizzle ORM

  • Docker — реально запускает сборки и тесты в изолированных контейнерах

  • gpt-4o‑mini через ZvenoAI — AI‑ревью кода за 5–15 секунд

  • Nginx + systemd на VPS

  • Sentry для мониторинга ошибок

  • Let's Encrypt для HTTPS

Самые сложные места, где я набил шишки:

Docker на Windows — это боль. Bind‑mount папок работает через virtiofs и превращает npm install в 5-минутный ад. Решил отказом от монтирования: копирую файлы через docker cp, запускаю контейнер, читаю логи, удаляю. Скорость выросла в 10 раз.

Кэш npm между прогонами. Volume devraid-npm-cache монтируется в /root/.npm. Первый прогон качает зависимости за 2 минуты, второй — за 15 секунд.

Стриминг прогресса. Нельзя просто вернуть один большой JSON в конце — пользователь устанет ждать. Использую NDJSON через ReadableStream, каждая фаза отправляется отдельным сообщением. Nginx настроен с proxy_buffering off, чтобы данные шли сразу.

AI‑ревью с graceful fallback. Если ZvenoAI недоступен — фаза откатывается на эвристику и показывает пометку «AI недоступно, сработала проверка по шаблону». Лучше так, чем падать.

Что дальше

Честно про планы:

Каты — короткие задачи на 10–15 минут. Формат Codewars, но внутри нашей системы с XP и лутом. Для тех, кто не готов сразу сдавать большой проект.

Кэш AI‑ревью по SHA коммита. Сейчас один и тот же репозиторий проверяется заново каждый раз. Это стоит денег, а результат один. Кэш сэкономит 80–90% запросов.

Email‑уведомления. Работодатель поставил «Интервью» — герою пришло письмо. Сейчас узнаёт только когда сам зайдёт.

Мобильная адаптация. Профиль и доска квестов адаптированы. Админка работодателя — не полностью.

Честно про проект

Это прототип. Не «запуск стартапа», не «убийца HH». Проект на стадии беты, местами с костылями и недоделками. Но он работает end‑to‑end, и этого уже достаточно, чтобы показать идею.

Я не пытаюсь конкурировать с HH по количеству вакансий. Я делаю нишевую платформу для тех, кто устал от стандартного найма и хочет, чтобы код говорил сам за себя.

Что мне от вас нужно

Если вы разработчик — зайдите, попробуйте. Возьмите квест create-shop, сдайте любой публичный репозиторий (или форкните вот этот — он специально сделан для тестов). Первый прогон 3 минуты, дальше быстро.

Если вы работодатель — создайте компанию, опубликуйте квест. Даже если сейчас не ищете никого — попробуйте, как это выглядит со стороны заказчика.

Если вы просто читатель — напишите в комментариях, что думаете. Что бы вы добавили? Какие квесты были бы интересны? Чего не хватает для того, чтобы вы сами захотели попробовать?

Все баги, которые найдёте — правлю в тот же день. Все идеи — обсуждаю. Проект открыт к фидбеку на любой стадии.

Ссылка: https://devraid.ru

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

Спасибо, что дочитали.

Комментарии (7)



  1. karrakoliko
    13.10.2026 01:53

    Работодатель не читает «опыт 3 года, уверенное владение React». Он открывает публичный профиль героя и видит:
    • 5 квестов пройдено
    • 3 босса повержено
    • 12 артефактов

    в голос с этого апгрейда

    p.s: мужик, тебе за 30, о чем ты


  1. closeflow
    13.10.2026 01:53

    идея с авторазвертыванием, конечно, круто, но есть проблема:
    докер сам по себе не является полноценной границей безопасности для недоверенного кода
    при росте числа пользователей именно этот участок может оказаться сложнее всей системы проверки
    по сути, вы даёте произвольному коду выполняться на своей инфраструктуре, причём npm install уже может запускать lifecycle-скрипты из зависимостей.

    как сейчас устроена изоляция? контейнеры запускаются без сети, с ограничениями по цпу/памяти, без привилегий и с отдельным непривилегированным пользователем? есть ли ограничения по времени выполнения и количеству процессов?


    1. Kurganov1993 Автор
      13.10.2026 01:53

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

      Что есть сейчас:

      • Контейнеры запускаются с --network bridge на этапе npm install и --network none на этапе сборки и тестов.

      • Ограничения: --memory 2048m --cpus 2 --tmpfs /tmp:rw,size=512m.

      • Жёсткий таймаут на общий прогон — 8 минут. Если превышает — docker kill.

      • Кэш npm через volume devraid-npm-cache (только .npm, не node_modules).

      Чего пока нет — вы правы:

      • Не запускаю от непривилегированного пользователя. Сейчас контейнер работает от root внутри контейнера.

      • Нет --cap-drop ALL, нет --security-opt no-new-privileges.

      • Нет --pids-limit и --ulimit — fork-bomb пока технически возможен.

      • Корневая ФС writable, а не read-only.

      • Next.js-процесс имеет доступ к /var/run/docker.sock — это отдельный вектор, о котором я думаю больше всего.

      Про npm install с lifecycle-скриптами — полностью согласен. Пакет с postinstall может сделать что угодно в контейнере. npm ci --ignore-scripts ломает половину реальных проектов (esbuild, sharp, node-gyp), поэтому пока оставляю как есть.

      Что планирую сделать:

      1. На этой неделе: --user 1000:1000, --cap-drop ALL, --security-opt no-new-privileges, --pids-limit 256, --read-only + writable /tmp и /workspace, --ulimit nofile=1024.

      2. Через 2 недели: вынести сборку в отдельный сервис-раннер, у которого нет доступа к /var/run/docker.sock из основного приложения. Очередь на Postgres (уже есть семафор, добавлю воркер).

      3. Дальше: сеть для npm install через внутренний прокси (Verdaccio) с whitelist. Это позволит запускать всё с --network none.

      4. В перспективе: gVisor (runsc) вместо обычного runtime — изоляция на уровне userspace-ядра. Или Firecracker, если проект вырастет до серьёзных нагрузок.

      Пока это бета, и я честно не рекомендую сдавать через платформу приватный или коммерческий код. Только то, что не жалко. В политике это указано.


  1. Kurganov1993 Автор
    13.10.2026 01:53

    Обновил платформу. Теперь после регистрации показывается пошаговый онбординг, есть кнопка «взять тестовый репозиторий» и квест «Hello, DevRaid» — проходится за 15 секунд. Кто хотел попробовать, но не понял, что делать — заходите заново, теперь всё проще.


  1. swap2bin
    13.10.2026 01:53

    gpt-4o‑mini

    Это шутка?

    Мне кажется глупее модель не найти, очевидно, что это другая ии наклепала, они любят только эту гпт модельку))

    А вообще в чем ценность, если можно всю твою идею завернуть в формате нативного приложения или банально скила для агента? ну идея интересная, если она про то как вспомнить разработку руками, то для чего вообще тогда веб-сервис?

    И очевидно любому рекрутеру без разницы на достижения в этом сервисе, лучше сразу выбрать сторону:

    1) для self импрувинга разработчика

    2) сервис для hr, чтобы проверить кандидата (не есть ли у него там профиль, а может ли сервис реально повести аудит кандидата на примере такого тз)


    1. Kurganov1993 Автор
      13.10.2026 01:53

      Спасибо, многое по делу. Разберу по пунктам. > gpt-4o-mini — глупее модели не найти Согласен, модель слабая. Выбрал её по одной причине: это дешёвый шлюз для прототипа. $0.001 за ревью на старте, когда 10 пользователей, важнее, чем качество ответа. Провайдер меняется через один env-переменную (AI_PROVIDER + AI_BASE_URL + AI_MODEL), код провайдер-агностичный. Как только появится бюджет или запрос от пользователей — переключусь на Claude или GPT-4o за 5 минут. Это не архитектурная привязка, это временное решение. > можно завернуть в нативное приложение или скилл агента Можно, но это другой продукт. Скилл агента — личный инструмент, он не даёт: - публичного профиля, который можно кинуть в резюме - лидерборда и соревнования - базы квестов, где встречаются разработчик и работодатель - воронки найма Если цель — «я хочу проверить свой код», скилл агента подойдёт. Если цель — «я хочу, чтобы мой код говорил за меня на рынке», нужна площадка. Это разные задачи. > очевидно любому рекрутеру без разницы на достижения в этом сервисе Тоже соглашусь, но с уточнением. Рекрутеру — да, всё равно. Он смотрит по ключевым словам в резюме. А вот тимлиду, который реально нанимает в свою команду, интересно. Но чтобы до него дошло — надо, чтобы рекрутер вообще отправил ссылку. А это уже вопрос доверия к платформе, которого у 3-дневного прототипа нет. Тут вы правы: ценность для HR появится только когда будет масса героев и когда компании начнут сами создавать квесты. Пока это не так — платформа работает в основном на разработчиков. > лучше сразу выбрать сторону: self-improvement или HR Хороший вопрос, спасибо. Мой ответ: сейчас — self-improvement, в перспективе — двусторонняя платформа. Первая сторона (разработчик) — это вход. Человек прокачивает навыки, получает артефакты, растёт в лидерборде. Ему интересно возвращаться. Вторая сторона (работодатель) — это выход. Компания создаёт квест, смотрит, кто его решил лучше всех, и приглашает на интервью. Но чтобы это заработало, нужно, чтобы на первой стороне было много активных героев. Это классическая проблема курицы и яйца у любого маркетплейса. Сейчас я на этапе набора первой стороны.