Drop in tomorrow's jobs.
stops.csv (id, lat, lng, time-window, service minutes, demand) plus technicians.csv (id, shift, skills, capacity). The same canonical schemas the API consumes.
One guided screen from brief to dispatch — upload jobs and technicians, run the solver, compare scenarios, export the route sheet, and watch execution. The 5-step wizard composes the dashboard surfaces shipped today; on-page map view + single-screen scenario picker are iterating in preview.
Every step maps to a real surface in the dashboard. No theatre, no fake screenshots.
stops.csv (id, lat, lng, time-window, service minutes, demand) plus technicians.csv (id, shift, skills, capacity). The same canonical schemas the API consumes.
Required-column check, time-window sanity, capacity vs demand, skill coverage. The intake refuses to run a malformed solve so the engine never wastes a slot.
The decision engine plans routes against the constraints you uploaded. Plan-aware time budget. Deterministic fallback when an objective is infeasible.
Balanced · Lowest travel · Least overtime · Max jobs · Priority-first. Each rerun is its own job; promote the one your operators agree to.
PDF Operations Plan with route per technician, ETAs, and service-time blocks. DOCX brief for the morning standup. JSON for your dispatcher.
When a job runs long, an alert surfaces with the affected stops and an Apply-fix path that re-sequences the rest of the day.
solve.complete, decision.approved, alert.threshold — every event is HMAC-signed, idempotent, and traceable to a request id.
Every preview below is generated by the live engine on real demo data — visible in the dashboard the moment your team signs in.
Same problem. Three honest objectives. Promote the one your operators agree to.
Two stops in James's afternoon route are tracking 14 minutes behind window. Apply the alternate sequence?
Real PDF / DOCX / PPTX / XLSX generated server-side, with branded covers and a narrative cache so repeated exports are sub-second.