Open source

Depotwin

Open-⁠source-платформа, сделана с Claude Code · Цифровой двойник автопарка в реальном времени

Живой 3D-цифровой двойник 240 смоделированных машин в Москве: конвейер на Go и NATS JetStream в TimescaleDB, модели отказов, предупреждающие о поломках за дни, копилот на локальной LLM поверх запросов только на чтение и приложение водителя, работающее без сети.

Depotwin — превью

Задача

Панели автопарка показывают, где машины, но не то, что вот-вот сломается, а их оповещения и прогнозы редко сверяют с тем, что произошло на самом деле.

Решение

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

Под капотом

Перегрев замечен за 4,5 дня (правила: 3,0) с меньшим числом ложных тревог; 17 из 18 отложенных вопросов к копилоту — верно; 200 запросов в секунду без ошибок под нагрузкой; онлайн-демо и CI для каждой части.

Обзор

Depotwin — open-⁠source-платформа, которую я сделал с Claude Code, чтобы показать систему реального времени целиком и измерить её по эталонной разметке. Симулятор на Go ведёт 240 фургонов, грузовиков и микроавтобусов по дорожной сети Москвы из OpenStreetMap, отправляет показания, как GPS-трекеры, и вносит неисправности: слив топлива, отказ термостата и аккумулятора, подмену GPS, ночные поездки. Что произошло на самом деле, публикуется отдельно, поэтому детекторы оцениваются, не видя этого.

Показания идут через NATS JetStream в TimescaleDB (13,4 млн записей в повторе — без пропусков и дублей при перезапусках) и дальше в 3D-двойник на React, MapLibre и three.js. Сервис оповещений на FastAPI находит неисправности по мере появления, а модели LightGBM на дневных признаках предупреждают о поломках: на незнакомых автопарках они заметили 156 из 157 перегревов за 4,5 дня до отказа против 3,0 дня у пороговых правил и с меньшим числом ложных тревог. Копилот на локальной Qwen 3.5 9B может вызывать только семь проверяемых запросов на чтение и показывает данные за каждым ответом; на 17 из 18 отложенных вопросов он ответил верно.

Водители пользуются приложением на Expo: смены, осмотры и сообщения о неисправностях с фото копятся без сети и уходят по порядку без дублей, а неисправность сразу видна в двойнике. Prometheus и Grafana следят за каждым этапом, правила оповещений покрыты тестами, а нагрузочный тест k6 нашёл, где API ломался; после исправлений он выдерживает 200 запросов в секунду без ошибок при 200 подключённых зрителях.

Что делает

  • Моделирует на Go 240 фургонов, грузовиков и микроавтобусов на реальной дорожной сети Москвы (OpenStreetMap) с неисправностями и эталонной разметкой, которую работающая система не видит
  • Передаёт показания через NATS JetStream в TimescaleDB и по WebSocket в 3D-двойник (React, MapLibre, three.js), в реальном времени или в повторе
  • Предсказывает перегрев и разряд аккумулятора за дни с помощью LightGBM; локальная LLM (Qwen 3.5 9B) отвечает на вопросы на русском, английском и арабском через фиксированные запросы только на чтение
  • Приложение водителя на Expo (React Native) работает без сети; в эксплуатации — Prometheus и Grafana, правила оповещений с тестами и нагрузочный тест k6

Что дальше

Ищете full-⁠stack- или Python-разработчика — или нужно сделать что-то похожее? Давайте обсудим.

Открыт к предложениям: офис или гибрид в Москве, либо удалённо; полная занятость или контракт. Отвечаю в течение 48 часов, в Telegram — быстрее.

Связаться TelegramСкачать резюме

Альхассан Альфарран.

© 2026 · Спроектировал и сделал сам. Стек сайта: Next.js, Tailwind и Framer Motion.

Моё местное время: · Москва

Заметки
Как устроен этот сайт

Стек

Next.js (App Router) и React, стили на Tailwind CSS, анимации на Framer Motion. Форма обратной связи отправляет письма через Resend, сайт размещён на Vercel.

Три языка, одна вёрстка

У английской, русской и арабской версий свои адреса (/en, /ru, /ar), а собраны они из одних и тех же компонентов. В вёрстке используются логические CSS-свойства (start/end вместо left/right), поэтому арабская версия отражается справа налево без отдельных стилей. Сервер отдаёт каждую страницу сразу с нужным языком и направлением текста, так что после загрузки ничего не перескакивает, а арабский шрифт загружается, только когда на экране есть арабский текст.

Скорость и доступность

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

Исходный код на GitHub