PRO TRANSPORT
Trips, counterparties, fleet, drivers and money in one system — with the margin visible the moment an order is created, not at the end of the month.
Open the live prototype crm.foxdim.ruPRO TRANSPORT is a CRM for a transport company with its own and hired fleet. The company was leaving an off-the-shelf system: expensive, hard to adapt to their processes, with an outdated interface. They decided to grow their own product. I was responsible for design and frontend while another team built the backend — so there was no handoff “over the wall” between a mockup and a working interface.
Why we took it on
A developer who had already worked out the main business logic brought me into the project. To understand the dispatchers' work I studied videos of their working day sent by the client and talked through the processes directly with the business owner. The main condition: dispatchers are moving from the old system, so the familiar form logic had to stay, while the new — money, checks, document control — had to appear alongside without breaking the skill. That set the approach: not to reinvent the working forms, but to remove time sinks from them and make the money visible.
What blocked — and what changed
What blocked
- Trip status and margin are collected from different tables and calls.
- Driver and vehicle documents expire unnoticed — the lapse is discovered on the road.
- Counterparty details are typed in by hand, with errors; checking a counterparty or a driver is a separate chore.
- Real profitability is seen at the end of the month, when it can no longer be influenced.
What changed
- The dashboard answers “where to look”: trips in progress with rate and margin, fleet readiness and a “Needs attention” list whose every item leads to the object.
- The trip order keeps the familiar layout — customer and carrier side by side, each with their own payment — while a smart calculator counts the margin immediately.
- Counterparty, vehicle, driver and address registries are filled from the tax service, the traffic police and FIAS and are protected against duplicates — typing by hand remains for exceptions.
- Reports show revenue, cost and margin by month and by customer — profitability stops being a surprise.
How I worked
- 01
Immersion in the process
Videos of dispatchers' working days and conversations with the business owner: where time and money are lost, what the dispatcher does by hand and what the system can do for them.
- 02
Keep the familiar
Dispatchers move from the old system, so the form logic stayed recognisable: the “Post / Create based on / Print” toolbar, customer and carrier columns. The new was added alongside.
- 03
Shared patterns
Ten sections in a side menu with counters. All registries work the same way: tabs by type, filters, configurable columns, bulk checks, import and export. Object cards come with tabs and an activity feed; adding and editing happen in a side panel over the list.
- 04
Error-proof data entry
Forms know what can be fetched from external sources: tax ID and KPP from the tax service, make and model by plate from the traffic police, a driver's tax ID from the passport, an address from FIAS. Duplicates are caught before a record is created: by a driver's passport, by an address's line and city.
- 05
Design and frontend in one pair of hands
A design system based on Consta and a frontend I built myself: decisions were checked in a working interface, not on static mockups.
Screens that move the work
Operational summary
Six figures in one row: trips in progress, today's loadings, revenue and margin for the month (₽ 613,000, profitability 21%), free vehicles, “Needs attention”. Below are trips with rate and margin, fleet readiness as a ring chart (on a trip, free, in repair), a “Needs attention” list with a delayed trip, expiring documents, incomplete vehicle documents and an exceeded receivables limit, the month's finances and top debtors.
- Every “Needs attention” item leads to the object — a trip, driver, vehicle or counterparty
- Cost-to-margin split in a single bar, 79% and 21%
- A single search across trips, waybills and carriers — in the header on every screen
Trip order
The dispatcher's working document. On top, the “In transit” status and route, a toolbar “Post / Create based on / Print / Check driver”. Customer on the left, carrier on the right — with contacts, rate, payment form, terms and deferral. A smart calculator shows margin and profit, and below are loading and unloading points with date, address, cargo, weight, volume and temperature mode.
- Two independent payments in one order — the customer's and the carrier's
- The driver can be checked without leaving the order
- Temperature mode as a separate column for refrigerated trips
Counterparties: the registry
Tabs by role with counters — customers, carriers, shippers, consignees, others, blacklist. Search by name and tax ID, filters, bulk update from the tax service, import and export. Column setup opens as a popover with toggles and the note “Settings are saved for your profile”. Roles are shown as colour tags, status as “Allowed”.
- Bulk tax-service check — tick rows and refresh
- The reference registry pattern: fleet, drivers and addresses work the same way
New counterparty: a three-step wizard
Adding opens as a side panel over the registry — the list stays in view. Step 1 of 3 — “Details and roles”: tax ID and KPP are requested from the tax service with one button (“Not filled in for sole proprietors”), then the website and the ATI code that pulls in the rating. Roles are chosen as cards that explain what each means for a trip: a customer places transport orders, a carrier performs trips with its own vehicles, a shipper is a loading point, a consignee an unloading point, “other” — for example an agent.
- A three-step progress bar, the current step captioned “Tax ID, tax service, ATI, roles”
- A hint under the field explains why the ATI code — “if there is one, the rating will be loaded from it”
- Roles are not a checkbox list but a choice with an explanation of meaning
Counterparty card
The header answers the main questions about a partner: customer and carrier rating, active trips, contracts and receivables against the limit. Ten tabs — from details and contacts to contracts, drivers, vehicles, addresses and cargo. The “Overview” holds the key facts with tax-service and e-document status, a contact person, the main bank account, active contracts with statuses and an activity feed.
- Receivables against the limit — you see at once how far from it you are
- The activity feed keeps the history, from trip creation to a limit change
Fleet
Trucks, vans and trailers — 30 units, 15 on a trip. Tabs by type and state: free, on a trip, in repair. A plate number is drawn as a licence plate, next to it the owner (own fleet, rental), the driver with the coupling and the document status. Filters by owner, status, plate region, body type, driver and expiring documents, plus a traffic-police check.
- Own and hired fleet in one registry, told apart by owner
- Document check — “STS · PTS” in a row, incomplete ones highlighted
New vehicle: type first, then the fields
The add form starts with choosing a vehicle type — truck, trailer or van — because the set of fields depends on it. A truck is a tractor or lorry that can be coupled with a trailer and given a driver; a trailer is described by cargo characteristics: body type, tonnage, dimensions and loading methods; a van is an all-metal or isothermal van with no trailer. Then the plate number and region: with “Check in the traffic police” the make, model, year and colour fill themselves and stay editable.
- Each type is explained in one line — no need to guess from the name
- Autofill doesn't lock the fields: a source error can be fixed by hand
- “Optional” is marked where a field can be skipped — for example the year of manufacture
Driver card
The header shows a hired driver, the “On a trip” status, categories, licence expiry and the current vehicle. Core data, documents with an “add to order” mark, employment, linked counterparties, an activity feed (“Tax ID received automatically from passport data”) and recent trips. Buttons “Refresh from the tax service” and “Assign to trip”.
- Documents carry an “add to order” mark — you see which will go with the trip
- “Assign to trip” is an action in the header, not buried in the card
New driver: protection against duplicates
The quick form asks for the minimum — name and passport details — and before creating anything the system checks whether this driver already exists: deduplication by passport series and number. Then “Core data”: date of birth, citizenship, a phone with a mask, the individual's tax ID calculated automatically from name, date of birth and passport through the tax service and DaData (“Get tax ID”), SNILS optional. The drivers registry has tabs “Staff 4 / Hired 11 / On a trip 8 / Free 7”.
- A duplicate is caught before the record is created, not after, when it is already in trips
- The tax ID is not typed in: the field reads “Will be received from the tax service”
- The save button names the outcome: “Save driver”
Address book
33 addresses in 18 cities, tabs “Loading points 21 / Unloading points 17 / Loading and unloading 5”. Editing is in a side panel: the counterparty, a city from a list normalised through DaData and FIAS, the address and the point type as two toggles. A note below: addresses are deduplicated by line and city, and the same address is created automatically when a trip is drawn up.
- An address belongs to a counterparty — “TransService” has several
- Point type uses toggles, not a dropdown: one point can be both loading and unloading
Reports
Five tabs: revenue and margin, trips, carriers, fleet, receivables; the period switches — March, February, quarter. At the top, revenue, cost, margin and the share of delivered trips. A 12-month dynamic as bars (cost and margin), revenue and profitability per customer with a share, and the revenue structure.
- The current month is highlighted in the dynamic — seen against the year
- Report export in one button
Employees and access
37 users, 11 departments. An employee card with tabs: general, access rights, extra permissions, login history, document copies and e-documents, Telegram bot and mobile app access. Login data and restrictions sit next to personal data so the manager sets access in one place.
- Role, department and access gathered in one card
- Login history as a tab, with no separate log
The outcome in numbers
- A working CRM frontend and the product's marketing landing page.
- The dispatcher's key processes are gathered in one system, and the margin is visible the moment an order is created.
- Shared registry and card patterns let a user learn a new section by learning one.