Старший программист - Frontend (react)
Описание
Мы в поиске старшего 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); Опыт разработки в изолированных контурах без доступа к внешним сервисам, с полной работой внутри периметра.