Logistics ERP / CRM
InterRail
ERP and CRM platforms built from zero to fully automate core business processes for an international rail-freight logistics company — accounting, contract management, KPI tracking, and AI-powered document processing.
Overview
InterRail is a suite of ERP and CRM systems I built from scratch for an international rail-freight logistics company operating across Central Asia and Russia. Before these tools existed, the team tracked orders, contracts, and KPIs in spreadsheets. Now everything — from inquiry through shipment to financial settlement — lives in one place, used daily across 6+ countries.
What I built
Built both ERP backends from scratch in Django — all data models, REST APIs, and async background jobs for a company that tracks rail freight across Central Asia.
Owned all three Vue 3 frontends — the admin CRM, the tracking dashboard, and a Telegram mini-app — including multi-language support and end-to-end tests.
Integrated an AI assistant so staff can ask about orders and inquiries in plain language — it reads from the live database and tracks cost per user.
Built the document pipeline that parses rail waybill PDFs, spreadsheets, and Word files into structured records — saving hours of manual data entry per shipment.
Architecture
Two independent full-stack systems — one for the Central Asia ERP, one for the tracking platform — each following the same pattern: a Django REST backend with real-time WebSocket support, PostgreSQL, Redis, and a Celery worker for background tasks, all in Docker Compose. Vue 3 SPAs talk to their respective backend over JWT auth, and MinIO handles file storage so waybill documents stay accessible without bloating the database.
Under the hood
Contract and act accounting with automatic completion signals: when all line items on an act are filled in, a background task marks it complete automatically — no one needs to remember to close it manually. Django signals keep denormalized totals on the company record in sync without expensive re-aggregation queries.
Polymorphic order model: a single order table covers container shipments, wagon loads, and empty wagon returns — each with its own shipment and payment status lifecycle — so the ops team works in one view regardless of cargo type.
AI-assisted waybill extraction: the document pipeline dispatches by file type — PDF, spreadsheet, or Word — extracts the text within safe size caps, and feeds it to the AI to produce structured waybill records. Staff went from entering 30+ fields per document by hand to reviewing the AI's output and clicking confirm.
What I learned
ERP scope always expands — the most important engineering decision was keeping each subsystem (contracts, orders, finance) cleanly separated so new requirements didn't cascade everywhere.
Adding an AI layer to document processing revealed that the bottleneck wasn't extraction accuracy — it was data quality upstream. Garbage in, garbage out applies even with good models.
Built with
Frontend
- Vue 3
- Vuex 4
- Vue Router 4
- Bootstrap 5
- ApexCharts
- Leaflet
- Playwright
Backend
- Python 3.11
- Django 4.1
- Django REST Framework 3.14
- Daphne/ASGI
- Celery 5.3
- openai-agents
Data & Search
- PostgreSQL 14
- Redis 7
- Elasticsearch 7
- MinIO
Infra & Tools
- Docker Compose
- Docker Swarm
- GitHub Actions
- ruff
- mypy

