Plain English, start here
SkipOps runs the day for a UK rubbish-clearance firm, entirely through Telegram. The boss texts jobs in plain words. The system works out the smartest route for every van. The crew get tap-by-tap job cards on their phones. The boss watches it happen live and ends up with a photo-proof record of every job. No money or pricing anywhere in version 1 — the win is told in saved fuel, time and wages.
The whole thing on one page
Five moving parts. Set the firm up once, then the same loop repeats every working day.
flowchart LR A["① Set the firm up
(once)"] --> B["② & ③ Boss texts
jobs"] B --> C["④ System plans the
smartest day"] C --> D["⑤–⑦ Crew get job cards
+ post photos"] D --> E["⑥ ⑧ ⑨ Boss watches live +
gets the record"] E -. "new job or change
→ re-plan" .-> C classDef here fill:#eef2ff,stroke:#4f46e5,stroke-width:2px,color:#3730a3; class A here;
Every stage — what it's for, and where we are
Each one: the plain-English objective (what we're trying to achieve), a quick picture, and an honest done / still-to-do.
The objective: before SkipOps can run anyone's day, it has to learn how that firm works — the five things its features need. The boss fills in a quick 5-step setup wizard + a review — one simple screen per thing (yard address, vans, crew, disposal sites, checklist), tap and type, then Next. No AI, no guessing in setup: each step is a plain form with the right controls. Our own code checks a step is complete before it lets you advance, and the firm is saved at the end. Hours are deliberately not asked here — they flex day to day, so the day's working window is captured when the crew share live location to sign in (kicked off by the gaffer's "kick off the day" command, built in stage ②).
flowchart LR
subgraph G ["What we gather"]
V["Vans + capacity"]
M["Materials + drop sites
per material"]
S["Yard address
(the hub)"]
C["Crew (names only —
hours come from sign-in)"]
K["Job checklist"]
end
subgraph P ["What it powers"]
R["Smart routes +
full-van trips"]
J["Crew job cards"]
D["Boss live map"]
Pr["Photo-proof
record"]
end
V --> R
M --> R
S --> R
S --> D
C --> J
K --> J
K --> Pr
working_hours: null and every other row clean (needs the dev Supabase project + creds).The objective: for each waste type, capture the disposal site(s) the firm itself uses — the places it actually has access to and an account with. That list is what routing trusts. Why not just auto-find sites for them? Because no data can tell us whether a site will take a crew that turns up unannounced — many require a trade account; some (like Robins) don't. Sending a van somewhere it gets turned away is unacceptable. So the firm names its own (it only ever uses 4–5) — and our whole job is to make that entry effortless: we suggest the real sites near their yard and let them tap to add, instead of making them type everything from scratch.
flowchart LR A["Yard postcode"] --> B["Suggest real sites
near you, by material
(from EA data)"] B --> C["Firm taps to add
· or types its own"] C --> D["The firm's sites,
per material"] D --> E["Routing only ever
uses these"]
disposal_suggestions table — 7,107 real commercial sites (household-only HWRCs excluded), each with what it received by the tonne. Built + loaded local + remote (26 Jun). Live Brighton query surfaces the web-quiet sites the old gate missed (Newtimber/Robins → 24,000t hardcore; OLUS → 36,000t wood).GET /suggestions turns the yard's location into nearest sites per material (keyless OS-grid maths, £0/zero-token) — proven live end-to-end.The objective: every firm gets two Telegram chats — a private one for the boss (the "Gaffer" chat) and a group for the crew (the "Dispatch" group). And a hard wall so one firm can never see another firm's jobs.
flowchart LR A["Firm set up"] --> B["Gaffer chat
(boss only)"] A --> C["Dispatch group
(the crew)"] B --> D["Each firm's data
walled off"] C --> D
The objective: the boss texts a job the way he'd say it out loud — "clear a garage on Dyke Road tomorrow morning, half a load, before-and-after pics." The system turns that into a proper job (where, how big, when, what photos) and reads it back so any misread is caught on the spot.
flowchart LR A["Boss texts it
in plain words"] --> B["System understands:
where, size, when"] B --> C["Job created"] C --> D["Reads it back
to confirm"]
The objective: given the day's jobs, work out the most efficient round for every van — fewest miles, fullest loads — including nipping back to the yard to empty when a van fills up, then carrying on. This saving (fuel, time, wages) is the whole pitch.
flowchart LR A["The day's jobs"] --> C["The planner"] B["The vans + capacity"] --> C C --> D["Most-efficient
route per van"] D -. "van full →" .-> E["empty at the yard,
then carry on"] E -.-> D
The objective: once the day's planned, each van gets one clear, friendly message — their stops in order, what to expect, and a tap-to-navigate link for each stop that opens their own phone's maps. Nothing new to learn.
flowchart LR A["The day's plan"] --> B["Friendly message
per van"] B --> C["Stops in order"] B --> D["Tap-to-navigate
per stop"]
The objective: each driver taps "share live location" in Telegram once at the start of the day. That's it — the system now knows where every van is, with no app and no tracking box to fit.
flowchart LR A["Driver taps
'share location'"] --> B["System knows
where each van is"] B --> C["Feeds the
boss's live map"]
The objective: the crew snap a before and an after photo and tick the job checklist. The system files them against the job, so there's a permanent, proof-backed record of every clearance — plus a note of exactly who was on that team that day.
flowchart LR A["Crew: before +
after photos"] --> C["Filed against
the job"] B["Checklist ticked"] --> C C --> D["Permanent
proof record"]
The objective: jobs change all day — a new one comes in, one's cancelled, a van finishes early. When that happens the system quietly re-plans the rest of the day and re-sends the routes, without anyone asking.
flowchart LR A["New / cancelled job,
or van free early"] --> B["Re-plan the
rest of the day"] B --> C["Re-send the
updated routes"]
The objective: one screen for the boss — a live map of his vans and jobs, a list he can filter, and a tap into any job to see its photos, crew, checklist and timings. His whole operation at a glance.
flowchart LR A["Live van pins"] --> C["Boss dashboard"] B["All the jobs"] --> C C --> D["Tap a job → photos,
crew, checklist, times"]
Staying on track
Calibration wizard is done. Rewrite the docs for the new sign-in strategy, then build the daily loop in the order the day actually runs.
trigger_loads). Plan explainer opened (docs/operations-step-plan.html); awaiting Alex's nod on the design + ordering, then build it and walk the whole 6-step wizard live.Mission: 20 paying firms at £75/mo by 5 Nov 2026. Roughly the first stretch is finishing the build; the rest is selling it.