Open source

Depotwin

Open-source platform, built with Claude Code · Live digital twin of a vehicle fleet

A live 3D digital twin of 240 simulated vehicles in Moscow — a Go and NATS JetStream pipeline into TimescaleDB, failure models that warn of breakdowns days ahead, a local-LLM copilot over read-only queries, and an offline-first driver app.

Depotwin preview

Problem

Fleet dashboards show where vehicles are, but not what is about to break, and their alerts and predictions are rarely checked against what actually happened.

Solution

A streaming pipeline to a live 3D twin, failure models scored against the threshold rules on unseen fleets, an LLM copilot limited to read-only queries, and an offline-first driver app, all measured against a hidden ground truth.

Built in

Overheating caught 4.5 days ahead (rules: 3.0) with fewer false alarms; 17 of 18 held-out copilot questions right; 200 requests/s with no errors under load; a live demo and CI for every part.

Overview

Depotwin is an open-source platform I built with Claude Code to show a real-time system end to end, measured against a ground truth. A Go simulator drives 240 vans, trucks and minibuses on the Moscow road network from OpenStreetMap, reports like GPS trackers do, and injects faults: fuel theft, failing thermostats and batteries, GPS spoofing, night use. What really happened is published apart, so detectors can be scored without seeing it.

Readings flow through NATS JetStream into TimescaleDB (13.4 million replayed with no gaps or repeats across restarts) and out to a 3D twin built with React, MapLibre and three.js. A FastAPI alerter finds faults as they happen, and LightGBM models on daily features warn of breakdowns: on unseen fleets they caught 156 of 157 overheating failures 4.5 days ahead, against 3.0 days for threshold rules, with fewer false alarms. A copilot on a local Qwen 3.5 9B can only call seven validated, read-only queries and shows the data behind each answer; it answered 17 of 18 held-out questions correctly.

Drivers use an Expo app that queues shifts, inspections and defect reports with photos offline and syncs them in order without duplicates; defects reach the twin at once. Prometheus and Grafana watch every stage, alert rules are unit-tested, and a k6 load test found where the API broke; after the fixes it serves 200 requests a second with no errors while 200 live viewers stay connected.

What it does

  • Simulates 240 vans, trucks and minibuses on the real Moscow road network (OpenStreetMap) in Go, with faults injected and a ground truth the running system never sees
  • Streams the readings through NATS JetStream into TimescaleDB, to a 3D twin (React, MapLibre, three.js) over WebSockets, live or replayed
  • Predicts overheating and dead batteries days ahead with LightGBM; a local LLM (Qwen 3.5 9B) answers questions in English, Russian or Arabic through fixed read-only queries
  • An Expo (React Native) driver app that works offline; Prometheus and Grafana, unit-tested alert rules and a k6 load test in production

What's next

Hiring for a full-stack or Python role — or need something like this built? Let's talk.

I'm open to offers — on-site or hybrid in Moscow, or remote; full-time or contract. I reply within 48 hours — faster on Telegram.

Get in touch TelegramDownload CV

Alhassan Alfarran.

© 2026 · Designed and built by me with Next.js, Tailwind and Framer Motion.

My local time: · Moscow

Notes
How this site is built

Stack

Next.js (App Router) and React, styled with Tailwind CSS and animated with Framer Motion. The contact form sends email through Resend; the site is hosted on Vercel.

Three languages, one layout

English, Russian and Arabic each have their own address (/en, /ru, /ar) and share one set of components. The layout uses logical CSS properties (start/end instead of left/right), so Arabic mirrors right to left without separate styles. The server sends every page with its language and text direction already set, so nothing flips after loading, and the Arabic font is only downloaded when Arabic text is on screen.

Performance and accessibility

Sections below the first screen skip rendering until you scroll near them, and the quick menu loads on first use. Everything works from the keyboard, with a skip link and visible focus, and animations switch off when your system asks for reduced motion.

Source code on GitHub