Ruby Labs

Старший инженер по настольным приложениям (Electron.js)

Коротко

Старший инженер по настольным приложениям в Ruby Labs отвечает за новый кроссплатформенный (macOS/Windows) настольный продукт на Electron с глубокой нативной интеграцией: захват системного и микрофонного аудио в реальном времени, оверлей поверх всех окон, глобальные горячие клавиши, подписание кода, нотариальное заверение, автообновление и отчетность о сбоях. Требуется от 6 лет опыта разработки (включая TypeScript/Node.js), минимум 3 года выпуска реальных Electron-приложений, а также практический опыт нативной разработки под macOS (Swift/Objective-C, AppKit, Core Audio/AVFoundation/ScreenCaptureKit/Accessibility API) и знание Windows (Win32 API, Authenticode). Работа удаленная, контракт как с независимым подрядчиком, кандидаты должны находиться в пределах ±4 часов от CET.

О нас
Ruby Labs — ведущая технологическая компания, которая создает и управляет инновационными потребительскими продуктами. Мы предлагаем разнообразные возможности в сферах здравоохранения, образования и развлечений. Наши инновационные команды формируют будущее продуктов, ориентированных на потребителя, и мы всегда ищем увлеченных специалистов, чтобы присоединиться к нам. Узнайте больше о нашей истории по ссылке: https://rubylabs.com/about-us/
О вакансии
В Ruby Labs мы ищем старшего инженера по настольным приложениям, который возьмет на себя ответственность за новый кроссплатформенный настольный продукт от первого коммита до выпуска в производство.
Это роль с высокой степенью ответственности и необычайно глубоким системным компонентом. Приложение не является оберткой веб-приложения: оно захватывает системный и микрофонный аудиосигнал в реальном времени, отображает всегда поверх других окон оверлей по всему рабочему пространству пользователя, регистрирует глобальные горячие клавиши и интегрируется с операционной системой на уровне, требующем нативного кода как для macOS, так и для Windows.
Наша архитектура основана на Electron для приложения и слоя пользовательского интерфейса, с нативными модулями и вспомогательными процессами на Swift и C++ там, где это требуется платформой. Вы будете отвечать за эту границу — решать, что должно быть написано на TypeScript, что — в нативном коде, и делать так, чтобы обе части работали как единый надежный продукт.
Вы также будете отвечать за все, что происходит после сборки: подписание кода, нотариальное заверение, права доступа, процесс предоставления разрешений, автообновление и отчетность о сбоях. В этом продукте это не второстепенные задачи; они составляют значительную часть инженерной работы, и ошибки в них могут помешать пользователям запустить приложение.
Вы будете выступать старшим техническим голосом по настольным приложениям в вашей команде, устанавливая инженерные стандарты для платформы.
Основные обязанности
Настольное приложение и качество инженерии
•Полная ответственность за архитектуру Electron — основные, рендерерные и вспомогательные процессы, дизайн межпроцессного взаимодействия (IPC), изоляция контекста, жизненный цикл процессов — и реализация основных функций в согласованные сроки.
•Создание прозрачных, безрамочных окон-оверлеев, всегда поверх других окон, которые корректно работают в полноэкранном режиме, на нескольких дисплеях и с разным DPI, а также поддержка глобальных горячих клавиш, иконки в трее и низкой задержки интерфейса при постоянной фоновой нагрузке.
•Проектирование чистой платформенной абстракции на TypeScript, чтобы реализации для macOS и Windows оставались изолированными и могли тестироваться независимо, а также написание идиоматичного Swift и C++ в нативном слое.
•Поддержание надежности продукта: защитное обращение с нестабильными API платформы, тесты и код-ревью, соблюдение бюджетов по производительности, памяти и энергопотреблению, а также устранение замечаний по безопасности и результатам пентестов в рамках согласованных SLA по серьезности.
Интеграция с нативной платформой
•Разработка и поддержка нативного слоя: Node addons (N-API / node-addon-api) и вспомогательных процессов вне основного процесса на Swift и C++.
•Реализация захвата системного аудио в реальном времени — Core Audio process taps и ScreenCaptureKit на macOS, WASAPI loopback на Windows — включая обработку смены устройств, согласование форматов и плавное восстановление после сбоев на уровне драйверов.
•Интеграция с Accessibility API (AXUIElement) на macOS и UI Automation на Windows для надежного чтения контекста приложений.
•Ответственность за протокол IPC и жизненный цикл между Electron и нативными помощниками, а также поддержание работоспособности приложения при изменениях платформ Apple и Microsoft.
Распространение, разрешения и надежность релизов
•Ответственность за подписание кода и нотариальное заверение на macOS — защищенный режим выполнения, права доступа, вложенное подписание бинарников, профили провижининга — а также за Authenticode-подпись, репутацию SmartScreen и ложные срабатывания антивирусов на Windows.
•Проектирование процесса предоставления разрешений — микрофон, системное аудио, запись экрана, доступность — так, чтобы уровень одобрения оставался высоким, а ошибки можно было исправить.
•Создание и поддержка конвейера релизов: CI-сборки по матрице, подписание из CI с сертификатами, защищенными аппаратно, автообновление, поэтапный выпуск и откат.
•Ответственность за отчетность о сбоях и производственную телеметрию для настольного клиента и реагирование на полученные данные.
Требования
•Опыт разработки программного обеспечения не менее 6 лет, включая промышленную разработку на TypeScript/Node.js.
•Опыт создания и выпуска Electron-приложений для реальных пользователей не менее 3 лет — не внутренних инструментов или прототипов.
•Практический опыт нативной разработки под macOS на Swift и/или Objective-C с использованием AppKit и как минимум одного системного фреймворка, такого как Core Audio, AVFoundation, ScreenCaptureKit или Accessibility API.
•Опыт написания нативных Node addons (N-API / node-addon-api) или упаковки и взаимодействия с нативными помощниками вне основного процесса.
•Подтвержденный опыт работы с подписанием кода macOS, нотариальным заверением, правами доступа и моделью разрешений TCC — вы отлаживали отклоненную нотариализацию и умеете читать логи.
•Рабочие знания платформы Windows: Win32 API, Authenticode-подпись, а также практические аспекты репутации SmartScreen и антивирусов.
•Глубокое понимание многопроцессной архитектуры, IPC и отладки проблем, которые воспроизводятся только на машине пользователя.
Желательно
•Опыт работы с аудиопотоками в реальном времени — буферизация, ресемплирование, микширование нескольких источников или потоковая передача в сервисы распознавания речи.
•Подписание из CI с аппаратно защищенными сертификатами (Azure Key Vault, DigiCert KeyLocker или аналогичные), а также опыт работы с белыми списками антивирусов или построением репутации SmartScreen для нового продукта.
•Инфраструктура автообновления, такая как Squirrel, electron-updater или Sparkle, включая поэтапные релизы.
•Отчетность о сбоях и символикация для нативного кода (Crashpad, Sentry или аналогичные).
•Опыт выпуска потребительского настольного продукта в значительном масштабе.
Местоположение
Ruby Labs работает в часовом поясе CET (Центральноевропейское время). Кандидаты из любой страны могут подать заявку, если они находятся примерно в пределах ± 4 часов от CET. Это обеспечивает оптимальное сотрудничество и коммуникацию в рабочее время.
Преимущества
•Удаленная работа: свобода работать из любого места и в любое время, поддерживая здоровый баланс между работой и личной жизнью.
•Неограниченный оплачиваемый отпуск.
•Оплачиваемые национальные праздники.
•Компания предоставляет MacBook: высокопроизводительный Apple MacBook, предоставляемый всем сотрудникам, которым он необходим для работы.
•Гибкий договор с независимым подрядчиком: гибкость, автономия и предпринимательские возможности, налоговые преимущества, возможности для нетворкинга, снижение обязательств работодателя и свобода работать из любого места. Подробнее здесь: https://docs.google.com/document/d/1nkrN76JlZkbKj9WSOhlT1_mni_CZeDkHdwfIjPXVwvk/preview?tab=t.0#heading=h.ndsdl4wapxtt
Процесс собеседования
После подачи заявки проводится отбор, который обычно занимает от 3 до 5 дней, но иногда может занять больше времени из-за большого количества заявок. Если есть потенциальное соответствие, следуют следующие этапы:
•Скрининг с рекрутером (40 минут)
•Техническое собеседование (60 минут)
•Финальное собеседование (40 минут)

Хватит откликаться.
Получите рекомендацию.

$10 стартовых кредитов

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

Это не отклик на вакансию: резюме не уходит в компанию, а рекомендацию именно по этой роли мы не обещаем.

Посмотрите, кто ещё получает интервью на автопилоте