Вакансии · 3 открытые роли

Ищем троих в команду ScanOps

ScanOps смотрит на сайт снаружи, как обычный посетитель, находит слабые места и объясняет их владельцу человеческим языком. Продукт работает, у него есть платящие клиенты. Команда маленькая, и мы её расширяем: нужны mid-разработчик на Rust, senior-фронтендер и QA lead.

Полная удалёнка · часовые пояса СНГ · договор с самозанятым или ИП

Кто мы и как работаем

Честно, без корпоративных формулировок: продукт ранней стадии, маленькая команда и высокая планка к коду. Если вам нужны отдел, ритуалы и трёхуровневое согласование — здесь будет неудобно.

Продукт

Что мы делаем

Пассивный сканер: TLS и сертификаты, HTTP-заголовки, DNS, CMS и панели управления, формы, почта, репутация домена. Плюс мониторинг — доступность каждые 5 минут и ежедневный пересканинг с диффом к прошлому отчёту. Всё на русском и английском, с объяснением «что произошло, почему важно, что делать».

Команда

Нас мало

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

Процесс

Как устроена работа

Задачи обсуждаем голосом и в тексте, без ежедневных статусов. Ветка → PR → ревью → CI → мерж → автодеплой. Оценки нужны нам, чтобы планировать, а не чтобы вас ими бить.

Планка

Что не проходит в main

CI не пропускает код мимо форматтера, clippy с pedantic и nursery в режиме -D warnings и полного прогона тестов: request-тесты идут против настоящего PostgreSQL, исходящий HTTP замокан. Фронт — Biome. Это не бюрократия, а способ маленькой команде не утонуть в регрессе.

Открытые вакансии

Три роли. Ниже — что реально предстоит делать, без «динамично развивающейся компании». Если совпадает не всё — пишите всё равно и скажите, что совпадает.

01 Backend-разработчик (Rust) mid

Весь бэкенд ScanOps — сканер, платежи, мониторинг — это один Rust-сервис. Вы будете жить в нём.

Чем предстоит заниматься
  • Писать и поддерживать пассивные проверки: TLS и сертификаты, HTTP-заголовки, DNS, CMS и панели управления, формы, почта. У каждой проверки стабильный check_id и текст находки на двух языках.
  • Развивать API на Loco.rs (Axum + SeaORM) поверх PostgreSQL и писать миграции в отдельном крейте.
  • Держать сканер в рамках: бюджет 20 секунд на скан и SSRF-guard, который не даёт сканеру ходить во внутреннюю сеть по чужой указке.
  • Работать с деньгами: провайдерский трейт с CloudPayments и Robokassa, проверка подписи вебхука по сырым байтам, суммы в копейках, продления и сверка платежей.
  • Поддерживать регулярные задачи: продакшен — контейнер, масштабирующийся до нуля, поэтому мониторинг и ежедневные диффы сканов выполняются синхронно внутри защищённых секретом эндпоинтов, которые дёргают таймер-триггеры.
Что ждём
  • Коммерческий опыт с Rust: async/await и tokio, ошибки как значения, отсутствие unwrap() на горячем пути.
  • Опыт с реляционной БД: SQL, индексы, миграции; понимание, где ORM помогает, а где мешает.
  • Умение писать тесты — у нас это часть задачи, а не отдельный тикет «потом».
  • Спокойное отношение к линтеру: CI не пропускает код мимо clippy с pedantic и nursery в режиме -D warnings.
  • Русский язык на уровне «могу сформулировать находку так, чтобы её понял владелец сайта без ИБ-бэкграунда».
Будет плюсом
  • Понимание веб-безопасности: заголовки, TLS, DNS, практики OWASP.
  • Опыт с окружениями без постоянно живого процесса — где нет фоновых воркеров и есть холодный старт.
  • Опыт интеграции платёжных провайдеров и работы с идемпотентностью вебхуков.
Откликнуться на «Backend-разработчик (Rust)»
02 Frontend-разработчик senior

Личный кабинет и маркетинговый сайт — обе фронтовые поверхности продукта на вас одном.

Чем предстоит заниматься
  • Развивать SPA личного кабинета: React и TypeScript, Rsbuild, Tailwind, react-router, графики, двуязычный интерфейс.
  • Превращать вывод сканера в интерфейс, которым пользуются: находки и их объяснения, история сканов и диффы, публичные статус-страницы, графики доступности.
  • Поддерживать этот сайт: Rsbuild и Nunjucks поверх Tailwind v4 на CSS-first токенах, тёмная тема через атрибут, сборка выкладывается статикой в объектное хранилище.
  • Отвечать за фронтовую часть воронки: экраны скана и оплаты, цели в аналитике, скорость загрузки.
  • Держать доступность и вес бандла: нативные элементы там, где они справляются, минимум зависимостей.
