{{ orgName }} {{ industriesLine }}
Greg Bate · Owner GB
Design notes · v1

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.

Assumptions
  • 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.
Decisions in this pass
  • 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.
Open questions for you
  • 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?
Added in v2 — things a one-to-three truck shop touches weekly
  • 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.
Left out on purpose — cost of learning > value today
  • 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).
Next candidates, in order: customer-side booking requests from your public profile, deposits on confirmation, and a simple GST/tax setting.
Sitemap
{{ col.label }}
{{ row.name }} {{ row.note }}

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.

Tuesday, August 25, 2026

Today

{{ k.label }}
{{ k.value }}
{{ k.note }}

Needs you

3 items · oldest 19 h

Today's jobs

WindowJobAssignedStatus
{{ j.time }} {{ j.title }}{{ j.where }} {{ j.who }} {{ j.status }}

Money

{{ m.label }} {{ m.value }}

Marketplace nearby

{{ m.role }} {{ m.rate }}
{{ m.meta }}
Bookings

Every job you owe or are owed

{{ bookingCount }}
RefBookingClientWhenJobsEstimate

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.id }} · ref {{ booking.ref }} Template · {{ bookingTemplate }} {{ booking.status }} {{ booking.status }}

{{ booking.title }}

{{ booking.summary }}

When
{{ booking.when }}
Jobs
{{ booking.jobsCount }} · {{ booking.crew }}
Client
{{ booking.client }}
{{ booking.clientKind }}
Billing
{{ booking.billing }}
Estimate
{{ booking.total }}

Who's on it

One row per person · expand for their dated jobs

