Chindan Group
Chindan ERP
A role-based ERP for a heavy-machinery importer from China: from lead to customs to debt collection.
- Client
- Chindan Group
- Role
- Sole engineer: architecture, backend, frontend, deployment
- Period
- Aug 2026
- Stack
- GoPostgreSQL 18React 18VitePWACaddyDockerHetznerTelegram WebAppOpenAIAnthropicAmoCRMLibreOffice

Problem
The import chain (China → Khorgos → customs → client) and cash flows lived in disconnected spreadsheets.
Solution
One ERP with database-driven RBAC, a staged machine card, multi-cashbox finance and an AI assistant.
Result
v1.17 in 7 weeks: ~155k lines of code, 16 spec rounds delivered, live at erp.chndn.uz.
Chindan Group imports construction machinery (SANY excavators and more) from China to Uzbekistan. Sales, import, warehouse, finance and client work lived with different people and spreadsheets. The ERP merged everything into one "Enterprise OS": every machine card moves from "order created" through the China purchase, the Khorgos border, customs, warehouse and delivery to "deal closed", and the server checks who may perform each transition.
More than 15 roles: admin, manager, finance, head of sales, closer agents, marketing, logistics, customs declarant, China purchasing and finance, mechanic, founders. Roles live in the database, not in code, so an admin can create new ones. Finance: multiple cashboxes, USD and UZS, a daily rate, P&L, approvals for transactions above $50k. Documents are generated from DOCX templates into PDF with LibreOffice.
The AI assistant works with ~45 tools (find machines, debtors, finance summary, schedule a visit); write actions run only after confirmation; Whisper STT, TTS and OpenAI Realtime voice are available, all inside the Telegram WebApp too.
The backend is standard-library Go: PDF, XLSX and S3 signing were written by hand. 78 migrations, a re-audit of ~400 requirements (privilege escalation and PII leaks found and fixed), 205 role×API combinations checked, and a zero-loss migration from Railway to Hetzner.