чат с агентомспроситьAI и агенты7 файловИнфраструктура4 файлаРазработка6 файловОбо мне5 файлов
Опыт

Опыт

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

Продуктовая IT-компания (под NDA), 2025 - сейчас

Единственный фронтендер. 1043 коммита из 1165, ~96 000 строк, 758 тест-кейсов, 34 релизных тега. Пришёл, когда лежал демо-прототип на два десятка файлов; ни один его файл сегодня не существует.

Подделка отправителя в управлении записью. Обработчик команд записи приходил через WebRTC data-channel и не проверял, кто на самом деле отправитель. Участник звонка мог назваться кем угодно и навесить всем собеседникам залипший тост «идёт запись» вместе с заблокированной кнопкой. Поймал на ревью, чинил по TDD: первым делом тест, где один участник подделывает другого.

Микрофон, включавшийся сам. После переподключения клиент на мгновение снимал публикацию микрофона - шёл полный republish треков. Монитор здоровья устройств видел «микрофон отключён» и услужливо включал его обратно, против воли человека. Причина нашлась в поведении медиа-SDK; лечится хранением намеренного состояния мьюта отдельно от фактического.

Залипание навигации из-за ResizeObserver. В календаре один узел сидел под двумя ResizeObserver’ами, и один из них писал inline-переменную от собственной высоты элемента. Петля на сотню срабатываний за секунды не давала Next завершить переход: адрес менялся, экран нет, помогала только перезагрузка. Локально не воспроизводилось - диагностировал по HAR-логу.

Отдельно поставил CI со сборкой и подписью под macOS и Windows: Developer ID с нотаризацией, Windows через аппаратный токен по PKCS11. Встроил trivy в конвейер и довёл прод-образ с 49 находок до нуля.

Caerus, 2026 - caerusrentacar.com

Все 87 коммитов мои. Сайт партнёра работал внутри общего агрегатора: на проде оба продукта крутили один бинарник на одной базе и различались только переменными окружения, разделения данных в схеме не было вообще. Разделять такое вслепую - верный способ уронить оба.

Начал с аудита прода: карта процессов, разница конфигураций, снапшот как точка отката. Дальше разделение и одиночное ведение продукта: SEO-страницы под запросы вроде «car rental in Montenegro», человекочитаемые адреса, фиксы по жалобам партнёра. Стек - Next.js, Express, Prisma с PostgreSQL, Stripe и PayPal, договоры собираются в PDF, письма уходят через отдельный сервис.

Платформа психотерапии и коучинга, 2025 - 2026

Фронтенд в команде под отдельным лидом. Мой участок - фича «Супервизии» целиком, от онбординга до оплаты: поле «о себе как о супервизоре» в профиле, публичный поиск супервизоров с фильтрами и бесконечной подгрузкой, покупка супервизии клиентом, кабинет специалиста со способами оплаты, списком сессий, отменой и переносом, отражение супервизий в календаре отдельным цветом.

Next.js 15 на App Router в Nx-монорепозитории, Feature-Sliced Design, Zustand, CSS Modules. Фичу собрал через агентный spec-driven процесс: 4-5 часов работы против собственной ручной оценки в 19 часов.

EVIRMA, 2025 - evirma.ru

Расширение Manifest V3 для продавцов Wildberries: аналитика рекламы встраивается прямо в интерфейс маркетплейса. В команде 7-8 человек, 56 смёрдженных PR из 229 - второе место после техлида. По коммитам вышло бы 13%, но там squash-merge и один PR равен одной задаче.

Технически это работа в чужом продакшене, где ничего тебе не принадлежит: перехват fetch в world: MAIN для чтения внутреннего API, ограничение частоты запросов по token bucket (маркетплейс банит за частоту), фоновые задачи в service worker с восстановлением после усыпления, React-инжекты в чужую вёрстку с изоляцией стилей через собственный плагин сборки. Мои зоны: воронка продаж селлера с нуля, статистика кампаний по ключам и дням с расчётом ДРР и СРР, экспорт в многостраничные книги Excel.

Агрегатор аренды автомобилей, 2024 - 2025

Предшественник Caerus, сотрудничество завершено. Написал половину фронтенда - 331 коммит из 645: каталог с фасетными фильтрами и расчётом цены, бронирование с проверкой доступности по календарю, кабинет партнёра с таймлайном броней, админка с ролями, шесть языков, Stripe и PayPal. Работа шла через pull request с код-ревью.

App In The Air, 2019 - 2024, США

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

Сначала сервис покупки авиабилетов: поиск рейсов, выдача, данные пассажиров, оплата. Затем бронирование отелей. Интеграции с провайдерами шли через собственный бэкенд компании, на фронте были Stripe, i18next с ICU, Sentry. Дальше корпоративный портал: кабинет компании, сотрудники, привязка корпоративных карт, самостоятельное бронирование в рамках travel policy, анализ расходов. Попутно перевёл фронтенд на монорепозиторий Nx, обновил React 17 на 18, внедрил Next.js.

Остался до конца: сервис отключили в октябре 2024, я работал до отключения.

webrise, 2016 - 2019

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

Ингосстрах - основной сайт и линейка калькуляторов. Образовательная платформа всероссийского конкурса с видео и чатом в браузере и лекциями преподавателей. Магазин Усачевского рынка с мобильными приложениями на React Native. Промо-акции Unilever, браузерная игра для Ritter Sport, цифровая платформа университета путей сообщения с подпроектами для студентов, старост и преподавателей.

Займер, 2014 - 2016 - zaymer.ru

Робот выдачи микрозаймов на карту без участия человека, Россия и Казахстан. Разрабатывал личный кабинет клиента и личный кабинет сотрудника. Laravel 5, KatanaFramework, MySQL, PostgreSQL, MongoDB, тесты на Selenium. Финтех с реальными деньгами: цена ошибки в расчётах измеряется в чужих рублях, и это дисциплинирует лучше любого регламента.

it-infinity, 2013 - 2014 - itinfinity.ru

Первые коммерческие сайты: редизайн существующих на чистых HTML, CSS и JS поверх 1С-Битрикс. Первая строчка в карьере.