Что ждём
  • Сильный React и TypeScript: типы как инструмент проектирования, а не как обязанность перед линтером.
  • Опыт интерфейсов с большим объёмом данных: таблицы, состояния загрузки, ошибок и пустоты — как часть макета, а не «доделаем потом».
  • Уверенная вёрстка на Tailwind и работа с дизайн-токенами вместо magic-чисел.
  • Готовность быть единственным фронтендером: принимать решения самому и потом с ними жить.
  • Biome и типы в CI — норма, а не повод для дискуссии.
Будет плюсом
  • Опыт с двуязычными интерфейсами и i18n.
  • Опыт продуктовой аналитики и экспериментов на посадочных страницах.
  • Насмотренность в дизайне: отдельного дизайнера у нас нет, макеты рождаются в обсуждении.
Откликнуться на «Frontend-разработчик»
03 QA lead lead

Выделенного QA в ScanOps нет. Есть тесты, линтеры и ручные проверки. Всё остальное строите вы — с нуля и по-своему.

Чем предстоит заниматься
  • Собрать стратегию тестирования на весь продукт сразу: Rust-бэкенд, React-кабинет, статический сайт и инфраструктура. Решить, что автоматизируем, что проверяем руками и что не проверяем осознанно.
  • Закрыть денежные сценарии: оплата, проверка подписи вебхука, продления подписок, сверка платежей. Здесь ошибка стоит настоящих денег.
  • Придумать, как проверять то, что тяжело подделать: вебхуки провайдеров, таймер-триггеры, контейнер, масштабирующийся до нуля, ежедневные диффы сканов и проверки доступности каждые 5 минут.
  • Навести порядок в регрессе сканера: у каждой проверки стабильный идентификатор и вывод на двух языках — нужны фикстуры и внятный способ замечать, что находка изменилась.
  • Ввести релизный чек-лист и критерии выпуска, которых сейчас просто нет, и сделать так, чтобы команда ими пользовалась без напоминаний.
Что ждём
  • Опыт QA lead или senior QA, где вы строили процесс, а не исполняли чужой тест-план.
  • Автоматизация: E2E веб-интерфейса и API-тесты. Инструмент обсуждаем — важно, чтобы это жило в нашем CI и не требовало отдельного человека для поддержки.
  • Умение читать чужой код и заводить дефекты, по которым сразу понятно, где чинить.
  • Тестирование интеграций: моки внешних сервисов, идемпотентность, повторные доставки вебхуков, поведение при таймаутах.
  • Готовность работать без QA-команды за спиной: сначала руками вы сами, потом процесс.
Будет плюсом
  • Опыт тестирования платёжных или биллинговых систем.
  • Базовое понимание веб-безопасности — нам важно не только «работает», но и «не отдаёт лишнего».
  • Опыт с нагрузочным тестированием и окружениями без постоянно живого сервера.
Откликнуться на «QA lead»

Условия

Четыре факта, которые обычно спрашивают первым письмом.

Формат

Полная удалёнка. Офиса нет и не планируется.

Часовой пояс

СНГ. Важно пересекаться с командой в рабочие часы, а не быть онлайн круглосуточно.

Оформление

Договор с самозанятым или с ИП.

Вознаграждение

Вилку не публикуем — обсуждается по итогам собеседования. Назовите свои ожидания в письме, так быстрее.

Как проходит найм

Четыре шага. Без скрининга по ключевым словам и без пяти этапов «познакомиться».

01

Письмо

Присылаете резюме или профиль на hello@scanops.ru, роль — в теме письма. Отвечаем всем; обычно в течение нескольких рабочих дней.

02

Разговор, 40–60 минут

Созвон: чем занимались вы, чем занимаемся мы, что за задачи в ближайшие месяцы и сколько это стоит.

03

Техническая часть

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

04

Условия

Договариваемся о вознаграждении, оформлении и дате старта. Оффер присылаем письмом, чтобы всё было зафиксировано.

Откликнуться

Одно письмо на hello@scanops.ru. Резюме в PDF необязательно — ссылки достаточно.

Что приложить к письму
  • Какая роль — можно прямо в теме письма.
  • Ссылку на код: GitHub, GitLab, пет-проект. Для QA — тест-планы или репозиторий с автотестами.
  • Пару строк о том, что вы делали сами, а не командой.
  • Ваши ожидания по вознаграждению и часовой пояс.

Частые вопросы

Почему не указана зарплата?

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

Как оформляем отношения?

Договор с самозанятым или с ИП. Работа полностью удалённая, офиса нет и не планируется.

Где можно находиться?

Где угодно в часовых поясах СНГ — важно пересекаться с командой в рабочие часы. Релокация не нужна и не предлагается.

Есть ли тестовое задание?

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

Берёте ли джунов и стажёров?

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

Сколько ждать ответа?

Обычно несколько рабочих дней, и мы отвечаем всем. Если тишина дольше недели — напишите повторно, письмо могло потеряться.