Fullstack-разработчик (TypeScript: NestJS + React)

ТАРГЕТ АДС
📍 Москва 💼 От 3 до 6 лет
Откликнуться на hh.ru
✍ Составить сопроводительное письмо

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

💰 Сколько зарабатывают на этой позиции

200 000 ₽ — медиана, обычно 160 000–275 000 ₽
По 81 вакансии «fullstack-разработчик» в городе Москва. Подробная зарплатная аналитика →

О компании и продукте

Мы — продуктовая компания в сфере MarTech. Помогаем среднему и крупному бизнесу измерять эффективность медийной рекламы, выстраивать сквозную аналитику и атрибуцию по разным каналам. Нашим продуктом уже пользуются крупнейшие компании из банковского сектора, e-commerce и FMCG.

Через нас проходят большие потоки данных, поэтому важна производительность, корректность на больших объёмах и надёжная асинхронная обработка.

Ищем человека, которому интересно не просто писать с нуля, а переносить живую систему на новый фундамент, не ломая её пользователям, и доводить инженерные инициативы до конца.


Стек

- Backend: TypeScript, NestJS на Fastify, Prisma, Zod. PostgreSQL с row-level security, ClickHouse. Valkey/Redis, BullMQ. Kafka через transactional outbox. OPA (Rego) для авторизации. S3.

- Frontend: React 19 + TypeScript, Feature-Sliced Design, TanStack Query + Zustand, Tailwind 4 + Radix, react-hook-form + Zod, Lingui.

- Общее: pnpm-воркспейс, общие Zod-схемы как контракт между бэком и фронтом, TypeScript 7, SWC, oxlint / oxfmt, Vitest.

- Инфра и качество: Docker / docker-compose, GitLab CI, Kubernetes + Helm, OpenTelemetry, Prometheus / Grafana.

- Legacy, который мигрируем: Python, FastAPI, SQLAlchemy, Alembic, Celery / RabbitMQ, React 18 + Redux Toolkit.


Что предстоит делать

- Развивать продукт целиком — от API и бизнес-логики до пользовательских дашбордов и конструкторов отчётов: кампании и размещения, теги и пиксели, атрибуция, отчётность, интеграции с рекламными системами.

- Переносить функциональность с текущей платформы на новый стек: разбираться, как она работает сегодня, предлагать новую модель данных и способ переезда, незаметный для клиентов.

- Разрабатывать SPA на React + TypeScript: интерактивные дашборды и визуализация данных.

- Проектировать REST API и держать контракт с фронтендом: единая валидация, понятные коды ошибок, обратная совместимость.

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

- Использовать Redis и брокер сообщений для кэширования и надёжной асинхронной обработки: очереди задач (расчёты и экспорт отчётов, обработка креативов) и обмен событиями с аналитическим контуром — с ретраями, идемпотентностью и работой в несколько реплик.

- Отвечать за свой код на проде: метрики, логи, алерты, разбор инцидентов.

- Участвовать в развитии архитектуры, ревью кода и формировании технических стандартов команды.


Что ждём от вас

- От 3 лет коммерческого опыта в fullstack-разработке

- Сильный TypeScript и Node.js: асинхронность, строгая типизация, опыт с NestJS или другим DI-фреймворком.

- Уверенный React + TypeScript: функциональные компоненты и хуки, управление состоянием и серверным кэшем (TanStack Query, RTK Query или близкий опыт).

- Опыт проектирования REST API, версионирования и миграций схем БД (Prisma, TypeORM, Alembic — важен подход, а не инструмент).

- PostgreSQL: SQL, индексы, оптимизация запросов.

- Redis и асинхронная фоновая обработка на брокере (BullMQ / RabbitMQ / Kafka / аналог): очереди, консьюмеры, идемпотентность, ретраи.

- Git, Docker / docker-compose, умение читать и дорабатывать CI/CD (GitLab CI или аналог), общее понимание Kubernetes (Deployment / Service / Ingress, логи пода, выкатка) — без администрирования кластера.

- Наблюдаемость: Sentry, OpenTelemetry, Prometheus / Grafana или аналоги; умение диагностировать проблемы на проде.

- Опыт написания тестов на всех уровнях — unit, integration, e2e (Vitest, Testing Library, Playwright или аналоги).

- Понимание границ сервисов: декомпозиция монолита, выделение сервисов, контракты между ними.

- Готовность читать чужой код на Python: часть логики переносится из FastAPI-платформы. Глубокого Python не требуем, но ждём сильного уровня в Node.js / TypeScript


Будет плюсом

- Опыт перевода работающего продукта на новый стек без простоя для пользователей.

- Multi-tenant, RBAC, row-level security, policy engine (OPA / Rego или аналог).

- OAuth2 / JWT, ротация refresh-токенов, второй фактор.

- ClickHouse и аналитические запросы на больших объёмах.

- Kafka и паттерн outbox.

- Продвинутая эксплуатация в Kubernetes, Helm и тюнинг CI/CD.

- Golang

- Интерес к LLM / AI.

- Опыт в AdTech / MarTech и атрибуции.


Мы предлагаем

- Трудоустройство в аккредитованную ИТ-компанию.
- Продукт с реальным влиянием на эффективность крупнейших рекламодателей и большим потоком данных.
- Реальная возможность влиять на архитектуру и технические стандарты
- Быстрая обратная связь и короткий цикл принятия решений.

Похожие вакансии

Fullstack-разработчик (Middle+ / Senior)
от 250 000 до 300 000 ₽
Похалуева Злата Минижановна · 📍 Москва
Стажер Backend / FullStack разработчик
СИСТЭМ ЭЛЕКТРИК · 📍 Москва
Javascript Fullstack Разработчик
Моторинвест · 📍 Москва
Все вакансии «fullstack-разработчик» в городе Москва →

Ещё вакансии в «ТАРГЕТ АДС»

Аналитик данных/Data Analyst
от 110 000 до 200 000 ₽
ТАРГЕТ АДС · 📍 Москва
Все 3 вакансии компании →

Вакансии в городе Москва

Тендерный специалист
от 120 000 ₽
ВЕРТЕКС · 📍 Москва
Риэлтор по недвижимости (покупка, продажа, обмен)
от 150 000 ₽
ИНКОМ - Недвижимость · 📍 Москва
Менеджер / Риелтор по недвижимости (вторичный рынок жилья)
от 150 000 ₽
ИНКОМ - Недвижимость · 📍 Москва
Стажер в отдел рекламы
от 80 000 до 100 000 ₽
PEOPLE BOOSTED · 📍 Москва
Главный специалист по эффективности
Газпромнефть-Снабжение · 📍 Москва
Преподаватель графического дизайна/дизайнер
от 140 000 ₽
ГБПОУ ИТ.МОСКВА · 📍 Москва
Все вакансии в городе Москва →
Откликнуться на hh.ru

Проверка безопасности

Пожалуйста, введите символы с картинки для продолжения

Капча
Неверный ответ, попробуйте ещё раз