Старший программист - Frontend (react)

Дата размещения вакансии: 11.08.2026
Работодатель: ЦРТ | Группа компаний
Уровень зарплаты:
з/п не указана
Город:
Санкт-Петербург
Выборгская набережная 45Е
Требуемый опыт работы:
От 3 до 6 лет

Мы в поиске старшего frontend-программиста, мы делаем AI-ассистента для работы с большими массивами разнородных материалов: документы, аудиозаписи, видео, стенограммы.

Какие задачи необходимо решать:

  • Развивать веб-интерфейс на React 18 + TypeScript: рабочее пространство с документами и стенограммами, чат с ассистентом, конструктор документов, настройки, администрирование;
  • Реализовывать потоковые сценарии: стриминг ответов модели и событий через SSE (свой менеджер переподключения с курсором), онлайн-распознавание речи через gRPC-web, воспроизведение и разметка аудио/видео с осциллограммой;
  • Вести миграцию с legacy UI-кита (MUI v4, EOL) на Tailwind + shadcn/ui: новые экраны сразу на новом слое, старые переносить постепенно, не останавливая поставку;
  • Держать архитектуру фронта: слоистая структура (app → pages → widgets → features → modules → entities → shared), MobX-сторы, единый HTTP-слой, ролевой интерфейс по привилегиям. Границы слоёв проверяются ESLint-ом — обходить их нельзя;
  • Покрывать логику юнит-тестами (Jest + Testing Library) и участвовать в запуске E2E-контура (Playwright) — его ещё предстоит поставить;
  • Работать в связке с бэкендом (.NET) и аналитиком: уточнять контракты API и событий, разбирать требования, давать оценки, ревьюить код коллег;
  • Использовать AI-агентов в разработке (Claude Code / Cursor) — у нас это часть рабочего процесса, а не эксперимент.

Наши ожидания:

  • От 3 лет коммерческой разработки на React и TypeScript в strict-режиме: дженерики, типизация API-слоя, отсутствие any по умолчанию;
  • Опыт работы с любым зрелым state-менеджером (MobX, Redux, Zustand) и понимание, зачем разделять серверное состояние и состояние интерфейса;
  • Практика реалтайм-сценариев: SSE, WebSocket или long-polling — с переподключением, отменой и обработкой отказов, а не только happy path;
  • Умение работать с большой существующей кодовой базой: аккуратный рефакторинг, миграция библиотек, способность не сломать соседние фичи;
  • Юнит-тесты как часть нормальной работы, а не отдельная задача «когда будет время»;
  • Внимание к состояниям интерфейса: загрузка, пустой список, ошибка, длинная операция. Длительные AI-операции — основной сценарий, и он должен быть понятен пользователю;
  • Git, code review, работа по задачам в трекере, готовность писать понятные описания изменений.

БУДЕТ ПЛЮСОМ:

  • MobX 6, Tailwind + shadcn/ui, react-hook-form, виртуализация длинных списков;
  • Опыт интерфейсов поверх языковых моделей: чат с потоковой выдачей, цитирование источников, редактирование сгенерированных документов;
  • gRPC-web и protobuf, работа с медиа (wavesurfer.js, плееры, таймкоды);
  • Playwright, миграция сборки с CRA на Vite, i18n (i18next);
  • Опыт разработки для окружений без доступа к внешним сервисам (всё внутри периметра).