STUK Software
Software Development · Web Development

Project overview
STUK is an all-in-one platform for towing and roadside assistance companies, based in Florida, USA. It replaces the phone calls, paper tickets and whiteboards that many towing businesses still run on with one system for the whole operation. That covers dispatching, live truck tracking, impound storage, invoicing, payments and reporting. STUK is free for towing companies to use, with no monthly fees.
I built STUK's web dispatch portal and the backend behind the whole product. The same backend also serves STUK's driver and customer apps, so every job looks the same wherever it's opened.
At a glance
Client: STUK Software, Florida, USA
Industry: Towing & Roadside Assistance
My role: Backend & Web Developer
Scope: Web dispatch portal, plus the shared backend used by the web portal, the driver app and the customer app
Timeline: 1 year
Tech stack: Node.js, Express, MySQL, Sequelize, Socket.IO, Angular, Mapbox, AWS S3, Plivo, Square, Clover, Stripe, Authorize.net
Impact
1 backend powering 3 apps: the web portal, the driver app and the customer app
260+ API endpoints and 16 real-time events behind every screen
4 payment processors connected: Square, Clover, Stripe and Authorize.net
13 built-in business reports
The problem
A tow job is a race against the clock, run on scraps of paper
A towing company runs around the clock. Calls come in from stranded drivers, motor clubs, dealerships and the police. Each call has to become a job, reach the right driver and truck, be tracked until the vehicle is delivered, and then be billed. Some vehicles also end up in the company's storage lot for days or weeks.
Most of the industry was handling this with phone calls, paper tickets and a patchwork of separate tools. That caused real problems:
No live picture: Dispatchers couldn't see where their trucks were, so they assigned jobs by calling drivers one by one.
Customers left guessing: A stranded driver often couldn't describe exactly where they were, and had no idea when help would arrive.
Lost money: Jobs were written up by hand, so miles, extras and storage days were easy to under-bill or forget.
Messy storage lots: Impounded vehicles were tracked in notebooks or spreadsheets, and working out daily storage charges at release time was slow.
Too many tools: Dispatch, GPS tracking, invoicing, card payments and accounting each lived in a different product, none of which talked to each other.
The approach
STUK needed to be simple enough for a dispatcher to use in the middle of a busy night, yet complete enough to run the whole business. My job was to build the engine underneath: one backend that every STUK app talks to, and a web portal where dispatchers and owners run their day. Four principles guided the work:
One job, one record. From the first call to the final payment, everything about a job lives in a single record that the dispatcher, driver, customer and accountant all see.
Real time by default. When a driver moves or a job changes, every screen that cares about it updates instantly, with no refreshing.
Bill exactly what was done. Prices, miles, extras and storage days are calculated by the system, not typed in by hand.
Fit the business, not the other way round. Every company can set its own rates, services, sites, sales tax, commissions and payment processor.
What was built
Every job, from the first call to completion
Dispatchers create a job in one form: who called, the vehicle, the pickup and drop-off points, the service needed, any purchase order number and how the customer will pay. They then assign it to a driver and a truck. From there, the job moves through clear stages: dispatched, en route, on site, towing, at destination and completed. Each live job on the board is colour-coded with a timer, so it's obvious which ones are running late.
Behind this, I modelled the full job lifecycle in the backend, with a history of every status change. Jobs can also be booked for later: a background task checks every minute and moves scheduled jobs onto the board at the right time, in the right time zone. Owners, dispatchers, drivers and even after-hours answering services each get their own level of access.
Every truck on one live map
The Tracking screen shows every on-duty driver and truck on a map, next to the jobs they're working on. Dispatchers can see at a glance who is closest to a new call and add the job to that driver straight from the map.
Drivers' phones send their location to the backend, which pushes it to the right dispatchers over Socket.IO. I used private real-time channels for each company, so a company only ever sees its own drivers. Distances and miles for each job are calculated with Mapbox, which also feeds into billing.

Keeping the customer in the loop by text
A stranded driver doesn't need to download anything. The dispatcher can text them a one-time link, and with a single tap the customer shares their exact location, which appears on the job instantly. The customer then gets a text when the driver is on the way, with a link to follow the truck live, and another when the job is done.
I built these links as single-use and tied to one job, so a location can't be overwritten later. The texts are sent through Plivo.
Roadside help on demand
Customers can also request help themselves: a tow, a jump start, a lockout, a tire change, fuel delivery or an EV charge. I built the backend logic behind these requests. It finds nearby towing companies that offer the service, within 50 miles by default, and calculates a price up front. For a tow, the price combines a base fee with a per-mile rate for the whole trip. Once the customer confirms, the job lands on the company's dispatch board instantly.
Impound and storage, without the spreadsheets
Vehicles that end up in a company's lot appear in the Storage tab, grouped by storage site. Each company sets its own daily storage rates. When the owner comes to collect the car, the system works out what is owed for the days stored, and the dispatcher can release the vehicle and bill the customer in one step.
Invoices and payments in minutes
Every completed job becomes an invoice that can be emailed to the customer or downloaded as a PDF. Companies connect the payment processor they already use, whether that's Square, Clover, Stripe or Authorize.net, and get paid straight into their bank account. Regular customers, such as dealerships and motor clubs, are saved as accounts with their own pricing and purchase-order rules, so new jobs for them take seconds.
I built the integrations with all four processors. Background tasks refresh each company's Square and Clover connections automatically, so payments never break because a login expired.
Reports that run the business
Owners get 13 reports in one place: statements, sales, payments, jobs, driver and truck summaries, driver commissions, account summaries, purchase orders, ETA versus actual arrival time, storage and customer feedback. Each one can be filtered by date and exported, so the books are ready without a spreadsheet.

Running the platform behind the scenes
The STUK team has its own admin area. From there they onboard new towing companies, manage free trials and platform fees, feature sponsored places for customers, and monitor usage of the vehicle database. A daily billing task settles platform fees on completed jobs automatically.
Under the hood
For technical readers, a summary of how it fits together:
API: Node.js and Express, with more than 260 endpoints and role-based access for six types of user
Database: MySQL with Sequelize, with about 50 data models evolved through 176 migrations
Real time: Socket.IO with private channels for each user and company, handling 16 events for jobs, tracking, chat and payments
Maps: Mapbox for distance and mileage, with Google Maps and Mapbox on the web
Payments: Square, Clover, Stripe and Authorize.net, plus Spreedly for securely storing cards
Messaging: Plivo for SMS, Apple Push and Firebase Cloud Messaging for job alerts on drivers' and customers' phones, and Nodemailer for invoice and account emails
Vehicle data: The DataOne vehicle database for year, make and model lookups
Background jobs: Scheduled-job dispatch every minute, daily platform billing, and automatic payment-token refreshes
Files: AWS S3 for job photos and documents
Web app: Angular, with live dashboards, maps, charts, PDF invoices and CSV exports
Results
STUK went from a stack of separate tools to one connected platform. A single backend now serves the dispatch portal, the driver app and the customer app, and every job is tracked in one place from the first call to the final payment.
One backend for everyone. Dispatchers, drivers and customers all work from the same live data, so a job never looks different from one screen to the next.
Free for towing companies. The platform is offered with no monthly fees, so even small operators get software that used to need several paid products.
Fewer phone calls. Dispatchers see every truck live, and customers share their location and track their tow by text.
Nothing goes unbilled. Miles, extras and storage days are calculated automatically, and payments go straight to the company's bank account.
One source of truth. Dispatch, tracking, storage, invoicing, payments and reporting all live in one system.
Have a project like this?
Let's talk ↓