Мы в поиске старшего 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 CSS, shadcn/ui, react-hook-form, виртуализацией длинных списков;
- Разработка интерфейсов для LLM: потоковая выдача, цитирование источников, редактирование сгенерированных документов;
- Опыт с gRPC-web/protobuf, мультимедиа (wavesurfer.js, плееры, таймкоды);
- Playwright, миграция CRA → Vite, локализация (i18next);
- Опыт разработки в изолированных контурах без доступа к внешним сервисам, с полной работой внутри периметра.