A back office for one truck or fifty
Everything here is the supply side: the driver or small transportation company running their business. Customers are demand — they appear in this UI as clients, approvals and invoices, never as operators. Job execution and turn-by-turn live in the Exchange; this app hands jobs off to it and reads estimates back.
- Booking = a problem being solved. You pick a template, answer what it asks, and it writes the jobs. Jobs are never cherry-picked in.
- Job = one person, one date. Four people over five days is 20 jobs.
- Assignment = one person's run of jobs on one booking. It carries the message thread and the driver's previous/next navigation. It is not a billing object. (Name needs your call — "assignment", "crew slot", "run"?)
- All jobs in a booking are complementary — one common goal. A booking can be extended by adding another template for other days.
- Industry gates which templates exist; the template gates the fields and the jobs.
- Client = no account (public link). Customer = account, can pay and message. The driver always finalizes.
- One long booking form, kept — but template-driven and split into Commercial / Booking template / The work / Resources & windows / Billing, with a sticky summary of the jobs the template is about to write.
- Marketplace is a per-role toggle inside the form, not a separate flow.
- Revisions are a diff, not a log — you see what changed and who changed it.
- Bookings roll up into invoices; a booking may be its own invoice or a line in a bigger one.
- Does a marketplace-filled role bill through you, or does the claiming company invoice the customer directly?
- Can a client counter-propose price, or only time and restrictions?
- Who owns the material cost when the job is farmed out?
- Should availability conflicts hard-block assignment or just warn?
- What do we call the person↔booking link? It needs a name drivers will say out loud.
- When a booking's template inputs change, do existing jobs regenerate in place — or does the driver see a diff and accept it?
- Time off — person, date, from–to, all-day, repeat weekly. It subtracts from available hours and the booking form warns before double-booking.
- Week and day calendar views with a person filter, showing each person's preferred hours as the pale background.
- Person page — preferred hours per weekday, vehicles and billed rates, time off, upcoming jobs, utilisation.
- Client editing — payment terms, invoice day, contact, private notes; plus the invoices you've sent them.
- Last job + quiet flag on the client list. That's the whole CRM: who you worked for last, who has gone dormant.
- Reports — revenue by month, utilisation per person, revenue by customer and by work type, unbilled work, days-to-paid.
- Fleet register, maintenance schedules, fuel and expense logs — you own the equipment, but this app isn't where you'd track its oil changes.
- Payroll and hours-to-pay. Rates here are what you bill, not what you pay.
- A CRM with stages, deals or lead sources.
- Quotes as a separate object — the booking is the quote until it's accepted.
- Document and compliance storage, messaging inbox, recurring booking templates ("repeat past job" already covers it).
Every screen in the sitemap is clickable in the left rail. Demo data covers your three cases: a single-drop material import, a two-day standby at day rate, and an excavation crew with one role left open to the marketplace.
Today
Needs you
3 items · oldest 19 hToday's jobs
Money
Marketplace nearby
Every job you owe or are owed
The default filter is Needs you — a booking sits here whenever the ball is in your court: a client revision to review, an open marketplace role, a live job.
{{ booking.title }}
{{ booking.summary }}
Who's on it
One row per person · expand for their dated jobsThe template generated these jobs — one per person per date. A person's jobs on this booking are one assignment: one message thread, one chronological run of work.
Revisions
Newest first · you always finalize- {{ c }}
Client tracking link
Anyone with this link can watch progress. To message you or pay, they have to make an account — then they become a customer.
From the Exchange
Worksite
Propose change · Rev 4
Your changes go to the client for approval unless you turn that off — e.g. you already agreed on the phone.
New booking
One form, four blocks. Fields appear as earlier answers unlock them — industry decides the booking types, the booking type decides the work fields, the customer decides the billing options.
Commercial
Who it's for, and under which rulesBooking template
The problem you're solving · it writes the jobsA new kind of work only needs a new template — the fields it collects and the jobs it writes. Nothing else in the system changes.
The work
Fields come from the templateResources & windows
Availability is checked as you assignBilling & approval
Inherited from the customer, overridable hereJobs and availability
Pale steel is the hours that person prefers to work — set on their profile. Anything outside it is still bookable, it just warns you. Showing everyone, blocks are labelled with initials only; pick one person or switch to Day view for the detail.
Time off & blocked hours
Team availability · week of Aug 24
Set per person on their profile · booked jobs sit on topAdd time off
Takes those hours out of the person's availability. The booking form will warn you before it double-books them.
Friday, August 28
Dana is at capacity on this day — assigning another job here would overlap the Harbour Civil standby.
Clients & customers
A client is a phone number and a name — enough to book work and hand out a tracking link. A customer has an account, so they can approve bookings, message you, pay, and be put on terms.
That's the whole CRM: who you worked for last, and who has gone quiet. No pipelines, no deal stages.
{{ client.name }}
Bookings
Invoices sent
Edit {{ client.name }}
Terms set here become the default on every new booking for this customer.
Invoices
Harbour Civil Ltd
Three bookings this cycle. Each booking is one line; its jobs sit underneath so the customer can check the hours they signed off.
A marketplace-filled job appears as a normal line — the customer sees the work, you settle with the other company separately.
Open roles near you
Work other companies have opened up. Claim it when you have a free truck; post your own when you're short. Availability is checked against your team before you can bid.
My posted roles
Roles on your own bookings that you've opened to other companies. You accept a bid; the job stays on your booking and on your invoice.
Accepting fills the job on B-1045 and pushes it to the Exchange under the other company's driver. Your booking, your invoice.
Team
Availability and vehicles here are what the booking form checks against. Rates are what you bill the customer — not payroll.
Profile
This is how you appear on the marketplace and to customers choosing a company. It also gates what you can book: industries unlock booking types, vehicles carry rates.
Public details
Industries & vehicles
Industry unlocks booking types; vehicles carry rates{{ person.name }}
Preferred working hours
What the booking form checks againstUpcoming jobs
Reports
Six things an owner-operator actually asks: am I busier than last month, is anyone sitting idle, who pays me, what work pays best, what haven't I billed, and how long until the money lands.
Revenue by month
Aug is partial · CA$14.8k peak in JulyUtilisation, August
billed vs preferred hoursMarc is at 22% — he's the truck to put on the marketplace.
Where the money comes from · YTD
By work type · YTD
Day rate standby is your best hour-for-hour work — 9 jobs, CA$9.8k.
Deliberately not here: profit and loss, expenses, fuel or payroll. That's accounting software's job — these six answer scheduling and sales questions instead.
Jobs
Every job is one person, one date, generated by a booking's template — never added by hand. This is the dispatch view: what has to happen, in date order, across all bookings.
"Day 3 of 5" is the job's place in that person's assignment — the same thread and the same run of work, so a driver can step forward and back through their week.
{{ job.date }} · {{ job.window }} · {{ job.who }}
{{ job.what }} · {{ job.bsite }}