← НАЗАД
TKM / КЕЙСEN
Единственный инженер · Контракт

TKM

Распределённая платформа автоматизации браузеров, оркестрирующая ~2 500 сессий.

TKM: распределённая платформа автоматизации маркетплейса, оркестрирующая около 2 500 управляемых аккаунтов в трёх скоординированных приложениях, которые я собрал в одиночку: API на NestJS для оркестрации, React-консоль для операторов и Electron-приложение для рабочего стола, которое управляет настоящим антидетект-браузером на машине каждого оператора. Все три связывает единый контракт с типизацией через OpenAPI, поэтому изменение бэкенда, которое ломает клиент, выявляется на этапе компиляции. Основная инженерия сосредоточена в частях, которые должны выдерживать нагрузку: уникальный браузерный отпечаток для каждого аккаунта, ротация sticky-прокси с привязкой через GeoIP, прогрев сессий и планировщик, а также устойчивые пайплайны синхронизации статусов на BullMQ.

Web consoleReact · MUI · TanStackDesktop applicationElectron · Patchright · ×NOpenAPI typed contractNestJS APIorchestration · BullMQ workersPostgreSQLPrisma · normalizedRedisqueues · sessions
~2 500
сессий в оркестрации
Solo
инженер, 3 приложения
100%
типизация клиент-сервер
20+
доменных модулей
NestJSTypeScriptPrismaPostgreSQLBullMQRedisSocket.IOOpenAPIopenapi-fetchReact 18ViteMUITanStack TableElectronPatchrightMaxMind GeoIPPrometheusWinstonDockerGitLab CI/CD
/ мой вклад

Что я построил.

Единоличное владение и архитектура

Построил три скоординированных приложения в одиночку

Единственный инженер на всей платформе: API оркестрации на NestJS, React-консоль для веба и Electron-приложение для рабочего стола, плюс инфраструктура и CI/CD под всем этим.

Единый контракт с типизацией через OpenAPI для веба и рабочего стола

API публикует OpenAPI-контракт, который потребляют оба клиента через openapi-fetch: провод полностью типизирован от начала до конца. Изменение бэкенда, которое ломает клиент, проявляется на этапе компиляции, а не в продакшне.

20+ доменных модулей на Prisma и PostgreSQL

Чистая модульная структура NestJS (аккаунты, прокси, заказы, отзывы, курьеры, кошельки, отчёты и другое) поверх Prisma и PostgreSQL, с BullMQ и Redis для всего асинхронного.

Тесты и поставка через CI

Интеграционные тесты на Vitest с настоящим Postgres в Docker, GitLab CI/CD и развёртывание на базе Docker.

Антидетект и устойчивость в масштабе

Уникальный отпечаток браузера для каждого аккаунта

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

Ротация sticky-прокси с GeoIP

Резидентские и мобильные прокси разрешаются как sticky-сессии с привязкой к региону через MaxMind GeoIP: один уникальный IP на аккаунт с отслеживанием истории IP, чтобы два аккаунта никогда не делили адрес.

Прогрев, определение выхода из аккаунта и повторная авторизация

Узкое окно прогрева приоритизирует активные аккаунты, а Electron-приложение обнаруживает выходы и проходит повторную авторизацию перед началом реальной работы, вместо того чтобы падать на середине задачи.

~2 500 параллельных сессий под контролем

Ограниченный параллелизм, повторные попытки и контроль лимитов запросов удерживают около 2 500 сессий без срабатывания антибот-защиты, против которой они работают.

Оркестрация и пайплайны данных

BullMQ-воркеры и адаптивный планировщик

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

Перехват CDP в нормализованную модель

Electron-приложение перехватывает вызовы маркетплейса через CDP и передаёт подсказки в API, который нормализует их в чистую модель заказов, позиций и пунктов выдачи.

FIFO-согласование потерявшихся объектов

Алгоритм FIFO-сопоставления согласует более поздние события с правильным заказом по наиболее надёжному реальному сигналу, сохраняя консистентность данных даже при неупорядоченном поступлении событий.

Статистический анализ показателей успеха

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

Рабочий стол, реальное время и поставка

Electron-приложение с автообновлением

Кроссплатформенное Electron-приложение с автообновлением и собранными в CI, подписанными Windows-релизами, публикуемыми в S3, разделяющее React-кодовую базу с веб-консолью.

Реальное время через Socket.IO

Статус аккаунтов и задач передаётся в реальном времени обоим клиентам через Socket.IO; операторы видят изменения состояния без обновления страницы.

Наблюдаемость и операционный инструментарий

Метрики Prometheus и ротируемые логи Winston для видимости, плюс Telegram-бот для операционных рассылок и генерации отчётов в Excel и PDF.

/ продукт

Что умеет TKM.

Используют Операции на маркетплейсах, Автоматизация e-commerce.

Оркестрация в масштабе

Управляйте ~2 500 аккаунтами маркетплейса (у каждого своя личность, прокси и расписание) из одной консоли.

Антидетект-приложение для рабочего стола

Electron-приложение запускает настоящий Chrome для каждого аккаунта с детерминированным ротирующимся отпечатком браузера.

Настоящие, устойчивые сессии

Sticky резидентские и мобильные прокси, привязка к региону через GeoIP, один уникальный IP на аккаунт с историей отслеживания.

Планировщик и прогрев

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

Пайплайны синхронизации статусов

Фоновые BullMQ-воркеры согласуют состояние заказов и отзывов в единую нормализованную модель данных.

Консоль оператора

React-дашборд с таблицами на тысячи строк, фильтрами и статусами в реальном времени через Socket.IO.

/ under the hood

Одна сессия от начала до конца.

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

01

Запросить сессию

Electron-приложение обращается к API за сессией: личность, sticky-прокси и IP с привязкой к региону, под открытой блокировкой, чтобы два экземпляра никогда не столкнулись.

02

Запустить антидетект-браузер

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

03

Работать и перехватывать

Работа происходит в настоящем браузере; Electron-приложение перехватывает нужные вызовы через CDP и передаёт структурированные подсказки обратно в API.

04

Нормализовать и сохранить

API нормализует эти подсказки в чистую модель заказов, позиций и пунктов выдачи в PostgreSQL через Prisma.

05

Синхронизировать и согласовать

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

Антидетект-стек
Отпечаток

Детерминированный сид для каждого аккаунта через CDP, реалистичное распределение версий, 5-дневная ротация + охлаждение.

Прокси

Sticky резидентские и мобильные сессии, один уникальный IP на аккаунт, история IP отслеживается.

GeoIP

Привязка к региону через MaxMind, чтобы IP аккаунта оставался географически консистентным.

Прогрев

Узкое окно прогрева приоритизирует активные аккаунты перед реальными операциями.

Восстановление

Определение выхода из аккаунта и повторная авторизация перед работой, вместо падения на середине задачи.

Троттлинг

Ограниченный параллелизм, повторные попытки и контроль лимитов запросов на ~2 500 сессиях.

Закрытый коммерческий проект под NDA. Никаких реальных аккаунтов, пользовательских данных, учётных данных или скриншотов не показывается; система описана в абстракции и визуализирована только как архитектура. Подробный разбор доступен по запросу.

← ВСЕ РАБОТЫ