The 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
{{ rev.n }} {{ rev.by }} {{ rev.at }}
  • {{ 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.

{{ publicLink }}

From the Exchange

Pit → site, 13:00 Wed42 min
Load + unload allowance35 min
Estimated hours used for pricing2.25 h
Handed off for coordinationon approval

Worksite

{{ booking.site }}
[ site map · Exchange geo ]

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.

01

Commercial

Who it's for, and under which rules
02

Booking template

The problem you're solving · it writes the jobs

A new kind of work only needs a new template — the fields it collects and the jobs it writes. Nothing else in the system changes.

03

The work

Fields come from the template
I'm fronting the material cost{{ handlingNote }}
Anchor the time to
Start of job Load Unload 15:00
The Exchange works backwards from the anchor: 42 min drive, 20 min load, 15 min unload → start 12:45.
Day rate bookings bill by the window, not by telemetry. Overtime past 16:00 needs a revision — the Exchange will flag it while the job is running.
Crew stagesEach stage × each vehicle = one job
StageWindowVehiclesRate
Dig out trench08:00 – 13:00Excavator 20 tCA$210/hr
Load out spoil13:00 – 15:00Excavator + 2 dump trucksCA$210 + 2×CA$80
04

Resources & windows

Availability is checked as you assign
Team day · Fri Aug 2806:00 → 18:00 · this job in gold
{{ p.name }} {{ bl.label }}
Open the second truck to the marketplace{{ openRoleLabel }} · you approve every bid before the role is filled
05

Billing & approval

Inherited from the customer, overridable here
Require client approval{{ approvalLabel }}
Calendar · August 2026

Jobs and availability

Show
preferred hours booked job not confirmed time off
{{ d }}
{{ d.label }}
{{ h }}
{{ b.label }}

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.

Friday, August 28 3 jobs · 1 recurring block · 1 draft
{{ h }}
{{ b.label }}

Time off & blocked hours

{{ t.who }} {{ t.when }} {{ t.kind }}{{ t.note }}

Team availability · week of Aug 24

Set per person on their profile · booked jobs sit on top
{{ c }}
{{ p.name }}{{ p.vehicle }} {{ d.hours }} {{ d.label }} off

Add 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

{{ j.time }} {{ j.title }}{{ j.who }} · {{ j.where }} {{ j.ref }}

Dana is at capacity on this day — assigning another job here would overlap the Harbour Civil standby.

People

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.

Sort by
1 customer has gone quiet — no work in over 45 days.
NameTypeTermsLast jobBookingsOutstanding

That's the whole CRM: who you worked for last, and who has gone quiet. No pipelines, no deal stages.

{{ client.kind }} {{ client.terms }} · {{ client.contact }}

{{ client.name }}

Outstanding
{{ client.outstanding }}
{{ client.note }}
People
{{ p }}
Worksites
{{ st }}
Not on TRUCKR yet. They watch jobs through the public link. If they sign up with this phone number, every past booking links to their new account automatically.
On an account and on terms. Their staff can request jobs — every request still lands in your Needs you queue for approval.
Payment terms
{{ client.terms }}
Last job
{{ clientLast }}
{{ clientLastAgo }}
Lifetime
{{ client.bookings }}
since Feb 2024
No work for this customer in 54 days. They used to book monthly — worth a call.

Bookings

No bookings yet.

Invoices sent

Nothing invoiced yet — work is billed on completion for this client.

Edit {{ client.name }}

Terms set here become the default on every new booking for this customer.

Money

Invoices

{{ a.label }}
{{ a.value }}
{{ a.note }}
InvoiceCustomerContainsTermsDueAmount
INV-2026-018 · Net 30 · issued Aug 31, 2026

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.

BookingDateAmount
{{ j.d }}{{ j.a }}
SubtotalCA$3,588.00
GST 5%CA$179.40
Due Sep 30CA$3,767.40

A marketplace-filled job appears as a normal line — the customer sees the work, you settle with the other company separately.

Marketplace

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.

within 60 km · next 21 days · min CA$80/hr
{{ m.role }} {{ m.company }} · {{ m.where }} {{ m.when }} {{ m.rate }}{{ m.bids }} {{ m.fit }} {{ m.fit }}
Where the work is
[ map · open roles by radius ]
Your standing
Rating4.9 · 38 jobs
On-time97%
Claimed this monthCA$2,140
Marketplace

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.

{{ r.booking }} {{ r.role }} {{ r.ceiling }} {{ r.status }} {{ r.status }} {{ r.status }}
{{ b.who }}{{ b.note }} ★ {{ b.rating }} {{ b.rate }}

Accepting fills the job on B-1045 and pushes it to the Exchange under the other company's driver. Your booking, your invoice.

People

Team

Availability and vehicles here are what the booking form checks against. Rates are what you bill the customer — not payroll.

PersonVehiclesBilled rateAvailability
Company

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
{{ v.name }}{{ v.used }} {{ v.industry }} {{ v.rate }} Offered Off
{{ person.role }} · {{ person.phone }}

{{ person.name }}

{{ st.label }}
{{ st.value }}

Preferred working hours

What the booking form checks against
{{ d.day }} {{ d.hours }}

Upcoming jobs

{{ u.when }} {{ u.what }} {{ u.ref }}
Vehicles & billed rates
{{ v.v }}{{ v.src }} {{ v.rate }}
Time off
{{ o.when }} {{ o.kind }}
Money

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 July
{{ m.value }} {{ m.label }}

Utilisation, August

billed vs preferred hours
{{ u.name }}{{ u.billed }} / {{ u.avail }} · {{ u.pct }}

Marc is at 22% — he's the truck to put on the marketplace.

Where the money comes from · YTD

{{ c.name }} {{ c.value }} {{ c.share }}

By work type · YTD

{{ t.label }} {{ t.jobs }} {{ t.value }}

Day rate standby is your best hour-for-hour work — 9 jobs, CA$9.8k.

{{ n.label }}
{{ n.value }}
{{ n.note }}

Deliberately not here: profit and loss, expenses, fuel or payroll. That's accounting software's job — these six answer scheduling and sales questions instead.

Work

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.

Person
When
JobDateWindowWhat / bookingWhoPosition

"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.id }} {{ job.seq }} Booking not confirmed Confirmed

{{ job.date }} · {{ job.window }} · {{ job.who }}

{{ job.what }} · {{ job.bsite }}

Vehicle
{{ job.vehicle }}
Hours
{{ job.hours }} · {{ job.rate }}
Booking
{{ job.bid }} · {{ job.bstatus }}
Template
{{ job.template }}
Customer
{{ job.bclient }}

This person's run of work · {{ job.asg }}

assignment · not a billing object

Messages

one thread for the whole assignment · all 5 days
{{ m.who }} Customer Driver {{ m.at }} {{ m.text }}

Steps · from the Exchange

{{ st.label }}{{ st.note }} {{ st.at }}
Jobs are never created or deleted here — change the booking's template inputs and the jobs regenerate. That keeps the booking, the invoice and the calendar in agreement.
TRUCKR
Wayne's Trucking 1981 · ref B059-3E83

Pea Gravel to 1522 Hovey Rd

Greg Bate is on the way. Live from the Exchange · updated 2 minutes ago.

Arriving 15:00 on time · 8 min out
{{ st.label }}{{ st.note }} {{ st.at }}
[ live truck position · Exchange telemetry ]
Want to do more than watch?

Make an account to message Greg, approve changes, see past jobs and pay invoices. Your bookings with this phone number come with you.

You're seeing this because someone shared the tracking link. No account, no sign-in, nothing else on this page.