Fullstack-разработчик (TypeScript: бэкенд + веб / Node.js )

Fullstack-разработчик (TypeScript: бэкенд + веб / Node.js )

Описание вакансии

Fullstack-разработчик (TypeScript: бэкенд + веб)

ONEMA · ВАКАНСИЯ

О проекте

Действующий маркетплейс с двумя контурами: B2C-витрина с мобильными приложениями на iOS и Android и B2B-часть для поставщиков, сотрудников и администраторов. В продукте работает AI-ассистент: подбор товаров по запросу на естественном языке, рецепты, учёт диетических ограничений.

Технически это двенадцать сервисов на Node.js и TypeScript плюс два мобильных приложения. Витрина и BFF — на Next.js 16.2 (App Router) и React 19, четыре B2B-приложения на том же стеке, данные и авторизация — в Supabase. Вокруг работают воркеры: пуш-уведомления, эмбеддинги для поиска, синхронизация с AmoCRM, экспорт телеметрии, обработка изображений. Деплой в Docker.

Технологический стек

Веб: Next.js 16.2 (App Router), React 19, TypeScript 5.7 strict, @supabase/ssr, lucide-react. Админка: @xyflow/react, @dnd-kit, exceljs, xlsx, sharp, react-image-crop.

Бэкенд: Next.js route handlers (70 в BFF, 57 в витрине), Express 4.21, Fastify 4.28, Node ≥ 20.9, pg 8.11.

Данные: Supabase — PostgreSQL, Auth, Storage; PL/pgSQL, Row Level Security.

AI: OpenAI API (gpt-4.1-mini, вызовы по HTTP), @xenova/transformers — локальные эмбеддинги.

Интеграции: 1С, AmoCRM, Exolve (SMS), Resend (email), VK, Yandex, S3/R2.

Инфраструктура: Docker, GitHub Actions, pino, Sentry, Vitest.

Основные обязанности

  • Развивать B2C-витрину и BFF на Next.js, а также четыре B2B-приложения: админку, кабинет поставщика, кабинет сотрудника, авторизацию.
  • Проектировать и поддерживать API, которым пользуются веб и оба мобильных клиента: контракт, версионирование, обратная совместимость.
  • Отвечать за данные в Supabase: схема, индексы, функции PL/pgSQL, политики Row Level Security.
  • Завести миграции и версионирование схемы БД в репозитории.
  • Развивать AI-ассистента: поиск по эмбеддингам, вызовы LLM, разбор запросов на естественном языке.
  • Поддерживать воркеры на Node.js: пуши, эмбеддинги, синхронизация с CRM, телеметрия, обработка изображений.
  • Поддерживать интеграции с 1С, AmoCRM, SMS- и email-провайдерами.
  • Держать наблюдаемость: структурные логи pino, ошибки в Sentry, разбор продакшен-инцидентов.
  • Собирать и деплоить в Docker, развивать CI на GitHub Actions — сейчас он настроен только в двух репозиториях.

Требования

  • Коммерческий опыт fullstack-разработки на TypeScript от 3 лет.
  • Next.js на App Router и React в продакшене, строгий TypeScript.
  • PostgreSQL на уверенном уровне: схема, индексы, разбор плана запроса.
  • Разграничение доступа на уровне базы: Row Level Security или аналогичные механизмы.
  • Node.js: Express или Fastify, фоновые воркеры.
  • Проектирование REST API, который потребляют мобильные клиенты.
  • Supabase, Firebase или самостоятельно собранная связка Postgres + Auth + Storage.
  • Docker и понимание, как сервис попадает на продакшен.

Будет плюсом

  • PL/pgSQL и версионирование схемы: Supabase CLI, Flyway, Sqitch или собственный подход.
  • Векторный поиск, эмбеддинги, практический опыт с LLM API.
  • Интеграции с 1С и CRM-системами.
  • Sentry, структурное логирование, работа с инцидентами.
  • Тесты: покрытие сейчас минимальное, и его предстоит наращивать.

Желательно: стек второго направления

У нас есть второе направление — два действующих интернет-магазина на PHP. Полное совпадение по этому стеку не требуется, но если такой опыт есть, вы сможете подключаться к задачам обоих направлений, а не одного:

  • PHP 8.1 и Laravel 9: Eloquent, очереди, планировщик, Artisan-команды.
  • Blade, Tailwind CSS, Alpine.js, Vite — серверный рендеринг витрины.
  • MySQL и Memcached, кеширование запросов Eloquent.
  • Laravel Passport и Sanctum, права на ролях (spatie/laravel-permission).
  • Nginx, Docker Compose, GitLab CI — окружения и деплой магазинов.
  • Интеграции со службами доставки: СДЭК, Boxberry, FivePost, Почта России.
  • Генерация документов и выгрузок: Excel (maatwebsite/excel), PDF (FPDF/FPDI), штрихкоды и QR-коды.
  • Обработка медиа: Intervention Image, FFmpeg.
  • Next.js 15 и React 19 в headless-варианте — второй магазин собран как отдельный фронт к API.
  • Нагрузочное тестирование на k6 — сценарии на 500–2000 rps.

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

  • Работу над продуктом с живой аудиторией: маркетплейс с веб-витриной, B2B-контуром и двумя мобильными приложениями.
  • Современный стек в актуальных версиях: Next.js 16, React 19, Kotlin 2.0, SwiftUI на iOS 17.
  • Реальное влияние на инженерные практики: команда собирается заново, процессы предстоит выстроить, а не наследовать чужие.
  • Оплату всех согласованных часов: время фиксируется в трекере.
  • Задачи приходят от PM уже согласованными.
  • Первый месяц — пилотный объём работ с обратной связью по итогам: обе стороны спокойно проверяют, подходим ли друг другу.
  • Удалённый формат и минимум встреч: статус-созвон 15 минут, дальше работа.

Формат работы

Уровень

Middle+ / Senior

Опыт

от 3 лет

Занятость

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

Формат

удалённо, часовой пояс — не более +3 часов к московскому

График

основное окно работы — 10:00–19:00 МСК, статус-созвон по будням в 11:30 МСК

Оформление

договор с самозанятым или ИП

Как откликнуться

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

Навыки
  • JavaScript
  • Node.js
  • TypeScript
  • Supabase
  • Next.js
Посмотреть контакты работодателя

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

Компания Цитрус
  • Москва

  • до 450000 RUR

Рекомендуем
Ubego
  • Москва

  • до 450000 RUR

Рекомендуем
Madness
  • Москва

  • до 450000 RUR

Рекомендуем

Архитектор SaaS системы + Senior Go Developer

Бегачева Екатерина Борисовна

  • Москва

  • до 450000 RUR

Пахомов Алексей Юрьевич

Веб-мастер / SEO-специалист (iGaming)

Пахомов Алексей Юрьевич

  • Москва

  • до 450000 RUR

OpenUrban
  • Москва

  • от 150000 RUR

Хотите оставить вакансию?

Заполните форму и найдите сотрудника всего за несколько минут.
Оставить вакансию